From 3d1c415e2c21c35acd997c8f3c1eeabf67f586ad Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Wed, 8 Apr 2026 17:42:25 +0300 Subject: [PATCH] my invoice updated --- lib/core/api_consts.dart | 4 +- .../get_invoices_list_response_model.dart | 151 +++++++++--------- .../my_invoices/my_invoices_repo.dart | 2 +- lib/presentation/home/landing_page.dart | 7 +- .../my_invoices/my_invoices_details_page.dart | 103 ++++++------ .../my_invoices/my_invoices_list.dart | 8 +- .../widgets/invoice_list_card.dart | 41 ++--- 7 files changed, 167 insertions(+), 149 deletions(-) diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 020f37e7..9a16cdbc 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -826,8 +826,8 @@ var FILTERED_PRODUCTS = 'products?categoryids='; var GET_DOCTOR_LIST_CALCULATION = "Services/Doctors.svc/REST/GetCallculationDoctors"; -var GET_ALL_APPOINTMENTS_FOR_DENTAL_CLINIC = "Services/Patients.svc/REST/GetDentalAppointments"; - +// var GET_ALL_APPOINTMENTS_FOR_DENTAL_CLINIC = "Services/Patients.svc/REST/GetDentalAppointments"; +var GET_ALL_APPOINTMENTS_FOR_DENTAL_CLINIC ='Services/Patients.svc/REST/GetAllInvoices'; var GET_DENTAL_APPOINTMENT_INVOICE = "Services/Patients.svc/REST/HIS_eInvoiceForDentalByAppointmentNo"; var SEND_DENTAL_APPOINTMENT_INVOICE_EMAIL = "Services/Notifications.svc/REST/SendInvoiceForDental"; diff --git a/lib/features/my_invoices/models/get_invoices_list_response_model.dart b/lib/features/my_invoices/models/get_invoices_list_response_model.dart index fe59c045..6e515feb 100644 --- a/lib/features/my_invoices/models/get_invoices_list_response_model.dart +++ b/lib/features/my_invoices/models/get_invoices_list_response_model.dart @@ -1,88 +1,93 @@ +import 'dart:convert'; + class GetInvoicesListResponseModel { String? setupId; - int? projectID; - int? patientID; + int? projectId; + int? patientId; int? appointmentNo; String? appointmentDate; - String? appointmentDateN; - int? clinicID; - int? doctorID; + dynamic appointmentDateN; + int? clinicId; + int? doctorId; int? invoiceNo; int? status; String? arrivedOn; String? doctorName; String? doctorNameN; String? clinicName; - num? decimalDoctorRate; - String? doctorImageURL; - num? doctorRate; - num? patientNumber; + double? decimalDoctorRate; + String? doctorImageUrl; + int? doctorRate; + int? patientNumber; String? projectName; - GetInvoicesListResponseModel( - {this.setupId, - this.projectID, - this.patientID, - this.appointmentNo, - this.appointmentDate, - this.appointmentDateN, - this.clinicID, - this.doctorID, - this.invoiceNo, - this.status, - this.arrivedOn, - this.doctorName, - this.doctorNameN, - this.clinicName, - this.decimalDoctorRate, - this.doctorImageURL, - this.doctorRate, - this.patientNumber, - this.projectName}); + GetInvoicesListResponseModel({ + this.setupId, + this.projectId, + this.patientId, + this.appointmentNo, + this.appointmentDate, + this.appointmentDateN, + this.clinicId, + this.doctorId, + this.invoiceNo, + this.status, + this.arrivedOn, + this.doctorName, + this.doctorNameN, + this.clinicName, + this.decimalDoctorRate, + this.doctorImageUrl, + this.doctorRate, + this.patientNumber, + this.projectName, + }); + + factory GetInvoicesListResponseModel.fromRawJson(String str) => GetInvoicesListResponseModel.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); - GetInvoicesListResponseModel.fromJson(Map json) { - setupId = json['SetupId']; - projectID = json['ProjectID']; - patientID = json['PatientID']; - appointmentNo = json['AppointmentNo']; - appointmentDate = json['AppointmentDate']; - appointmentDateN = json['AppointmentDateN']; - clinicID = json['ClinicID']; - doctorID = json['DoctorID']; - invoiceNo = json['InvoiceNo']; - status = json['Status']; - arrivedOn = json['ArrivedOn']; - doctorName = json['DoctorName']; - doctorNameN = json['DoctorNameN']; - clinicName = json['ClinicName']; - decimalDoctorRate = json['DecimalDoctorRate']; - doctorImageURL = json['DoctorImageURL']; - doctorRate = json['DoctorRate']; - patientNumber = json['PatientNumber']; - projectName = json['ProjectName']; - } + factory GetInvoicesListResponseModel.fromJson(Map json) => GetInvoicesListResponseModel( + setupId: json["SetupId"], + projectId: json["ProjectID"], + patientId: json["PatientID"], + appointmentNo: json["AppointmentNo"], + appointmentDate: json["AppointmentDate"], + appointmentDateN: json["AppointmentDateN"], + clinicId: json["ClinicID"], + doctorId: json["DoctorID"], + invoiceNo: json["InvoiceNo"], + status: json["Status"], + arrivedOn: json["ArrivedOn"], + doctorName: json["DoctorName"], + doctorNameN: json["DoctorNameN"], + clinicName: json["ClinicName"], + decimalDoctorRate: json["DecimalDoctorRate"]?.toDouble(), + doctorImageUrl: json["DoctorImageURL"], + doctorRate: json["DoctorRate"], + patientNumber: json["PatientNumber"], + projectName: json["ProjectName"], + ); - Map toJson() { - final Map data = {}; - data['SetupId'] = this.setupId; - data['ProjectID'] = this.projectID; - data['PatientID'] = this.patientID; - data['AppointmentNo'] = this.appointmentNo; - data['AppointmentDate'] = this.appointmentDate; - data['AppointmentDateN'] = this.appointmentDateN; - data['ClinicID'] = this.clinicID; - data['DoctorID'] = this.doctorID; - data['InvoiceNo'] = this.invoiceNo; - data['Status'] = this.status; - data['ArrivedOn'] = this.arrivedOn; - data['DoctorName'] = this.doctorName; - data['DoctorNameN'] = this.doctorNameN; - data['ClinicName'] = this.clinicName; - data['DecimalDoctorRate'] = this.decimalDoctorRate; - data['DoctorImageURL'] = this.doctorImageURL; - data['DoctorRate'] = this.doctorRate; - data['PatientNumber'] = this.patientNumber; - data['ProjectName'] = this.projectName; - return data; - } + Map toJson() => { + "SetupId": setupId, + "ProjectID": projectId, + "PatientID": patientId, + "AppointmentNo": appointmentNo, + "AppointmentDate": appointmentDate, + "AppointmentDateN": appointmentDateN, + "ClinicID": clinicId, + "DoctorID": doctorId, + "InvoiceNo": invoiceNo, + "Status": status, + "ArrivedOn": arrivedOn, + "DoctorName": doctorName, + "DoctorNameN": doctorNameN, + "ClinicName": clinicName, + "DecimalDoctorRate": decimalDoctorRate, + "DoctorImageURL": doctorImageUrl, + "DoctorRate": doctorRate, + "PatientNumber": patientNumber, + "ProjectName": projectName, + }; } diff --git a/lib/features/my_invoices/my_invoices_repo.dart b/lib/features/my_invoices/my_invoices_repo.dart index 79136ba0..486fdc2a 100644 --- a/lib/features/my_invoices/my_invoices_repo.dart +++ b/lib/features/my_invoices/my_invoices_repo.dart @@ -38,7 +38,7 @@ class MyInvoicesRepoImp implements MyInvoicesRepo { }, onSuccess: (response, statusCode, {messageStatus, errorMessage}) { try { - final list = response['List_DentalAppointments']; + final list = response['List_AllInvoices']; final invoicesList = list.map((item) => GetInvoicesListResponseModel.fromJson(item as Map)).toList().cast(); diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index b6311c58..371fe892 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -330,6 +330,7 @@ class _LandingPageState extends State { isFullScreen: false, ); }), + // Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 24.h, width: 24.h).onPress(() { // showCommonBottomSheetWithoutHeight( // context, @@ -340,10 +341,10 @@ class _LandingPageState extends State { // ); // }), !appState.isAuthenticated - ? Utils.buildSvgWithAssets(icon: appState.isArabic() ? AppAssets.enLangIcon : AppAssets.arLangIcon, height: 24.h, width: 24.h).onPress(() { + ?Row(children: [ SizedBox(width: 24.w,), Utils.buildSvgWithAssets(icon: appState.isArabic() ? AppAssets.enLangIcon : AppAssets.arLangIcon, height: 24.h, width: 24.h).onPress(() { context.setLocale(appState.isArabic() ? Locale('en', 'US') : Locale('ar', 'SA')); - }) - : SizedBox.shrink() + })]) + : SizedBox() ], ); }), diff --git a/lib/presentation/my_invoices/my_invoices_details_page.dart b/lib/presentation/my_invoices/my_invoices_details_page.dart index b8f534ac..9f0370a0 100644 --- a/lib/presentation/my_invoices/my_invoices_details_page.dart +++ b/lib/presentation/my_invoices/my_invoices_details_page.dart @@ -51,7 +51,7 @@ class _MyInvoicesDetailsPageState extends State { myInvoicesViewModel.downloadInvoicePDF( setupId: widget.getInvoicesListResponseModel.setupId!, invoiceNo: widget.getInvoicesListResponseModel.invoiceNo!, - projectID: widget.getInvoicesListResponseModel.projectID!, + projectID: widget.getInvoicesListResponseModel.projectId!, onError: (err) { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( @@ -150,7 +150,7 @@ class _MyInvoicesDetailsPageState extends State { Column( children: [ Image.network( - widget.getInvoiceDetailsResponseModel.doctorImageURL!, + widget.getInvoiceDetailsResponseModel.doctorImageURL ?? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png', width: 63.h, height: 63.h, fit: BoxFit.cover, @@ -162,10 +162,10 @@ class _MyInvoicesDetailsPageState extends State { height: 40.h, decoration: BoxDecoration( color: AppColors.whiteColor, - shape: BoxShape.circle, // Makes the container circular + shape: BoxShape.circle, border: Border.all( - color: AppColors.scaffoldBgColor, // Color of the border - width: 1.5.w, // Width of the border + color: AppColors.scaffoldBgColor, + width: 1.5.w, ), ), child: Column( @@ -173,7 +173,7 @@ class _MyInvoicesDetailsPageState extends State { children: [ Utils.buildSvgWithAssets(icon: AppAssets.rating_icon, width: 15.w, height: 15.h, applyThemeColor: false), SizedBox(height: 2.h), - "${widget.getInvoicesListResponseModel.decimalDoctorRate}".toText11(isBold: true, color: AppColors.textColor), + "${widget.getInvoicesListResponseModel.decimalDoctorRate ?? '0.0'}".toText11(isBold: true, color: AppColors.textColor), ], ), ).circle(100), @@ -185,7 +185,7 @@ class _MyInvoicesDetailsPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - (getIt().isArabic() ? widget.getInvoiceDetailsResponseModel.doctorName ?? LocaleKeys.doctor.tr(context: context) : widget.getInvoiceDetailsResponseModel.doctorName!).toText16(isBold: true), + (widget.getInvoiceDetailsResponseModel.doctorName ?? LocaleKeys.doctor.tr(context: context)).toText16(isBold: true), SizedBox(height: 8.h), Wrap( direction: Axis.horizontal, @@ -193,29 +193,33 @@ class _MyInvoicesDetailsPageState extends State { runSpacing: 6.h, children: [ AppCustomChipWidget( - labelText: "${LocaleKeys.invoiceNo.tr(context: context)}: ${widget.getInvoiceDetailsResponseModel.invoiceNo!}", + labelText: "${LocaleKeys.invoiceNo.tr(context: context)}: ${widget.getInvoiceDetailsResponseModel.invoiceNo ?? '-'}", labelPadding: EdgeInsetsDirectional.only(start: 6.w, end: 6.w), isEnglishOnly: true, ), AppCustomChipWidget( - labelText: ((getIt().isArabic() ? widget.getInvoiceDetailsResponseModel.clinicDescriptionN : widget.getInvoiceDetailsResponseModel.clinicDescription ?? "")!.length > 15 - ? '${(getIt().isArabic() ? widget.getInvoiceDetailsResponseModel.clinicDescriptionN : widget.getInvoiceDetailsResponseModel.clinicDescription ?? "")!.substring(0, 12)}...' - : getIt().isArabic() ? widget.getInvoiceDetailsResponseModel.clinicDescriptionN : widget.getInvoiceDetailsResponseModel.clinicDescription ?? ""), + labelText: () { + final clinicName = getIt().isArabic() + ? (widget.getInvoiceDetailsResponseModel.clinicDescriptionN ?? widget.getInvoiceDetailsResponseModel.clinicDescription ?? LocaleKeys.clinic.tr(context: context)) + : (widget.getInvoiceDetailsResponseModel.clinicDescription ?? widget.getInvoiceDetailsResponseModel.clinicDescriptionN ?? LocaleKeys.clinic.tr(context: context)); + return clinicName.length > 15 ? '${clinicName.substring(0, 12)}...' : clinicName; + }(), labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 4.w), ), AppCustomChipWidget( - labelText: widget.getInvoiceDetailsResponseModel.projectName!, + labelText: widget.getInvoiceDetailsResponseModel.projectName ?? LocaleKeys.hospital.tr(context: context), labelPadding: EdgeInsetsDirectional.only(start: 6.w, end: 6.w), ), - Directionality( - textDirection: ui.TextDirection.ltr, - child: AppCustomChipWidget( - labelPadding: EdgeInsetsDirectional.only(start: -4.w, end: 6.w), - icon: AppAssets.doctor_calendar_icon, - labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(widget.getInvoiceDetailsResponseModel.appointmentDate), false), - isEnglishOnly: true, + if (widget.getInvoiceDetailsResponseModel.appointmentDate != null) + Directionality( + textDirection: ui.TextDirection.ltr, + child: AppCustomChipWidget( + labelPadding: EdgeInsetsDirectional.only(start: -4.w, end: 6.w), + icon: AppAssets.doctor_calendar_icon, + labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(widget.getInvoiceDetailsResponseModel.appointmentDate), false), + isEnglishOnly: true, + ), ), - ), ], ), ], @@ -241,22 +245,25 @@ class _MyInvoicesDetailsPageState extends State { children: [ LocaleKeys.insurance.tr(context: context).toText16(isBold: true), SizedBox(height: 16.h), - (getIt().isArabic() ? widget.getInvoiceDetailsResponseModel.groupNameN : widget.getInvoiceDetailsResponseModel.groupName)!.toText14(isBold: true), + (getIt().isArabic() + ? (widget.getInvoiceDetailsResponseModel.groupNameN ?? widget.getInvoiceDetailsResponseModel.groupName ?? LocaleKeys.insurance.tr(context: context)) + : (widget.getInvoiceDetailsResponseModel.groupName ?? widget.getInvoiceDetailsResponseModel.groupNameN ?? LocaleKeys.insurance.tr(context: context)) + ).toText14(isBold: true), Row( children: [ Expanded(child: (widget.getInvoiceDetailsResponseModel.companyName ?? "").toText14(isBold: true)), ], ), SizedBox(height: 12.h), - Row( - children: [ - AppCustomChipWidget( - labelText: "Insurance ID: ${widget.getInvoiceDetailsResponseModel.insuranceID ?? "-"}", - labelPadding: EdgeInsetsDirectional.only(start: 6.w, end: 6.w), - isEnglishOnly: true, - ), - ], - ), + // Row( + // children: [ + // AppCustomChipWidget( + // labelText: "Insurance ID: ${widget.getInvoiceDetailsResponseModel.insuranceID ?? "-"}", + // labelPadding: EdgeInsetsDirectional.only(start: 6.w, end: 6.w), + // isEnglishOnly: true, + // ), + // ], + // ), ], ), ), @@ -299,8 +306,8 @@ class _MyInvoicesDetailsPageState extends State { children: [ Expanded(flex: 3, child: (consultation.procedureName ?? '-').toText12(isBold: true)), Expanded(flex: 1, child: '${consultation.quantity ?? '-'}'.toText12(isBold: true, isCenter: true, isEnglishOnly: true)), - Expanded(flex: 2, child: (NumberFormat.decimalPattern().format(consultation.price) ?? '-').toText12(isBold: true, isCenter: true, isEnglishOnly: true)), - Expanded(flex: 2, child: (NumberFormat.decimalPattern().format(consultation.total) ?? '-').toText12(isBold: true, isCenter: true, isEnglishOnly: true)), + Expanded(flex: 2, child: (NumberFormat.decimalPattern().format(consultation.totalPatientShare) ?? '-').toText12(isBold: true, isCenter: true, isEnglishOnly: true)), + Expanded(flex: 2, child: (NumberFormat.decimalPattern().format(consultation.totalPatientShare) ?? '-').toText12(isBold: true, isCenter: true, isEnglishOnly: true)), ], ), ), @@ -335,7 +342,7 @@ class _MyInvoicesDetailsPageState extends State { children: [ LocaleKeys.amountBeforeTax.tr(context: context).toText14(isBold: true), Utils.getPaymentAmountWithSymbol( - NumberFormat.decimalPattern().format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.totalShare).toString().toText16(isBold: true, isEnglishOnly: true), AppColors.blackColor, 13, + NumberFormat.decimalPattern().format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.patientShare).toString().toText16(isBold: true, isEnglishOnly: true), AppColors.blackColor, 13, isSaudiCurrency: true), ], ).paddingSymmetrical(24.h, 0.h), @@ -345,7 +352,7 @@ class _MyInvoicesDetailsPageState extends State { LocaleKeys.vat15.tr(context: context).toText14(isBold: true, color: AppColors.greyTextColor), Utils.getPaymentAmountWithSymbol( NumberFormat.decimalPattern() - .format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.totalVATAmount!) + .format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.patientVATAmount!) .toString() .toText14(isBold: true, color: AppColors.greyTextColor, isEnglishOnly: true), AppColors.greyTextColor, @@ -354,25 +361,25 @@ class _MyInvoicesDetailsPageState extends State { ], ).paddingSymmetrical(24.h, 0.h), SizedBox(height: 16.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - LocaleKeys.discount.tr(context: context).toText14(isBold: true), - Utils.getPaymentAmountWithSymbol( - NumberFormat.decimalPattern() - .format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.discountAmount!) - .toString() - .toText14(isBold: true, color: AppColors.primaryRedColor, isEnglishOnly: true), - AppColors.primaryRedColor, 13, - isSaudiCurrency: true), - ], - ).paddingSymmetrical(24.h, 0.h), + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // LocaleKeys.discount.tr(context: context).toText14(isBold: true), + // Utils.getPaymentAmountWithSymbol( + // NumberFormat.decimalPattern() + // .format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.discountAmount!) + // .toString() + // .toText14(isBold: true, color: AppColors.primaryRedColor, isEnglishOnly: true), + // AppColors.primaryRedColor, 13, + // isSaudiCurrency: true), + // ], + // ).paddingSymmetrical(24.h, 0.h), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ LocaleKeys.paid.tr(context: context).toText14(isBold: true), Utils.getPaymentAmountWithSymbol( - NumberFormat.decimalPattern().format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.grandTotal!).toString().toText14(isBold: true, color: AppColors.textColor, isEnglishOnly: true), + NumberFormat.decimalPattern().format(widget.getInvoiceDetailsResponseModel.listConsultation!.first.totalPatientShare!).toString().toText14(isBold: true, color: AppColors.textColor, isEnglishOnly: true), AppColors.textColor, 13, isSaudiCurrency: true), diff --git a/lib/presentation/my_invoices/my_invoices_list.dart b/lib/presentation/my_invoices/my_invoices_list.dart index bb2c4f8e..a935f0d1 100644 --- a/lib/presentation/my_invoices/my_invoices_list.dart +++ b/lib/presentation/my_invoices/my_invoices_list.dart @@ -143,7 +143,7 @@ class _MyInvoicesListState extends State { CustomButton( text: LocaleKeys.hospitals.tr(context: context), onPressed: () { - if (myInvoicesVM.allInvoicesList.isEmpty) return; + if (myInvoicesVM.getOriginalInvoicesList().isEmpty) return; _showHospitalFilterBottomSheet(context); }, backgroundColor: myInvoicesVM.currentFilter == InvoiceFilterType.hospital ? AppColors.bgRedLightColor : AppColors.whiteColor, @@ -159,7 +159,7 @@ class _MyInvoicesListState extends State { CustomButton( text: LocaleKeys.clinics.tr(context: context), onPressed: () { - if (myInvoicesVM.allInvoicesList.isEmpty) return; + if (myInvoicesVM.getOriginalInvoicesList().isEmpty) return; _showClinicFilterBottomSheet(context); }, backgroundColor: myInvoicesVM.currentFilter == InvoiceFilterType.clinic ? AppColors.bgRedLightColor : AppColors.whiteColor, @@ -175,7 +175,7 @@ class _MyInvoicesListState extends State { CustomButton( text: LocaleKeys.doctors.tr(context: context), onPressed: () { - if (myInvoicesVM.allInvoicesList.isEmpty) return; + if (myInvoicesVM.getOriginalInvoicesList().isEmpty) return; _showDoctorFilterBottomSheet(context); }, backgroundColor: myInvoicesVM.currentFilter == InvoiceFilterType.doctor ? AppColors.bgRedLightColor : AppColors.whiteColor, @@ -220,7 +220,7 @@ class _MyInvoicesListState extends State { await myInvoicesVM.getInvoiceDetails( appointmentNo: myInvoicesVM.allInvoicesList[index].appointmentNo!, invoiceNo: myInvoicesVM.allInvoicesList[index].invoiceNo!, - projectID: myInvoicesVM.allInvoicesList[index].projectID!, + projectID: myInvoicesVM.allInvoicesList[index].projectId!, onSuccess: (val) { LoaderBottomSheet.hideLoader(); Navigator.of(context).push( diff --git a/lib/presentation/my_invoices/widgets/invoice_list_card.dart b/lib/presentation/my_invoices/widgets/invoice_list_card.dart index 8aa4e174..3aacb85c 100644 --- a/lib/presentation/my_invoices/widgets/invoice_list_card.dart +++ b/lib/presentation/my_invoices/widgets/invoice_list_card.dart @@ -61,7 +61,7 @@ class InvoiceListCard extends StatelessWidget { Column( children: [ Image.network( - getInvoicesListResponseModel.doctorImageURL!, + getInvoicesListResponseModel.doctorImageUrl ?? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png', width: 63.h, height: 63.h, fit: BoxFit.cover, @@ -73,10 +73,10 @@ class InvoiceListCard extends StatelessWidget { height: 40.h, decoration: BoxDecoration( color: AppColors.whiteColor, - shape: BoxShape.circle, // Makes the container circular + shape: BoxShape.circle, border: Border.all( - color: AppColors.scaffoldBgColor, // Color of the border - width: 1.5.w, // Width of the border + color: AppColors.scaffoldBgColor, + width: 1.5.w, ), ), child: Column( @@ -84,7 +84,7 @@ class InvoiceListCard extends StatelessWidget { children: [ Utils.buildSvgWithAssets(icon: AppAssets.rating_icon, width: 15.w, height: 15.h, applyThemeColor: false), SizedBox(height: 2.h), - "${getInvoicesListResponseModel.decimalDoctorRate}".toText11(isBold: true, color: AppColors.textColor), + "${getInvoicesListResponseModel.decimalDoctorRate ?? '0.0'}".toText11(isBold: true, color: AppColors.textColor), ], ), ).circle(100), @@ -96,7 +96,10 @@ class InvoiceListCard extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - (getIt().isArabic() ? getInvoicesListResponseModel.doctorNameN! : getInvoicesListResponseModel.doctorName ?? "HMG Doctor").toText16(isBold: true), + (getIt().isArabic() + ? (getInvoicesListResponseModel.doctorNameN ?? getInvoicesListResponseModel.doctorName ?? LocaleKeys.doctor.tr(context: context)) + : (getInvoicesListResponseModel.doctorName ?? getInvoicesListResponseModel.doctorNameN ?? LocaleKeys.doctor.tr(context: context)) + ).toText16(isBold: true), SizedBox(height: 8.h), Wrap( direction: Axis.horizontal, @@ -104,28 +107,30 @@ class InvoiceListCard extends StatelessWidget { runSpacing: 6.h, children: [ AppCustomChipWidget( - labelText: "${LocaleKeys.invoiceNo.tr(context: context)}: ${getInvoicesListResponseModel.invoiceNo!}", + labelText: "${LocaleKeys.invoiceNo.tr(context: context)}: ${getInvoicesListResponseModel.invoiceNo ?? '-'}", labelPadding: EdgeInsetsDirectional.only(start: 6.w, end: 6.w), isEnglishOnly: true, ), AppCustomChipWidget( - labelText: - (getInvoicesListResponseModel.clinicName!.length > 15 ? '${getInvoicesListResponseModel.clinicName!.substring(0, 12)}...' : getInvoicesListResponseModel.clinicName!), + labelText: ((getInvoicesListResponseModel.clinicName ?? LocaleKeys.clinic.tr(context: context)).length > 15 + ? '${(getInvoicesListResponseModel.clinicName ?? LocaleKeys.clinic.tr(context: context)).substring(0, 12)}...' + : (getInvoicesListResponseModel.clinicName ?? LocaleKeys.clinic.tr(context: context))), labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 4.w), ), AppCustomChipWidget( - labelText: getInvoicesListResponseModel.projectName!, + labelText: getInvoicesListResponseModel.projectName ?? LocaleKeys.hospital.tr(context: context), labelPadding: EdgeInsetsDirectional.only(start: 6.w, end: 6.w), ), - Directionality( - textDirection: ui.TextDirection.ltr, - child: AppCustomChipWidget( - labelPadding: EdgeInsetsDirectional.only(start: -4.w, end: 6.w), - icon: AppAssets.doctor_calendar_icon, - labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(getInvoicesListResponseModel.appointmentDate), false), - isEnglishOnly: true, + if (getInvoicesListResponseModel.appointmentDate != null) + Directionality( + textDirection: ui.TextDirection.ltr, + child: AppCustomChipWidget( + labelPadding: EdgeInsetsDirectional.only(start: -4.w, end: 6.w), + icon: AppAssets.doctor_calendar_icon, + labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(getInvoicesListResponseModel.appointmentDate), false), + isEnglishOnly: true, + ), ), - ), ], ), ],