public MonthlyProjectData UpdateMonthlyProjectData(int month, int year, int id, MonthlyProjectData monthlyProjectData) { _context.Entry(monthlyProjectData).State = EntityState.Modified; foreach (var sow in monthlyProjectData.SOWs) { _context.Entry(sow).State = EntityState.Modified; foreach (var workItem in sow.WorkItems) { _context.Entry(workItem).State = EntityState.Modified; foreach (var resource in workItem.Resources) { _context.Entry(resource).State = EntityState.Modified; } if (workItem.FixedCost != null) { _context.Entry(workItem.FixedCost).State = EntityState.Modified; } } } _context.SaveChanges(); return(monthlyProjectData); }
//updates billStatus in respective tables. public static void UpdateRequisitionItemsBillStatus(BillingDbContext billingDbContext, string serviceDepartmentName, string billStatus, //provisional,paid,unpaid,returned int userId, long?requisitionId, DateTime?modifiedDate) { string integrationName = billingDbContext.ServiceDepartment .Where(a => a.ServiceDepartmentName == serviceDepartmentName) .Select(a => a.IntegrationName).FirstOrDefault(); if (integrationName != null) { //update return status in lab if (integrationName.ToLower() == "lab") { var labItem = billingDbContext.LabRequisitions.Where(req => req.RequisitionId == requisitionId).FirstOrDefault(); if (labItem != null) { labItem.BillingStatus = billStatus; labItem.ModifiedOn = modifiedDate; labItem.ModifiedBy = userId; billingDbContext.Entry(labItem).Property(a => a.BillingStatus).IsModified = true; billingDbContext.Entry(labItem).Property(a => a.ModifiedOn).IsModified = true; billingDbContext.Entry(labItem).Property(a => a.ModifiedBy).IsModified = true; } } //update return status for Radiology else if (integrationName.ToLower() == "radiology") { var radioItem = billingDbContext.RadiologyImagingRequisitions.Where(req => req.ImagingRequisitionId == requisitionId).FirstOrDefault(); if (radioItem != null) { radioItem.BillingStatus = billStatus; radioItem.ModifiedOn = modifiedDate; radioItem.ModifiedBy = userId; billingDbContext.Entry(radioItem).Property(a => a.BillingStatus).IsModified = true; billingDbContext.Entry(radioItem).Property(a => a.ModifiedOn).IsModified = true; billingDbContext.Entry(radioItem).Property(a => a.ModifiedBy).IsModified = true; } } //update return status for Visit else if (integrationName.ToLower() == "opd" || integrationName.ToLower() == "er") { var visitItem = billingDbContext.Visit.Where(vis => vis.PatientVisitId == requisitionId).FirstOrDefault(); if (visitItem != null) { visitItem.BillingStatus = billStatus; visitItem.ModifiedOn = modifiedDate; visitItem.ModifiedBy = userId; billingDbContext.Entry(visitItem).Property(a => a.BillingStatus).IsModified = true; billingDbContext.Entry(visitItem).Property(a => a.ModifiedOn).IsModified = true; billingDbContext.Entry(visitItem).Property(a => a.ModifiedBy).IsModified = true; } } billingDbContext.SaveChanges(); } }
public string Put() { RbacUser currentUser = HttpContext.Session.Get <RbacUser>("currentuser"); DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>(); responseData.Status = "OK"; try { BillingDbContext billingDbContext = new BillingDbContext(connString); string reqType = this.ReadQueryStringData("reqType"); int depositId = ToInt(this.ReadQueryStringData("depositId")); if (reqType == "updateDepositPrintCount") { BillingDeposit deposit = billingDbContext.BillingDeposits .Where(a => a.DepositId == depositId) .FirstOrDefault <BillingDeposit>(); if (deposit != null) { deposit.PrintCount = deposit.PrintCount == null || deposit.PrintCount == 0 ? 1 : deposit.PrintCount + 1; deposit.PrintedOn = System.DateTime.Now; //Yubraj: 13th August'19 deposit.PrintedBy = currentUser.EmployeeId; billingDbContext.Entry(deposit).Property(a => a.PrintCount).IsModified = true; } billingDbContext.SaveChanges(); responseData.Status = "OK"; } } catch (Exception ex) { responseData.Status = "Failed"; responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString(); } return(DanpheJSONConvert.SerializeObject(responseData, true)); }
public string Put(string reqType, int settlementId) { RbacUser currentUser = HttpContext.Session.Get <RbacUser>("currentuser"); DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>(); responseData.Status = "OK";//by default status would be OK, hence assigning at the top try { if (reqType == "updateSettlementPrintCount") { BillingDbContext bilDbContext = new BillingDbContext(connString); int settlmntId = settlementId; var currSettlment = bilDbContext.BillSettlements.Where(s => s.SettlementId == settlmntId).FirstOrDefault(); if (currSettlment != null) { int?printCount = currSettlment.PrintCount.HasValue ? currSettlment.PrintCount : 0; printCount += 1; bilDbContext.BillSettlements.Attach(currSettlment); currSettlment.PrintCount = printCount; currSettlment.PrintedOn = System.DateTime.Now; //Yubraj: 13th August'19 currSettlment.PrintedBy = currentUser.EmployeeId; bilDbContext.Entry(currSettlment).Property(b => b.PrintCount).IsModified = true; bilDbContext.SaveChanges(); responseData.Results = new { SettlementId = settlementId, PrintCount = printCount }; } } } catch (Exception ex) { responseData.Status = "Failed"; responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString(); } return(DanpheJSONConvert.SerializeObject(responseData, true)); }
public static void UpdateInsuranceCurrentBalance(string connString, int patientId, int insuranceProviderId, int currentUserId, double amount, bool isDeduct = false) { BillingDbContext dbContext = new BillingDbContext(connString); try { InsuranceModel insurance = dbContext.Insurances.Where(ins => ins.PatientId == patientId && ins.InsuranceProviderId == insuranceProviderId).FirstOrDefault(); if (insurance != null) { insurance.CurrentBalance = isDeduct ? insurance.CurrentBalance - amount : amount; insurance.ModifiedOn = DateTime.Now; insurance.ModifiedBy = currentUserId; dbContext.Entry(insurance).State = EntityState.Modified; dbContext.SaveChanges(); } else { throw new Exception("Unable to update Insurance Balance. Detail: Insurance object is null."); } } catch (Exception ex) { throw new Exception("Unable to update Insurance Balance. Detail:" + ex.ToString()); } }
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; } } }
public string Put(string reqType, int settlementId) { DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>(); responseData.Status = "OK";//by default status would be OK, hence assigning at the top try { int patientId = ToInt(this.ReadQueryStringData("patientId")); int insuranceProviderId = ToInt(this.ReadQueryStringData("insuranceProviderId")); int updatedInsBalance = ToInt(this.ReadQueryStringData("updatedInsBalance")); int patientInsurancePkgId = ToInt(this.ReadQueryStringData("patientInsurancePkgId")); int couterId = ToInt(this.ReadQueryStringData("counterId")); BillingDbContext billingDbContext = new BillingDbContext(connString); RbacUser currentUser = HttpContext.Session.Get <RbacUser>("currentuser"); if (reqType == "update-insurance-balance") { BillingBL.UpdateInsuranceCurrentBalance(connString, patientId, insuranceProviderId, currentUser.EmployeeId, updatedInsBalance); responseData.Status = "OK"; } else if (reqType == "close-insurance-package") { PatientInsurancePackageTransactionModel insPkg = billingDbContext.PatientInsurancePackageTransactions .Where(ins => ins.PatientInsurancePackageId == patientInsurancePkgId).FirstOrDefault(); if (insPkg != null) { insPkg.EndDate = DateTime.Now; insPkg.IsCompleted = true; insPkg.ModifiedOn = DateTime.Now; insPkg.ModifiedBy = currentUser.EmployeeId; billingDbContext.Entry(insPkg).State = EntityState.Modified; billingDbContext.SaveChanges(); responseData.Status = "OK"; } } else if (reqType == "update-insurance-claim") { string str = this.ReadPostData(); List <Int32> billingTransactionIdList = JsonConvert.DeserializeObject <List <Int32> >(str); List <BillingTransactionModel> claimInsurance = new List <BillingTransactionModel>(); DateTime settlementDate = DateTime.Now; foreach (var invoice in billingTransactionIdList) { BillingTransactionModel billingTransaction = billingDbContext.BillingTransactions .Where(a => a.BillingTransactionId == invoice) .FirstOrDefault <BillingTransactionModel>(); if (billingTransaction != null) { billingDbContext.BillingTransactions.Attach(billingTransaction); billingTransaction.BillStatus = "paid"; billingTransaction.PaidAmount = billingTransaction.TotalAmount; billingTransaction.PaidDate = settlementDate; billingTransaction.PaymentReceivedBy = currentUser.EmployeeId; billingTransaction.PaidCounterId = couterId; billingTransaction.IsInsuranceClaimed = true; billingTransaction.InsuranceClaimedDate = DateTime.Now; billingDbContext.Entry(billingTransaction).Property(b => b.IsInsuranceClaimed).IsModified = true; billingDbContext.Entry(billingTransaction).Property(b => b.InsuranceClaimedDate).IsModified = true; billingDbContext.Entry(billingTransaction).Property(b => b.BillStatus).IsModified = true; billingDbContext.Entry(billingTransaction).Property(b => b.PaidAmount).IsModified = true; billingDbContext.Entry(billingTransaction).Property(b => b.PaidDate).IsModified = true; billingDbContext.Entry(billingTransaction).Property(b => b.PaymentReceivedBy).IsModified = true; billingDbContext.Entry(billingTransaction).Property(b => b.PaidCounterId).IsModified = true; List <BillingTransactionItemModel> txnItems = billingDbContext.BillingTransactionItems .Where(b => b.BillingTransactionId == billingTransaction.BillingTransactionId).ToList(); if (txnItems != null && txnItems.Count > 0) { foreach (var txnItm in txnItems) { billingDbContext.BillingTransactionItems.Attach(txnItm); txnItm.BillStatus = "paid"; txnItm.PaidDate = settlementDate; txnItm.PaidCounterId = couterId; txnItm.PaymentReceivedBy = currentUser.EmployeeId; billingDbContext.Entry(txnItm).Property(b => b.BillStatus).IsModified = true; billingDbContext.Entry(txnItm).Property(b => b.PaidDate).IsModified = true; billingDbContext.Entry(txnItm).Property(b => b.PaymentReceivedBy).IsModified = true; billingDbContext.Entry(txnItm).Property(b => b.PaidCounterId).IsModified = true; } billingDbContext.SaveChanges(); } //claimInsurance.Add(billingTransaction); } } billingDbContext.SaveChanges(); responseData.Status = "OK"; responseData.Results = claimInsurance; } else { responseData.Status = "failed"; responseData.ErrorMessage = "Invalid request type."; } //responseData.Results = null; } catch (Exception ex) { responseData.Status = "Failed"; responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString(); } return(DanpheJSONConvert.SerializeObject(responseData, true)); }
public Project UpdateProject(int id, Project project) { _context.Entry(project).State = EntityState.Modified; _context.SaveChanges(); return(project); }
[HttpPost]// POST api/values public string Post(string reqType) { DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>(); string ipDataString = this.ReadPostData(); responseData.Status = "OK";//by default status would be OK, hence assigning at the top try { BillingDbContext billingDbContext = new BillingDbContext(connString); MasterDbContext masterDbContext = new MasterDbContext(connString); RbacUser currentUser = HttpContext.Session.Get <RbacUser>("currentuser"); if (reqType == "returnInvoice")//submit { //var currentDate = DateTime.Now; BillInvoiceReturnModel billInvoiceRet = DanpheJSONConvert.DeserializeObject <BillInvoiceReturnModel>(ipDataString); if (billInvoiceRet != null) { //Transaction Begins using (var dbContextTransaction = billingDbContext.Database.BeginTransaction()) { try { BillingFiscalYear currFiscYear = BillingBL.GetFiscalYear(billingDbContext); //credit note number will continue from current fiscal year, regardless whether the bill was generated in earlier fiscal year.. (sud:30Aug'18) int?maxCreditNoteNum = billingDbContext.BillReturns.Where(a => a.FiscalYearId == currFiscYear.FiscalYearId).Max(a => a.CreditNoteNumber); billInvoiceRet.CreatedOn = DateTime.Now; if (maxCreditNoteNum == null || !maxCreditNoteNum.HasValue) { maxCreditNoteNum = 0; } billInvoiceRet.FiscalYear = currFiscYear.FiscalYearFormatted; billInvoiceRet.FiscalYearId = currFiscYear.FiscalYearId; billInvoiceRet.CreditNoteNumber = (int?)(maxCreditNoteNum + 1); billInvoiceRet.CreatedBy = currentUser.EmployeeId; billingDbContext.BillReturns.Add(billInvoiceRet); billingDbContext.SaveChanges(); //update transactiontable after bill is returned.. int invoiceNo = billInvoiceRet.RefInvoiceNum; //BillingTransactionModel billTxn = billingDbContext.BillingTransactions // .Where(b => b.InvoiceNo == billInvoiceRet.RefInvoiceNum) // .FirstOrDefault(); //changed: sud: 18July, since Invoice No will repeat with fiscal year, so need to find by billingtransactionid. BillingTransactionModel billTxn = billingDbContext.BillingTransactions .Where(b => b.BillingTransactionId == billInvoiceRet.BillingTransactionId) .FirstOrDefault(); billingDbContext.BillingTransactions.Attach(billTxn); billTxn.ReturnStatus = true; billingDbContext.Entry(billTxn).Property(a => a.ReturnStatus).IsModified = true; billingDbContext.SaveChanges(); if (billTxn.IsInsuranceBilling == true) { double deductableInsuranceAmount = (billTxn.TotalAmount ?? default(double)) * -1; BillingBL.UpdateInsuranceCurrentBalance(connString, billTxn.PatientId, billTxn.InsuranceProviderId ?? default(int), currentUser.EmployeeId, deductableInsuranceAmount, true); } var invoiceItems = billingDbContext.BillingTransactionItems.Where(b => b.BillingTransactionId == billInvoiceRet.BillingTransactionId).ToList(); //replaced calling centralized function in BillingBL for (int i = 0; i < invoiceItems.Count; i++) { invoiceItems[i] = BillingTransactionBL.UpdateTxnItemBillStatus(billingDbContext, invoiceItems[i], "returned", currentUser.EmployeeId); } //Yubraj: 18th Dec '18 :: Updating IsActive in deposit table while invoice return List <BillingDeposit> deposit = (from dpt in billingDbContext.BillingDeposits where dpt.BillingTransactionId == billInvoiceRet.BillingTransactionId && (dpt.DepositType == "depositdeduct" || dpt.DepositType == "ReturnDeposit") select dpt).ToList(); if (deposit != null) { deposit.ForEach(a => { a.IsActive = true; //keeping false was affecting the patient deposit info a.ModifiedRemarks = "Updated after invoice return of BillTxnId: " + billInvoiceRet.BillingTransactionId.ToString(); a.ModifiedOn = DateTime.Now; a.ModifiedBy = currentUser.EmployeeId; }); } billInvoiceRet.ReturnedItems = invoiceItems.ToList(); billingDbContext.SaveChanges(); dbContextTransaction.Commit(); //end of transaction responseData.Results = billInvoiceRet; } catch (Exception ex) { dbContextTransaction.Rollback(); throw ex; } } } else { responseData.Status = "Failed"; responseData.ErrorMessage = "billTransactionitems is invalid"; } } } catch (Exception ex) { responseData.Status = "Failed"; responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString(); } return(DanpheJSONConvert.SerializeObject(responseData, true)); }
[HttpPost]// POST api/values public string Post() { DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>(); int CreatedBy = ToInt(this.ReadQueryStringData("CreatedBy")); responseData.Status = "OK";//by default status would be OK, hence assigning at the top string ipDataString = this.ReadPostData(); string reqType = this.ReadQueryStringData("reqType"); try { BillingDbContext billingDbContext = new BillingDbContext(connString); if (reqType == "postSettlementInvoice")//submit { BillSettlementModel settlement = DanpheJSONConvert.DeserializeObject <BillSettlementModel>(ipDataString); //List<BillingTransactionItemModel> billTxnItm = DanpheJSONConvert.DeserializeObject<List<BillingTransactionItemModel>>(ipDataString); RbacUser currentUser = HttpContext.Session.Get <RbacUser>("currentuser"); using (var dbTransaction = billingDbContext.Database.BeginTransaction()) { try { var txns = settlement.BillingTransactions; //step:0, As EF automatically Inserts Child collection (billingtransactionmodel) while inserting settlement // we have to first create a new list and set settlement.BillingTransactions as null. List <BillingTransactionModel> newTxnList = new List <BillingTransactionModel>(); foreach (BillingTransactionModel txn in txns) { BillingTransactionModel newTxn = BillingTransactionModel.GetCloneWithItems(txn); newTxnList.Add(newTxn); } settlement.BillingTransactions = null; //Step1: assign server side values to the input model and Save the settlementModel settlement.SettlementReceiptNo = GetSettlementReceiptNo(billingDbContext); settlement.CreatedOn = System.DateTime.Now; settlement.SettlementDate = System.DateTime.Now; settlement.FiscalYearId = BillingBL.GetFiscalYear(billingDbContext).FiscalYearId; settlement.CreatedBy = currentUser.EmployeeId; billingDbContext.BillSettlements.Add(settlement); billingDbContext.SaveChanges(); if (newTxnList != null && newTxnList.Count > 0) { //step2: Update necessary fields of BillingTransaction acc to above Settlement Object foreach (var txn in newTxnList) { billingDbContext.BillingTransactions.Attach(txn); txn.SettlementId = settlement.SettlementId; txn.BillStatus = "paid"; txn.PaidAmount = txn.TotalAmount; txn.PaidDate = settlement.SettlementDate; txn.PaymentReceivedBy = currentUser.EmployeeId; //added: sud: 29may'18 txn.PaidCounterId = settlement.CounterId; //added: sud: 29may'18 billingDbContext.Entry(txn).Property(b => b.BillStatus).IsModified = true; billingDbContext.Entry(txn).Property(b => b.SettlementId).IsModified = true; billingDbContext.Entry(txn).Property(b => b.PaidAmount).IsModified = true; billingDbContext.Entry(txn).Property(b => b.PaidDate).IsModified = true; billingDbContext.Entry(txn).Property(b => b.PaymentReceivedBy).IsModified = true; //added: sud: 29may'18 billingDbContext.Entry(txn).Property(b => b.PaidCounterId).IsModified = true; //added: sud: 29may'18 //setp3: Update BillStatus and PaidDate of each transaction items attached with above transactions List <BillingTransactionItemModel> txnItems = billingDbContext.BillingTransactionItems .Where(b => b.BillingTransactionId == txn.BillingTransactionId).ToList(); if (txnItems != null && txnItems.Count > 0) { for (int i = 0; i < txnItems.Count; i++) { txnItems[i] = BillingTransactionBL.UpdateTxnItemBillStatus(billingDbContext, txnItems[i], "paid", currentUser.EmployeeId, settlement.SettlementDate, settlement.CounterId); } billingDbContext.SaveChanges(); } } billingDbContext.SaveChanges(); } //step: 4 Add new row to deposit table if Deposit is deducted if (settlement.DepositDeducted != null && settlement.DepositDeducted > 0) { VisitModel patientVisit = billingDbContext.Visit.Where(visit => visit.PatientId == settlement.PatientId) .OrderByDescending(a => a.PatientVisitId) .FirstOrDefault(); BillingDeposit depositModel = new BillingDeposit() { Amount = settlement.DepositDeducted, DepositType = "depositdeduct", IsActive = true, FiscalYearId = BillingBL.GetFiscalYear(billingDbContext).FiscalYearId, Remarks = "Deposit used in Settlement Receipt No. SR" + settlement.SettlementReceiptNo + " on " + settlement.SettlementDate, CreatedBy = currentUser.EmployeeId, CreatedOn = DateTime.Now, CounterId = settlement.CounterId, PatientVisitId = patientVisit != null ? (int?)patientVisit.PatientVisitId : null, SettlementId = settlement.SettlementId, PatientId = settlement.PatientId, DepositBalance = 0, ReceiptNo = BillingBL.GetDepositReceiptNo(connString), PaymentMode = "cash",//yubraj 4th July '19 }; billingDbContext.BillingDeposits.Add(depositModel); billingDbContext.SaveChanges(); ////update iscurrent and isactive in deposit table for settlement //List<BillingDeposit> depositDetail= (from dep in billingDbContext.BillingDeposits // where dep.PatientId==settlement.PatientId && // dep.IsCurrent==true && // dep.IsActive==true // select dep).ToList(); //if (depositDetail != null) //{ // depositDetail.ForEach(d => // { // //d.IsActive = false; // d.IsCurrent = false; // billingDbContext.SaveChanges(); // }); //} } dbTransaction.Commit(); responseData.Status = "OK"; responseData.Results = settlement; } catch (Exception ex) { dbTransaction.Rollback(); responseData.Status = "Failed"; responseData.ErrorMessage = ex.ToString(); } } } //responseData.Results = null; } catch (Exception ex) { responseData.Status = "Failed"; responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString(); } return(DanpheJSONConvert.SerializeObject(responseData, true)); }
//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; } } } }
//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); }
//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); }
public override SAPResponse ExecuteCommand() { var resp = new NumberResult(); var cachedVersion = (long)InMemoryCache.Instance.GetCached(Username + Suffix.CACHED_VERSION); var toUpdateList = InMemoryCache.Instance.GetCached(Username + Suffix.BILLINGS_TO_UPDATE) as List <BillingToUpdate>; #region "CREATING NEW OR UPDATES HEADER" if (toUpdateList != null && toUpdateList.Count > 0) { System.Diagnostics.Debug.WriteLine("=========> CREATE OR UPDATES THE OLD OR NEW VERSION ON DATA LOADED FROM SAP OR DB...."); var rawHeader = InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_PROFORMA_HEADER) as InvoiceProformaHeaderDto; var header = InMemoryCache.Instance.GetCached(Username + Suffix.REQUEST_HEADER) as RunInvoiceHeaderDTO; if (rawHeader != null && header != null) { #region "CREATE OR UPDATES DATA LOADED FROM DB" var isFromDB = InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_FROM_DB) is bool && (bool)InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_FROM_DB); if (isFromDB) { #region "UPDATING 0 VERSION" var vrFromDb = InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_VERSION_FROM_DB) is int?(int)InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_VERSION_FROM_DB) : 0; if (vrFromDb == 0) { System.Diagnostics.Debug.WriteLine("IS FROM DB = " + true + " - VER LOADED = " + vrFromDb); using (var dao = new BillingDbContext()) { System.Diagnostics.Debug.WriteLine("LOADED VER FROM DB = " + vrFromDb); var loadedVersion = vrFromDb; // Query the version which loaded var sql1 = from o in dao.InvoiceProformaHeaders.Where(o => o.BillingNo == header.BillingNo && o.ReasonForRejection == header.ReasonForRejection && o.BillingBlock == header.BillingDocsCriteria && o.Version == loadedVersion) select o; var loadedHeaderVersion = sql1.FirstOrDefault(); // Query the latest version from DB var sql2 = from o in dao.InvoiceProformaHeaders.Where(o => o.BillingNo == header.BillingNo && o.ReasonForRejection == header.ReasonForRejection && o.BillingBlock == header.BillingDocsCriteria && o.Version > 0).OrderBy(o => o.Version) select o; var latestHeaderVersion = 0; var count = sql2.Count(); if (count > 0) { latestHeaderVersion = sql2.ToArray()[count - 1].Version; } var newHeaderVersion = new InvoiceProformaHeader { BillingNo = header.BillingNo, SoldToParty = header.SoldToParty, StartDate = header.BillingDateFrom, EndDate = header.BillingDateTo, BillingBlock = header.BillingDocsCriteria, ReasonForRejection = header.ReasonForRejection, ProformaFlag = header.ProformaFlag, Created = DateTime.Now, Version = latestHeaderVersion + 1, Draft = true }; ClassCopier.Instance.Copy(rawHeader, newHeaderVersion); ClassCopier.Instance.Copy(loadedHeaderVersion, newHeaderVersion); // Add newly updated billings to newly version foreach (var b2u in toUpdateList) { var u = b2u; var VBELN = u.No.Split('#')[0]; var POSNR = u.No.Split('#')[1]; var getCachedBillSql = from o in dao.InvoiceProformaBillings.Where(o => o.VBAK_VBELN == VBELN && o.VBAK_POSNR == POSNR && o.CachedVersion == 0).OrderByDescending(o => o.No) select o; var sbil = getCachedBillSql.FirstOrDefault(); if (sbil == null) { continue; } // Check if content changed if (sbil.VBAK_ABGRU_T != b2u.Content) { var upbi = new InvoiceProformaBilling(); SAPHandlerHelper.Instance.CopyBillingValues(sbil, upbi); upbi.VBAK_ABGRU_T = b2u.Content; upbi.Remarks = b2u.Remarks; if (b2u.Content == Properties.Settings.Default.Unblock) { upbi.VBAK_ABGRU_T = String.Empty; } upbi.CachedVersion = cachedVersion; newHeaderVersion.Billings.Add(upbi); } } // Clear updated billings from cached InMemoryCache.Instance.ClearCached(Username + Suffix.BILLINGS_TO_UPDATE); // Persists new header version and all related billings to DB dao.InvoiceProformaHeaders.Add(newHeaderVersion); dao.SaveChanges(); resp.Value = int.Parse(newHeaderVersion.No.ToString(CultureInfo.InvariantCulture)); } } #endregion #region "UPDATING ABOVE 0 VERSION" else { using (var dao = new BillingDbContext()) { System.Diagnostics.Debug.WriteLine("LOADED VER FROM DB = " + vrFromDb); var loadedVersion = vrFromDb; // Query the version which loaded var sql1 = from o in dao.InvoiceProformaHeaders.Where(o => o.BillingNo == header.BillingNo && o.ReasonForRejection == header.ReasonForRejection && o.BillingBlock == header.BillingDocsCriteria && o.Version == loadedVersion) .Include(o => o.Billings) select o; var loadedHeaderVersion = sql1.FirstOrDefault(); // Query the latest version from DB var sql2 = from o in dao.InvoiceProformaHeaders.Where(o => o.BillingNo == header.BillingNo && o.ReasonForRejection == header.ReasonForRejection && o.BillingBlock == header.BillingDocsCriteria && o.Version > 0) select o; var count = sql2.Count(); var latestHeaderVersion = sql2.ToArray()[count - 1]; System.Diagnostics.Debug.WriteLine("=========> CREATE NEW HEADER VERSION FOR UPDATED BILLINGS"); // Check if the cached version of old header version's billing similar to current // cached version System.Diagnostics.Debug.WriteLine("=========> CREATE NEW HEADER VERSION FOR UPDATED BILLINGS"); // If queried billing cache version != current cachedVersion, create new header var newHeaderVersion = new InvoiceProformaHeader { BillingNo = header.BillingNo, SoldToParty = header.SoldToParty, StartDate = header.BillingDateFrom, EndDate = header.BillingDateTo, BillingBlock = header.BillingDocsCriteria, ReasonForRejection = header.ReasonForRejection, ProformaFlag = header.ProformaFlag, Created = DateTime.Now, Version = latestHeaderVersion.Version + 1, Draft = true }; ClassCopier.Instance.Copy(rawHeader, newHeaderVersion); ClassCopier.Instance.Copy(loadedHeaderVersion, newHeaderVersion); // Add newly updated billings to newly version foreach (var b2u in toUpdateList) { var u = b2u; var VBELN = u.No.Split('#')[0]; var POSNR = u.No.Split('#')[1]; var getCachedBillSql = from o in dao.InvoiceProformaBillings.Where(o => o.VBAK_VBELN == VBELN && o.VBAK_POSNR == POSNR && o.CachedVersion == 0).OrderByDescending(o => o.No) select o; var sbil = getCachedBillSql.FirstOrDefault(); if (sbil == null) { continue; } // Check if content changed if (sbil.VBAK_ABGRU_T != b2u.Content) { var upbi = new InvoiceProformaBilling(); SAPHandlerHelper.Instance.CopyBillingValues(sbil, upbi); upbi.VBAK_ABGRU_T = b2u.Content; upbi.Remarks = b2u.Remarks; if (b2u.Content == Properties.Settings.Default.Unblock) { upbi.VBAK_ABGRU_T = String.Empty; } upbi.CachedVersion = cachedVersion; newHeaderVersion.Billings.Add(upbi); } } // Add updated billings from previous version to current version foreach (var bi in loadedHeaderVersion.Billings) { InvoiceProformaBilling bi1 = bi; var chk = from o in newHeaderVersion.Billings.Where( o => o.VBAK_VBELN == bi1.VBAK_VBELN && o.VBAK_POSNR == bi1.VBAK_POSNR) select o; if (chk.Count() == 0) { var nbi = new InvoiceProformaBilling(); SAPHandlerHelper.Instance.CopyBillingValues(bi, nbi); nbi.CachedVersion = cachedVersion; newHeaderVersion.Billings.Add(nbi); } } // Clear updated billings from cached InMemoryCache.Instance.ClearCached(Username + Suffix.BILLINGS_TO_UPDATE); // Persists new header version and all related billings to DB dao.InvoiceProformaHeaders.Add(newHeaderVersion); dao.SaveChanges(); resp.Value = int.Parse(newHeaderVersion.No.ToString(CultureInfo.InvariantCulture)); } } #endregion System.Diagnostics.Debug.WriteLine("=========> FROM DB"); } #endregion #region "CREATE OR UPDATES DATA LOADED FROM SAP" else { using (var dao = new BillingDbContext()) { System.Diagnostics.Debug.WriteLine("=========> FROM SAP"); // Query any version above 0 var sql1 = from o in dao.InvoiceProformaHeaders.Where(o => o.BillingNo == header.BillingNo && o.ReasonForRejection == header.ReasonForRejection && o.BillingBlock == header.BillingDocsCriteria && o.Version > 0) select o; var count = sql1.Count(); if (count > 0) { // If there is an older version which is above 0 get latest header System.Diagnostics.Debug.WriteLine("=========> OLD HEADER EXISTS"); var oldHeaderVersion = sql1.ToArray()[count - 1]; #region "WORKING ON HEADER THAT HAS UPDATED BILLINGS" var sample = 0; // Check if the cached version of old header version's billing similar to current // cached version #region "CREATE NEW HEADER VERSION" if (sample == 0) { System.Diagnostics.Debug.WriteLine("=========> CREATE NEW HEADER VERSION FOR UPDATED BILLINGS"); // If queried billing cache version != current cachedVersion, create new header var newHeaderVersion = new InvoiceProformaHeader { BillingNo = header.BillingNo, SoldToParty = header.SoldToParty, StartDate = header.BillingDateFrom, EndDate = header.BillingDateTo, BillingBlock = header.BillingDocsCriteria, ReasonForRejection = header.ReasonForRejection, ProformaFlag = header.ProformaFlag, Created = DateTime.Now, Version = oldHeaderVersion.Version + 1, Draft = true }; ClassCopier.Instance.Copy(rawHeader, newHeaderVersion); ClassCopier.Instance.Copy(oldHeaderVersion, newHeaderVersion); // Add newly updated billings to newly version foreach (var b2u in toUpdateList) { var u = b2u; var VBELN = u.No.Split('#')[0]; var POSNR = u.No.Split('#')[1]; var getCachedBillSql = from o in dao.InvoiceProformaBillings.Where(o => o.VBAK_VBELN == VBELN && o.VBAK_POSNR == POSNR && o.CachedVersion == 0) select o; var sbil = getCachedBillSql.FirstOrDefault(); if (sbil == null) { continue; } // Check if content changed if (sbil.VBAK_ABGRU_T != b2u.Content) { var upbi = new InvoiceProformaBilling(); SAPHandlerHelper.Instance.CopyBillingValues(sbil, upbi); upbi.VBAK_ABGRU_T = b2u.Content; upbi.Remarks = b2u.Remarks; if (b2u.Content == Properties.Settings.Default.Unblock) { upbi.VBAK_ABGRU_T = String.Empty; } upbi.CachedVersion = cachedVersion; newHeaderVersion.Billings.Add(upbi); } } // Add updated billings from previous version to current version foreach (var bi in oldHeaderVersion.Billings) { InvoiceProformaBilling bi1 = bi; var chk = from o in newHeaderVersion.Billings.Where( o => o.VBAK_VBELN == bi1.VBAK_VBELN && o.VBAK_POSNR == bi1.VBAK_POSNR) select o; if (chk.ToList().Count == 0) { var nbi = new InvoiceProformaBilling(); SAPHandlerHelper.Instance.CopyBillingValues(bi, nbi); nbi.CachedVersion = cachedVersion; newHeaderVersion.Billings.Add(nbi); } } // Clear update billings list from cache InMemoryCache.Instance.ClearCached(Username + Suffix.BILLINGS_TO_UPDATE); // Persists new header version and all related billings to DB dao.InvoiceProformaHeaders.Add(newHeaderVersion); dao.SaveChanges(); resp.Value = int.Parse(newHeaderVersion.No.ToString(CultureInfo.InvariantCulture)); } #endregion #region "UPDATE HEADER DATA" else { // If old header sample billing cached version equals to current cached version // add newly updated billings to old header version as add items System.Diagnostics.Debug.WriteLine("=========> UPDATE OLD HEADER WITH UPDATED BILLINGS"); foreach (var b2u in toUpdateList) { var u = b2u; var VBELN = u.No.Split('#')[0]; var POSNR = u.No.Split('#')[1]; var getCachedBillSql = from o in dao.InvoiceProformaBillings.Where(o => o.VBAK_VBELN == VBELN && o.VBAK_POSNR == POSNR && o.CachedVersion == 0) select o; var sbil = getCachedBillSql.FirstOrDefault(); if (sbil == null) { continue; } // Check if content changed if (sbil.VBAK_ABGRU_T != b2u.Content) { var upbi = new InvoiceProformaBilling(); SAPHandlerHelper.Instance.CopyBillingValues(sbil, upbi); dao.Entry(upbi).State = EntityState.Added; upbi.CachedVersion = cachedVersion; upbi.VBAK_ABGRU_T = b2u.Content; upbi.Remarks = b2u.Remarks; if (b2u.Content == Properties.Settings.Default.Unblock) { upbi.VBAK_ABGRU_T = String.Empty; } oldHeaderVersion.Billings.Add(upbi); } } // Clear update billings list from cache InMemoryCache.Instance.ClearCached(Username + Suffix.BILLINGS_TO_UPDATE); // Persists old header version and all newly added updated billings to DB dao.Entry(oldHeaderVersion).State = EntityState.Modified; dao.SaveChanges(); resp.Value = int.Parse(oldHeaderVersion.No.ToString(CultureInfo.InvariantCulture)); } #endregion } #endregion #region "WORKING ON DATA THAT HAS NO VERSION ABOVE 0 IN DB" else { System.Diagnostics.Debug.WriteLine("=========> NO OLD HEADER ABOVE 0 EXISTS"); System.Diagnostics.Debug.WriteLine("=========> CREATE 1st HEADER VERSION WITH UPDATED BILLINGS"); // If there is no version above 0 var newHeaderVersion = new InvoiceProformaHeader { BillingNo = header.BillingNo, SoldToParty = header.SoldToParty, StartDate = header.BillingDateFrom, EndDate = header.BillingDateTo, BillingBlock = header.BillingDocsCriteria, ReasonForRejection = header.ReasonForRejection, ProformaFlag = header.ProformaFlag, Created = DateTime.Now, Version = 1, Draft = true }; ClassCopier.Instance.Copy(rawHeader, newHeaderVersion); dao.InvoiceProformaHeaders.Add(newHeaderVersion); dao.SaveChanges(); // Add newly updated billings to newly version foreach (var b2u in toUpdateList) { var u = b2u; var getCachedBillSql = from o in dao.CachedBillings.Where(o => o.NO == u.No) select o; var sbil = getCachedBillSql.FirstOrDefault(); if (sbil == null) { continue; } // Check if content changed if (sbil.VBAK_ABGRU_T != b2u.Content) { var upbi = SAPHandlerHelper.Instance.FromBillingDTO2Model(sbil); upbi.CachedVersion = cachedVersion; upbi.VBAK_ABGRU_T = b2u.Content; upbi.Remarks = b2u.Remarks; if (b2u.Content == Properties.Settings.Default.Unblock) { upbi.VBAK_ABGRU_T = String.Empty; } newHeaderVersion.Billings.Add(upbi); } } dao.SaveChanges(); var isSaved = InMemoryCache.Instance.GetCached(Username + Suffix.PERFORMED_INITIAL_SAVE) is bool && (bool)InMemoryCache.Instance.GetCached(Username + Suffix.PERFORMED_INITIAL_SAVE); if (isSaved == false) { System.Diagnostics.Debug.WriteLine("<CREATE_ZERO_VERSION CALL = 'FROM SAVE BILLINGS UPDATES' />"); CreateOrOverwriteZeroVersion(false, dao); InMemoryCache.Instance.ClearCached(Username + Suffix.PERFORMED_INITIAL_SAVE); } // Clear update billings list from cache InMemoryCache.Instance.ClearCached(Username + Suffix.BILLINGS_TO_UPDATE); // Persists new header version and all related billings to DB resp.Value = int.Parse(newHeaderVersion.No.ToString(CultureInfo.InvariantCulture)); } #endregion } } #endregion } InMemoryCache.Instance.ClearCached(Username + Suffix.BILLINGS_TO_UPDATE); } #endregion #region "CREATING OR UPDATING HEADER AS FINAL HEADER" else { System.Diagnostics.Debug.WriteLine("=========> CREATE FINAL VERSION...."); using (var dao = new BillingDbContext()) { var rawHeader = InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_PROFORMA_HEADER) as InvoiceProformaHeaderDto; var header = InMemoryCache.Instance.GetCached(Username + Suffix.REQUEST_HEADER) as RunInvoiceHeaderDTO; if (rawHeader != null && header != null) { var vrFromDb = InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_VERSION_FROM_DB) is int?(int)InMemoryCache.Instance.GetCached(Username + Suffix.QUERIED_VERSION_FROM_DB) : 0; // Query any version above 0 var sql1 = from o in dao.InvoiceProformaHeaders.Where(o => o.BillingNo == header.BillingNo && o.ReasonForRejection == header.ReasonForRejection && o.BillingBlock == header.BillingDocsCriteria && o.Version == vrFromDb && o.Version > 0) .Include(o => o.Billings) select o; var count = sql1.Count(); #region "UPDATES THE LATEST HEADER TO FINAL" if (count > 0) { // If there is an older version which is above 0, get latest header System.Diagnostics.Debug.WriteLine("=========> OLD HEADER EXISTS"); System.Diagnostics.Debug.WriteLine("=========> UPDATES OLD HEADER AS FINAL"); var oldHeaderVersion = sql1.ToArray()[count - 1]; if (oldHeaderVersion != null) { oldHeaderVersion.Draft = false; dao.Entry(oldHeaderVersion).State = EntityState.Modified; dao.SaveChanges(); resp.Value = int.Parse(oldHeaderVersion.No.ToString(CultureInfo.InvariantCulture)); } } #endregion #region "CREATE A NEW FIRST VERSION AS FINAL" else { System.Diagnostics.Debug.WriteLine("=========> NO OLD HEADER EXISTS"); System.Diagnostics.Debug.WriteLine("=========> CREATE 1st HEADER VERSION AS FINAL"); // If there is no version above 0 var sql2 = from o in dao.InvoiceProformaHeaders.Where(o => o.BillingNo == header.BillingNo && o.ReasonForRejection == header.ReasonForRejection && o.BillingBlock == header.BillingDocsCriteria ).OrderByDescending(o => o.Version) select o; var latestHeaderVersion = sql2.ToArray()[0].Version; var finalHeaderVersion = new InvoiceProformaHeader { BillingNo = header.BillingNo, SoldToParty = header.SoldToParty, StartDate = header.BillingDateFrom, EndDate = header.BillingDateTo, BillingBlock = header.BillingDocsCriteria, ReasonForRejection = header.ReasonForRejection, ProformaFlag = header.ProformaFlag, Created = DateTime.Now, Version = latestHeaderVersion + 1, Draft = false }; ClassCopier.Instance.Copy(rawHeader, finalHeaderVersion); InMemoryCache.Instance.ClearCached(Username + Suffix.BILLINGS_TO_UPDATE); // Persists new header version and all related billings to DB dao.InvoiceProformaHeaders.Add(finalHeaderVersion); dao.SaveChanges(); InMemoryCache.Instance.Cache(Username + Suffix.QUERIED_VERSION_FROM_DB, latestHeaderVersion + 1); resp.Value = int.Parse(finalHeaderVersion.No.ToString(CultureInfo.InvariantCulture)); } #endregion } } } #endregion return(resp); }
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)); }