monthly pay slip added.
							parent
							
								
									9362f8bf91
								
							
						
					
					
						commit
						f1c36b5821
					
				@ -0,0 +1,68 @@
 | 
			
		||||
import 'package:mohem_flutter_app/api/api_client.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/app_state/app_state.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/classes/consts.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/generic_response_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart';
 | 
			
		||||
 | 
			
		||||
class MonthlyPaySlipApiClient {
 | 
			
		||||
  static final MonthlyPaySlipApiClient _instance = MonthlyPaySlipApiClient._internal();
 | 
			
		||||
 | 
			
		||||
  MonthlyPaySlipApiClient._internal();
 | 
			
		||||
 | 
			
		||||
  factory MonthlyPaySlipApiClient() => _instance;
 | 
			
		||||
 | 
			
		||||
  Future<List<GetPayslipList>> getPaySlip() async {
 | 
			
		||||
    String url = "${ApiConsts.erpRest}GET_PAYSLIP";
 | 
			
		||||
    Map<String, dynamic> postParams = {"P_MENU_TYPE": "E", "P_SELECTED_RESP_ID": -999};
 | 
			
		||||
    postParams.addAll(AppState().postParamsJson);
 | 
			
		||||
    print(postParams);
 | 
			
		||||
    return await ApiClient().postJsonForObject((json) {
 | 
			
		||||
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
 | 
			
		||||
      return responseData.getPayslipList ?? [];
 | 
			
		||||
    }, url, postParams);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<GetSummaryOfPaymentList>> getSummaryOfPayment(int pActionContextID) async {
 | 
			
		||||
    String url = "${ApiConsts.erpRest}GET_SUMMARY_OF_PAYMENT";
 | 
			
		||||
    Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID};
 | 
			
		||||
    postParams.addAll(AppState().postParamsJson);
 | 
			
		||||
    return await ApiClient().postJsonForObject((json) {
 | 
			
		||||
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
 | 
			
		||||
      return responseData.getSummaryOfPaymentList ?? [];
 | 
			
		||||
    }, url, postParams);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<GetPaymentInformationList>> getPaymentInformation(int pActionContextID) async {
 | 
			
		||||
    String url = "${ApiConsts.erpRest}GET_PAYMENT_INFORMATION";
 | 
			
		||||
    Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID};
 | 
			
		||||
    postParams.addAll(AppState().postParamsJson);
 | 
			
		||||
    return await ApiClient().postJsonForObject((json) {
 | 
			
		||||
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
 | 
			
		||||
      return responseData.getPaymentInformationList ?? [];
 | 
			
		||||
    }, url, postParams);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<GetDeductionsList>> getDeductions(int pActionContextID) async {
 | 
			
		||||
    String url = "${ApiConsts.erpRest}GET_DEDUCTIONS";
 | 
			
		||||
    Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID, "P_PAGE_LIMIT": 100, "P_PAGE_NUM": 1};
 | 
			
		||||
    postParams.addAll(AppState().postParamsJson);
 | 
			
		||||
    return await ApiClient().postJsonForObject((json) {
 | 
			
		||||
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
 | 
			
		||||
      return responseData.getDeductionsList ?? [];
 | 
			
		||||
    }, url, postParams);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<GetEarningsList>> getEarnings(int pActionContextID) async {
 | 
			
		||||
    String url = "${ApiConsts.erpRest}GET_EARNINGS";
 | 
			
		||||
    Map<String, dynamic> postParams = {"P_ACTION_CONTEXT_ID": pActionContextID, "P_PAGE_LIMIT": 100, "P_PAGE_NUM": 1};
 | 
			
		||||
    postParams.addAll(AppState().postParamsJson);
 | 
			
		||||
    return await ApiClient().postJsonForObject((json) {
 | 
			
		||||
      GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
 | 
			
		||||
      return responseData.getEarningsList ?? [];
 | 
			
		||||
    }, url, postParams);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,34 +0,0 @@
 | 
			
		||||
import 'dart:async';
 | 
			
		||||
 | 
			
		||||
import 'package:mohem_flutter_app/classes/consts.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/content_info_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/member_login_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/surah_model.dart';
 | 
			
		||||
 | 
			
		||||
import 'api_client.dart';
 | 
			
		||||
 | 
			
		||||
class TangheemUserApiClient {
 | 
			
		||||
  static final TangheemUserApiClient _instance = TangheemUserApiClient._internal();
 | 
			
		||||
 | 
			
		||||
  TangheemUserApiClient._internal();
 | 
			
		||||
 | 
			
		||||
  factory TangheemUserApiClient() => _instance;
 | 
			
		||||
 | 
			
		||||
  // Future<SurahModel> getSurahs() async {
 | 
			
		||||
  //   String url = "${ApiConsts.tangheemUsers}AlSuar_Get";
 | 
			
		||||
  //   var postParams = {};
 | 
			
		||||
  //   return await ApiClient().postJsonForObject((json) => SurahModel.fromJson(json), url, postParams);
 | 
			
		||||
  // }
 | 
			
		||||
  //
 | 
			
		||||
  // Future<MemberModel> getMembers() async {
 | 
			
		||||
  //   String url = "${ApiConsts.tangheemUsers}Committee_Get";
 | 
			
		||||
  //   var postParams = {};
 | 
			
		||||
  //   return await ApiClient().postJsonForObject((json) => MemberModel.fromJson(json), url, postParams);
 | 
			
		||||
  // }
 | 
			
		||||
  //
 | 
			
		||||
  // Future<ContentInfoModel> getContentInfo(int contentId) async {
 | 
			
		||||
  //   String url = "${ApiConsts.tangheemUsers}ContentInfo_Get";
 | 
			
		||||
  //   var postParams = {"contentTypeId": contentId};
 | 
			
		||||
  //   return await ApiClient().postJsonForObject((json) => ContentInfoModel.fromJson(json), url, postParams);
 | 
			
		||||
  // }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
class GetDeductionsList {
 | 
			
		||||
  int? aMOUNT;
 | 
			
		||||
  String? eLEMENTNAME;
 | 
			
		||||
  int? fROMROWNUM;
 | 
			
		||||
  int? nOOFROWS;
 | 
			
		||||
  int? rOWNUM;
 | 
			
		||||
  int? tOROWNUM;
 | 
			
		||||
 | 
			
		||||
  GetDeductionsList(
 | 
			
		||||
      {this.aMOUNT,
 | 
			
		||||
        this.eLEMENTNAME,
 | 
			
		||||
        this.fROMROWNUM,
 | 
			
		||||
        this.nOOFROWS,
 | 
			
		||||
        this.rOWNUM,
 | 
			
		||||
        this.tOROWNUM});
 | 
			
		||||
 | 
			
		||||
  GetDeductionsList.fromJson(Map<String, dynamic> json) {
 | 
			
		||||
    aMOUNT = json['AMOUNT'];
 | 
			
		||||
    eLEMENTNAME = json['ELEMENT_NAME'];
 | 
			
		||||
    fROMROWNUM = json['FROM_ROW_NUM'];
 | 
			
		||||
    nOOFROWS = json['NO_OF_ROWS'];
 | 
			
		||||
    rOWNUM = json['ROW_NUM'];
 | 
			
		||||
    tOROWNUM = json['TO_ROW_NUM'];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Map<String, dynamic> toJson() {
 | 
			
		||||
    final Map<String, dynamic> data = new Map<String, dynamic>();
 | 
			
		||||
    data['AMOUNT'] = this.aMOUNT;
 | 
			
		||||
    data['ELEMENT_NAME'] = this.eLEMENTNAME;
 | 
			
		||||
    data['FROM_ROW_NUM'] = this.fROMROWNUM;
 | 
			
		||||
    data['NO_OF_ROWS'] = this.nOOFROWS;
 | 
			
		||||
    data['ROW_NUM'] = this.rOWNUM;
 | 
			
		||||
    data['TO_ROW_NUM'] = this.tOROWNUM;
 | 
			
		||||
    return data;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
class GetEarningsList {
 | 
			
		||||
  int? aMOUNT;
 | 
			
		||||
  String? eLEMENTNAME;
 | 
			
		||||
  int? fROMROWNUM;
 | 
			
		||||
  int? nOOFROWS;
 | 
			
		||||
  int? rOWNUM;
 | 
			
		||||
  int? tOROWNUM;
 | 
			
		||||
 | 
			
		||||
  GetEarningsList(
 | 
			
		||||
      {this.aMOUNT,
 | 
			
		||||
        this.eLEMENTNAME,
 | 
			
		||||
        this.fROMROWNUM,
 | 
			
		||||
        this.nOOFROWS,
 | 
			
		||||
        this.rOWNUM,
 | 
			
		||||
        this.tOROWNUM});
 | 
			
		||||
 | 
			
		||||
  GetEarningsList.fromJson(Map<String, dynamic> json) {
 | 
			
		||||
    aMOUNT = json['AMOUNT'];
 | 
			
		||||
    eLEMENTNAME = json['ELEMENT_NAME'];
 | 
			
		||||
    fROMROWNUM = json['FROM_ROW_NUM'];
 | 
			
		||||
    nOOFROWS = json['NO_OF_ROWS'];
 | 
			
		||||
    rOWNUM = json['ROW_NUM'];
 | 
			
		||||
    tOROWNUM = json['TO_ROW_NUM'];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Map<String, dynamic> toJson() {
 | 
			
		||||
    final Map<String, dynamic> data = new Map<String, dynamic>();
 | 
			
		||||
    data['AMOUNT'] = this.aMOUNT;
 | 
			
		||||
    data['ELEMENT_NAME'] = this.eLEMENTNAME;
 | 
			
		||||
    data['FROM_ROW_NUM'] = this.fROMROWNUM;
 | 
			
		||||
    data['NO_OF_ROWS'] = this.nOOFROWS;
 | 
			
		||||
    data['ROW_NUM'] = this.rOWNUM;
 | 
			
		||||
    data['TO_ROW_NUM'] = this.tOROWNUM;
 | 
			
		||||
    return data;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
class GetPayslipList {
 | 
			
		||||
  int? aCTIONCONTEXTID;
 | 
			
		||||
  String? pAYMENTDATE;
 | 
			
		||||
  String? pAYSLIPCHOICE;
 | 
			
		||||
  String? pERIODENDDATE;
 | 
			
		||||
  String? pERIODNAME;
 | 
			
		||||
  String? pERIODSTARTDATE;
 | 
			
		||||
 | 
			
		||||
  GetPayslipList(
 | 
			
		||||
      {this.aCTIONCONTEXTID,
 | 
			
		||||
        this.pAYMENTDATE,
 | 
			
		||||
        this.pAYSLIPCHOICE,
 | 
			
		||||
        this.pERIODENDDATE,
 | 
			
		||||
        this.pERIODNAME,
 | 
			
		||||
        this.pERIODSTARTDATE});
 | 
			
		||||
 | 
			
		||||
  GetPayslipList.fromJson(Map<String, dynamic> json) {
 | 
			
		||||
    aCTIONCONTEXTID = json['ACTION_CONTEXT_ID'];
 | 
			
		||||
    pAYMENTDATE = json['PAYMENT_DATE'];
 | 
			
		||||
    pAYSLIPCHOICE = json['PAYSLIP_CHOICE'];
 | 
			
		||||
    pERIODENDDATE = json['PERIOD_END_DATE'];
 | 
			
		||||
    pERIODNAME = json['PERIOD_NAME'];
 | 
			
		||||
    pERIODSTARTDATE = json['PERIOD_START_DATE'];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Map<String, dynamic> toJson() {
 | 
			
		||||
    final Map<String, dynamic> data = new Map<String, dynamic>();
 | 
			
		||||
    data['ACTION_CONTEXT_ID'] = this.aCTIONCONTEXTID;
 | 
			
		||||
    data['PAYMENT_DATE'] = this.pAYMENTDATE;
 | 
			
		||||
    data['PAYSLIP_CHOICE'] = this.pAYSLIPCHOICE;
 | 
			
		||||
    data['PERIOD_END_DATE'] = this.pERIODENDDATE;
 | 
			
		||||
    data['PERIOD_NAME'] = this.pERIODNAME;
 | 
			
		||||
    data['PERIOD_START_DATE'] = this.pERIODSTARTDATE;
 | 
			
		||||
    return data;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,32 @@
 | 
			
		||||
class GetPaymentInformationList {
 | 
			
		||||
  String? aCCOUNTNUMBER;
 | 
			
		||||
  String? aMOUNT;
 | 
			
		||||
  String? bANKNAME;
 | 
			
		||||
  String? bRANCHNAME;
 | 
			
		||||
  String? pAYMENTMETHODNAME;
 | 
			
		||||
 | 
			
		||||
  GetPaymentInformationList(
 | 
			
		||||
      {this.aCCOUNTNUMBER,
 | 
			
		||||
        this.aMOUNT,
 | 
			
		||||
        this.bANKNAME,
 | 
			
		||||
        this.bRANCHNAME,
 | 
			
		||||
        this.pAYMENTMETHODNAME});
 | 
			
		||||
 | 
			
		||||
  GetPaymentInformationList.fromJson(Map<String, dynamic> json) {
 | 
			
		||||
    aCCOUNTNUMBER = json['ACCOUNT_NUMBER'];
 | 
			
		||||
    aMOUNT = json['AMOUNT'];
 | 
			
		||||
    bANKNAME = json['BANK_NAME'];
 | 
			
		||||
    bRANCHNAME = json['BRANCH_NAME'];
 | 
			
		||||
    pAYMENTMETHODNAME = json['PAYMENT_METHOD_NAME'];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Map<String, dynamic> toJson() {
 | 
			
		||||
    final Map<String, dynamic> data = new Map<String, dynamic>();
 | 
			
		||||
    data['ACCOUNT_NUMBER'] = this.aCCOUNTNUMBER;
 | 
			
		||||
    data['AMOUNT'] = this.aMOUNT;
 | 
			
		||||
    data['BANK_NAME'] = this.bANKNAME;
 | 
			
		||||
    data['BRANCH_NAME'] = this.bRANCHNAME;
 | 
			
		||||
    data['PAYMENT_METHOD_NAME'] = this.pAYMENTMETHODNAME;
 | 
			
		||||
    return data;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,36 @@
 | 
			
		||||
class GetSummaryOfPaymentList {
 | 
			
		||||
  int? tOTALDEDUCTIONSAMOUNT;
 | 
			
		||||
  int? tOTALDEDUCTIONSPERCENTAGE;
 | 
			
		||||
  int? tOTALEARNINGSAMOUNT;
 | 
			
		||||
  int? tOTALEARNINGSPERCENTAGE;
 | 
			
		||||
  int? tOTALPAYAMOUNT;
 | 
			
		||||
  int? tOTALPAYPERCENTAGE;
 | 
			
		||||
 | 
			
		||||
  GetSummaryOfPaymentList(
 | 
			
		||||
      {this.tOTALDEDUCTIONSAMOUNT,
 | 
			
		||||
        this.tOTALDEDUCTIONSPERCENTAGE,
 | 
			
		||||
        this.tOTALEARNINGSAMOUNT,
 | 
			
		||||
        this.tOTALEARNINGSPERCENTAGE,
 | 
			
		||||
        this.tOTALPAYAMOUNT,
 | 
			
		||||
        this.tOTALPAYPERCENTAGE});
 | 
			
		||||
 | 
			
		||||
  GetSummaryOfPaymentList.fromJson(Map<String, dynamic> json) {
 | 
			
		||||
    tOTALDEDUCTIONSAMOUNT = json['TOTAL_DEDUCTIONS_AMOUNT'];
 | 
			
		||||
    tOTALDEDUCTIONSPERCENTAGE = json['TOTAL_DEDUCTIONS_PERCENTAGE'];
 | 
			
		||||
    tOTALEARNINGSAMOUNT = json['TOTAL_EARNINGS_AMOUNT'];
 | 
			
		||||
    tOTALEARNINGSPERCENTAGE = json['TOTAL_EARNINGS_PERCENTAGE'];
 | 
			
		||||
    tOTALPAYAMOUNT = json['TOTAL_PAY_AMOUNT'];
 | 
			
		||||
    tOTALPAYPERCENTAGE = json['TOTAL_PAY_PERCENTAGE'];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Map<String, dynamic> toJson() {
 | 
			
		||||
    final Map<String, dynamic> data = new Map<String, dynamic>();
 | 
			
		||||
    data['TOTAL_DEDUCTIONS_AMOUNT'] = this.tOTALDEDUCTIONSAMOUNT;
 | 
			
		||||
    data['TOTAL_DEDUCTIONS_PERCENTAGE'] = this.tOTALDEDUCTIONSPERCENTAGE;
 | 
			
		||||
    data['TOTAL_EARNINGS_AMOUNT'] = this.tOTALEARNINGSAMOUNT;
 | 
			
		||||
    data['TOTAL_EARNINGS_PERCENTAGE'] = this.tOTALEARNINGSPERCENTAGE;
 | 
			
		||||
    data['TOTAL_PAY_AMOUNT'] = this.tOTALPAYAMOUNT;
 | 
			
		||||
    data['TOTAL_PAY_PERCENTAGE'] = this.tOTALPAYPERCENTAGE;
 | 
			
		||||
    return data;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,289 @@
 | 
			
		||||
import 'package:easy_localization/easy_localization.dart';
 | 
			
		||||
import 'package:flutter/cupertino.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/api/monthly_pay_slip_api_client.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/classes/colors.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/classes/utils.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_deductions_List_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_earnings_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_pay_slip_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_payment_information_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/models/monthly_pay_slip/get_summary_of_payment_list_model.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
 | 
			
		||||
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
 | 
			
		||||
 | 
			
		||||
class MonthlyPaySlipScreen extends StatefulWidget {
 | 
			
		||||
  MonthlyPaySlipScreen({Key? key}) : super(key: key);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  _MonthlyPaySlipScreenState createState() {
 | 
			
		||||
    return _MonthlyPaySlipScreenState();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _MonthlyPaySlipScreenState extends State<MonthlyPaySlipScreen> {
 | 
			
		||||
  List<GetPayslipList> paySlipList = [];
 | 
			
		||||
  List<GetSummaryOfPaymentList> summaryOfPaymentList = [];
 | 
			
		||||
  List<GetPaymentInformationList> paymentInformationList = [];
 | 
			
		||||
  List<GetDeductionsList> deductionList = [];
 | 
			
		||||
  List<GetEarningsList> earningList = [];
 | 
			
		||||
  int? selectedMonthIndex;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void initState() {
 | 
			
		||||
    super.initState();
 | 
			
		||||
    getData();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void getData() async {
 | 
			
		||||
    try {
 | 
			
		||||
      Utils.showLoading(context);
 | 
			
		||||
      paySlipList = await MonthlyPaySlipApiClient().getPaySlip();
 | 
			
		||||
      if (paySlipList.isNotEmpty) {
 | 
			
		||||
        selectedMonthIndex = 0;
 | 
			
		||||
        await getDataByActionContextID(paySlipList[selectedMonthIndex!].aCTIONCONTEXTID!);
 | 
			
		||||
      }
 | 
			
		||||
      Utils.hideLoading(context);
 | 
			
		||||
      setState(() {});
 | 
			
		||||
    } catch (ex) {
 | 
			
		||||
      Utils.hideLoading(context);
 | 
			
		||||
      Utils.handleException(ex, context, null);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future getDataByActionContextID(int actionContextID, {bool showLoading = false}) async {
 | 
			
		||||
    try {
 | 
			
		||||
      if (showLoading) {
 | 
			
		||||
        Utils.showLoading(context);
 | 
			
		||||
      }
 | 
			
		||||
      List results = await Future.wait([
 | 
			
		||||
        MonthlyPaySlipApiClient().getSummaryOfPayment(actionContextID),
 | 
			
		||||
        MonthlyPaySlipApiClient().getPaymentInformation(actionContextID),
 | 
			
		||||
        MonthlyPaySlipApiClient().getDeductions(actionContextID),
 | 
			
		||||
        MonthlyPaySlipApiClient().getEarnings(actionContextID),
 | 
			
		||||
      ]);
 | 
			
		||||
      summaryOfPaymentList = results[0];
 | 
			
		||||
      paymentInformationList = results[1];
 | 
			
		||||
      deductionList = results[2];
 | 
			
		||||
      earningList = results[3];
 | 
			
		||||
      if (showLoading) {
 | 
			
		||||
        Utils.hideLoading(context);
 | 
			
		||||
        setState(() {});
 | 
			
		||||
      }
 | 
			
		||||
    } catch (ex) {
 | 
			
		||||
      if (showLoading) {
 | 
			
		||||
        Utils.hideLoading(context);
 | 
			
		||||
      }
 | 
			
		||||
      Utils.handleException(ex, context, null);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void dispose() {
 | 
			
		||||
    super.dispose();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      backgroundColor: Colors.white,
 | 
			
		||||
      appBar: AppBarWidget(
 | 
			
		||||
        context,
 | 
			
		||||
        title: LocaleKeys.monthlyPaySlip.tr(),
 | 
			
		||||
      ),
 | 
			
		||||
      body: Column(
 | 
			
		||||
        children: [
 | 
			
		||||
          Column(
 | 
			
		||||
            crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
            children: [
 | 
			
		||||
              LocaleKeys.month.tr().toText17(isBold: true, color: MyColors.darkIconColor),
 | 
			
		||||
              if (selectedMonthIndex != null)
 | 
			
		||||
                Row(
 | 
			
		||||
                  children: [
 | 
			
		||||
                    DateFormat("MMMM-yyyy").format(DateFormat("MM/dd/yyyy").parse(paySlipList[selectedMonthIndex!].pAYMENTDATE!)).toText16(color: MyColors.greyACColor),
 | 
			
		||||
                    const Icon(Icons.keyboard_arrow_down_rounded, color: MyColors.greyACColor),
 | 
			
		||||
                  ],
 | 
			
		||||
                ).onPress(() async {
 | 
			
		||||
                  int tempIndex = selectedMonthIndex!;
 | 
			
		||||
                  showModalBottomSheet(
 | 
			
		||||
                      context: context,
 | 
			
		||||
                      builder: (cxt) {
 | 
			
		||||
                        return Container(
 | 
			
		||||
                          height: 200,
 | 
			
		||||
                          color: Colors.white,
 | 
			
		||||
                          child: Column(
 | 
			
		||||
                            crossAxisAlignment: CrossAxisAlignment.end,
 | 
			
		||||
                            children: [
 | 
			
		||||
                              LocaleKeys.ok.tr().toText16(color: MyColors.gradiantEndColor).paddingOnly(right: 21, top: 16).onPress(() {
 | 
			
		||||
                                if (selectedMonthIndex != tempIndex) {
 | 
			
		||||
                                  selectedMonthIndex = tempIndex;
 | 
			
		||||
                                  Navigator.pop(context);
 | 
			
		||||
                                  getDataByActionContextID(paySlipList[selectedMonthIndex!].aCTIONCONTEXTID!, showLoading: true);
 | 
			
		||||
                                }
 | 
			
		||||
                              }),
 | 
			
		||||
                              CupertinoPicker(
 | 
			
		||||
                                  itemExtent: 40,
 | 
			
		||||
                                  onSelectedItemChanged: (index) {
 | 
			
		||||
                                    tempIndex = index;
 | 
			
		||||
                                  },
 | 
			
		||||
                                  children: [for (int i = 0; i < paySlipList.length; i++) paySlipList[i].pERIODNAME!.toText16().center]).expanded,
 | 
			
		||||
                            ],
 | 
			
		||||
                          ),
 | 
			
		||||
                        );
 | 
			
		||||
                      });
 | 
			
		||||
                })
 | 
			
		||||
            ],
 | 
			
		||||
          ).paddingOnly(left: 21, right: 21),
 | 
			
		||||
          ListView(
 | 
			
		||||
            padding: const EdgeInsets.all(21),
 | 
			
		||||
            children: [
 | 
			
		||||
              if (summaryOfPaymentList.isNotEmpty) ...[paymentSummaryData(context)],
 | 
			
		||||
              if (earningList.isNotEmpty) ...[18.height, earningData(context)],
 | 
			
		||||
              if (deductionList.isNotEmpty) ...[18.height, deductionData(context)],
 | 
			
		||||
              if (paymentInformationList.isNotEmpty) ...[12.height, paymentInformationData(context)]
 | 
			
		||||
            ],
 | 
			
		||||
          ).expanded,
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Widget earningData(context) {
 | 
			
		||||
    List<TableRow> tableRow = [];
 | 
			
		||||
    tableRow.add(
 | 
			
		||||
      TableRow(
 | 
			
		||||
        children: [
 | 
			
		||||
          Utils.tableColumnTitle(LocaleKeys.particular.tr()),
 | 
			
		||||
          Utils.tableColumnTitle(LocaleKeys.amount.tr()),
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
    for (int i = 0; i < earningList.length; i++) {
 | 
			
		||||
      tableRow.add(
 | 
			
		||||
        TableRow(children: [
 | 
			
		||||
          Utils.tableColumnValue('${earningList[i].eLEMENTNAME}', isLast: i == earningList.length - 1),
 | 
			
		||||
          Utils.tableColumnValue('${earningList[i].aMOUNT}', isLast: i == earningList.length - 1),
 | 
			
		||||
        ]),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    return Column(
 | 
			
		||||
      crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
      mainAxisSize: MainAxisSize.min,
 | 
			
		||||
      children: [
 | 
			
		||||
        LocaleKeys.earnings.tr().toSectionHeading(),
 | 
			
		||||
        12.height,
 | 
			
		||||
        Table(
 | 
			
		||||
          columnWidths: const {0: FlexColumnWidth(1.5), 1: FlexColumnWidth(1.0)},
 | 
			
		||||
          children: tableRow,
 | 
			
		||||
        ).objectContainerView(),
 | 
			
		||||
      ],
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Widget deductionData(context) {
 | 
			
		||||
    List<TableRow> tableRow = [];
 | 
			
		||||
    tableRow.add(
 | 
			
		||||
      TableRow(
 | 
			
		||||
        children: [
 | 
			
		||||
          Utils.tableColumnTitle(LocaleKeys.particular.tr()),
 | 
			
		||||
          Utils.tableColumnTitle(LocaleKeys.amount.tr()),
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
    for (int i = 0; i < deductionList.length; i++) {
 | 
			
		||||
      tableRow.add(
 | 
			
		||||
        TableRow(children: [
 | 
			
		||||
          Utils.tableColumnValue('${deductionList[i].eLEMENTNAME}', isLast: i == deductionList.length - 1),
 | 
			
		||||
          Utils.tableColumnValue('${deductionList[i].aMOUNT}', isLast: i == deductionList.length - 1),
 | 
			
		||||
        ]),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Column(
 | 
			
		||||
      crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
      mainAxisSize: MainAxisSize.min,
 | 
			
		||||
      children: [
 | 
			
		||||
        LocaleKeys.deductions.tr().toSectionHeading(),
 | 
			
		||||
        12.height,
 | 
			
		||||
        Table(
 | 
			
		||||
          columnWidths: const {0: FlexColumnWidth(1.5), 1: FlexColumnWidth(1.0)},
 | 
			
		||||
          children: tableRow,
 | 
			
		||||
        ).objectContainerView(),
 | 
			
		||||
      ],
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Widget paymentSummaryData(context) {
 | 
			
		||||
    List<TableRow> tableRow = [];
 | 
			
		||||
    tableRow.add(
 | 
			
		||||
      TableRow(
 | 
			
		||||
        children: [
 | 
			
		||||
          Utils.tableColumnTitle(LocaleKeys.particular.tr()),
 | 
			
		||||
          Utils.tableColumnTitle("%"),
 | 
			
		||||
          Utils.tableColumnTitle(LocaleKeys.amount.tr()),
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    tableRow.add(
 | 
			
		||||
      TableRow(children: [
 | 
			
		||||
        Utils.tableColumnValue(LocaleKeys.deductions.tr(), isLast: false),
 | 
			
		||||
        Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALDEDUCTIONSPERCENTAGE}', isLast: false),
 | 
			
		||||
        Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALDEDUCTIONSAMOUNT}', isLast: false),
 | 
			
		||||
      ]),
 | 
			
		||||
    );
 | 
			
		||||
    tableRow.add(
 | 
			
		||||
      TableRow(children: [
 | 
			
		||||
        Utils.tableColumnValue(LocaleKeys.earnings.tr(), isLast: false),
 | 
			
		||||
        Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALEARNINGSPERCENTAGE}', isLast: false),
 | 
			
		||||
        Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALEARNINGSAMOUNT}', isLast: false),
 | 
			
		||||
      ]),
 | 
			
		||||
    );
 | 
			
		||||
    tableRow.add(
 | 
			
		||||
      TableRow(children: [
 | 
			
		||||
        Utils.tableColumnValue(LocaleKeys.totalPayAmount.tr(), isLast: true),
 | 
			
		||||
        Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALPAYPERCENTAGE}', isLast: true),
 | 
			
		||||
        Utils.tableColumnValue('${summaryOfPaymentList[0].tOTALPAYAMOUNT}', isLast: true),
 | 
			
		||||
      ]),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return Column(
 | 
			
		||||
      crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
      mainAxisSize: MainAxisSize.min,
 | 
			
		||||
      children: [
 | 
			
		||||
        LocaleKeys.summaryOfInformation.tr().toSectionHeading(),
 | 
			
		||||
        12.height,
 | 
			
		||||
        Table(
 | 
			
		||||
          columnWidths: const {0: FlexColumnWidth(2.0), 1: FlexColumnWidth(1.0), 2: FlexColumnWidth(1.0)},
 | 
			
		||||
          children: tableRow,
 | 
			
		||||
        ).objectContainerView(),
 | 
			
		||||
      ],
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Widget paymentInformationData(context) {
 | 
			
		||||
    return Column(
 | 
			
		||||
      crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
      mainAxisSize: MainAxisSize.min,
 | 
			
		||||
      children: [
 | 
			
		||||
        LocaleKeys.paymentInformation.tr().toSectionHeading(),
 | 
			
		||||
        12.height,
 | 
			
		||||
        Column(
 | 
			
		||||
          crossAxisAlignment: CrossAxisAlignment.start,
 | 
			
		||||
          mainAxisSize: MainAxisSize.min,
 | 
			
		||||
          children: [
 | 
			
		||||
            ItemDetailView(LocaleKeys.paymentMethodName.tr(), paymentInformationList[0].pAYMENTMETHODNAME ?? ""),
 | 
			
		||||
            ItemDetailView(LocaleKeys.bankName.tr(), paymentInformationList[0].bANKNAME ?? ""),
 | 
			
		||||
            ItemDetailView(LocaleKeys.branchCode.tr(), paymentInformationList[0].bRANCHNAME ?? ""),
 | 
			
		||||
            ItemDetailView(LocaleKeys.accountNo.tr(), paymentInformationList[0].aCCOUNTNUMBER ?? ""),
 | 
			
		||||
            ItemDetailView(LocaleKeys.amount.tr(), paymentInformationList[0].aMOUNT ?? ""),
 | 
			
		||||
          ],
 | 
			
		||||
        ).objectContainerView(),
 | 
			
		||||
      ],
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue