import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/MyInvoices/DentalInvoiceDetailResponse.dart'; import 'package:diplomaticquarterapp/models/MyInvoices/GetDentalAppointmentsResponse.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart'; import 'package:diplomaticquarterapp/services/my_invoice_service/my_invoice_services.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class InvoiceDetail extends StatelessWidget { final DoctorList doctor; final ListDentalAppointments listDentalAppointments; final DentalInvoiceDetailResponse dentalInvoiceDetailResponse; final BuildContext context; int totalServiceRate = 0; int totalDiscount = 0; int totalVAT = 0; int subTotal = 0; int grandTotal = 0; InvoiceDetail(this.doctor, this.listDentalAppointments, this.dentalInvoiceDetailResponse, this.context); @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( appBarTitle: TranslationBase.of(context).myInvoice, isShowAppBar: true, isShowDecPage: false, body: SingleChildScrollView( child: Container( child: Column( children: [ DoctorView( doctor: doctor, isLiveCareAppointment: false, isShowFlag: false), Container( margin: EdgeInsets.only(left: 10.0, right: 10.0), padding: EdgeInsets.only( top: 10.0, left: 10.0, right: 10.0, bottom: 10.0), decoration: BoxDecoration( color: Colors.grey[800], borderRadius: BorderRadius.only( topLeft: Radius.circular(8), topRight: Radius.circular(8), ), ), child: Table( children: [ TableRow(children: [ Text("Description", textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold)), Text("Quantity", textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold)), Text("Price", textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold)), Text("Total", textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold)), ]), ], ), ), Container( margin: EdgeInsets.only(top: 0.0, left: 10.0, right: 10.0), padding: EdgeInsets.only( top: 10.0, left: 10.0, right: 10.0, bottom: 15.0), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( bottomLeft: Radius.circular(8), bottomRight: Radius.circular(8), )), child: Table(children: fullData(context)), ), Container( margin: EdgeInsets.only(top: 3.0, left: 12.0, right: 12.0), child: Divider( color: Colors.grey[400], thickness: 0.7, ), ), Container( child: AppExpandableNotifier( title: "Total Price: " + grandTotal.toString() + " SAR", isExpand: true, bodyWidget: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Table( children: [ TableRow(children: [ Container( margin: EdgeInsets.only(top: 10.0), child: Text("Discount: ", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), Container( margin: EdgeInsets.only(top: 10.0), child: Text(totalDiscount.toString() + " SAR", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), ]), TableRow(children: [ Container( margin: EdgeInsets.only(top: 10.0), child: Text( "VAT (" + dentalInvoiceDetailResponse .listEInvoiceForDental[0] .listConsultation[0] .vATPercentage .toString() + "%)", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), Container( margin: EdgeInsets.only(top: 10.0), child: Text(totalVAT.toString() + " SAR", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), ]), TableRow(children: [ Container( margin: EdgeInsets.only(top: 10.0), child: Text("Total: ", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), Container( margin: EdgeInsets.only(top: 10.0), child: Text(grandTotal.toString() + " SAR", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), ]), TableRow(children: [ Container( margin: EdgeInsets.only(top: 10.0), child: Text("Paid: ", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), Container( margin: EdgeInsets.only(top: 10.0, bottom: 10.0), child: Text(grandTotal.toString() + " SAR", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), ]), ], ), ]), ), ), Container( margin: EdgeInsets.only(top: 3.0, left: 12.0, right: 12.0), child: Divider( color: Colors.grey[400], thickness: 0.7, ), ), Container( margin: EdgeInsets.only(top: 0.0, left: 10.0, right: 10.0), padding: EdgeInsets.only( top: 10.0, left: 10.0, right: 10.0, bottom: 15.0), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(8))), child: Table(children: [ TableRow(children: [ Container( margin: EdgeInsets.only(top: 10.0), child: Text("Insurance: ", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), Container( margin: EdgeInsets.only(top: 10.0, bottom: 5.0), child: Text( dentalInvoiceDetailResponse .listEInvoiceForDental[0].companyName, textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), ]), TableRow(children: [ Container( margin: EdgeInsets.only(top: 10.0), child: Text("Insurance ID: ", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), Container( margin: EdgeInsets.only(top: 10.0, bottom: 10.0), child: Text( dentalInvoiceDetailResponse .listEInvoiceForDental[0].insuranceID, textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold)), ), ]), ]), ), SizedBox( height: 100.0, ), ], ), ), ), bottomSheet: Container( width: MediaQuery.of(context).size.width, height: 70.0, margin: EdgeInsets.only(left: 15.0, right: 15.0, top: 10.0), child: Button( onTap: () { sendInvoiceEmail(); }, label: TranslationBase.of(context).sendEmail, backgroundColor: Colors.red[900], ), ), ); } sendInvoiceEmail() { GifLoaderDialogUtils.showMyDialog(context); MyInvoicesService myInvoicesService = new MyInvoicesService(); myInvoicesService .sendDentalAppointmentInvoiceEmail( 12, listDentalAppointments.appointmentNo, context) .then((res) { GifLoaderDialogUtils.hideDialog(context); if (res['MessageStatus'] == 1) { AppToast.showSuccessToast( message: TranslationBase.of(context).emailSentSuccessfully); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); } }).catchError((err) { GifLoaderDialogUtils.hideDialog(context); print(err); AppToast.showErrorToast(message: err); Navigator.of(context).pop(); }); } List fullData(context) { List tableRow = []; dentalInvoiceDetailResponse.listEInvoiceForDental[0].listConsultation .forEach((lab) { tableRow.add( TableRow(children: [ Container( margin: EdgeInsets.only(top: 10.0), child: Text(lab.procedureName, textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.w400)), ), Container( margin: EdgeInsets.only(top: 10.0), child: Text(lab.quantity.toString(), textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.w400)), ), Container( margin: EdgeInsets.only(top: 10.0), child: Text(lab.price.toString() + " SAR", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.w400)), ), Container( margin: EdgeInsets.only(top: 10.0), child: Text(lab.total.toString() + " SAR", textAlign: TextAlign.center, style: TextStyle( color: Colors.black, fontWeight: FontWeight.w400)), ), ]), ); }); return tableRow; } }