[HttpPost]// POST api/values public string Post() { DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>(); //type 'object' since we have variable return types responseData.Status = "OK"; //by default status would be OK, hence assigning at the top string ipDataString = this.ReadPostData(); string reqType = this.ReadQueryStringData("reqType"); try { RbacUser currentUser = HttpContext.Session.Get <RbacUser>("currentuser"); BillingDbContext billingDbContext = new BillingDbContext(connString); if (reqType == "Deposit") { BillingDeposit deposit = DanpheJSONConvert.DeserializeObject <BillingDeposit>(ipDataString); deposit.CreatedOn = System.DateTime.Now; deposit.CreatedBy = currentUser.EmployeeId; BillingFiscalYear fiscYear = BillingBL.GetFiscalYear(connString); deposit.FiscalYearId = fiscYear.FiscalYearId; if (deposit.DepositType != "depositdeduct") { deposit.ReceiptNo = BillingBL.GetDepositReceiptNo(connString); } deposit.FiscalYear = fiscYear.FiscalYearFormatted; EmployeeModel currentEmp = billingDbContext.Employee.Where(emp => emp.EmployeeId == currentUser.EmployeeId).FirstOrDefault(); deposit.BillingUser = currentEmp.FirstName + " " + currentEmp.LastName; deposit.IsActive = true; //yubraj: 18th Dec '18 billingDbContext.BillingDeposits.Add(deposit); billingDbContext.SaveChanges(); responseData.Status = "OK"; responseData.Results = deposit;//check if we need to send back the whole input object back to client.--sudarshan } } catch (Exception ex) { responseData.Status = "Failed"; responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString(); } return(DanpheJSONConvert.SerializeObject(responseData, true)); }
//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); }
[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)); }
//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); }