//post to BIL_TXN_BillingTransaction public static BillingTransactionModel PostBillingTransaction(BillingDbContext dbContext, string connString, BillingTransactionModel billingTransaction, int userId, DateTime currentDate) { List <BillingTransactionItemModel> newTxnItems = new List <BillingTransactionItemModel>(); if (billingTransaction.BillingTransactionItems != null && billingTransaction.BillingTransactionItems.Count > 0) { foreach (var txnItem in billingTransaction.BillingTransactionItems) { newTxnItems.Add(BillingTransactionItemModel.GetClone(txnItem)); } billingTransaction.BillingTransactionItems = null; } //if paymentmode is credit, paiddate and paidamount should be null //handle this in client side as well. billingTransaction.CreatedBy = userId; if (billingTransaction.BillStatus == "unpaid") { billingTransaction.PaidDate = null; billingTransaction.PaidAmount = null; billingTransaction.PaymentReceivedBy = null; billingTransaction.PaidCounterId = null; } else if (billingTransaction.BillStatus == "paid") { billingTransaction.PaidDate = currentDate; billingTransaction.PaidCounterId = billingTransaction.CounterId; billingTransaction.PaymentReceivedBy = billingTransaction.CreatedBy; } BillingFiscalYear fiscYear = BillingBL.GetFiscalYear(connString); //ashim: 26Aug2018: Moved from client side to server side. billingTransaction.CreatedOn = currentDate; billingTransaction.CreatedBy = userId; billingTransaction.FiscalYearId = fiscYear.FiscalYearId; billingTransaction.InvoiceNo = BillingBL.GetInvoiceNumber(connString); //billingTransaction.InvoiceCode = BillingBL.InvoiceCode; billingTransaction.InvoiceCode = billingTransaction.IsInsuranceBilling == true ? "INS" : BillingBL.InvoiceCode; dbContext.BillingTransactions.Add(billingTransaction); dbContext.SaveChanges(); PostUpdateBillingTransactionItems(dbContext, connString, newTxnItems, userId, currentDate, billingTransaction.BillStatus, billingTransaction.CounterId, billingTransaction.BillingTransactionId); dbContext.SaveChanges(); //step:3-- if there's deposit deduction, then add to deposit table. if (billingTransaction.PaymentMode != "credit" && billingTransaction.DepositReturnAmount != null && billingTransaction.DepositReturnAmount > 0) { BillingDeposit dep = new BillingDeposit() { DepositType = "depositdeduct", Remarks = "Deposit used in InvoiceNo. " + billingTransaction.InvoiceCode + billingTransaction.InvoiceNo, //Remarks = "depositdeduct" + " for transactionid:" + billingTransaction.BillingTransactionId, IsActive = true, Amount = billingTransaction.DepositReturnAmount, BillingTransactionId = billingTransaction.BillingTransactionId, DepositBalance = billingTransaction.DepositBalance, FiscalYearId = billingTransaction.FiscalYearId, CounterId = billingTransaction.CounterId, CreatedBy = billingTransaction.CreatedBy, CreatedOn = currentDate, PatientId = billingTransaction.PatientId, PatientVisitId = billingTransaction.PatientVisitId, PaymentMode = billingTransaction.PaymentMode, PaymentDetails = billingTransaction.PaymentDetails, ReceiptNo = BillingBL.GetDepositReceiptNo(connString) }; billingTransaction.ReceiptNo = dep.ReceiptNo + 1; dbContext.BillingDeposits.Add(dep); dbContext.SaveChanges(); } billingTransaction.FiscalYear = fiscYear.FiscalYearFormatted; return(billingTransaction); }
//post to BIL_TXN_BillingTransactionItems public static List <BillingTransactionItemModel> PostUpdateBillingTransactionItems(BillingDbContext dbContext, string connString, List <BillingTransactionItemModel> billingTransactionItems, int userId, DateTime currentDate, string billStatus, int?counterId, int?billingTransactionId = null) { BillingFiscalYear fiscYear = BillingBL.GetFiscalYear(connString); var srvDepts = dbContext.ServiceDepartment.ToList(); //var empList = masterDbContext.Employees.ToList(); if (billingTransactionItems != null && billingTransactionItems.Count > 0) { var ProvisionalReceiptNo = BillingBL.GetProvisionalReceiptNo(connString); for (int i = 0; i < billingTransactionItems.Count; i++) { var txnItem = billingTransactionItems[i]; if (txnItem.BillingTransactionItemId == 0) { txnItem.CreatedOn = currentDate; txnItem.CreatedBy = userId; txnItem.RequisitionDate = currentDate; txnItem.CounterId = counterId; txnItem.BillingTransactionId = billingTransactionId; if (txnItem.BillStatus == "provisional") { txnItem.ProvisionalReceiptNo = ProvisionalReceiptNo; txnItem.ProvisionalFiscalYearId = fiscYear.FiscalYearId; txnItem.ProvFiscalYear = fiscYear.FiscalYearFormatted; //not mapped } //assign providername and servicedepartmentname to each of the incoming transaction items. //Needs Revision: 12-12-17: sud: I think we don't need to get providername since that property already comes from client side: //txnItem.ProviderName = (from a in empList where a.EmployeeId == txnItem.ProviderId select a.FullName).FirstOrDefault(); txnItem.ServiceDepartmentName = (from b in srvDepts where b.ServiceDepartmentId == txnItem.ServiceDepartmentId select b.ServiceDepartmentName).FirstOrDefault(); txnItem = GetBillStatusMapped(txnItem, billStatus, currentDate, userId, counterId); UpdateRequisitionItemsBillStatus(dbContext, txnItem.ServiceDepartmentName, billStatus, userId, txnItem.RequisitionId, currentDate); dbContext.BillingTransactionItems.Add(txnItem); } else { txnItem = UpdateTxnItemBillStatus(dbContext, txnItem, billStatus, userId, currentDate, counterId, billingTransactionId); } //update the Requisitions billingstatus as 'paid' for above items. //List<Int32?> requisitionIds = (from a in billTranItems select a.BillItemRequisitionId).ToList(); BillItemRequisition billItemRequisition = (from bill in dbContext.BillItemRequisitions where bill.RequisitionId == txnItem.RequisitionId && bill.ServiceDepartmentId == txnItem.ServiceDepartmentId select bill).FirstOrDefault(); if (billItemRequisition != null) { billItemRequisition.BillStatus = "paid"; dbContext.Entry(billItemRequisition).State = EntityState.Modified; } } dbContext.SaveChanges(); } else { throw new Exception("BillingTranscation Items is null"); } return(billingTransactionItems); }