publicvoidNewARPayment(ARPaymentSourcesource,BCE.Data.DBSettingdbSetting){stringuserID=BCE.AutoCount.Authentication.UserAuthentication.GetOrCreate(dbSetting).LoginUserID;BCE.AutoCount.ARAP.ARPayment.ARPaymentDataAccesscmd=BCE.AutoCount.ARAP.ARPayment.ARPaymentDataAccess.Create(dbSetting);BCE.AutoCount.ARAP.ARPayment.ARPaymentEntitydoc=cmd.NewARPayment();doc.DebtorCode=source.DebtorCode;doc.DocNo=source.DocumentNo;doc.DocNo2=source.ReceiptNo2;doc.DocDate=source.DocumentDate;doc.CurrencyCode=source.PaymentCurrencyCode??doc.CurrencyCode;doc.ToHomeRate=source.PaymentToHomeCurrencyRate??doc.ToHomeRate;doc.ToDebtorRate=source.PaymentToDebtorCurrencyRate??doc.ToDebtorRate;doc.ProjNo=source.Project;doc.DeptNo=source.Department;source.PaymentDetail.ForEach(s=>AddARPaymentDetail(s,doc.NewDetail));foreach(ARPaymentKnockoffknockoffinsource.PaymentKnockoff){doc.KnockOff(knockoff.DocType,knockoff.DocNo,knockoff.Amount,knockoff.DBDate);}try{cmd.SaveARPayment(doc,userID);//BCE.Application.AppMessage.ShowMessage(string.Format("{0} is created.", doc.DocNo));}catch(BCE.Application.AppExceptionex){//BCE.Application.AppMessage.ShowMessage(ex.Message);//log error}}privatevoidAddARPaymentDetail(ARPaymentDetailSourcesource,Func<BCE.AutoCount.ARAP.ARPayment.ARPaymentDTLEntity>addPaymentDetail){BCE.AutoCount.ARAP.ARPayment.ARPaymentDTLEntitydtl=addPaymentDetail();dtl.PaymentMethod=source.PaymentMethod;dtl.ChequeNo=source.ChequeNo;dtl.PaymentAmt=source.PaymentAmount;dtl.BankCharge=source.BankCharge;dtl.BankChargeTaxType=source.BankChargeTaxCode;dtl.BankChargeTaxRefNo=source.BankChargeBillNoForGst;dtl.PaymentBy=source.PaymentBy;if(source.ReturnChequeDate.HasValue){dtl.IsRCHQ=true;dtl.RCHQDate=source.ReturnChequeDate.Value;}}
publicclassARPaymentSource{publicstringDebtorCode{get;set;}publicstringDocumentNo{get;set;}publicstringReceiptNo2{get;set;}publicDateTimeDocumentDate{get;set;}=DateTime.Today.Date;publicstringDescription{get;set;}publicstringDepositMethod{get;set;}//When not defined (null), system will apply the Debtor Account's default currency codepublicstringPaymentCurrencyCode{get;set;}publicdecimal?PaymentToHomeCurrencyRate{get;set;}publicdecimal?PaymentToDebtorCurrencyRate{get;set;}publicstringProject{get;set;}publicstringDepartment{get;set;}publicList<ARPaymentDetailSource>PaymentDetail=newList<ARPaymentDetailSource>();publicList<ARPaymentKnockoff>PaymentKnockoff=newList<ARPaymentKnockoff>();}publicclassARPaymentDetailSource{publicstringPaymentMethod{get;set;}publicstringChequeNo{get;set;}publicdecimalPaymentAmount{get;set;}publicdecimalBankCharge{get;set;}publicstringBankChargeTaxCode{get;set;}publicstringBankChargeBillNoForGst{get;set;}publicstringPaymentBy{get;set;}/// <summary>/// If this cheque is returned/bounced cheque/// Set the returned/bounced date. Otherwise it is null/// </summary>publicDateTime?ReturnChequeDate{get;set;}}publicclassARPaymentKnockoff{publicconststringARInvoiceDocType=BCE.AutoCount.Document.DocumentType.ARInvoice;publicconststringARDebitNoteDocType=BCE.AutoCount.Document.DocumentType.ARDN;publicstringDocType{get;set;}publicstringDocNo{get;set;}publicdecimalAmount{get;set;}publicBCE.Data.DBDateTimeDBDate{get;set;}=DBNull.Value;}