api integrate cont.

design_3.0_demo_module
Sikander Saleem 5 hours ago
parent a103eae1c1
commit 7a5db103e0

@ -4,13 +4,14 @@ class URLs {
static const String appReleaseBuildNumber = "31";
// static const host1 = "https://atomsm.hmg.com"; // production url
// static const host1 = "https://atomsmdev.hmg.com"; // local DEV url
static const host1 = "https://atomsmuat.hmg.com"; // local UAT url
static const host1 = "https://atomsmdev.hmg.com"; // local DEV url
// static const host1 = "https://atomsmuat.hmg.com"; // local UAT url
// static final String _baseUrl = "$_host/mobile"; // host local UAT
static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
// static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
// static final String _baseUrl = "$_host/mobile"; // host local UAT and for internal audit dev
// static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM
static final String _baseUrl = "$_host/v4/mobile"; // v4 for Demo module
// static final String _baseUrl = "$_host/v5/mobile"; // v5 for data segregation
static const String chatHubUrl = "https://apiderichat.hmg.com/chathub";
@ -242,6 +243,7 @@ class URLs {
static get getTrafRequestTypeLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=416";
static get getYesNoRequestTypeLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=4";
static get getDemoPeriodLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=4101";
static get getClassificationTypeLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=450";

@ -32,6 +32,7 @@ import 'package:test_sa/modules/cm_module/cm_detail_provider.dart';
import 'package:test_sa/modules/cm_module/create_cm_request.dart';
import 'package:test_sa/modules/cx_module/chat/chat_provider.dart';
import 'package:test_sa/modules/demo_module/create_demo_request_page.dart';
import 'package:test_sa/modules/demo_module/demo_period_lookup_provider.dart';
import 'package:test_sa/modules/demo_module/demo_provider.dart';
import 'package:test_sa/modules/internal_audit_module/pages/equipment_internal_audit/create_equipment_internal_audit_form.dart';
import 'package:test_sa/modules/internal_audit_module/pages/system_internal_audit/create_system_internal_audit_form.dart';
@ -320,6 +321,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => LoanPeriodProvider()),
ChangeNotifierProvider(create: (_) => MedicalDepartmentProvider()),
ChangeNotifierProvider(create: (_) => DemoProvider()),
ChangeNotifierProvider(create: (_) => DemoPeriodLookupProvider()),
],
child: GestureDetector(
onTap: () {

@ -22,6 +22,7 @@ import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/modules/demo_module/demo_period_lookup_provider.dart';
import 'package:test_sa/modules/loan_module/models/loan_form_model.dart';
import 'package:test_sa/modules/loan_module/models/medical_department_model.dart';
import 'package:test_sa/modules/loan_module/provider/loan_period_provider.dart';
@ -39,6 +40,7 @@ import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import '../../../../../../new_views/common_widgets/default_app_bar.dart';
import 'demo_detail_view_page.dart';
import 'demo_form_model.dart';
class CreateDemoRequestPage extends StatefulWidget {
static const String id = "/create-demo-request";
@ -54,12 +56,14 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
TaskType? selectedType;
final LoanFormModel _loanFormModel = LoanFormModel();
final DemoFormModel _demoFormModel = DemoFormModel();
TextEditingController commentController = TextEditingController();
SupplierDetails? supplier;
Lookup? demoPeriodLookup;
// List<Lookup> loanTypes = [];
@override
@ -85,10 +89,29 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
// SingleItemDropDownMenu<Lookup, DemoPeriodLookupProvider>(
// context: context,
// title: "Demo Period",
// initialValue: demoPeriodLookup,
// showShadow: false,
// validator: (value) {
// if (value == null) return "Mandatory";
// return null;
// },
// backgroundColor: AppColor.fieldBgColor(context),
// showAsBottomSheet: true,
// onSelect: (value) {
// demoPeriodLookup = value;
// setState(() {});
// },
// ),
// 16.height,
...siteSection(),
16.height,
...doctorInfoSection(),
16.height,
...assetSection(),
16.height,
...vendorDetailsSection(),
16.height,
AttachmentPicker(
@ -128,7 +151,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
SingleItemDropDownMenu<Site, SiteProvider>(
context: context,
title: context.translation.site,
initialValue: _loanFormModel.site,
initialValue: _demoFormModel.site,
showShadow: false,
validator: (value) {
if (value == null) return "Please select a site";
@ -137,7 +160,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
backgroundColor: AppColor.fieldBgColor(context),
showAsBottomSheet: true,
onSelect: (value) {
_loanFormModel.site = value;
_demoFormModel.site = value;
setState(() {});
},
),
@ -151,11 +174,11 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
return null;
},
showAsBottomSheet: true,
initialValue: _loanFormModel.department,
initialValue: _demoFormModel.department,
requestById: context.userProvider.user?.clientId,
backgroundColor: AppColor.fieldBgColor(context),
onSelect: (value) {
_loanFormModel.department = value;
_demoFormModel.department = value;
setState(() {});
},
),
@ -179,7 +202,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
showShadow: false,
textInputType: TextInputType.text,
onChange: (value) {
_loanFormModel.docName = value;
_demoFormModel.docName = value;
},
),
8.height,
@ -196,7 +219,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
showShadow: false,
textInputType: TextInputType.phone,
onChange: (value) {
_loanFormModel.docNumber = value;
_demoFormModel.docNumber = value;
},
),
8.height,
@ -216,7 +239,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
showShadow: false,
textInputType: TextInputType.emailAddress,
onChange: (value) {
_loanFormModel.docEmail = value;
_demoFormModel.docEmail = value;
},
),
8.height,
@ -234,16 +257,16 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.text,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.itemDescription = value;
_demoFormModel.itemDescription = value;
},
),
8.height,
AppTextFormField(
labelText: "Request Description",
validator: (value) {
if ((value ?? "").isEmpty) return "Mandatory";
return null;
},
// validator: (value) {
// if ((value ?? "").isEmpty) return "Mandatory";
// return null;
// },
style: Theme.of(context).textTheme.titleMedium,
backgroundColor: AppColor.fieldBgColor(context),
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
@ -252,7 +275,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.text,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.requestDescription = value;
_demoFormModel.requestDescription = value;
},
),
];
@ -276,7 +299,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.text,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.model = value;
_demoFormModel.model = value;
},
),
8.height,
@ -294,30 +317,27 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.text,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.manufacturer = value;
_demoFormModel.manufacturer = value;
},
),
8.height,
SingleItemDropDownMenu<Lookup, LoanPeriodProvider>(
SingleItemDropDownMenu<Lookup, DemoPeriodLookupProvider>(
context: context,
height: 56.toScreenHeight,
title: 'Demo Period'.addTranslation,
title: "Demo Period",
initialValue: demoPeriodLookup,
showShadow: false,
validator: (value) {
if (value == null) return "Please select loan period";
if (value == null) return "Mandatory";
return null;
},
backgroundColor: AppColor.fieldBgColor(context),
showAsBottomSheet: true,
initialValue: _loanFormModel.loanProvided,
onSelect: (status) {
if (status != null) {
_loanFormModel.loanProvided = status;
setState(() {});
}
onSelect: (value) {
demoPeriodLookup = value;
setState(() {});
},
),
8.height,
];
}
@ -339,7 +359,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.name,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.vendorName = value;
_demoFormModel.vendorName = value;
},
),
8.height,
@ -357,7 +377,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.name,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.vendorRepresentativeName = value;
_demoFormModel.vendorRepresentativeName = value;
},
),
8.height,
@ -375,7 +395,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.phone,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.vendorNumber = value;
_demoFormModel.vendorNumber = value;
},
),
8.height,
@ -396,30 +416,28 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
textInputType: TextInputType.emailAddress,
textInputAction: TextInputAction.next,
onChange: (value) {
_loanFormModel.vendorEmail = value;
_demoFormModel.vendorEmail = value;
},
),
];
}
Future<void> _submit() async {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DemoDetailViewPage(demoId: 0)));
return;
FocusScope.of(context).unfocus();
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
_loanFormModel.loanAttachment = [];
_demoFormModel.demoAttachment = [];
for (var item in attachments) {
String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? '';
_loanFormModel.loanAttachment?.add(LoanAttachments(id: 0, attachmentName: fileName, loanId: 0));
_demoFormModel.demoAttachment?.add(DemoAttachments(id: 0, attachmentName: fileName, demoRequestId: 0));
}
Utils.showLoading(context);
LoanProvider loanProvider = Provider.of<LoanProvider>(context, listen: false);
Map<String, dynamic> body = _loanFormModel.toJson();
Map<String, dynamic> body = _demoFormModel.toJson();
body["id"] = 0;
body["LoanTypeId"] = 0;
body["requestorUserID"] = context.userProvider.user!.userID;
// body["LoanTypeId"] = 0;
// body["requestorUserID"] = context.userProvider.user!.userID;
bool isSuccess = await loanProvider.addLoanRequest(body);
Utils.hideLoading(context);

