diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 4421783..a25b387 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -8,13 +8,11 @@ import '../screens/edit_procedures_screen.dart'; import '../screens/configurations/import_sigtap_screen.dart'; import '../screens/login/login_load_screen.dart'; import '../screens/configurations/main_procedures_screen.dart'; -import '../screens/registers_citizen/register_citizen_screen.dart'; import '../screens/select_service/complementary_sheet_screen.dart'; import '../screens/select_service/consumption_markers_screen.dart'; import '../screens/select_service/home_visit_screen.dart'; import '../screens/select_service/procedures_screen.dart'; import '../screens/select_service/service_dental_screen.dart'; -import '../screens/select_service/service_home_screen.dart'; import '../screens/select_service/service_individual_screen.dart'; import '../screens/configurations/sinc_data_screen.dart'; @@ -29,7 +27,6 @@ var routes = { '/import_sigtap': (context) => ImportSigtapScreen(), '/edit_procedure': (context) => EditProceduresScreen(), '/splash': (context) => SplashScreen(), - '/service_home': (context) => ServiceHomeScreen(), '/service_individual': (context) => ServiceIndividualScreen(), '/service_dental': (context) => ServiceDentalScreen(), '/eligibility_assessment': (context) => EligibilityAssessmentScreen(), diff --git a/lib/screens/configurations/sinc_data_screen.dart b/lib/screens/configurations/sinc_data_screen.dart index 09ec3b3..347b508 100644 --- a/lib/screens/configurations/sinc_data_screen.dart +++ b/lib/screens/configurations/sinc_data_screen.dart @@ -116,13 +116,13 @@ class _SincDataScreenState extends State { // print(tableFICHAS_COMPLEMENTARES); await DBQuerys().atendimentosDomiciliares().then((response)async{ tableATENDIMENTOS_DOMICILIARES = response; - // print(tableATENDIMENTOS_DOMICILIARES); + print(tableATENDIMENTOS_DOMICILIARES); await DBQuerys().atendDomCompl().then((response)async{ tableATENDS_DOM_COMPL = response; - // print(tableATENDS_DOM_COMPL); + print(tableATENDS_DOM_COMPL); await DBQuerys().atendDomProcsFicha().then((response)async{ tableATENDS_DOM_PROC = response; - // print(tableATENDS_DOM_PROC); + print(tableATENDS_DOM_PROC); await DBQuerys().atendDomProcsSigtap().then((response)async{ tableATENDS_DOM_SIGTAP = response; // print(tableATENDS_DOM_SIGTAP); diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index df71228..e254dc2 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -145,11 +145,10 @@ class _HomeScreenState extends State { await DBQuerys().buscaCidadao(showResults[index]['NOME_CIDADAO']).then((list){ Navigator.push( context, - MaterialPageRoute(builder: - (context) => RegisterCitizenScreen(listData: list,)), + MaterialPageRoute(builder:(context) => RegisterCitizenScreen(listData: list,)), ); }); - } + }, ); } ) diff --git a/lib/screens/registers_citizen/register_citizen_screen.dart b/lib/screens/registers_citizen/register_citizen_screen.dart index dd224f5..e4dbf7d 100644 --- a/lib/screens/registers_citizen/register_citizen_screen.dart +++ b/lib/screens/registers_citizen/register_citizen_screen.dart @@ -816,6 +816,7 @@ class _RegisterCitizenScreenState extends State { margin: EdgeInsets.symmetric(horizontal: 15,vertical: 5), padding: EdgeInsets.symmetric(horizontal: 8,vertical: 10), decoration: BoxDecoration( + color: date.isEmpty?ColorPalette.disable:ColorPalette.white, border: Border.all(color: ColorPalette.white), borderRadius: BorderRadius.all( Radius.circular(5.0) @@ -1463,7 +1464,7 @@ class _RegisterCitizenScreenState extends State { Spacer(), Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), - child: TextDefault(text: 'SEM NÚMERO',fontSize: 15,), + child: TextDefault(text: 'SEM NÚMERO',fontSize: 15,color: Colors.black,), ) ], ), @@ -1823,6 +1824,7 @@ class _RegisterCitizenScreenState extends State { margin: EdgeInsets.symmetric(horizontal: 15,vertical: 5), padding: EdgeInsets.symmetric(horizontal: 8,vertical: 10), decoration: BoxDecoration( + color: RGDateController.text.isEmpty?ColorPalette.disable:ColorPalette.white, border: Border.all(color: ColorPalette.white), borderRadius: BorderRadius.all( Radius.circular(5.0) @@ -1933,6 +1935,7 @@ class _RegisterCitizenScreenState extends State { margin: EdgeInsets.symmetric(horizontal: 15,vertical: 5), padding: EdgeInsets.symmetric(horizontal: 8,vertical: 10), decoration: BoxDecoration( + color: dateCertificateController.text.isEmpty?ColorPalette.disable:ColorPalette.white, border: Border.all(color: ColorPalette.white), borderRadius: BorderRadius.all( Radius.circular(5.0) @@ -2113,6 +2116,7 @@ class _RegisterCitizenScreenState extends State { margin: EdgeInsets.symmetric(horizontal: 15,vertical: 5), padding: EdgeInsets.symmetric(horizontal: 8,vertical: 10), decoration: BoxDecoration( + color: dateDeathController.text.isEmpty?ColorPalette.disable:ColorPalette.white, border: Border.all(color: ColorPalette.white), borderRadius: BorderRadius.all( Radius.circular(5.0) diff --git a/lib/screens/select_service/service_home_screen.dart b/lib/screens/select_service/service_home_screen.dart index cd2536b..6082b05 100644 --- a/lib/screens/select_service/service_home_screen.dart +++ b/lib/screens/select_service/service_home_screen.dart @@ -12,17 +12,20 @@ import '../../models/drop_down_data_string_model.dart'; import '../../service/api/api_data_import_sigtap.dart'; import '../../service/db/db_querys.dart'; import '../../service/db/db_sqlite_load.dart'; +import '../../service/db/db_sqlite_sync.dart'; import '../../service/shared_preferences/shared_preferences_service.dart'; import '../../widgets/button_default.dart'; import '../../widgets/check_box_subtitle.dart'; import '../../widgets/dropdown_with_subtitle.dart'; +import '../../widgets/error_default.dart'; import '../../widgets/input_with_subtitle.dart'; import '../../widgets/onbackbutton.dart'; import '../../widgets/text_default.dart'; import '../../widgets/title_containers.dart'; class ServiceHomeScreen extends StatefulWidget { - const ServiceHomeScreen({Key? key}) : super(key: key); + String name; + ServiceHomeScreen({required this.name}); @override State createState() => _ServiceHomeScreenState(); @@ -39,7 +42,13 @@ class _ServiceHomeScreenState extends State { String dateDB=''; String idUsuario=''; String idUnidade=''; + String? nameCityApi; + String? mode; + String? urlAPI; + String CD_USUARIO_SUS = ''; + String INE_PROFISSIONAL = ''; + int ID_CIDADAO=0; int ID_PROFISSIONAL=0; int LOCAL_ATENDIMENTO_COD=0; int TIPO_ATENDIMENTO_COD=0; @@ -47,9 +56,10 @@ class _ServiceHomeScreenState extends State { int TURNO_COD=0; int CIAP_COD=0; int CONDUTA_COD=0; + int ID_EQUIPE=0; String CID_COD=''; - String? selectCBO; + String? CBO_PROFISSIONAL; String? CIAP; String? CID; String? CBO_RESP_CADASTRO; @@ -59,9 +69,6 @@ class _ServiceHomeScreenState extends State { String? MODALIDADE; String? TURNO; String? CONDUTA; - String? nameCityApi; - String? mode; - String? urlAPI; List serviceHomeModel = []; List serviceProcModel = []; @@ -79,6 +86,8 @@ class _ServiceHomeScreenState extends State { List listProc = []; bool CNS_VALIDO = false; + bool mandatory = false; + bool showCheckError = false; escolherprazoInicio(BuildContext context) async { var pickDate = await showDatePicker( @@ -185,9 +194,81 @@ class _ServiceHomeScreenState extends State { setState(() {}); } + checkSave()async{ + // adicionar depois e usar um usuário real + // CBO_RESP_CADASTRO + //ok + if(date.isEmpty || dateDB.isEmpty || LOCAL_ATENDIMENTO_COD==0 || TIPO_ATENDIMENTO_COD ==0 || MODALIDADE_COD == 0 || TURNO_COD == 0 + ){ + print('erro'); + setState(() { + showCheckError = true; + mandatory = true; + }); + }else{ + print('passou'); + setState(() { + mandatory = false; + showCheckError = false; + saveServiceHome(); + }); + } + } + + saveServiceHome()async{ + Map row = { + 'ID_CIDADAO' : ID_CIDADAO, + 'CD_USUARIO_SUS' : CD_USUARIO_SUS, + 'ID_PROFISSIONAL' : int.parse(idUsuario), + 'CBO_PROFISSIONAL' : CBO_PROFISSIONAL, + 'INE_PROFISSIONAL' : INE_PROFISSIONAL, + 'CNES_UNIDADE' : CNES_UNIDADE.text, + 'ID_UNIDADE' : int.parse(idUnidade), + 'ID_EQUIPE' : ID_EQUIPE, + 'DATA' : dateDB, + 'LOCAL_ATENDIMENTO' : LOCAL_ATENDIMENTO_COD, + 'TIPO_ATENDIMENTO' : TIPO_ATENDIMENTO_COD, + 'MODALIDADE' : MODALIDADE_COD, + 'TURNO' : TURNO_COD, + 'CIAP' : CIAP_COD, + 'CID' : CID_COD, + 'CONDUTA' : CONDUTA_COD, + 'SINCRONIZADO' : 'N', + }; + await DbSqliteSync().insertAtendimentoDomiciliar(row).then((value){ + for(int i = 0;serviceHomeModel.length>i;i++){ + if(serviceHomeModel[i].check){ + DbSqliteSync().insertCondicoesAvaliadas(value,i+1); + } + } + for(int i = 0;serviceProcModel.length>i;i++){ + if(serviceProcModel[i].check){ + DbSqliteSync().insertProcedimentosDomiciliares(value,i+1); + } + } + AlertDialogDefault().alert( + context, + 'Aviso', + 'Atendimento Domiciliar salvo com sucesso!', + 'OK' + ); + }); + } + + dadosCidadao()async{ + await DBQuerys().buscaCidadao(widget.name).then((list){ + ID_CIDADAO = list[0]['ID_CIDADAO']; + CD_USUARIO_SUS = list[0]['CD_USUARIO_SUS']; + }); + List list = await DBQuerys().buscaDadosProfissional(idUnidade,idUsuario); + INE_PROFISSIONAL = list[0]['INE']; + ID_EQUIPE = list[0]['ID_EQUIPE']; + } + @override void initState() { super.initState(); + dadosCidadao(); getUser(); loadLists(); } @@ -251,16 +332,17 @@ class _ServiceHomeScreenState extends State { widthSubtitle: width*0.7, subtitle: 'CBO', hintDropdown: 'CBO', - select: selectCBO, + select: CBO_PROFISSIONAL, widthDropdown: width*0.7, widthContainerDropdown: width*0.6, onChanged: (value){ setState(() { - selectCBO = value!; + CBO_PROFISSIONAL = value!; }); }, colorBorder: ColorPalette.white, ), + CBO_PROFISSIONAL == null && mandatory?ErrorDefault():Container(), DropdownWithSubtitle( list: listINEPROF, widthSubtitle: width*0.3, @@ -292,10 +374,9 @@ class _ServiceHomeScreenState extends State { margin: EdgeInsets.symmetric(horizontal: 10), padding: EdgeInsets.symmetric(horizontal: 8,vertical: 10), decoration: BoxDecoration( + color: date.isEmpty?ColorPalette.disable:ColorPalette.white, border: Border.all(color: ColorPalette.white), - borderRadius: BorderRadius.all( - Radius.circular(5.0) // <--- border radius here - ), + borderRadius: BorderRadius.all(Radius.circular(5.0)), ), width: width*0.7, child: TextDefault( @@ -305,6 +386,7 @@ class _ServiceHomeScreenState extends State { ), ), ), + date.isEmpty&& mandatory?ErrorDefault():Container(), DropdownWithSubtitle( list: listServicePlace, widthSubtitle: width*0.2, @@ -324,6 +406,7 @@ class _ServiceHomeScreenState extends State { }, colorBorder: ColorPalette.white, ), + LOCAL_ATENDIMENTO_COD ==0 && mandatory?ErrorDefault():Container(), DropdownWithSubtitle( list: typeService, widthSubtitle: width*0.2, @@ -343,6 +426,7 @@ class _ServiceHomeScreenState extends State { }, colorBorder: ColorPalette.white, ), + TIPO_ATENDIMENTO_COD ==0 && mandatory?ErrorDefault():Container(), DropdownWithSubtitle( list: typeModelService, widthSubtitle: width*0.2, @@ -362,6 +446,7 @@ class _ServiceHomeScreenState extends State { }, colorBorder: ColorPalette.white, ), + MODALIDADE_COD ==0 && mandatory?ErrorDefault():Container(), DropdownWithSubtitle( list: typeTurnService, widthSubtitle: width*0.2, @@ -381,6 +466,7 @@ class _ServiceHomeScreenState extends State { }, colorBorder: ColorPalette.white, ), + TURNO_COD ==0 && mandatory?ErrorDefault():Container(), ], ) ], @@ -562,7 +648,7 @@ class _ServiceHomeScreenState extends State { IconButton( icon: Icon(Icons.add_circle,color: ColorPalette.blackButton), onPressed: (){ - AlertDialogDefault().otherProc(context, 'Outros Procedimentos', 'Adicionar Procedimento', selectCBO, selectCBO, 'add',PROCEDIMENTOS_SIGTAP,listProc); + AlertDialogDefault().otherProc(context, 'Outros Procedimentos', 'Adicionar Procedimento', CBO_PROFISSIONAL, CBO_PROFISSIONAL, 'add',PROCEDIMENTOS_SIGTAP,listProc); }, ) ], @@ -623,6 +709,41 @@ class _ServiceHomeScreenState extends State { ] ) ), + CNS_VALIDO?Card( + margin: EdgeInsets.all(10), + child: Container( + padding: const EdgeInsets.all(8.0), + width: width, + height: heigth*0.1, + child: Row( + children: [ + Icon(Icons.warning,color: ColorPalette.red,), + Container( + width: width*0.9, + child: TextDefault( + text: 'CNS do Profissional inválido. Este cadastro não será exportado para o e-SUS.', + fontSize: 15, + maxLines: 2, + color: ColorPalette.red, + ), + ), + ], + ), + ), + ):Container(), + showCheckError?Card( + margin: EdgeInsets.all(10), + child: Container( + padding: EdgeInsets.all(10), + child: Row( + children: [ + Icon(Icons.warning,color: Colors.red,), + TextDefault(text: 'Existem campos obrigatórios não preenchidos.',color: ColorPalette.red,fontSize: 15,) + ], + ), + ), + color: ColorPalette.white, + ):Container(), Card( margin: EdgeInsets.all(10), child: Padding( @@ -630,7 +751,7 @@ class _ServiceHomeScreenState extends State { child: Column( children: [ ButtonDefault( - onPressed: (){}, + onPressed: ()=>checkSave(), title: 'Salvar', borderColor: ColorPalette.appBar, background: ColorPalette.appBar, diff --git a/lib/service/api/api_data_post.dart b/lib/service/api/api_data_post.dart index 95ea0b0..702631b 100644 --- a/lib/service/api/api_data_post.dart +++ b/lib/service/api/api_data_post.dart @@ -19,6 +19,9 @@ class ApiDataPost{ await DBQuerys().updateCidadao(); await DBQuerys().updateCadastroIndividuais(); await DBQuerys().updateCadastroDomiciliar(); + await DBQuerys().updateATENDIMENTOS_DOMICILIARES(); + await DBQuerys().deleteATENDS_DOM_COMPL(); + await DBQuerys().deleteATENDS_DOM_PROC(); return json.decode(response.body); }else{ return 'error'; diff --git a/lib/service/db/db_querys.dart b/lib/service/db/db_querys.dart index 22cd03e..7bee10a 100644 --- a/lib/service/db/db_querys.dart +++ b/lib/service/db/db_querys.dart @@ -37,7 +37,7 @@ class DBQuerys{ Database db = await DbSqliteLoad().intialDB(); var query = "SELECT * FROM ATENDS_DOM_SIGTAP"; List list = await db.rawQuery(query); - print(list); + // print(list); return list[0]; } buscaDadosProfissional(String idUnidade, String idUsuario)async{ @@ -498,4 +498,21 @@ class DBQuerys{ Database db = await DbSqliteLoad().intialDB(); await db.update('CIDADAO_DOMICILIO', row,where: "SINCRONIZADO = 'N'"); } + Future updateATENDIMENTOS_DOMICILIARES()async{ + Map row = { + 'SINCRONIZADO': 'S', + }; + Database db = await DbSqliteLoad().intialDB(); + await db.update('ATENDIMENTOS_DOMICILIARES', row,where: "SINCRONIZADO = 'N'"); + } + Future deleteATENDS_DOM_COMPL()async{ + Database db = await DbSqliteLoad().intialDB(); + String query = 'DELETE FROM ATENDS_DOM_COMPL WHERE ID_ATENDIMENTO_DOMICILIAR <> 0;'; + await db.execute(query); + } + Future deleteATENDS_DOM_PROC()async{ + Database db = await DbSqliteLoad().intialDB(); + String query = 'DELETE FROM ATENDS_DOM_PROC WHERE ID_ATENDIMENTO_DOMICILIAR <> 0;'; + await db.execute(query); + } } \ 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 06f691b..48a99e1 100644 --- a/lib/service/db/db_sqlite_sync.dart +++ b/lib/service/db/db_sqlite_sync.dart @@ -456,6 +456,34 @@ class DbSqliteSync{ } return db; } + Future insertAtendimentoDomiciliar(var value)async{ + Database db = await DbSqliteLoad().intialDB(); + int id = await db.insert('ATENDIMENTOS_DOMICILIARES', value); + print(await db.query('ATENDIMENTOS_DOMICILIARES')); + return id; + } + Future insertCondicoesAvaliadas(int ID_ATENDIMENTO_DOMICILIAR,int COND_AVAL_ATEND_DOM)async{ + Database db = await DbSqliteLoad().intialDB(); + // ATENDS_DOM_COMPL (ID_ATENDIMENTO_DOMICILIAR INTEGER, COND_AVAL_ATEND_DOM INTEGER) + Map row = { + 'ID_ATENDIMENTO_DOMICILIAR' :ID_ATENDIMENTO_DOMICILIAR, + 'COND_AVAL_ATEND_DOM' :COND_AVAL_ATEND_DOM, + }; + int id = await db.insert('ATENDS_DOM_COMPL', row); + // print(await db.query('ATENDS_DOM_COMPL')); + return db; + } + Future insertProcedimentosDomiciliares(int ID_ATENDIMENTO_DOMICILIAR,int PROC_ATEND_DOM)async{ + Database db = await DbSqliteLoad().intialDB(); + // ATENDS_DOM_COMPL (ID_ATENDIMENTO_DOMICILIAR INTEGER, COND_AVAL_ATEND_DOM INTEGER) + Map row = { + 'ID_ATENDIMENTO_DOMICILIAR' :ID_ATENDIMENTO_DOMICILIAR, + 'PROC_ATEND_DOM' :PROC_ATEND_DOM, + }; + int id = await db.insert('ATENDS_DOM_PROC', row); + print(await db.query('ATENDS_DOM_PROC')); + return db; + } Future saveSync(codCity,codState,urlAPI,mode,nameCityApi,nameCityFront,codCityIbge,user,idUnidade,nomeUnidade,area,microarea)async{ Database db = await DbSqliteLoad().intialDB(); //refatorar cidade_load e nome_cidade diff --git a/lib/widgets/alert_dialog_default.dart b/lib/widgets/alert_dialog_default.dart index 5abd0d2..f0446f0 100644 --- a/lib/widgets/alert_dialog_default.dart +++ b/lib/widgets/alert_dialog_default.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:rkm/config/color_palette.dart'; import 'package:rkm/config/const_variable.dart'; +import 'package:rkm/screens/select_service/service_home_screen.dart'; import 'package:rkm/widgets/button_default.dart'; import 'package:rkm/widgets/switch_with_subtitle.dart'; import 'package:rkm/widgets/text_default.dart'; @@ -10,7 +11,7 @@ import 'input_search_text.dart'; class AlertDialogDefault { @override - alert_with_search(BuildContext context,controller,Widget list,) { + alert_with_search(BuildContext context,controller,Widget list) { double width = MediaQuery.of(context).size.width; double height = MediaQuery.of(context).size.height; @@ -76,7 +77,7 @@ class AlertDialogDefault { ); } - alertSelect(BuildContext context) { + alertSelect(BuildContext context,String name) { List list = [ 'Atendimento Domiciliar', @@ -122,7 +123,16 @@ class AlertDialogDefault { int rest = index % 2; return ListTile( - onTap: ()=>Navigator.pushNamed(context, routes[index]), + onTap: (){ + if(index!=0){ + Navigator.pushNamed(context, routes[index]); + }else{ + Navigator.push( + context, + MaterialPageRoute(builder:(context) => ServiceHomeScreen(name: name,)), + ); + } + }, tileColor: rest==0?ColorPalette.white:ColorPalette.appBar, title: TextDefault( textAlign: TextAlign.center, diff --git a/lib/widgets/item_citizen.dart b/lib/widgets/item_citizen.dart index 834082a..651038d 100644 --- a/lib/widgets/item_citizen.dart +++ b/lib/widgets/item_citizen.dart @@ -20,7 +20,7 @@ class ItemCitizen extends StatelessWidget { required this.mother, required this.numberCNS, required this.numberMedicalRecord, - required this.onTap + required this.onTap, }); @override @@ -35,7 +35,7 @@ class ItemCitizen extends StatelessWidget { subtitle: TextDefault(text: '$numberCNS - $numberMedicalRecord - $date - $mother',fontSize: 13,color: Colors.black54), trailing: IconButton( icon: Icon(LineIcons.clipboard,size: 35,), - onPressed: ()=>AlertDialogDefault().alertSelect(context), + onPressed: ()=>AlertDialogDefault().alertSelect(context,name), ), onTap: onTap, ),