Compare commits

..

5 Commits

Author SHA1 Message Date
waseemabbasi22 05d9224a08 Merge remote-tracking branch 'origin/design_3.0_loan_module' into design_3.0_loan_module
# Conflicts:
#	lib/controllers/api_routes/urls.dart
2 weeks ago
waseemabbasi22 c02fc2f1b1 api integration inprogress 2 weeks ago
waseemabbasi22 7291d1b4d8 Merge branch 'design_3.0_traf_module' into design_3.0_loan_module
# Conflicts:
#	lib/controllers/api_routes/urls.dart
#	lib/new_views/pages/land_page/create_request-type_bottomsheet.dart
2 weeks ago
waseemabbasi22 0ffc0f650f improvements 2 weeks ago
waseemabbasi22 c4160ff98b improvements 2 weeks ago

@ -38,7 +38,9 @@ import 'package:test_sa/modules/internal_audit_module/provider/internal_audit_fi
import 'package:test_sa/modules/internal_audit_module/provider/internal_audit_provider.dart';
import 'package:test_sa/modules/internal_audit_module/provider/internal_audit_wo_type_provider.dart';
import 'package:test_sa/modules/loan_module/pages/create_loan_request_view.dart';
import 'package:test_sa/modules/loan_module/provider/loan_period_provider.dart';
import 'package:test_sa/modules/loan_module/provider/loan_provider.dart';
import 'package:test_sa/modules/loan_module/provider/medical_department_provider.dart';
import 'package:test_sa/modules/tm_module/tasks_wo/create_task_view.dart';
import 'package:test_sa/modules/traf_module/create_traf_request_page.dart';
import 'package:test_sa/modules/traf_module/traf_request_provider.dart';
@ -312,6 +314,8 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => PpmChecklistStatusProvider()),
ChangeNotifierProvider(create: (_) => AssetInventoryProvider()),
ChangeNotifierProvider(create: (_) => LoanProvider()),
ChangeNotifierProvider(create: (_) => LoanPeriodProvider()),
ChangeNotifierProvider(create: (_) => MedicalDepartmentProvider()),
],
child: GestureDetector(
onTap: () {

@ -3,6 +3,7 @@ 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 LoanFormModel {
String? docName;
@ -18,9 +19,7 @@ class LoanFormModel {
String? vendorNumber;
String? vendorEmail;
Site? site;
Building? building;
Lookup? department;
Floor? floor;
MedicalDepartmentModel? department;
List<LoanAttachments>? loanAttachment;
LoanFormModel({
@ -38,28 +37,62 @@ class LoanFormModel {
this.vendorEmail,
this.loanAttachment,
this.site,
this.building,
this.floor,
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() {
return {
"docName": docName,
"docNumber": docNumber,
"docEmail": docEmail,
"doctorName": docName,
"doctorContact": docNumber,
"doctorEmail": docEmail,
"itemDescription": itemDescription,
"requestDescription": requestDescription,
"model": model,
"manufacturer": manufacturer,
"loanProvided": loanProvided?.toJson(),
"loanPeriodId": loanProvided?.id,
"vendorName": vendorName,
"vendorRepresentativeName": vendorRepresentativeName,
"vendorNumber": vendorNumber,
"vendorEmail": vendorEmail,
'site' : site?.toJson(),
'building' : building?.toJson(),
"loanAttachment": loanAttachment != null ? loanAttachment!.map((v) => v.toJson()).toList() : [],
'siteId' : site?.id,
'departmentId' : department?.id,
"loanAttachments": loanAttachment != null ? loanAttachment!.map((v) => v.toJson()).toList() : [],
};
}
}

@ -0,0 +1,35 @@
import 'package:test_sa/models/base.dart';
class MedicalDepartmentModel extends Base {
MedicalDepartmentModel({
this.departmentName, this.departmentCode, this.ntCode, this.costCenterNumber, this.costCenterName, this.name, this.id, this.createdBy, this.createdDate, this.modifiedBy, this.modifiedDate
}) : super(identifier: id?.toString() ?? '', name: departmentName); // Handle potential null id
MedicalDepartmentModel.fromJson(Map<String, dynamic> json) {
departmentName = json['departmentName'] ?? json['name'];
departmentCode = json['departmentCode'];
ntCode = json['ntCode'];
costCenterNumber = json['costCenterNumber'];
costCenterName = json['costCenterName'];
name = json['name'];
id = json['id'];
createdBy = json['createdBy'];
createdDate = json['createdDate'];
modifiedBy = json['modifiedBy'];
modifiedDate = json['modifiedDate'];
}
num? id; // Now nullable
String? departmentName; // Now nullable
String? departmentCode; // Now nullable
String? ntCode;
String? costCenterNumber;
String? costCenterName;
String? name;
String? createdBy;
String? createdDate;
String? modifiedBy;
String? modifiedDate;
}

@ -25,7 +25,10 @@ import 'package:test_sa/models/service_request/pending_service_request_model.dar
import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.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';
import 'package:test_sa/modules/loan_module/provider/loan_provider.dart';
import 'package:test_sa/modules/loan_module/provider/medical_department_provider.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
@ -58,14 +61,14 @@ class _CreateLoanRequestViewState extends State<CreateLoanRequestView> with Tick
Asset? device;
TaskType? selectedType;
final LoanFormModel _loanFormModel = LoanFormModel();
bool isEng = true;
bool isEng = true;
TextEditingController commentController = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
Provider.of<TaskTypeProvider>(context, listen: false).reset();
Provider.of<MedicalDepartmentProvider>(context, listen: false).reset();
}
@override
@ -81,10 +84,10 @@ class _CreateLoanRequestViewState extends State<CreateLoanRequestView> with Tick
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if(isEng)...[
scanAssetButton(),
16.height,
],
// if(isEng)...[
// scanAssetButton(),
// 16.height,
// ],
contactInfoSection(),
16.height,
itemDetailsSection(),
@ -190,51 +193,32 @@ class _CreateLoanRequestViewState extends State<CreateLoanRequestView> with Tick
showAsBottomSheet: true,
onSelect: (value) {
_loanFormModel.site = value;
_loanFormModel.building = null;
setState(() {});
},
),
// 8.height,
// SingleItemDropDownMenu<Building, NullableLoadingProvider>(
8.height,
//TODO need to check where to get all departments..
// MultipleItemDropDownMenu<TrafDepartment, DepartmentLookupProvider>(
// context: context,
// title: context.translation.building,
// initialValue: _loanFormModel.building,
// showShadow: false,
// showAsBottomSheet: true,
// backgroundColor: AppColor.fieldBgColor(context),
// enabled: _loanFormModel.site?.buildings?.isNotEmpty ?? false,
// staticData: _loanFormModel.site?.buildings ?? [],
// onSelect: (value) {
// _loanFormModel.building = value;
// _loanFormModel.floor = null;
// _loanFormModel.department = null;
// setState(() {});
// },
// ),
// 8.height,
// SingleItemDropDownMenu<Floor, NullableLoadingProvider>(
// context: context,
// title: context.translation.floor,
// backgroundColor: AppColor.neutral100,
// showShadow: false,
// showAsBottomSheet: true,
// initialValue: _loanFormModel.floor,
// backgroundColor: AppColor.fieldBgColor(context),
// enabled: _loanFormModel.building?.floors?.isNotEmpty ?? false,
// staticData: _loanFormModel.building?.floors ?? [],
// showCancel: true,
// requestById: context.userProvider.user?.clientId,
// title: "Please specify departments and relations",
// initialValue: departments,
// onSelect: (value) {
// _loanFormModel.floor = value;
// _loanFormModel.department = null;
// setState(() {});
// departments = value ?? [];
// trafRequest?.trafDepartments = departments.map((element) => Departments(id: 0, trafId: 0, departmentId: element.id!.toInt())).toList();
// },
// ),
8.height,
//TODO need to check where to get all departments..
SingleItemDropDownMenu<Lookup, DepartmentProvider>(
SingleItemDropDownMenu<MedicalDepartmentModel, MedicalDepartmentProvider>(
context: context,
title: context.translation.department,
showShadow: false,
showAsBottomSheet: true,
initialValue: _loanFormModel.department,
requestById: context.userProvider.user?.clientId,
backgroundColor: AppColor.fieldBgColor(context),
onSelect: (value) {
_loanFormModel.department = value;
@ -298,16 +282,19 @@ class _CreateLoanRequestViewState extends State<CreateLoanRequestView> with Tick
style: Theme.of(context).textTheme.titleMedium,
),
8.height,
SingleItemDropDownMenu<Lookup, DepartmentProvider>(
SingleItemDropDownMenu<Lookup, LoanPeriodProvider>(
context: context,
height: 56.toScreenHeight,
title: 'Loan Period'.addTranslation,
showShadow: false,
backgroundColor: AppColor.fieldBgColor(context),
showAsBottomSheet: true,
initialValue: _loanFormModel.loanProvided,
backgroundColor: AppColor.fieldBgColor(context),
onSelect: (value) {
_loanFormModel.loanProvided = value;
setState(() {});
onSelect: (status) {
if (status != null) {
_loanFormModel.loanProvided = status;
setState(() {});
}
},
),
8.height,

@ -0,0 +1,32 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
class LoanPeriodProvider 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.getLoanPeriod);
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;
}
}
}

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