コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
 //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);
 }
コード例 #3
0
        //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;
                    }
                }
            }
        }
コード例 #4
0
        //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);
        }
コード例 #5
0
        //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);
        }
コード例 #6
0
        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));
        }