main_design2.0
zaid_daoud 2 years ago
parent 8541fce08f
commit 932841cbef

@ -1,16 +1,20 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/pantry/pentry.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_group.dart';
import 'package:test_sa/models/visits/visits_search.dart'; import 'package:test_sa/models/visits/visits_search.dart';
import '../../../new_views/common_widgets/app_lazy_loading.dart';
class RegularVisitsProvider extends ChangeNotifier { class RegularVisitsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 12; final pageItemNumber = 12;
@ -144,13 +148,14 @@ class RegularVisitsProvider extends ChangeNotifier {
return pantry; return pantry;
} }
Future<int> updatePentry({ Future<int> updatePentry(
@required String host, BuildContext context, {
@required User user, @required User user,
@required Pentry pentry, @required Pentry pentry,
@required Visit visit, @required Visit visit,
}) async { }) async {
try { try {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
Response response; Response response;
Map<String, dynamic> body = pentry.toMap(visit.id); Map<String, dynamic> body = pentry.toMap(visit.id);
body["id"] = visit.id; body["id"] = visit.id;
@ -169,7 +174,12 @@ class RegularVisitsProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); //visit.status = pentry.ppmVisitStatus; reset(); //visit.status = pentry.ppmVisitStatus;
notifyListeners(); notifyListeners();
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
Navigator.of(context).pop();
} else {
Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest} ${jsonDecode(response.body)["message"]}");
} }
Navigator.of(context).pop();
return response.statusCode; return response.statusCode;
} catch (error) { } catch (error) {
return -1; return -1;

@ -53,6 +53,7 @@ import 'package:test_sa/providers/gas_request_providers/gas_status_provider.dart
import 'package:test_sa/providers/gas_request_providers/gas_types_provider.dart'; import 'package:test_sa/providers/gas_request_providers/gas_types_provider.dart';
import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart';
import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/ppm_device_status_provider.dart';
import 'package:test_sa/providers/ppm_visit_status_provider.dart'; import 'package:test_sa/providers/ppm_visit_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart'; import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/first_action_provider.dart'; import 'package:test_sa/providers/service_request_providers/first_action_provider.dart';
@ -179,6 +180,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => ServiceTypeProvider()), ChangeNotifierProvider(create: (_) => ServiceTypeProvider()),
ChangeNotifierProvider(create: (_) => PPMVisitStatusProvider()), ChangeNotifierProvider(create: (_) => PPMVisitStatusProvider()),
ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()), ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()),
ChangeNotifierProvider(create: (_) => PPMDeviceStatusProvider()),
], ],
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {

@ -48,12 +48,16 @@ class Pentry {
this.localEngineerSignature}); this.localEngineerSignature});
Future<bool> validate() async { Future<bool> validate() async {
if (ppmVisitStatus == null) {
await Fluttertoast.showToast(msg: "PPM Visit Status is Required");
return false;
}
if (actualVisitDate == null) { if (actualVisitDate == null) {
await Fluttertoast.showToast(msg: "Actual visit date is Required"); await Fluttertoast.showToast(msg: "Actual visit date is Required");
return false; return false;
} }
if (expectedVisitDate == null) { if (expectedVisitDate == null) {
await Fluttertoast.showToast(msg: "expected visit date is Required"); await Fluttertoast.showToast(msg: "Expected visit date is Required");
return false; return false;
} }
if (timer?.startAt == null) { if (timer?.startAt == null) {
@ -64,7 +68,6 @@ class Pentry {
await Fluttertoast.showToast(msg: "Please Stop The Timer"); await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false; return false;
} }
if (ppmVisitStatus == null) return false;
if (status?.id == null) { if (status?.id == null) {
await Fluttertoast.showToast(msg: "Device Status is Required"); await Fluttertoast.showToast(msg: "Device Status is Required");
return false; return false;
@ -75,8 +78,8 @@ class Pentry {
Map<String, dynamic> toMap(int visitId) { Map<String, dynamic> toMap(int visitId) {
Map<String, dynamic> map = {}; Map<String, dynamic> map = {};
map["visitStatusId"] = ppmVisitStatus?.id?.toString(); map["visitStatusId"] = ppmVisitStatus?.id;
if (status != null) map["deviceStatusId"] = status?.id?.toString(); if (status != null) map["deviceStatusId"] = status?.id;
if (travelingHours != null) map["travelingHours"] = travelingHours; if (travelingHours != null) map["travelingHours"] = travelingHours;
//if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); //if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync());
map["actualDate"] = actualVisitDate.toIso8601String(); map["actualDate"] = actualVisitDate.toIso8601String();

@ -16,12 +16,12 @@ class PMKit {
return { return {
"id": id ?? 0, "id": id ?? 0,
"visitId": visitId, "visitId": visitId,
if (itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(), if (itemCode != null) 'partCatalogItemId': (itemCode?.id),
// if(itemName != null) 'itemName': itemName, if (itemName != null) 'itemName': itemName,
// if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame, // if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame,
// if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand, // if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand,
// if(availability != null) 'availability': availability, // if(availability != null) 'availability': availability,
// if(quantityNeeded != null) 'quantityNeeded': quantityNeeded, if (quantityNeeded != null) 'quantityNeeded': quantityNeeded,
// if(quantityReserved != null) 'quantityReserved': quantityReserved, // if(quantityReserved != null) 'quantityReserved': quantityReserved,
}; };
} }

@ -28,31 +28,31 @@ class AppTextFormField extends StatefulWidget {
final Color backgroundColor; final Color backgroundColor;
final bool alignLabelWithHint; final bool alignLabelWithHint;
const AppTextFormField({ const AppTextFormField(
Key key, {Key key,
this.onSaved, this.onSaved,
this.validator, this.validator,
this.node, this.node,
this.onChange, this.onChange,
this.obscureText, this.obscureText,
this.showPassword, this.showPassword,
this.hintText, this.hintText,
this.labelText, this.labelText,
this.textInputType = TextInputType.text, this.textInputType = TextInputType.text,
this.initialValue, this.initialValue,
this.enable = true, this.enable = true,
this.style, this.style,
this.textAlign, this.textAlign,
this.suffixIcon, this.suffixIcon,
this.prefixIcon, this.prefixIcon,
this.prefixIconData, this.prefixIconData,
this.prefixIconSize, this.prefixIconSize,
this.controller, this.controller,
this.textInputAction, this.textInputAction,
this.onAction, this.onAction,
this.backgroundColor, this.backgroundColor,
this.alignLabelWithHint this.alignLabelWithHint})
}) : super(key: key); : super(key: key);
@override @override
State<AppTextFormField> createState() => _AppTextFormFieldState(); State<AppTextFormField> createState() => _AppTextFormFieldState();

@ -0,0 +1,35 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/models/lookup.dart';
import '../../controllers/api_routes/api_manager.dart';
import '../../controllers/api_routes/urls.dart';
import 'loading_list_notifier.dart';
class PPMDeviceStatusProvider extends LoadingListNotifier<Lookup> {
@override
Future getDate() async {
if (loading ?? false) return -2;
loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(URLs.getPentryStatus);
} catch (error) {
loading = false;
stateCode = -1;
notifyListeners();
return -1;
}
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List listJson = json.decode(response.body)["data"];
items = listJson.map((department) => Lookup.fromJson(department)).toList();
}
loading = false;
notifyListeners();
return response.statusCode;
}
}

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -50,25 +49,9 @@ class _EditPentryState extends State<EditPentry> with SingleTickerProviderStateM
setState(() {}); setState(() {});
return; return;
} }
_isLoading = true;
setState(() {});
_pentry.clearEmptyObjects(); _pentry.clearEmptyObjects();
int status = await _regularVisitsProvider.updatePentry(user: _userProvider.user, host: _settingProvider.host, pentry: _pentry, visit: widget.visit); await _regularVisitsProvider.updatePentry(context, user: _userProvider.user, pentry: _pentry, visit: widget.visit);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(
msg: context.translation.successfulRequestMessage,
);
Navigator.of(context).pop();
Navigator.of(context).pop();
} else {
// String errorMessage = HttpStatusManger.getStatusMessage(
// status: status, subtitle: context.translation);
// Fluttertoast.showToast(
// msg: errorMessage,
// );
}
} }
@override @override
@ -134,40 +117,17 @@ class _EditPentryState extends State<EditPentry> with SingleTickerProviderStateM
PentryPMChecklistForm(models: _pentry.ppmCheckLists, enableValidate: _validate), PentryPMChecklistForm(models: _pentry.ppmCheckLists, enableValidate: _validate),
], ],
).expanded, ).expanded,
AppFilledButton(onPressed: () {}, label: context.translation.next).paddingOnly(top: 16), AppFilledButton(
// Padding( onPressed: () {
// padding: const EdgeInsets.all(8.0), if (_tabController.index == 3) {
// child: Row( _onSubmit();
// children: [ } else {
// if (_tabController.index != 0) _tabController.animateTo(_tabController.index + 1);
// ASmallButton( setState(() {});
// text: context.translation.back, }
// onPressed: () { },
// _tabController.animateTo( label: _tabController.index == 3 ? context.translation.submit : context.translation.next,
// _tabController.index - 1, ).paddingOnly(top: 16),
// );
// setState(() {});
// },
// ),
// const Spacer(),
// if (_tabController.index != _tabController.length - 1)
// ASmallButton(
// text: context.translation.next,
// onPressed: () {
// _tabController.animateTo(
// _tabController.index + 1,
// );
// setState(() {});
// },
// ),
// if (_tabController.index == _tabController.length - 1)
// ASmallButton(
// text: context.translation.update,
// onPressed: _onSubmit,
// ),
// ],
// ),
// ),
], ],
).paddingAll(16), ).paddingAll(16),
), ),

