Merge pull request #14 from FRE-Informatica/fd-601

FD-601/FIX: Agendamento Provisório
This commit is contained in:
Lucas Martin Mota 2024-08-12 10:17:47 -03:00 committed by GitHub
commit bd24d756a7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 1044 additions and 796 deletions

View File

@ -51,8 +51,8 @@
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
6436409727A31CDC00820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 6436409227A31CDD00820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
6436409027A31CD400820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 6436409B27A31CD600820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
C1B4A503715BC7B0F8826983 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; C1B4A503715BC7B0F8826983 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -301,8 +301,8 @@
6436409C27A31CD800820AF7 /* InfoPlist.strings */ = { 6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
isa = PBXVariantGroup; isa = PBXVariantGroup;
children = ( children = (
6436409727A31CDC00820AF7 /* pt */, 6436409227A31CDD00820AF7 /* pt */,
6436409027A31CD400820AF7 /* en */, 6436409B27A31CD600820AF7 /* en */,
); );
name = InfoPlist.strings; name = InfoPlist.strings;
sourceTree = "<group>"; sourceTree = "<group>";

View File

@ -3,6 +3,7 @@ import 'dart:convert';
import 'dart:developer'; import 'dart:developer';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:hub/shared/utils/validator_util.dart';
import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_util.dart';
import 'api_manager.dart'; import 'api_manager.dart';
@ -1271,7 +1272,7 @@ class PostProvVisitSchedulingCall {
'userUUID': userUUID, 'userUUID': userUUID,
'cliID': cliID, 'cliID': cliID,
'atividade': atividade, 'atividade': atividade,
'data': data, 'data': ValidatorUtil.toISO8601("dd/MM/yyyy HH:mm:ss", data!),
'motivo': motivo, 'motivo': motivo,
'nome': nome, 'nome': nome,
'proID': proID, 'proID': proID,

View File

@ -15,8 +15,8 @@ import 'package:hub/app_state.dart';
import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart'; import 'package:hub/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart';
import 'package:hub/components/templates_components/details_component/details_component_widget.dart';
import 'package:hub/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart'; import 'package:hub/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart';
import 'package:hub/components/templates_components/visit_request_template_component/visit_request_template_component_widget.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
// //
@ -416,7 +416,7 @@ class NotificationHandler {
_getIdBasedOnUserType(message); _getIdBasedOnUserType(message);
return Dialog( return Dialog(
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
child: VisitRequestTemplateComponentWidget( child: DetailsComponentWidget(
vteName: message['mensagem'] ?? 'Unknown', vteName: message['mensagem'] ?? 'Unknown',
vteReason: message['motivo'] ?? 'Unknown', vteReason: message['motivo'] ?? 'Unknown',
vteMsg: message['mensagem'] ?? 'Unknown', vteMsg: message['mensagem'] ?? 'Unknown',

View File

@ -1,10 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/components/templates_components/visit_request_template_component/visit_request_template_component_widget.dart'; import 'package:hub/components/templates_components/details_component/details_component_widget.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart';
class VisitRequestTemplateComponentModel class DetailsComponentModel extends FlutterFlowModel<DetailsComponentWidget> {
extends FlutterFlowModel<VisitRequestTemplateComponentWidget> {
/// State fields for stateful widgets in this component. /// State fields for stateful widgets in this component.
// State field(s) for TextField widget. // State field(s) for TextField widget.

View File

@ -1,7 +1,7 @@
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/templates_components/visit_request_template_component/visit_request_template_component_model.dart'; import 'package:hub/components/templates_components/details_component/details_component_model.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart'; import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart';
@ -10,8 +10,8 @@ import 'package:provider/provider.dart';
class VisitRequestTemplateComponentWidget extends StatefulWidget { class DetailsComponentWidget extends StatefulWidget {
const VisitRequestTemplateComponentWidget({ const DetailsComponentWidget({
super.key, super.key,
required this.vteName, required this.vteName,
required this.vteReason, required this.vteReason,
@ -52,13 +52,11 @@ class VisitRequestTemplateComponentWidget extends StatefulWidget {
)? changeStatusAction; )? changeStatusAction;
@override @override
State<VisitRequestTemplateComponentWidget> createState() => State<DetailsComponentWidget> createState() => _DetailsComponentWidgetState();
_VisitRequestTemplateComponentWidgetState();
} }
class _VisitRequestTemplateComponentWidgetState class _DetailsComponentWidgetState extends State<DetailsComponentWidget> {
extends State<VisitRequestTemplateComponentWidget> { late DetailsComponentModel _model;
late VisitRequestTemplateComponentModel _model;
@override @override
void setState(VoidCallback callback) { void setState(VoidCallback callback) {
@ -69,7 +67,7 @@ class _VisitRequestTemplateComponentWidgetState
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_model = createModel(context, () => VisitRequestTemplateComponentModel()); _model = createModel(context, () => DetailsComponentModel());
_model.textController1 ??= TextEditingController(text: widget.vteName); _model.textController1 ??= TextEditingController(text: widget.vteName);
_model.textFieldFocusNode1 ??= FocusNode(); _model.textFieldFocusNode1 ??= FocusNode();

View File

@ -19,7 +19,7 @@ class ForgotPasswordTemplateComponentModel
BuildContext context, String? val) { BuildContext context, String? val) {
if (val == null || val.isEmpty) { if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText( return FFLocalizations.of(context).getText(
'3hqg8buh' /* E-mail é Obrigatório */, 'snnmkbyc' /* E-mail é Obrigatório */,
); );
} }

View File

@ -320,46 +320,74 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
}, },
// scheduleProvisionalVisitPage // scheduleProvisionalVisitPage
{ {
'x7at46ur': { 'uj8acuab': {
'pt': 'Quais visitantes você deseja cadastrar?', 'pt': 'Preencha os Campos Abaixo:',
'en': 'Which visitors do you want to register?', 'en': 'Fill in the fields below:',
}, },
'shj19b2o': { '8d3679lf': {
'pt': 'Qual o período de validade da visita?', 'pt': 'Propriedade',
'en': 'Visit Validity Period', 'en': 'Property',
}, },
'8zgsw5so': { 'z6aawgqa': {
'pt': 'Ínicio da Visita', 'pt': 'Dados da Visita',
'en': 'Start of the Visit', 'en': 'Visit Data',
},
'p16wm7kp': {
'pt': 'Quando a visitas se inicia?',
'en': 'When does the visit start?',
},
'3zfd7uf9': {
'pt': 'Qual o nome do visitante?',
'en': 'What is the visitor\'s name?',
}, },
'wehvxbz4': { 'wehvxbz4': {
'pt': 'Nome do Visitante', 'pt': 'Nome / Apelido do Visitante',
'en': 'Visitor Name', 'en': 'Visitor\'s Name / Nickname',
}, },
'juh7f24w': { 'juh7f24w': {
'pt': 'Escreva o nome do visitante aqui', 'pt': '',
'en': 'Write the visitor\'s name here', 'en': '',
}, },
'jhss056s': { '8zgsw5so': {
'pt': 'Você tem alguma observação sobre está visita?', 'pt': 'Data / Hora Limite da Visita',
'en': 'Do you have any observations about this visit?', 'en': 'Visit Limit Date / Time',
},
'p16wm7kp': {
'pt': '',
'en': '',
}, },
'cw8b3tbb': { 'cw8b3tbb': {
'pt': 'Observações da Visita', 'pt': 'Observação da Visita',
'en': 'Visit Observations', 'en': 'Notes Visit',
}, },
'k4qkbv1f': { 'k4qkbv1f': {
'pt': 'Escreva as suas observações aqui', 'pt': '',
'en': 'Write your observations here', 'en': 'Write your observations here',
}, },
'bv5fg9sv': {
'pt': 'Enviar',
'en': 'Send',
},
'3hqg8buh': {
'pt': 'Nome é Obrigatório',
'en': 'Name is Required',
},
'l0b0zr50': {
'pt': 'Máximo 80 caracteres',
'en': 'Maximum 80 characters',
},
'1p76vmkn': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'uzefkuf9': {
'pt': 'Data / Hora é Obrigatório',
'en': 'Date / Time is Required',
},
'sn6pj4tx': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'j14it3wp': {
'pt': 'Field is required',
'en': '',
},
'ypo6pxie': {
'pt': 'Please choose an option from the dropdown',
'en': '',
},
'cifgwfxs': { 'cifgwfxs': {
'pt': 'Agendamento Provisório', 'pt': 'Agendamento Provisório',
'en': 'Provisional Scheduling', 'en': 'Provisional Scheduling',
@ -1047,7 +1075,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': '', 'pt': '',
'en': '', 'en': '',
}, },
'3hqg8buh': { 'snnmkbyc': {
'pt': 'E-mail é Obrigatório', 'pt': 'E-mail é Obrigatório',
'en': 'E-mail is Required', 'en': 'E-mail is Required',
}, },
@ -1055,7 +1083,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'pt': 'E-mail Inválido', 'pt': 'E-mail Inválido',
'en': 'Invalid E-mail', 'en': 'Invalid E-mail',
}, },
'1p76vmkn': { 'ph22karc': {
'pt': 'Please choose an option from the dropdown', 'pt': 'Please choose an option from the dropdown',
'en': '', 'en': '',
}, },
@ -1064,7 +1092,7 @@ final kTranslationsMap = <Map<String, Map<String, String>>>[
'en': 'Send', 'en': 'Send',
}, },
}, },
// visitRequestTemplateComponent // detailsComponent
{ {
'ivfw4j04': { 'ivfw4j04': {
'pt': 'Nome', 'pt': 'Nome',

View File

@ -7,7 +7,7 @@ import 'package:hub/backend/api_requests/api_calls.dart';
import 'package:hub/backend/push_notification/pushNotificationService.dart'; import 'package:hub/backend/push_notification/pushNotificationService.dart';
import 'package:hub/components/templates_components/card_item_template_component/card_item_template_component_widget.dart'; import 'package:hub/components/templates_components/card_item_template_component/card_item_template_component_widget.dart';
import 'package:hub/components/templates_components/visit_request_template_component/visit_request_template_component_widget.dart'; import 'package:hub/components/templates_components/details_component/details_component_widget.dart';
import 'package:hub/flutter_flow/custom_functions.dart'; import 'package:hub/flutter_flow/custom_functions.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart'; import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart';
@ -337,7 +337,7 @@ Widget liberationHistoryItemCard(
useSafeArea: true, useSafeArea: true,
context: context, context: context,
builder: (context) { builder: (context) {
return VisitRequestTemplateComponentWidget( return DetailsComponentWidget(
vteName: liberationHistoryItem['VTE_NOME'], vteName: liberationHistoryItem['VTE_NOME'],
vteReason: liberationHistoryItem['NOT_MOTIVO'], vteReason: liberationHistoryItem['NOT_MOTIVO'],
vawDate: liberationHistoryItem['NOT_STATUS'] == 'S' vawDate: liberationHistoryItem['NOT_STATUS'] == 'S'

View File

@ -5,6 +5,8 @@ import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hub/pages/schedule_provisional_visit_page/schedule_provisional_visit_page_widget.dart'; import 'package:hub/pages/schedule_provisional_visit_page/schedule_provisional_visit_page_widget.dart';
import '../../flutter_flow/internationalization.dart';
class ScheduleProvisionalVisitPageModel class ScheduleProvisionalVisitPageModel
extends FlutterFlowModel<ScheduleProvisionalVisitPageWidget> { extends FlutterFlowModel<ScheduleProvisionalVisitPageWidget> {
/// Local state fields for this page. /// Local state fields for this page.
@ -30,36 +32,65 @@ class ScheduleProvisionalVisitPageModel
/// State fields for stateful widgets in this page. /// State fields for stateful widgets in this page.
final unfocusNode = FocusNode(); final formKey = GlobalKey<FormState>();
// State field(s) for TextField widget. // State field(s) for personName widget.
FocusNode? textFieldFocusNode1; FocusNode? personNameFocusNode;
TextEditingController? textController1; TextEditingController? personNameTextController;
String? Function(BuildContext, String?)? textController1Validator; String? Function(BuildContext, String?)? personNameTextControllerValidator;
String? _personNameTextControllerValidator(
BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText(
'3hqg8buh' /* Nome é Obrigatório */,
);
}
if (val.length > 80) {
return FFLocalizations.of(context).getText(
'l0b0zr50' /* Máximo 80 caracteres */,
);
}
return null;
}
// State field(s) for dateTime widget.
FocusNode? dateTimeFocusNode;
TextEditingController? dateTimeTextController;
String? Function(BuildContext, String?)? dateTimeTextControllerValidator;
String? _dateTimeTextControllerValidator(BuildContext context, String? val) {
if (val == null || val.isEmpty) {
return FFLocalizations.of(context).getText(
'uzefkuf9' /* Data / Hora é Obrigatório */,
);
}
return null;
}
DateTime? datePicked; DateTime? datePicked;
// State field(s) for TextField widget. // State field(s) for notes widget.
FocusNode? textFieldFocusNode2; FocusNode? notesFocusNode;
TextEditingController? textController2; TextEditingController? notesTextController;
String? Function(BuildContext, String?)? textController2Validator; String? Function(BuildContext, String?)? notesTextControllerValidator;
// State field(s) for TextField widget. // Stores action output result for [Backend Call - API (postProvVisitScheduling)] action in btnSend widget.
FocusNode? textFieldFocusNode3; ApiCallResponse? provVisitSchedule;
TextEditingController? textController3;
String? Function(BuildContext, String?)? textController3Validator;
// Stores action output result for [Backend Call - API (postProvVisitScheduling)] action in sendContainer widget.
ApiCallResponse? provisionalVisitScheduling;
@override @override
void initState(BuildContext context) {} void initState(BuildContext context) {
personNameTextControllerValidator = _personNameTextControllerValidator;
dateTimeTextControllerValidator = _dateTimeTextControllerValidator;
}
@override @override
void dispose() { void dispose() {
unfocusNode.dispose(); personNameFocusNode?.dispose();
textFieldFocusNode1?.dispose(); personNameTextController?.dispose();
textController1?.dispose();
textFieldFocusNode2?.dispose(); dateTimeFocusNode?.dispose();
textController2?.dispose(); dateTimeTextController?.dispose();
textFieldFocusNode3?.dispose(); notesFocusNode?.dispose();
textController3?.dispose(); notesTextController?.dispose();
} }
} }

View File

@ -1,3 +1,5 @@
import 'package:intl/intl.dart';
class ValidatorUtil { class ValidatorUtil {
static bool isValidEmail(String email) { static bool isValidEmail(String email) {
if (RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(email)) { if (RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(email)) {
@ -14,4 +16,11 @@ class ValidatorUtil {
return false; return false;
} }
} }
static String toISO8601(String format, String value) {
DateFormat dateFormat = DateFormat(format);
DateTime dateTime = dateFormat.parse(value);
return dateTime.toIso8601String();
}
} }