/// <summary> /// 過帳至入金機 /// </summary> private static void PostingDepositBill(ApplicationDbContext dataAccess, ReceiptBillModel receipt) { DepositBillReceiptDetailModel dt = new DepositBillReceiptDetailModel() { BillNo = receipt.BillNo, ReceiptBill = receipt, ReceiptBillNo = receipt.BillNo, RowState = RowState.Insert }; dataAccess.Add(dt); }
/// <summary> /// 生成電子通路帳簿 /// </summary> /// <param name="model"></param> /// <returns></returns> private static ChannelEAccountBillSet CreateChannelEAccountBill(ReceiptBillModel model) { return(new ChannelEAccountBillSet() { ChannelEAccountBill = new ChannelEAccountBillModel() { ChannelId = model.ChannelId, CollectionTypeId = model.CollectionTypeId, ExpectRemitDate = model.ExpectRemitDate, }, ChannelEAccountBillDetail = new List <ChannelEAccountBillDetailModel>(), }); }
/// <summary> /// 設置對應的帳單編號 /// </summary> /// <param name="set"></param> /// <returns></returns> private static void SetBillNo(ApplicationDbContext DataAccess, ReceiptBillModel receiptBill) { if (BizVirtualAccountCode.CheckBankCodeExist(DataAccess, receiptBill.VirtualAccountCode, out VirtualAccountCodeModel virtualAccount)) { receiptBill.BillProgId = virtualAccount.SrcProgId; receiptBill.ToBillNo = virtualAccount.SrcBillNo; } else { receiptBill.BillProgId = string.Empty; receiptBill.ToBillNo = string.Empty; } }
/// <summary> /// 過帳至帳單 /// </summary> /// <param name="dataAccess"></param> /// <param name="receipt"></param> private static void PostingBill(ApplicationDbContext dataAccess, ReceiptBillModel receipt) { BillModel bill = dataAccess.Find <BillModel>(receipt.ToBillNo); BillReceiptDetailModel dt = new BillReceiptDetailModel() { BillNo = receipt.ToBillNo, ReceiptBill = receipt, ReceiptBillNo = receipt.ToBillNo, RowState = RowState.Insert }; dataAccess.Add(dt); bill.HadPayAmount += receipt.PayAmount; bill.PayStatus = BizBill.GetPayStatus(bill.PayAmount, bill.HadPayAmount); dataAccess.Update(bill); }
/// <summary> /// 檢查,並設置異常訊息 /// </summary> /// <param name="receiptBill"></param> private static void SetErrMessage(ReceiptBillModel receiptBill) { StringBuilder strBuilder = new StringBuilder(); int i = 1; if (receiptBill.CustomerCode.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無法解析企業編號。"); } if (receiptBill.CollectionTypeId.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無法解析代收類別代號。"); } if (receiptBill.ChannelId.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無法解析代收通路。"); } if (receiptBill.TradeDate.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無法解析交易日期。"); } if (receiptBill.TransDate.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無法解析傳輸日期。"); } if (receiptBill.ExpectRemitDate.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無法解析預計匯款日。"); } if (receiptBill.PayAmount.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無法解析實繳金額。"); } if (!(receiptBill.BizCustomer.ChannelIds.Split(',').Contains(receiptBill.ChannelId))) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 未啟用該代收通路。"); } if (!(receiptBill.BizCustomer.CollectionTypeIds.Split(',').Contains(receiptBill.CollectionTypeId))) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 未啟用該代收類別。"); } if (receiptBill.ToBillNo.IsNullOrEmpty()) { strBuilder.AppendLine($"{i++.ToString().PadLeft(2)}. 無帳單資料。"); } receiptBill.ErrMessage = strBuilder.ToString(); receiptBill.IsErrData = !receiptBill.ErrMessage.IsNullOrEmpty(); }
/// <summary> /// 設置費用 /// </summary> private static void SetFee(ReceiptBillModel receiptBill, BizCustomerSet bizCustomerSet, CollectionTypeSet collectionTypeSet) { CollectionTypeDetailModel collectionTypeDetailModel = collectionTypeSet.CollectionTypeDetail.FirstOrDefault(p => p.ChannelId.Equals(receiptBill.ChannelId) && (p.SRange <= receiptBill.PayAmount && p.ERange >= receiptBill.PayAmount)); BizCustomerFeeDetailModel bizCustomerFeeDetailModel = bizCustomerSet.BizCustomerFeeDetail.FirstOrDefault(p => p.ChannelGroupType.Equals(receiptBill.Channel.ChannelGroupType)); BizCustomerFeeDetailModel hiTrust = bizCustomerSet.BizCustomerFeeDetail.FirstOrDefault(p => p.BankFeeType.Equals(BankFeeType.Hitrust_ClearFee_CurMonth) || p.BankFeeType.Equals(BankFeeType.Hitrust_ClearFee_NextMonth)); receiptBill.ChargePayType = collectionTypeSet.CollectionType.ChargePayType; receiptBill.BankFeeType = bizCustomerFeeDetailModel.BankFeeType; if (receiptBill.BankFeeType.Equals(BankFeeType.TotalFee)) { switch (receiptBill.CollectionType.ChargePayType) { case ChargePayType.Deduction: { receiptBill.ThirdFee = FeeDeduct(bizCustomerFeeDetailModel.Fee, collectionTypeDetailModel.ChannelTotalFee, bizCustomerFeeDetailModel.IntroPercent); receiptBill.BankFee = bizCustomerFeeDetailModel.Fee - receiptBill.ThirdFee; } break; case ChargePayType.Increase: { receiptBill.ThirdFee = FeePlus(bizCustomerFeeDetailModel.Fee, bizCustomerFeeDetailModel.IntroPercent); receiptBill.BankFee = bizCustomerFeeDetailModel.Fee - receiptBill.ThirdFee; } break; } } else { receiptBill.BankFee = bizCustomerFeeDetailModel.Fee; receiptBill.ThirdFee = 0m; } receiptBill.ThirdFee = null != hiTrust ? hiTrust.IntroPercent : receiptBill.ThirdFee; receiptBill.ChannelFeedBackFee = collectionTypeDetailModel.ChannelFeedBackFee; receiptBill.ChannelRebateFee = collectionTypeDetailModel.ChannelRebateFee; receiptBill.ChannelFee = collectionTypeDetailModel.ChannelFee; receiptBill.ChannelTotalFee = collectionTypeDetailModel.ChannelTotalFee; receiptBill.TotalFee = receiptBill.BankFeeType.Equals(BankFeeType.TotalFee) ? bizCustomerFeeDetailModel.Fee : collectionTypeDetailModel.ChannelTotalFee; }
/// <summary> /// 設置預計匯款日 /// </summary> /// <param name="model"></param> /// <param name="periodModel"></param> /// <returns></returns> private static void SetRemitDate(ReceiptBillModel receiptBill, CollectionTypeSet collectionTypeSet, Dictionary <DateTime, bool> workDic) { DateTime expectRemitDate = receiptBill.ExpectRemitDate; if (!receiptBill.Channel.ChannelGroupType.In(ChannelGroupType.Bank, ChannelGroupType.Self)) { CollectionTypeVerifyPeriodModel period = collectionTypeSet.CollectionTypeVerifyPeriod.Where(p => p.ChannelId.Equals(receiptBill.ChannelId)).FirstOrDefault(); switch (period?.PayPeriodType) { case PayPeriodType.NDay_A: expectRemitDate = GetNDay_A(workDic, receiptBill.TransDate); break; case PayPeriodType.NDay_B: expectRemitDate = GetNDay_B(workDic, receiptBill.TransDate); break; case PayPeriodType.NDay_C: expectRemitDate = GetNDay_C(workDic, receiptBill.TransDate); break; case PayPeriodType.Week: expectRemitDate = GetWeekTime(workDic, receiptBill.TransDate); break; case PayPeriodType.TenDay: expectRemitDate = GetTenDayTime(workDic, receiptBill.TransDate); break; } } receiptBill.ExpectRemitDate = expectRemitDate; }
/// <summary> /// 過帳帳單收款明細 /// </summary> /// <param name="receiptBillNo"></param> /// <param name="billNo"></param> private static void PostingBillReceiptDetail(ApplicationDbContext dataAccess, ReceiptBillModel receipt) { if (receipt.ToBillNo.IsNullOrEmpty()) { return; } switch (receipt.BillProgId) { case SystemCP.ProgId_AutoDebitBill: PostingAutoDebitBill(dataAccess, receipt); break; case SystemCP.ProgId_Bill: PostingBill(dataAccess, receipt); break; case SystemCP.ProgId_DepositBill: PostingDepositBill(dataAccess, receipt); break; } }
/// <summary> /// 設置企業編號 /// </summary> /// <param name="receiptBill"></param> /// <param name="bizCustomerSet"></param> private static void SetBizCustomer(ReceiptBillModel receiptBill, BizCustomerModel bizCustomer) { receiptBill.BizCustomer = bizCustomer; receiptBill.CustomerCode = bizCustomer?.CustomerCode; }