public static Boolean ReAssignProviderTxn(VisitDbContext visitDb, VisitModel visit, BillingDbContext billingDb) { using (var dbContextTxn = visitDb.Database.BeginTransaction()) { try { //updating visit-table visitDb.Visits.Attach(visit); visitDb.Entry(visit).Property(x => x.ProviderId).IsModified = true; visitDb.Entry(visit).Property(x => x.ProviderName).IsModified = true; visitDb.Entry(visit).Property(x => x.ModifiedBy).IsModified = true; visitDb.Entry(visit).Property(x => x.ModifiedOn).IsModified = true; visitDb.Entry(visit).Property(x => x.Remarks).IsModified = true; visitDb.SaveChanges(); //updating billingTxnItem table //getting ServiceDepartmentId of OPD int servDeptId = (from d in billingDb.ServiceDepartment where d.ServiceDepartmentName == "OPD" select d.ServiceDepartmentId).FirstOrDefault(); //for updating get data from table using PatientVisitId as RequisitionId BillingTransactionItemModel billitm = (from b in billingDb.BillingTransactionItems where b.RequisitionId == visit.PatientVisitId && b.ServiceDepartmentId == servDeptId select b).FirstOrDefault(); //assiging updated values billitm.ProviderId = visit.ProviderId; billitm.ProviderName = visit.ProviderName; billingDb.BillingTransactionItems.Attach(billitm); billingDb.Entry(billitm).Property(x => x.ProviderId).IsModified = true; billingDb.Entry(billitm).Property(x => x.ProviderName).IsModified = true; billingDb.SaveChanges(); //Commit Transaction dbContextTxn.Commit(); return(true); } catch (Exception ex) { //Rollback all transaction if exception occured dbContextTxn.Rollback(); throw ex; } } }
//maps billStatus and related fields based on billStatus. public static BillingTransactionItemModel GetBillStatusMapped(BillingTransactionItemModel billItem, string billStatus, DateTime?currentDate, int userId, int?counterId) { if (billStatus == "paid") { billItem.PaidDate = currentDate; billItem.BillStatus = "paid"; billItem.PaymentReceivedBy = userId; billItem.PaidCounterId = counterId; } else if (billStatus == "unpaid") { billItem.PaidDate = null; billItem.BillStatus = "unpaid"; billItem.PaidCounterId = null; billItem.PaymentReceivedBy = null; } else if (billStatus == "cancel") { billItem.CancelledBy = userId; billItem.BillStatus = "cancel"; billItem.CancelledOn = currentDate; } else if (billStatus == "returned") { billItem.ReturnStatus = true; billItem.ReturnQuantity = billItem.Quantity; //all items will be returned } else if (billStatus == "adtCancel") // if admission cancelled { billItem.CancelledBy = userId; billItem.BillStatus = "adtCancel"; billItem.CancelledOn = currentDate; } return(billItem); }
//updates price, quantity, bed charges etc. public static void UpdateBillingTransactionItems(BillingDbContext billingDbContext, BillingTransactionItemModel txnItmFromClient) { if (txnItmFromClient != null && txnItmFromClient.BillingTransactionItemId != 0) { using (var dbContextTransaction = billingDbContext.Database.BeginTransaction()) { try { BillingTransactionItemModel txnItmFromDb = billingDbContext.BillingTransactionItems .Where(itm => itm.BillingTransactionItemId == txnItmFromClient.BillingTransactionItemId).FirstOrDefault(); txnItmFromDb.Price = txnItmFromClient.Price; txnItmFromDb.Quantity = txnItmFromClient.Quantity; txnItmFromDb.SubTotal = txnItmFromClient.SubTotal; txnItmFromDb.DiscountAmount = txnItmFromClient.DiscountAmount; txnItmFromDb.DiscountPercent = txnItmFromClient.DiscountPercent; txnItmFromDb.TotalAmount = txnItmFromClient.TotalAmount; txnItmFromDb.ProviderId = txnItmFromClient.ProviderId; txnItmFromDb.ProviderName = txnItmFromClient.ProviderName; txnItmFromDb.DiscountPercentAgg = txnItmFromClient.DiscountPercentAgg; txnItmFromDb.TaxableAmount = txnItmFromClient.TaxableAmount; txnItmFromDb.NonTaxableAmount = txnItmFromClient.NonTaxableAmount; txnItmFromDb.ModifiedBy = txnItmFromClient.CreatedBy; txnItmFromDb.ModifiedOn = DateTime.Now; billingDbContext.Entry(txnItmFromDb).Property(a => a.Price).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.Quantity).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.SubTotal).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.DiscountAmount).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.DiscountPercent).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.DiscountPercentAgg).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.TotalAmount).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.ProviderId).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.ProviderName).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.TaxableAmount).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.NonTaxableAmount).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.ModifiedBy).IsModified = true; billingDbContext.Entry(txnItmFromDb).Property(a => a.ModifiedOn).IsModified = true; //Salakha: commented code, After update qty, date should not be update ////check if bed item was edited. //BillItemPrice billItem = (from item in billingDbContext.BillItemPrice // join srvDept in billingDbContext.ServiceDepartment on item.ServiceDepartmentId equals srvDept.ServiceDepartmentId // where item.ServiceDepartmentId == txnItmFromDb.ServiceDepartmentId // && item.ItemId == txnItmFromClient.ItemId // && srvDept.IntegrationName.ToLower() == "bed charges" // select item).FirstOrDefault(); //if (billItem != null) //{ // PatientBedInfo selBedInfo = (from selBed in billingDbContext.PatientBedInfos // where selBed.PatientVisitId == txnItmFromClient.PatientVisitId // && selBed.BedFeatureId == txnItmFromClient.ItemId // select selBed).OrderByDescending(a=> a.PatientBedInfoId).FirstOrDefault(); // if (selBedInfo != null) // { // PatientBedInfo nextBedInfo = (from nextBed in billingDbContext.PatientBedInfos // where nextBed.PatientVisitId == txnItmFromClient.PatientVisitId // && nextBed.StartedOn == selBedInfo.EndedOn // //sud/Yub:11Feb'19--if startedon/endedon is same then nextbed and current bed are same. adding bedinfoId != logic. // && selBedInfo.PatientBedInfoId != nextBed.PatientBedInfoId // select nextBed).FirstOrDefault(); // DateTime endDate = Convert.ToDateTime(selBedInfo.StartedOn).AddDays(Convert.ToInt32(txnItmFromClient.Quantity - 1)); // selBedInfo.EndedOn = endDate; // billingDbContext.Entry(selBedInfo).Property(a => a.EndedOn).IsModified = true; // if (nextBedInfo != null) // { // nextBedInfo.StartedOn = selBedInfo.EndedOn; // billingDbContext.Entry(nextBedInfo).Property(a => a.StartedOn).IsModified = true; // } // } //} billingDbContext.SaveChanges(); dbContextTransaction.Commit(); } catch (Exception ex) { //rollback all changes if any error occurs dbContextTransaction.Rollback(); throw ex; } } } }
//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); }
//updates billStatus and related fields in BIL_TXN_BillingTransactionItems table. public static BillingTransactionItemModel UpdateTxnItemBillStatus(BillingDbContext billingDbContext, BillingTransactionItemModel billItem, string billStatus, //provisional,paid,unpaid,returned int userId, DateTime?modifiedDate = null, int?counterId = null, int?billingTransactionId = null) { modifiedDate = modifiedDate != null ? modifiedDate : DateTime.Now; billItem = GetBillStatusMapped(billItem, billStatus, modifiedDate, userId, counterId); billingDbContext.BillingTransactionItems.Attach(billItem); //update returnstatus and returnquantity if (billStatus == "paid") { billingDbContext.Entry(billItem).Property(b => b.PaidDate).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.BillStatus).IsModified = true; billingDbContext.Entry(billItem).Property(b => b.PaymentReceivedBy).IsModified = true; billingDbContext.Entry(billItem).Property(b => b.PaidCounterId).IsModified = true; } else if (billStatus == "unpaid") { billingDbContext.Entry(billItem).Property(b => b.PaidDate).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.BillStatus).IsModified = true; billingDbContext.Entry(billItem).Property(b => b.PaidCounterId).IsModified = true; billingDbContext.Entry(billItem).Property(b => b.PaymentReceivedBy).IsModified = true; } else if (billStatus == "cancel") { billingDbContext.Entry(billItem).Property(a => a.CancelledBy).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.BillStatus).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.CancelledOn).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.CancelRemarks).IsModified = true; } else if (billStatus == "adtCancel") { billingDbContext.Entry(billItem).Property(a => a.CancelledBy).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.BillStatus).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.CancelledOn).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.CancelRemarks).IsModified = true; } else if (billStatus == "returned") { billingDbContext.Entry(billItem).Property(a => a.ReturnStatus).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.ReturnQuantity).IsModified = true; } if (billItem.BillingTransactionId == null) { billItem.BillingTransactionId = billingTransactionId; billingDbContext.Entry(billItem).Property(b => b.BillingTransactionId).IsModified = true; } //these fields could also be changed during update. billingDbContext.Entry(billItem).Property(b => b.BillStatus).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.Price).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.Quantity).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.SubTotal).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.DiscountAmount).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.DiscountPercent).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.DiscountPercentAgg).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.TotalAmount).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.ProviderId).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.ProviderName).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.TaxableAmount).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.NonTaxableAmount).IsModified = true; UpdateRequisitionItemsBillStatus(billingDbContext, billItem.ServiceDepartmentName, billStatus, userId, billItem.RequisitionId, modifiedDate); //update bill status in BillItemRequistion (Order Table) BillItemRequisition billItemRequisition = (from bill in billingDbContext.BillItemRequisitions where bill.RequisitionId == billItem.RequisitionId && bill.ServiceDepartmentId == billItem.ServiceDepartmentId select bill).FirstOrDefault(); if (billItemRequisition != null) { billItemRequisition.BillStatus = billStatus; billingDbContext.Entry(billItemRequisition).Property(a => a.BillStatus).IsModified = true; } return(billItem); }
public string Put() { DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>(); try { BillingDbContext billingDbContext = new BillingDbContext(connString); string str = this.ReadPostData(); string reqType = this.ReadQueryStringData("reqType"); if (reqType == "update-adtItems-duration") { List <BedDurationTxnDetailsVM> bedDurationDetails = DanpheJSONConvert.DeserializeObject <List <BedDurationTxnDetailsVM> >(str); if (bedDurationDetails != null && bedDurationDetails.Count > 0) { double totalDuration = bedDurationDetails[0].TotalDays; int patientVisitId = bedDurationDetails[0].PatientVisitId; BillingTransactionItemModel billItem = new BillingTransactionItemModel(); //foreach (var bedItem in bedDurationDetails) //{ // billItem = (from bill in billingDbContext.BillingTransactionItems // where bill.PatientVisitId == bedItem.PatientVisitId // && bill.ServiceDepartmentName.ToLower() == "bed charges" // && bill.ItemId == bedItem.BedFeatureId // select bill).FirstOrDefault(); // if (billItem != null) // { // billItem.Quantity = bedItem.Days; // billItem.SubTotal = bedItem.SubTotal; // billItem.TaxableAmount = bedItem.TaxableAmount; // billItem.NonTaxableAmount = bedItem.NonTaxableAmount; // //sud,Yub : 11Feb'19 -- Re-Calculate DiscountAmount based on Existing Discount Percent. // billItem.DiscountAmount = (bedItem.SubTotal * billItem.DiscountPercent) / 100; // billItem.TotalAmount = billItem.SubTotal - billItem.DiscountAmount; // billingDbContext.Entry(billItem).Property(a => a.Quantity).IsModified = true; // billingDbContext.Entry(billItem).Property(a => a.SubTotal).IsModified = true; // billingDbContext.Entry(billItem).Property(a => a.TaxableAmount).IsModified = true; // billingDbContext.Entry(billItem).Property(a => a.NonTaxableAmount).IsModified = true; // billingDbContext.Entry(billItem).Property(a => a.DiscountAmount).IsModified = true; // billingDbContext.Entry(billItem).Property(a => a.TotalAmount).IsModified = true; // } //} //update duration for Medical and Resident officer/Nursing Charges billItem = (from bill in billingDbContext.BillingTransactionItems join itmCfg in billingDbContext.BillItemPrice on new { bill.ServiceDepartmentId, bill.ItemId } equals new { itmCfg.ServiceDepartmentId, itmCfg.ItemId } where bill.PatientVisitId == patientVisitId && itmCfg.IntegrationName == "Medical and Resident officer/Nursing Charges" select bill).FirstOrDefault(); if (billItem != null) { billItem.Quantity = totalDuration > 0 ? totalDuration : 1; billItem.SubTotal = billItem.Price * billItem.Quantity; //sud,Yub : 11Feb'19 -- Re-Calculate DiscountAmount based on Existing Discount Percent. billItem.DiscountAmount = (billItem.SubTotal * billItem.DiscountPercent) / 100; billItem.TotalAmount = billItem.SubTotal - billItem.DiscountAmount; // billItem.TotalAmount = billItem.NonTaxableAmount = billItem.SubTotal;//removed: sud:11Feb'19--this is incorrect. billingDbContext.Entry(billItem).Property(a => a.Quantity).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.SubTotal).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.DiscountAmount).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.TotalAmount).IsModified = true; billingDbContext.Entry(billItem).Property(a => a.NonTaxableAmount).IsModified = true; } responseData.Status = "OK"; billingDbContext.SaveChanges(); responseData.Results = "quantity updated"; } else { responseData.Status = "Failed"; responseData.ErrorMessage = "Unable to upadate bed duration details."; } } else if (reqType == "update-billtxnItem") { List <BillingTransactionItemModel> txnItems = DanpheJSONConvert.DeserializeObject <List <BillingTransactionItemModel> >(str); if (txnItems != null) { txnItems.ForEach(item => { BillingTransactionBL.UpdateBillingTransactionItems(billingDbContext, item); }); } responseData.Status = "OK"; } } catch (Exception ex) { responseData.Status = "Failed"; responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString(); } return(DanpheJSONConvert.SerializeObject(responseData, true)); }