@ -34,6 +34,14 @@ class _AutoCompletePartsFieldState extends State<AutoCompletePartsField> {
super.initState(); super.initState();
} }
@override
void didUpdateWidget(covariant AutoCompletePartsField oldWidget) {
if (widget.initialValue != oldWidget.initialValue) {
_controller = TextEditingController(text: widget.initialValue);
}
super.didUpdateWidget(oldWidget);
}
@override @override
void dispose() { void dispose() {
_controller.dispose(); _controller.dispose();

@ -35,6 +35,14 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
super.initState(); super.initState();
} }
@override
void didUpdateWidget(covariant AutoCompleteDeviceNumberField oldWidget) {
if (widget.initialValue != oldWidget.initialValue) {
_controller = TextEditingController(text: widget.initialValue?.name);
}
super.didUpdateWidget(oldWidget);
}
@override @override
void dispose() { void dispose() {
_controller.dispose(); _controller.dispose();

@ -47,6 +47,7 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
); );
} }
final model = widget.models[index]; final model = widget.models[index];
final TextEditingController controller = TextEditingController(text: model.quantityNeeded);
return Container( return Container(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
margin: EdgeInsets.only(bottom: 16.toScreenHeight), margin: EdgeInsets.only(bottom: 16.toScreenHeight),
@ -75,11 +76,12 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
initialValue: (model.itemCode?.name ?? "").toString(), initialValue: (model.itemCode?.name ?? "").toString(),
onPick: (part) { onPick: (part) {
model.itemCode = Lookup(id: part.id, name: part?.sparePart?.partNo); model.itemCode = Lookup(id: part.id, name: part?.sparePart?.partNo);
model.itemName = part?.sparePart?.partName;
}, },
), ),
8.height, 8.height,
AppTextFormField( AppTextFormField(
initialValue: model.quantityNeeded, controller: controller,
labelText: context.translation.quantity, labelText: context.translation.quantity,
textInputType: TextInputType.number, textInputType: TextInputType.number,
onChange: (text) { onChange: (text) {

@ -1,8 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
class PentryPMChecklistForm extends StatefulWidget { class PentryPMChecklistForm extends StatefulWidget {
final List<PPMCheckList> models; final List<PPMCheckList> models;
@ -32,6 +34,13 @@ class _PentryPMChecklistFormState extends State<PentryPMChecklistForm> {
initiallyExpanded: index == 0, initiallyExpanded: index == 0,
iconColor: AppColor.neutral50, iconColor: AppColor.neutral50,
collapsedIconColor: AppColor.neutral50, collapsedIconColor: AppColor.neutral50,
childrenPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
children: [
AppTextFormField(labelText: "Measured Value", initialValue: model.measuredValue, enable: false),
8.height,
AppTextFormField(labelText: context.translation.comment, initialValue: model.comment, enable: false),
8.height,
],
), ),
); );
}, },

@ -6,6 +6,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/pantry/pentry.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/ppm_device_status_provider.dart';
import 'package:test_sa/providers/ppm_visit_status_provider.dart'; import 'package:test_sa/providers/ppm_visit_status_provider.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
@ -37,10 +38,9 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
8.height, 8.height,
/// required
SingleItemDropDownMenu<Lookup, PPMVisitStatusProvider>( SingleItemDropDownMenu<Lookup, PPMVisitStatusProvider>(
context: context, context: context,
initialValue: widget.model.ppmVisitStatus,
title: "PPM Visit Status", title: "PPM Visit Status",
onSelect: (value) { onSelect: (value) {
if (value != null) { if (value != null) {
@ -49,8 +49,6 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
}, },
), ),
8.height, 8.height,
/// required
AppTimer( AppTimer(
timer: widget.model.timer, timer: widget.model.timer,
enabled: widget.model.timer.endAt == null, enabled: widget.model.timer.endAt == null,
@ -60,26 +58,17 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
}, },
), ),
8.height, 8.height,
// const ASubTitle("Status"), SingleItemDropDownMenu<Lookup, PPMDeviceStatusProvider>(
// if (widget.enableValidate && widget.model.status == null) context: context,
// ASubTitle( initialValue: widget.model.status,
// context.translation.requiredWord, title: "Device Status",
// color: Colors.red, onSelect: (value) {
// ), if (value != null) {
// const SizedBox( widget.model.status = value;
// height: 4, }
// ), },
// PentryStatusMenu( ),
// initialValue: widget.model.status, 8.height,
// onSelect: (status) {
// widget.model.status = status;
// },
// ),
// const SizedBox(
// height: 8,
// ),
/// required
ADatePicker( ADatePicker(
label: "Actual Visit Date", label: "Actual Visit Date",
date: widget.model.actualVisitDate, date: widget.model.actualVisitDate,
@ -91,8 +80,6 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
}, },
), ),
8.height, 8.height,
/// required
ADatePicker( ADatePicker(
label: "Expected Visit Date", label: "Expected Visit Date",
date: widget.model.expectedVisitDate, date: widget.model.expectedVisitDate,

Loading…
Cancel
Save