public void CreateTrPaymentBulk(CreateTrPaymentBulkInputDto input) { Logger.Info("CreateTrPaymentBulk() - Started."); var data = new TR_PaymentBulk { bulkPaymentKey = input.bulkPaymentKey, bookingHeaderID = input.bookingHeaderID, unitID = input.unitID, payForID = input.payForID, payTypeID = input.payTypeID, othersTypeID = input.othersTypeID, psCode = input.psCode, name = input.name, clearDate = input.clearDate, amount = input.amount }; try { Logger.DebugFormat("CreateTrPaymentBulk() - Start insert TR Payment Bulk. Parameters sent:{0}" + "bulkPaymentKey = {1}{0}" + "bookingHeaderID = {2}{0}" + "unitID = {3}{0}" + "payForID = {4}{0}" + "payTypeID = {5}{0}" + "othersTypeID = {6}{0}" + "psCode = {7}{0}" + "name = {8}{0}" + "clearDate = {9}{0}" + "amount = {10}{0}" , Environment.NewLine, input.bulkPaymentKey, input.bookingHeaderID, input.unitID, input.payForID, input.payTypeID, input.othersTypeID , input.psCode, input.name, input.clearDate, input.amount); _trPaymentBulkRepo.Insert(data); CurrentUnitOfWork.SaveChanges(); Logger.DebugFormat("CreateTrPaymentBulk() - Ended insert TR Payment Bulk."); Logger.Info("CreateTrPaymentBulk() - Finished."); } catch (DataException ex) { Logger.ErrorFormat("CreateTrPaymentBulk() - ERROR DataException. Result = {0}", ex.Message); throw new UserFriendlyException("Db Error: " + ex.Message); } catch (Exception ex) { Logger.ErrorFormat("CreateTrPaymentBulk() - ERROR Exception. Result = {0}", ex.Message); throw new UserFriendlyException("Error: " + ex.Message); } }
public void CreateUniversalBulkPayment(List <CreateUniversalBulkPaymentInputDto> input) { Logger.Info("CreateUniversalBulkPayment() - Started."); var transNo = new JObject(); List <int> listPayTypeID = new List <int>(); List <string> listOthersTypeCode = new List <string>(); foreach (var dataInput in input) { int payNo = 0; var accCode = (from A in _msAccountRepo.GetAll() where A.Id == dataInput.accID select A.accCode).FirstOrDefault(); var bookCode = (from A in _trBookingHeaderRepo.GetAll() where A.Id == dataInput.bookingHeaderID select A.bookCode).FirstOrDefault(); var coCode = (from A in _msAccountRepo.GetAll() where A.Id == dataInput.accID select A.devCode).FirstOrDefault(); var payForCode = (from A in _lkPayForRepo.GetAll() where A.Id == dataInput.payForID select A.payForCode).FirstOrDefault(); var dataInputTransNo = new GenerateTransNoInputDto { accID = dataInput.accID, entityID = 1 }; transNo = _iPSASScheduleAppService.GenerateTransNo(dataInputTransNo); #region createTrPaymentHeader var combineCode = (from A in _trBookingDetailRepo.GetAll() join B in _msCompanyRepo.GetAll() on A.coCode equals B.coCode join C in _msAccountRepo.GetAll() on B.Id equals C.coID where A.bookingHeaderID == dataInput.bookingHeaderID && C.Id == dataInput.accID select A.combineCode).FirstOrDefault(); var dataInputPaymentHeader = new CreatePaymentHeaderInputDto { entityID = 1, accountID = dataInput.accID, bookingHeaderID = dataInput.bookingHeaderID == null ? null : dataInput.bookingHeaderID, clearDate = dataInput.clearDate, combineCode = combineCode == null ? "1" : combineCode, //wait ket = "-", payForID = dataInput.payForID, paymentDate = DateTime.Now, transNo = transNo.GetValue("transNo").ToString(), controlNo = transNo.GetValue("transNo").ToString(), isSms = false, hadMail = false }; int paymentHeaderId = _iInputPaymentAppService.CreateTrPaymentHeader(dataInputPaymentHeader); #endregion foreach (var dataInputPayment in dataInput.dataForPayment) { var checkMsMapping = (from a in _contextAccounting.MS_Mapping.ToList() join b in _contextPropertySystem.LK_PayFor on a.payForCode equals b.payForCode join c in _contextPropertySystem.LK_PayType on a.payTypeCode equals c.payTypeCode where b.Id == dataInput.payForID && c.Id == dataInputPayment.payTypeID && a.othersTypeCode == dataInputPayment.othersTypeCode select a).FirstOrDefault(); #region createTrPaymentBulk var dataCreateTrPaymentBulk = new CreateTrPaymentBulkInputDto { bulkPaymentKey = dataInput.bookCode + "#" + dataInput.psCode + "#" + dataInput.clearDate.Date + "#" + dataInputPayment.othersTypeCode, bookingHeaderID = dataInput.bookingHeaderID, clearDate = dataInput.clearDate, psCode = dataInput.psCode, name = dataInput.name, payForID = dataInput.payForID, payTypeID = dataInputPayment.payTypeID, othersTypeID = dataInputPayment.othersTypeID, unitID = dataInput.unitID, amount = dataInputPayment.amount }; CreateTrPaymentBulk(dataCreateTrPaymentBulk); #endregion #region createTrPaymentDetail payNo++; var dataInsertPaymentDetail = new CreatePaymentDetailInputDto { bankName = "-", chequeNo = "-", dueDate = dataInput.clearDate, entityID = 1, ket = dataInput.name, othersTypeCode = dataInputPayment.othersTypeCode, paymentHeaderID = paymentHeaderId, payNo = payNo, payTypeID = dataInputPayment.payTypeID, status = "C" }; int paymentDetailId = _iInputPaymentAppService.CreateTrPaymentDetail(dataInsertPaymentDetail); #region createTrPaymentDetailAlloc foreach (var dataAlloc in dataInputPayment.dataAllocList) { var dataInputDetailAlloc = new CreatePaymentDetailAllocInputDto { entityID = 1, netAmt = dataAlloc.amount == 0 ? dataAlloc.amountPerSchedNo / (decimal)(1 + dataInput.pctTax) : (dataAlloc.amountPerSchedNo - dataAlloc.amount) / (decimal)(1 + dataInput.pctTax), vatAmt = dataAlloc.amount == 0 ? (dataAlloc.amountPerSchedNo / (decimal)(1 + dataInput.pctTax)) * (decimal)dataInput.pctTax : ((dataAlloc.amountPerSchedNo - dataAlloc.amount) / (decimal)(1 + dataInput.pctTax)) * (decimal)dataInput.pctTax, paymentDetailID = paymentDetailId, schedNo = dataAlloc.schedNo }; _iInputPaymentAppService.CreateTrPaymentDetailAlloc(dataInputDetailAlloc); } #endregion #region Accounting //if (checkMsMapping != null) //{ // var dataInputJournalCode = new GenerateJurnalInputDto // { // accCode = accCode, // bookCode = bookCode, // coCode = coCode, // transNo = transNo.GetValue("transNo").ToString(), // payNo = payNo // }; // var journalCode = _iInputPaymentAppService.GenerateJurnalCode(dataInputJournalCode); // #region createTrPaymentDetailJournal // var dataToInsertTRPaymentDetailJournal = new CreateAccountingTrPaymentDetailJournalInputDto // { // accCode = accCode, // bookCode = bookCode, // entityCode = "1", // payNo = payNo, // transNo = transNo.GetValue("transNo").ToString(), // journalCode = journalCode.GetValue("journalCode").ToString() // }; // _iInputPaymentAppService.CreateAccountingTrPaymentDetailJournal(dataToInsertTRPaymentDetailJournal); // #endregion // #region createTrJournal // var getMsJournal = (from a in _contextAccounting.MS_JournalType.ToList() // where a.journalTypeCode == checkMsMapping.journalTypeCode // select new // { // a.COACodeFIN, // a.amtTypeCode, // a.ACCAlloc // }).ToList(); // foreach (var dataJournal in getMsJournal) // { // decimal debit = 0; // decimal kredit = 0; // if (dataJournal.ACCAlloc < 0) // { // if (dataJournal.amtTypeCode == "1") // { // debit = 0; // kredit = dataInputPayment.amount; // } // else if (dataJournal.amtTypeCode == "2") // { // debit = 0; // kredit = dataInputPayment.amount / (1 + (decimal)dataInput.pctTax); // } // else if (dataJournal.amtTypeCode == "3") // { // debit = 0; // kredit = (dataInputPayment.amount / (1 + (decimal)dataInput.pctTax)) * (decimal)dataInput.pctTax; // } // } // else // { // if (dataJournal.amtTypeCode == "1") // { // debit = dataInputPayment.amount; // kredit = 0; // } // if (dataJournal.amtTypeCode == "2") // { // debit = dataInputPayment.amount / (1 + (decimal)dataInput.pctTax); // kredit = 0; // } // if (dataJournal.amtTypeCode == "3") // { // debit = (dataInputPayment.amount / (1 + (decimal)dataInput.pctTax)) * (decimal)dataInput.pctTax; // kredit = 0; // } // } // var dataToInsertTrJournal = new CreateTrJournalInputDto // { // COACodeAcc = "-", // COACodeFIN = dataJournal.COACodeFIN, // entityCode = "1", // journalCode = journalCode.GetValue("journalCode").ToString(), // journalDate = DateTime.Now, // debit = debit, // kredit = kredit, // remarks = "-", // }; // _iInputPaymentAppService.CreateTrJournal(dataToInsertTrJournal); // } // #endregion //} #endregion #endregion listPayTypeID.Add(dataInputPayment.payTypeID); listOthersTypeCode.Add(dataInputPayment.othersTypeCode); } #region TAX // var payTypeCode = (from A in _lkPayTypeRepo.GetAll() where listPayTypeID.Contains(A.Id) select A.payTypeCode).ToList(); // var getPaymentHeaderForUpdate = (from a in _trPaymentHeaderRepo.GetAll() // where a.Id == paymentHeaderId // select a).FirstOrDefault(); // List<string> listCheckPayForCode = new List<string> //{ // "PMT", "OTP" //}; // List<string> listCheckPayTypeCode = new List<string> //{ // "CSH", "CRE", "GRO", "STN", "TRN", "CHQ", "DBT", "ADJ", "ADB", "ADC", "VRT" //}; // List<string> listCheckOthersTypeCode = new List<string> //{ // "ALH", "PMT", "ALI", "KPR", "BFE", "LHL", "DEP", "AD1", "AD2", "ADR", "BNK", "BPS", "LHA", "PAF" //}; // var updatePaymentHeader = getPaymentHeaderForUpdate.MapTo<TR_PaymentHeader>(); // if (listCheckPayForCode.Contains(payForCode) && listCheckPayTypeCode.Intersect(payTypeCode).Any() && listCheckOthersTypeCode.Intersect(listOthersTypeCode).Any()) // { // var checkBatchPajakStock = (from a in _contextTAX.msBatchPajakStock.ToList() // where a.CoCode == coCode && a.IsAvailable == true && a.YearPeriod == DateTime.Now.Year.ToString() // orderby a.BatchID // select a).FirstOrDefault(); // decimal totalAmountAll = dataInput.dataForPayment.Sum(x => x.amount); // //done // if (checkBatchPajakStock != null) // { // var FPCode = "010." + checkBatchPajakStock.FPBranchCode + "-" + checkBatchPajakStock.FPYear + "." + checkBatchPajakStock.FPNo; // var dataToInsertTrFpHeader = new CreateTAXTrFPHeaderInputDto // { // accCode = accCode, // coCode = coCode, // entityCode = "1", // discAmount = 0, // DPAmount = 0, // FPBranchCode = checkBatchPajakStock.FPBranchCode, // unitPriceAmt = 0, // userAddress = input.address, // FPTransCode = "01", // FPStatCode = "0", // FPYear = checkBatchPajakStock.FPYear, // FPNo = checkBatchPajakStock.FPNo, // FPType = "1", // transDate = DateTime.Now, // unitCode = dataInput.unitCode, // unitNo = input.unitNo, // sourceCode = "PSY", // priceType = "1", // transNo = input.transNo, // rentalCode = "-", // paymentCode = "-", // payNo = 0, // pmtBatchNo = "-", // FPCode = FPCode, // unitPriceVat = 0, // vatAmt = (totalAmountAll / (1 + (decimal)dataInput.pctTax)) * (decimal)dataInput.pctTax, //netAmt * pctTax // name = dataInput.name, // NPWP = input.NPWP, // psCode = dataInput.psCode // }; // CreateTAXTrFPHeader(dataToInsertTrFpHeader); // var unitName = (from a in _msUnitCodeRepo.GetAll() // where a.unitCode == input.unitCode // select new { a.unitName, a.Id }).FirstOrDefault(); // var unitNo = (from a in _msUnitRepo.GetAll() // where a.unitCodeID == unitName.Id // select a.unitNo).ToString(); // var dataToInsertTrFpDetail = new CreateTAXTrFPDetailInputDto // { // coCode = coCode, // entityCode = "1", // FPCode = FPCode, // transNo = 1, // currencyCode = "Rp", // currencyRate = 1, // transDesc = "Lantai " + unitName.unitName + " No. " + unitNo + " (" + input.transNo + ")", // transAmount = totalAmountAll / 1 + (decimal)dataInput.pctTax // }; // CreateTAXTrFPDetail(dataToInsertTrFpDetail); // var getBatchPajakStock = (from a in _contextTAX.msBatchPajakStock.ToList() // where a.BatchID == checkBatchPajakStock.BatchID // select a).FirstOrDefault(); // var updateBatchPajakStock = getBatchPajakStock.MapTo<msBatchPajakStock>(); // updateBatchPajakStock.IsAvailable = false; // _contextTAX.msBatchPajakStock.Update(updateBatchPajakStock); // updatePaymentHeader.isFP = "1"; // _trPaymentHeaderRepo.Update(updatePaymentHeader); // } // //kehabisan FP // else // { // updatePaymentHeader.isFP = "2"; // _trPaymentHeaderRepo.Update(updatePaymentHeader); // } // } // //no TAX // else // { // updatePaymentHeader.isFP = "3"; // _trPaymentHeaderRepo.Update(updatePaymentHeader); // } #endregion #region updateBookingSchedule var getDataShedule = (from a in _trBookingDetailScheduleRepo.GetAll() join b in _trBookingDetailRepo.GetAll() on a.bookingDetailID equals b.Id join c in _msAccountRepo.GetAll() on b.coCode equals c.devCode join d in _lkAllocRepo.GetAll() on a.allocID equals d.Id where b.bookingHeaderID == dataInput.bookingHeaderID && c.Id == dataInput.accID && d.payForID == dataInput.payForID select a).ToList(); var getDataSheduleGroupSchedNo = (from a in getDataShedule group a by new { a.schedNo } into G select new { netAmt = G.Sum(x => x.netAmt), vatAmt = G.Sum(x => x.vatAmt), G.Key.schedNo }).ToList(); var getTotalAmount = (from x in _trBookingDetailRepo.GetAll() where x.bookingHeaderID == dataInput.bookingHeaderID group x by new { x.bookingHeaderID } into G select new { bookHeaderID = G.Key.bookingHeaderID, TotalNetNetPrice = G.Sum(d => d.netNetPrice) }).FirstOrDefault(); foreach (var dataScheduleGroupSchedNo in getDataSheduleGroupSchedNo) { var getDataSchedulePerSchedNo = (from a in getDataShedule where a.schedNo == dataScheduleGroupSchedNo.schedNo select a).ToList(); foreach (var dataSchedulePerSchedNo in getDataSchedulePerSchedNo) { var getPercentage = (from x in _trBookingDetailRepo.GetAll() where x.bookingHeaderID == dataInput.bookingHeaderID && x.Id == dataSchedulePerSchedNo.bookingDetailID select new { x.bookingHeaderID, netNetPrice = x.netNetPrice / getTotalAmount.TotalNetNetPrice }).FirstOrDefault(); var getDataAmtForUpdate = (from a in dataInput.dataScheduleList where a.schedNo == dataSchedulePerSchedNo.schedNo select new { netOut = a.amount == 0 ? a.amount * getPercentage.netNetPrice : (a.amount / (decimal)(1 + dataInput.pctTax)) * getPercentage.netNetPrice, vatOut = a.amount == 0 ? a.amount * getPercentage.netNetPrice : ((a.amount / (decimal)(1 + dataInput.pctTax)) * (decimal)dataInput.pctTax) * getPercentage.netNetPrice, }).FirstOrDefault(); if (getDataAmtForUpdate != null) { var updateBookingSchedule = dataSchedulePerSchedNo.MapTo <TR_BookingDetailSchedule>(); updateBookingSchedule.netOut = getDataAmtForUpdate.netOut; updateBookingSchedule.vatOut = getDataAmtForUpdate.vatOut; _trBookingDetailScheduleRepo.Update(updateBookingSchedule); } } } #endregion } _contextAccounting.SaveChanges(); Logger.Info("CreateUniversalBulkPayment() - Finished."); }