diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 4294575..126b51d 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:line_icons/line_icons.dart'; import 'package:rkm/utils/const_variable.dart'; import 'package:rkm/widgets/icon_button_default.dart'; import 'package:rkm/widgets/input_search_text.dart'; +import '../service/db/db_sqlite_load.dart'; import '../widgets/appbar_default.dart'; import '../widgets/item_citizen.dart'; import 'registers_citizen/main_register_citizen_screen.dart'; @@ -16,6 +18,56 @@ class HomeScreen extends StatefulWidget { class _HomeScreenState extends State { var inputSearch = TextEditingController(); + List dataCitizen = []; + List showResults = []; + + loadCitizen()async{ + await DbSqliteLoad().intialDB().then((db)async { + dataCitizen = await db.query('CIDADAOS ORDER BY NOME_CIDADAO'); + }); + searchCitizen(); + return 'complete'; + } + + searchCitizen()async{ + if(inputSearch.text.isNotEmpty){ + showResults =[]; + for (int i =0;dataCitizen.length>i;i++) { + String NOME_CIDADAO = dataCitizen[i]['NOME_CIDADAO']; + if(NOME_CIDADAO.startsWith(inputSearch.text.toUpperCase())){ + print('ok $i'); + if(showResults.length<10){ + showResults.add(dataCitizen[i]); + } + } + } + setState(() { + print(showResults); + }); + }else{ + setState(() { + for(int i = 0;i<10;i++){ + showResults.add(dataCitizen[i]); + } + }); + } + } + + _searchInit(){ + searchCitizen(); + } + + @override + void initState() { + super.initState(); + loadCitizen(); + inputSearch.addListener(_searchInit); + } + @override + void dispose() { + super.dispose(); + inputSearch.dispose(); + } @override Widget build(BuildContext context) { @@ -28,7 +80,7 @@ class _HomeScreenState extends State { width: width, height: height, decoration: ConstVariable().backgroundGradient, - child: Column( + child: ListView( children: [ Row( children: [ @@ -36,7 +88,7 @@ class _HomeScreenState extends State { hint: 'Busca cidadão (Por NOME ou CNS ou PRONTUÁRIO ou DATA NASCIMENTO)', fontSize: 10, controller: inputSearch, - width: width*0.72 + width: width*0.72, ), IconButtonDefault( icon: Icons.person_add, @@ -50,7 +102,7 @@ class _HomeScreenState extends State { onPressed: ()=>Navigator.pushNamed(context, '/attendance_list') ), IconButtonDefault( - icon: Icons.edit_note, + icon: LineIcons.edit, onPressed: ()=>Navigator.pushNamed(context, '/edit_procedure') ), ], @@ -58,15 +110,15 @@ class _HomeScreenState extends State { Container( width: width, height: height*0.8, - child: ListView.builder( - itemCount: 10, + child: showResults.length == 0?Container():ListView.builder( + itemCount: showResults.length, itemBuilder: (context,index){ return ItemCitizen( - date: '00/00/0000', - name: 'JOÃO DA SILVA', - mother: 'MARIA DA SILVA', - numberCNS: '123456789', - numberMedicalRecord: '012345', + date: '${showResults[index]['DT_NASCIMENTO']}', + name: '${showResults[index]['NOME_CIDADAO']}', + mother:'${showResults[index]['NOME_MAE']}', + numberCNS: '${showResults[index]['CNS']}'=='null'?'999999999999999':'${showResults[index]['CNS']}', + numberMedicalRecord: '${showResults[index]['NUM_PRONTUARIO']}', onTap: ()=> Navigator.push( context, MaterialPageRoute(builder: (context) => MainRegisterCitizenScreen(screens: 3,)), diff --git a/lib/screens/load_init_screen.dart b/lib/screens/load_init_screen.dart index 771546f..c47cf3c 100644 --- a/lib/screens/load_init_screen.dart +++ b/lib/screens/load_init_screen.dart @@ -107,7 +107,6 @@ class _LoadInitScreenState extends State { setState(() { finish = true; }); - // Navigator.pushReplacementNamed(context, '/home'); }); }); }); diff --git a/lib/screens/login/login_saved_screen.dart b/lib/screens/login/login_saved_screen.dart index f199fa1..8de0068 100644 --- a/lib/screens/login/login_saved_screen.dart +++ b/lib/screens/login/login_saved_screen.dart @@ -2,6 +2,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:rkm/models/args_load_init_model.dart'; +import 'package:rkm/screens/home_screen.dart'; +import 'package:rkm/screens/login/sync_login_screen.dart'; import 'package:rkm/service/api/url_api_const.dart'; import 'package:rkm/service/db/db_sqlite_load.dart'; import 'package:rkm/utils/color_palette.dart'; @@ -17,10 +19,12 @@ import '../../service/api/encrypt_password.dart'; import '../load_init_screen.dart'; class LoginSavedScreen extends StatefulWidget { List listControl; + ArgsLoadInitModel args; LoginSavedScreen({ - required this.listControl -}); + required this.listControl, + required this.args + }); @override State createState() => _LoginSavedScreenState(); @@ -32,67 +36,50 @@ class _LoginSavedScreenState extends State { var inputPassword = TextEditingController(); String error = ''; String? now; - String? selectCity; bool validatorDropDown= false; int contLogo = 0; - String mode = 'homologacao'; - String urlAPI = UrlApiConst.ModeHomologacao; bool loading = false; checkLogin()async{ - CityLoadModel? model; ArgsLoadInitModel? args; if(inputUser.text.isNotEmpty && inputPassword.text.isNotEmpty && inputUser.text.length>3 && inputPassword.text.length>3){ - if(selectCity!=null){ - setState(() { - error = ''; - loading = true; - for(int i=0;ConstVariable().itensCity.length > i;i++){ - if(ConstVariable().itensCity[i].nameCityFront == selectCity!){ - model = ConstVariable().itensCity[i]; - } - } - }); - if(model!=null){ - args = ArgsLoadInitModel( - mode: mode, - model:model!, - user: inputUser.text, - password: inputPassword.text, - urlAPI: urlAPI - ); - } - if(args!=null){ - await ApiDataLoad().apiConect(args!).then((response) async { - if(inputUser.text == inputPassword.text || response['bloqueio']==1){ - setState(() { - error = 'Usuário bloqueado/senha incorreta'; - }); - }else if(response['status']==0) { - setState(() { - error = 'Usuário não encontrado'; - }); - }else if(response['status']==1) { - setState((){ - error = ''; - }); - //verificar se a criptografia identificou se a senha está correta - if(EncryptPassword().encrypt(inputPassword.text,response['userPass']) == response['userPass']){ - // print(EncryptPassword().encrypt(inputPassword.text,response['userPass'])); - setState(() { - loading = false; - }); - Navigator.push( - context, - MaterialPageRoute(builder: (context) => LoadInitScreen(args: args!)), - ); - } - } + setState(() { + error = ''; + loading = true; + }); + args = ArgsLoadInitModel( + mode: widget.args.mode, + model:widget.args.model, + user: inputUser.text, + password: inputPassword.text, + urlAPI: widget.args.urlAPI + ); + if(args!=null){ + await ApiDataLoad().apiConect(args!).then((response) async { + if(inputUser.text == inputPassword.text || response['bloqueio']==1){ + setState(() { + error = 'Usuário bloqueado/senha incorreta'; }); + }else if(response['status']==0) { + setState(() { + error = 'Usuário não encontrado'; + }); + }else if(response['status']==1) { + setState((){ + error = ''; + }); + //verificar se a criptografia identificou se a senha está correta + if(EncryptPassword().encrypt(inputPassword.text,response['userPass']) == response['userPass']){ + // print(EncryptPassword().encrypt(inputPassword.text,response['userPass'])); + setState(() { + loading = false; + }); + Navigator.push( + context, + MaterialPageRoute(builder: (context) => HomeScreen()), + ); + } } - }else{ - setState(() { - error = 'Selecione sua cidade'; }); } }else{ @@ -102,16 +89,6 @@ class _LoginSavedScreenState extends State { } } - @override - void initState() { - super.initState(); - setState(() { - if(widget.listControl.length!=0){ - mode = widget.listControl[0]['AMBIENTE']; - } - }); - } - @override Widget build(BuildContext context) { @@ -121,7 +98,21 @@ class _LoginSavedScreenState extends State { return Scaffold( appBar: AppBar( centerTitle: true, - title: TextDefault(text: 'RKM AB - Carga Inicial',fontSize: ConstVariable().fontSizeTitleAppBar,color: ColorPalette.white), + title: TextDefault(text: 'RKM AB - Login',fontSize: ConstVariable().fontSizeTitleAppBar,color: ColorPalette.white), + actions: [ + ButtonDefault( + width: width*0.35, + borderColor: ColorPalette.appBar, + textColor: ColorPalette.white, + title: 'Sincronizar outra unidade', + onPressed: (){ + Navigator.push( + context, + MaterialPageRoute(builder: (context) => SyncLoginScreen(args: widget.args)), + ); + } + ) + ], ), body: SingleChildScrollView( child: Container( @@ -134,8 +125,8 @@ class _LoginSavedScreenState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ Image.asset('assets/images/logo.PNG',width: width*0.4), - mode == 'homologacao'?Image.asset('assets/images/homologacao.png',width: width*0.4):Container(), - mode == 'desenvolvimento'?Image.asset('assets/images/desenvolvimento.png',width: width*0.4):Container(), + widget.args.mode == 'homologacao'?Image.asset('assets/images/homologacao.png',width: width*0.4):Container(), + widget.args.mode == 'desenvolvimento'?Image.asset('assets/images/desenvolvimento.png',width: width*0.4):Container(), SizedBox(height: 10), loading?Center( child: Column( @@ -197,7 +188,7 @@ class _LoginSavedScreenState extends State { padding: EdgeInsets.symmetric(vertical: 5), width: width*0.6, child: TextDefault( - text: 'Unidade: '+widget.listControl[0]['UNIDADE'].toString(), + text: 'Unidade: '+widget.listControl[0]['NOME_UNIDADE'].toString(), fontWeigth: FontWeight.bold, color: Colors.black, textAlign: TextAlign.center, diff --git a/lib/screens/splash_screen.dart b/lib/screens/splash_screen.dart index 559b8c6..e7296a9 100644 --- a/lib/screens/splash_screen.dart +++ b/lib/screens/splash_screen.dart @@ -18,37 +18,48 @@ class SplashScreen extends StatefulWidget { class _SplashScreenState extends State { + CityLoadModel? model; + @override void initState() { super.initState(); DbSqliteLoad().intialDB(); - timer(); + final PrefService _prefService = PrefService(); + _prefService.readCacheModel('user', 'password', 'city', 'mode').then((list){ + for(int i=0;ConstVariable().itensCity.length > i;i++){ + if(ConstVariable().itensCity[i].nameCityFront == list[2]!){ + model = ConstVariable().itensCity[i]; + } + } + timer(list); + }); } - timer()async{ + timer(List list)async{ await DbSqliteLoad().intialDB().then((db)async{ List dataControl = await db.query('MUNICIPIOS'); List dataCitizen = await db.query('CIDADAOS'); if(dataControl.length != 0){ var query = "SELECT * FROM CONTROLE_INTERNO"; dataControl = await db.rawQuery(query); - print(dataCitizen); + // print(dataCitizen); if(dataCitizen.length != 0){ - Navigator.push( + String? url; + if(list[3]=='desenvolvimento'){ + url = UrlApiConst.ApiUrlDesenvolvimento; + }else if(list[3]=='online'){ + url = UrlApiConst.ApiUrlOnline; + }else if(list[3]=='homologacao'){ + url = UrlApiConst.ApiUrlHomologacao; + } + ArgsLoadInitModel args = ArgsLoadInitModel(mode: list[3], model: model!, user: list[0], password: list[1], urlAPI: url!); + + Navigator.push( context, - MaterialPageRoute(builder: (context) => LoginSavedScreen(listControl: dataControl)), + MaterialPageRoute(builder: (context) => LoginSavedScreen(listControl: dataControl,args: args,)), ); }else{ - CityLoadModel? model; String? url; - final PrefService _prefService = PrefService(); - _prefService.readCacheModel('user', 'password', 'city', 'mode').then((list){ - print('list $list'); - for(int i=0;ConstVariable().itensCity.length > i;i++){ - if(ConstVariable().itensCity[i].nameCityFront == list[2]!){ - model = ConstVariable().itensCity[i]; - } - } if(list[3]=='desenvolvimento'){ url = UrlApiConst.ApiUrlDesenvolvimento; }else if(list[3]=='online'){ @@ -63,7 +74,6 @@ class _SplashScreenState extends State { MaterialPageRoute(builder: (context) => SyncLoginScreen(args: args)), ); } - }); } }else{ Navigator.pushReplacementNamed(context, '/login_load'); diff --git a/lib/screens/sync_init_screen.dart b/lib/screens/sync_init_screen.dart index 1cd9ca2..dbea72f 100644 --- a/lib/screens/sync_init_screen.dart +++ b/lib/screens/sync_init_screen.dart @@ -122,7 +122,9 @@ class _SyncInitScreenState extends State { setState(()=> messageSteps = "Etapa 10 de 10 - Gravando os Cadastros Individuais no Aplicativo"); } await DbSqliteSync().insertCadastrosIndividuais(value).then((value)async{ - //agora salvar controle interno + await DbSqliteSync().saveSync(widget.args,idUnidade,area,microarea).then((value)async{ + Navigator.pushNamed(context, '/home'); + }); }); }); }); diff --git a/lib/service/db/db_sqlite_load.dart b/lib/service/db/db_sqlite_load.dart index 945c88b..0c832cd 100644 --- a/lib/service/db/db_sqlite_load.dart +++ b/lib/service/db/db_sqlite_load.dart @@ -235,7 +235,7 @@ class DbSqliteLoad{ int id = await db.insert('CIAPS', row); // print('id increment $id CIAPS'); } - print(await db.query('CIAPS')); + // print(await db.query('CIAPS')); return db; } Future saveCity(var value)async{ @@ -253,7 +253,7 @@ class DbSqliteLoad{ int id = await db.insert('MUNICIPIOS', row); // print('id increment $id PROCEDIMENTOS_SIGTAP_REGISTRO'); } - print(await db.query('MUNICIPIOS')); + // print(await db.query('MUNICIPIOS')); return db; } Future saveTeam(var value)async{ @@ -273,7 +273,7 @@ class DbSqliteLoad{ int id = await db.insert('EQUIPES', row); // print('id increment $id EQUIPES'); } - print(await db.query('EQUIPES')); + // print(await db.query('EQUIPES')); return db; } Future saveTeamComponents(var value)async{ @@ -292,25 +292,4 @@ class DbSqliteLoad{ print(await db.query('PROFISSIONAIS_EQUIPE')); return db; } - Future saveCityInit(ArgsLoadInitModel args)async{ - Database db = await intialDB(); - //refatorar cidade_load e nome_cidade - 'parameters = [{"carga_inicial": 1, "cidade_load": cidade, "nome_cidade": vm.nomeCidade[cidade], "cidade_id": cidadeID, "estado": estado, "ibge": ibge, "ambiente": ambiente, "competencia": competencia.replace(/\D/g, '')}]'; - "INSERT OR REPLACE INTO CONTROLE_INTERNO (rowid, CARGA_INICIAL, CIDADE_LOAD, NOME_CIDADE, ID_MUNICIPIO, UF_ESTADO, CODIGO_IBGE, AMBIENTE, COMPETENCIA) VALUES (1,?,?,?,?,?,?,?,?)"; - - Map row = { - 'CARGA_INICIAL' : 1, - 'CIDADE_LOAD' : args.model.nameCityApi, - 'NOME_CIDADE' : args.model.nameCityFront, - 'ID_MUNICIPIO' : args.model.codCity, - 'UF_ESTADO' : args.model.codState, - 'CODIGO_IBGE' : args.model.codCityIbge, - 'AMBIENTE' : args.mode, - 'ULTIMA_SINCRONIZACAO' : DateTime.now().toString(), - 'COMPETENCIA' : '${DateTime.now().year}${DateTime.now().month<10?'0':''}${DateTime.now().month-1}', - }; - int id = await db.insert('CONTROLE_INTERNO', row); - print(await db.query('CONTROLE_INTERNO')); - return db; - } } \ No newline at end of file diff --git a/lib/service/db/db_sqlite_sync.dart b/lib/service/db/db_sqlite_sync.dart index 9da45cb..4c448a5 100644 --- a/lib/service/db/db_sqlite_sync.dart +++ b/lib/service/db/db_sqlite_sync.dart @@ -1,6 +1,8 @@ import 'package:rkm/service/db/db_sqlite_load.dart'; import 'package:sqflite/sqflite.dart'; +import '../../models/args_load_init_model.dart'; + class DbSqliteSync{ Future deleteSync()async{ @@ -408,8 +410,33 @@ class DbSqliteSync{ }; int id = await db.insert('CADASTROS_INDIVIDUAIS', row); // print('id increment $id PROCEDIMENTOS_SIGTAP_REGISTRO'); - print(await db.query('CADASTROS_INDIVIDUAIS')); + // print(await db.query('CADASTROS_INDIVIDUAIS')); } return db; } + Future saveSync(ArgsLoadInitModel args,idUnidade,area,microarea)async{ + Database db = await DbSqliteLoad().intialDB(); + //refatorar cidade_load e nome_cidade + 'parameters = [{"carga_inicial": 1, "cidade_load": cidade, "nome_cidade": vm.nomeCidade[cidade], "cidade_id": cidadeID, "estado": estado, "ibge": ibge, "ambiente": ambiente, "competencia": competencia.replace(/\D/g, '')}]'; + "INSERT OR REPLACE INTO CONTROLE_INTERNO (rowid, CARGA_INICIAL, CIDADE_LOAD, NOME_CIDADE, ID_MUNICIPIO, UF_ESTADO, CODIGO_IBGE, AMBIENTE, COMPETENCIA) VALUES (1,?,?,?,?,?,?,?,?)"; + + Map row = { + 'CARGA_INICIAL' : 1, + 'CIDADE_LOAD' : args.model.nameCityApi, + 'NOME_CIDADE' : args.model.nameCityFront, + 'ID_MUNICIPIO' : args.model.codCity, + 'UF_ESTADO' : args.model.codState, + 'CODIGO_IBGE' : args.model.codCityIbge, + 'AMBIENTE' : args.mode, + 'SYNC_UNIDADE' : idUnidade, + 'NOME_UNIDADE' : args.model.nameCityFront, + 'AREA' : area, + 'MICROAREA' : microarea, + 'ULTIMA_SINCRONIZACAO' : DateTime.now().toString(), + 'COMPETENCIA' : '${DateTime.now().year}${DateTime.now().month<10?'0':''}${DateTime.now().month-1}', + }; + int id = await db.insert('CONTROLE_INTERNO', row); + print(await db.query('CONTROLE_INTERNO')); + return db; + } } \ No newline at end of file diff --git a/lib/widgets/appbar_default.dart b/lib/widgets/appbar_default.dart index 46860d8..8d8ce33 100644 --- a/lib/widgets/appbar_default.dart +++ b/lib/widgets/appbar_default.dart @@ -1,12 +1,14 @@ import 'package:flutter/material.dart'; +import 'package:rkm/models/args_load_init_model.dart'; import 'package:rkm/widgets/alert_dialog_settings.dart'; +import '../screens/login/sync_login_screen.dart'; import '../utils/color_palette.dart'; import 'icon_button_default.dart'; class AppBarDefault{ @override - PreferredSize appbar(BuildContext context,String title) { + PreferredSize appbar(BuildContext context,String title,{ArgsLoadInitModel? args}) { return PreferredSize( preferredSize: Size.fromHeight(50), child: AppBar( @@ -21,7 +23,12 @@ class AppBarDefault{ IconButtonDefault( icon: Icons.logout, color: ColorPalette.white, - onPressed: ()=>Navigator.pushNamedAndRemoveUntil(context, '/login',(Route route) => false)), + onPressed: (){ + Navigator.push( + context, + MaterialPageRoute(builder: (context) => SyncLoginScreen(args: args!)), + ); + }), ], ), ); diff --git a/lib/widgets/input_search_text.dart b/lib/widgets/input_search_text.dart index df01a4f..92fc686 100644 --- a/lib/widgets/input_search_text.dart +++ b/lib/widgets/input_search_text.dart @@ -16,7 +16,7 @@ class InputSearchText extends StatelessWidget { this.fontSize = 15.0, this.hint = '', this.color = ColorPalette.white, - this.border = true + this.border = true, }); @override diff --git a/lib/widgets/item_citizen.dart b/lib/widgets/item_citizen.dart index 911c86d..6ae4543 100644 --- a/lib/widgets/item_citizen.dart +++ b/lib/widgets/item_citizen.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:line_icons/line_icons.dart'; import 'package:rkm/utils/color_palette.dart'; import 'package:rkm/utils/const_variable.dart'; import 'package:rkm/widgets/alert_dialog_default.dart'; @@ -30,10 +31,10 @@ class ItemCitizen extends StatelessWidget { margin: ConstVariable().marginHightInput, color: ColorPalette.white, child: ListTile( - title: TextDefault(text: name,fontWeigth: FontWeight.bold), - subtitle: TextDefault(text: '$numberCNS - $numberMedicalRecord - $date - $mother',fontSize: 16), + title: TextDefault(text: name,fontWeigth: FontWeight.bold,color: Colors.black54,fontSize: 18,), + subtitle: TextDefault(text: '$numberCNS - $numberMedicalRecord - $date - $mother',fontSize: 13,color: Colors.black54), trailing: IconButton( - icon: Icon(Icons.assignment_rounded,size: 35,), + icon: Icon(LineIcons.clipboard,size: 35,), onPressed: ()=>AlertDialogDefault().alertSelect(context), ), onTap: onTap,