@ -0,0 +1,157 @@
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/new_models/site.dart';
import 'package:test_sa/modules/loan_module/models/medical_department_model.dart';
class DemoFormModel {
String? docName;
String? docNumber;
String? docEmail;
String? itemDescription;
String? requestDescription;
String? model;
String? manufacturer;
Lookup? loanProvided;
String? vendorName;
String? vendorRepresentativeName;
String? vendorNumber;
String? vendorEmail;
Site? site;
MedicalDepartmentModel? department;
List<DemoAttachments>? demoAttachment;
DemoFormModel({
this.docName,
this.docNumber,
this.docEmail,
this.itemDescription,
this.requestDescription,
this.model,
this.manufacturer,
this.loanProvided,
this.vendorName,
this.vendorRepresentativeName,
this.vendorNumber,
this.vendorEmail,
this.demoAttachment,
this.site,
this.department,
});
//{
// "id": 0,
// "employeeId": "fa29a9de-1337-4729-b823-68c6ecffdd33",
// "requestorUserID": "fa29a9de-1337-4729-b823-68c6ecffdd33",
// "employeeName": "engineer-dev",
// "employeeEmail": "Engineer_Dev@yahoo.com",
// "positionName": "High",
// "requesterExtensionNumber": "7726",
// "requesterContactNumber": "72132197",
// "siteId": 1,
// "departmentId": 5,
// "loanTypeId": 6448,
// "doctorName": "Doctor A",
// "doctorContact": "0561432451",
// "doctorEmail": "doctor@test.com",
// "itemDescription": "Test item",
// "requestDescription": "Test request",
// "loanPeriodId": 6453,
// "assetId": null,
// "assetNumber": "",
// "assetName": "",
// "assetSerialNumber": "",
// "model": "Model A",
// "manufacturer": "Siemens",
// "vendorName": "Vendor A",
// "vendorRepName": "Vendor Rep A",
// "vendorContact": "0561432455",
// "vendorEmail": "vendor@test.com",
// "loanStatusId": 1,
// "loanAttachments": [],
// "submittedAt": "2025-11-13T12:11:12.673Z",
// "updatedAt": null,
// "cMWOItemId": null
// }
Map<String, dynamic> toJson() {
var abc = {
"id": 0,
"siteId": 0,
"buildingId": 0,
"floorId": 0,
"departmentId": 0,
"assetName": "string",
"model": "string",
"manufacturer": "string",
"doctorName": "string",
"doctorContactNumber": "string",
"doctorContactEmail": "string",
"itemDescription": "string",
"requestDescription": "string",
"demoPeriodId": 0,
"supplierId": 0,
"suppPersonId": 0,
"isSubmit": true,
"demoAttachments": [
{
"id": 0,
"attachmentName": "string",
"originalName": "string",
"demoRequestId": 0,
"attachmentTypeId": 0
}
]
};
return {
"doctorName": docName,
"doctorContact": docNumber,
"doctorEmail": docEmail,
"itemDescription": itemDescription,
"requestDescription": requestDescription,
"model": model,
"manufacturer": manufacturer,
"demoPeriodId": loanProvided?.id,
"vendorName": vendorName,
"vendorRepresentativeName": vendorRepresentativeName,
"vendorRepName": vendorRepresentativeName,
"vendorNumber": vendorNumber,
"vendorContact": vendorNumber,
"vendorEmail": vendorEmail,
'siteId': site?.id,
'departmentId': department?.id,
"demoAttachments": demoAttachment != null ? demoAttachment!.map((v) => v.toJson()).toList() : [],
};
}
}
class DemoAttachments {
num? id;
num? demoRequestId;
num? attachmentTypeId;
String? attachmentName;
String? originalName;
DemoAttachments({this.id, this.attachmentTypeId, this.attachmentName, this.demoRequestId, this.originalName});
DemoAttachments.fromJson(dynamic json) {
id = json['id'];
attachmentTypeId = json['attachmentTypeId'];
demoRequestId = json['demoRequestId'];
attachmentName = json['attachmentName'];
originalName = json['originalName'];
}
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['attachmentTypeId'] = attachmentTypeId;
map['attachmentName'] = attachmentName;
map['demoRequestId'] = demoRequestId;
map['originalName'] = originalName;
return map;
}
}

@ -0,0 +1,33 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import '../../controllers/api_routes/api_manager.dart';
import '../../controllers/api_routes/urls.dart';
import '../../models/lookup.dart';
class DemoPeriodLookupProvider extends LoadingListNotifier<Lookup> {
@override
Future getData({int? id}) async {
if (loading == true) return -2;
loading = true;
notifyListeners();
try {
Response response = await ApiManager.instance.get(URLs.getDemoPeriodLookup);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
List categoriesListJson = json.decode(response.body)["data"];
items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
}
loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
loading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
}
Loading…
Cancel
Save