コード例 #1
0
        public string Get(string reqType, DateTime FromDate, DateTime ToDate, string LogType, string Table_Name, string UserName)
        {
            DanpheHTTPResponse <List <object> > responseData    = new DanpheHTTPResponse <List <object> >();
            DanpheHTTPResponse <object>         responseDataObj = new DanpheHTTPResponse <object>();

            try
            {
                RbacDbContext rbacDbContext = new RbacDbContext(connString);

                if (reqType == "getDBBakupLog")
                {
                    SystemAdminDbContext systemAdminDbContext = new SystemAdminDbContext(this.connStringAdmin);
                    var result = (from dbBackupLog in systemAdminDbContext.DatabaseLog
                                  orderby dbBackupLog.CreatedOn descending
                                  select new
                    {
                        CreatedOn = dbBackupLog.CreatedOn,
                        FileName = dbBackupLog.FileName,
                        DatabaseName = dbBackupLog.DatabaseName,
                        DatabaseVersion = dbBackupLog.DatabaseVersion,
                        Action = dbBackupLog.Action,
                        Status = dbBackupLog.Status,
                        MessageDetail = dbBackupLog.MessageDetail,
                        FolderPath = dbBackupLog.FolderPath,
                        IsActive = dbBackupLog.IsActive,
                        IsDBRestorable = dbBackupLog.IsDBRestorable
                    }
                                  ).ToList <object>();
                    responseData.Results = result;
                    responseData.Status  = "OK";
                }
                #region DanpheAuditTrail Details
                else if (reqType == "get-audit-trail-details")
                {
                    ReportingDbContext             dbContext = new ReportingDbContext(this.connStringAdmin);
                    DanpheHTTPResponse <DataTable> resData   = new DanpheHTTPResponse <DataTable>();
                    DataTable res = dbContext.AuditTrails(FromDate, ToDate, Table_Name, UserName);

                    responseDataObj.Results = res;
                    responseDataObj.Status  = "OK";
                    return(DanpheJSONConvert.SerializeObject(responseDataObj, true));
                }
                #endregion
                #region DanpheAuditList Details
                else if (reqType == "get-audit-list")
                {
                    ReportingDbContext dbContext = new ReportingDbContext(this.connStringAdmin);
                    var userList = (from rbac in rbacDbContext.Users
                                    select new
                    {
                        UserName = rbac.UserName
                    }).ToList <object>();

                    var tableNameList = dbContext.AuditTrailList().Select(s => new { Table_Name = s.Table_Name }).ToList();

                    responseDataObj.Results = new
                    {
                        UserList      = userList,
                        TableNameList = tableNameList
                    };

                    responseDataObj.Status = "OK";
                    return(DanpheJSONConvert.SerializeObject(responseDataObj, true));
                }
                #endregion
                else if (reqType == "get-login-info")
                {
                    SystemAdminDbContext systemAdminDbContext = new SystemAdminDbContext(this.connStringAdmin);

                    var loginList = systemAdminDbContext.LoginInformation
                                    .Where(log => DbFunctions.TruncateTime(log.CreatedOn) >= FromDate && DbFunctions.TruncateTime(log.CreatedOn) <= ToDate).ToList();

                    responseDataObj.Status  = "OK";
                    responseDataObj.Results = loginList;
                    return(DanpheJSONConvert.SerializeObject(responseDataObj, true));
                }
                else if (reqType == "getIRDInvoiceDetails")
                {
                    //We are calling from ReportingDbContext because of problem from admin db context
                    ReportingDbContext         dbContext = new ReportingDbContext(this.connString);
                    List <InvoiceDetailsModel> res       = dbContext.InvoiceDetails(FromDate, ToDate);
                    DanpheHTTPResponse <List <InvoiceDetailsModel> > resData = new DanpheHTTPResponse <List <InvoiceDetailsModel> >();
                    resData.Results = res;
                    resData.Status  = "OK";
                    return(DanpheJSONConvert.SerializeObject(resData, true));
                }
                else if (reqType == "getPhrmIRDInvoiceDetails")
                {
                    ReportingDbContext        dbContext = new ReportingDbContext(this.connString);
                    List <PhrmInvoiceDetails> res       = dbContext.PhrmInvoiceDetails(FromDate, ToDate);
                    DanpheHTTPResponse <List <PhrmInvoiceDetails> > resData = new DanpheHTTPResponse <List <PhrmInvoiceDetails> >();
                    resData.Results = res;
                    resData.Status  = "OK";
                    return(DanpheJSONConvert.SerializeObject(resData, true));
                }
                else if (reqType == "getDbActivityLogDetails")
                {
                    //use admin-db's connection string to get db-activity log
                    ReportingDbContext dbContext = new ReportingDbContext(this.connStringAdmin);
                    DanpheHTTPResponse <List <SqlAuditModel> > resData = new DanpheHTTPResponse <List <SqlAuditModel> >();
                    List <SqlAuditModel> res = dbContext.SqlAuditDetails(FromDate, ToDate, LogType);
                    resData.Results = res;
                    resData.Status  = "OK";
                    return(DanpheJSONConvert.SerializeObject(resData, true));
                }
            }
            catch (Exception ex)
            {
                responseData.Status       = "Failed";
                responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString();
            }
            return(DanpheJSONConvert.SerializeObject(responseData, true));
        }
コード例 #2
0
        public string Post()
        {
            //return null;
            DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>();

            try
            {
                string str     = this.ReadPostData();
                string reqType = this.ReadQueryStringData("reqType");
                //MasterDbContext masterDbContext = new MasterDbContext(connString);

                if (reqType == "set-landing-page")
                {
                    RbacDbContext rbacdbContext = new RbacDbContext(connString);
                    RbacUser      user          = DanpheJSONConvert.DeserializeObject <RbacUser>(str);
                    if (user != null)
                    {
                        var currUser = rbacdbContext.Users.Where(a => a.UserId == user.UserId).Select(a => a).FirstOrDefault();
                        currUser.LandingPageRouteId = user.LandingPageRouteId;
                        rbacdbContext.Users.Attach(currUser);
                        rbacdbContext.Entry(currUser).Property(a => a.LandingPageRouteId).IsModified = true;
                        rbacdbContext.SaveChanges();
                        responseData.Status  = "OK";
                        responseData.Results = currUser.LandingPageRouteId;
                    }
                }
                //    if (reqType != null && reqType == "AddToPreference")
                //    {
                //        string preferenceType = this.ReadQueryStringData("preferenceType");
                //        string preferenceName = null;
                //        string preferenceIdType = null;
                //        if (preferenceType == "lab")
                //        {
                //            preferenceName = "Labtestpreferences";
                //            preferenceIdType = "LabTestId";
                //        }
                //        else if (preferenceType == "imaging")
                //        {
                //            preferenceName = "Imagingpreferences";
                //            preferenceIdType = "ImagingItemId";
                //        }
                //        else if(preferenceType == "medication")
                //        {
                //            preferenceName = "Medicationpreferences";
                //            preferenceIdType = "MedicineId";
                //        }
                //        string clientValue = this.ReadPostData();

                //        RbacUser currentUser = HttpContext.Session.Get<RbacUser>("currentuser");

                //        EmployeePreferences employeePreference = (from pref in masterDbContext.EmployeePreferences
                //                                                  where pref.EmployeeId == currentUser.EmployeeId && pref.PreferenceName == preferenceName
                //                                                  select pref).FirstOrDefault();

                //        if (employeePreference == null)
                //        {
                //            //this is used to convert string into xml
                //            XmlDocument xdoc = JsonConvert.DeserializeXmlNode("{\"Row\":{" + preferenceIdType + ":" + clientValue + "}}", "root");
                //            //this is add new perference
                //            EmployeePreferences employeePref = new EmployeePreferences();

                //            employeePref.PreferenceName = preferenceName;
                //            employeePref.PreferenceValue = xdoc.InnerXml;
                //            employeePref.EmployeeId = currentUser.EmployeeId;
                //            employeePref.CreatedBy = currentUser.EmployeeId; ;
                //            employeePref.CreatedOn = DateTime.Now;
                //            employeePref.IsActive = true;
                //            masterDbContext.EmployeePreferences.Add(employeePref);
                //            masterDbContext.SaveChanges();
                //            responseData.Status = "OK";
                //            responseData.Results = clientValue;
                //        }
                //        else
                //        {

                //            //creating object of XmlDocument
                //            XmlDocument prefXmlDoc = new XmlDocument();
                //            //loading the database PreferenceValue in object of XmlDocument(prefXmlDoc)
                //            prefXmlDoc.LoadXml(employeePreference.PreferenceValue);
                //            //creating xmlElement with tag Row
                //            XmlElement Row = prefXmlDoc.CreateElement("Row");
                //            //creating xmlElement with tag LabTestId/ImagingTypeId
                //            XmlElement typeId = prefXmlDoc.CreateElement(preferenceIdType);
                //            //provididng value to the element of LabTestId/ImagingTypeId
                //            typeId.InnerText = clientValue;
                //            //appending LabTestId/ImagingTypeId element ot Row element as child
                //            Row.AppendChild(typeId);
                //            //Appending the Row elemt to the root element of xml
                //            prefXmlDoc.DocumentElement.AppendChild(Row);
                //            //replacing the old value of employeePreference.PreferenceValue with new one
                //            employeePreference.PreferenceValue = prefXmlDoc.InnerXml;
                //            employeePreference.ModifiedBy = currentUser.EmployeeId;
                //            employeePreference.ModifiedOn = DateTime.Now;


                //            masterDbContext.Entry(employeePreference).State = EntityState.Modified;
                //            masterDbContext.SaveChanges();
                //            responseData.Status = "OK";
                //            responseData.Results = clientValue;
                //        }

                //    }
            }
            catch (Exception ex)
            {
                responseData.Status       = "Failed";
                responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString();
            }
            return(DanpheJSONConvert.SerializeObject(responseData, true));
        }
コード例 #3
0
        public string Get(string reqType, int?patientId, int?settlementId)
        {
            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);

                if (reqType != null && reqType == "allPendingSettlements")
                {
                    DataTable settlInfo = DanpheEMR.DalLayer.DALFunctions.GetDataTableFromStoredProc("SP_TXNS_BILL_SettlementSummary", billingDbContext);
                    responseData.Results = settlInfo;
                    ////include only: unpaid and NOT Returned BILLS.
                    //var allBillSettlement = (from bill in billingDbContext.BillingTransactions.Include("Patient")
                    //                         where bill.BillStatus == "unpaid" && bill.ReturnStatus != true
                    //                         group bill by new { bill.PatientId, bill.Patient.PatientCode, bill.Patient.FirstName, bill.Patient.LastName, bill.Patient.MiddleName, bill.Patient.DateOfBirth, bill.Patient.Gender } into p
                    //                         select new
                    //                         {
                    //                             PatientId = p.Key.PatientId,
                    //                             PatientCode = p.Key.PatientCode,
                    //                             ShortName = p.Key.FirstName + " " + (string.IsNullOrEmpty(p.Key.MiddleName) ? "" : p.Key.MiddleName + " ") + p.Key.LastName,
                    //                             Gender = p.Key.Gender,
                    //                             DateOfBirth = p.Max(a => a.Patient.DateOfBirth.Value),
                    //                             LastCreditBillDate = p.Max(a => a.CreatedOn.Value),
                    //                             TotalCredit = Math.Round(p.Sum(a => a.TotalAmount.Value), 2)
                    //                         }).OrderByDescending(b => b.LastCreditBillDate).ToList();

                    //responseData.Results = allBillSettlement;
                }
                else if (reqType != null && reqType == "unpaidInvoiceByPatientId" && patientId != null && patientId != 0)
                {
                    PatientModel currPatient = billingDbContext.Patient.Where(pat => pat.PatientId == patientId).FirstOrDefault();
                    if (currPatient != null)
                    {
                        string subDivName = (from pat in billingDbContext.Patient
                                             join countrySubdiv in billingDbContext.CountrySubdivisions
                                             on pat.CountrySubDivisionId equals countrySubdiv.CountrySubDivisionId
                                             where pat.PatientId == currPatient.PatientId
                                             select countrySubdiv.CountrySubDivisionName
                                             ).FirstOrDefault();

                        currPatient.CountrySubDivisionName = subDivName;
                    }

                    //for this request type, patientid comes as inputid.
                    var patCreditInvoice = (from bill in billingDbContext.BillingTransactions.Include("BillingTransactionItems")
                                            where bill.BillStatus == "unpaid" && bill.ReturnStatus != true && bill.PatientId == patientId

                                            //&& bill.IsInsuranceBilling == false
                                            //sud:5June'19
                                            //if IsInsuranceBilling is null then true by default, else IsInsuranceBilling should be false.
                                            //&& bill.IsInsuranceBilling == null ?  true : bill.IsInsuranceBilling==false
                                            && (bill.IsInsuranceBilling.HasValue ? (bill.IsInsuranceBilling.Value == false) : true)

                                            select bill).ToList <BillingTransactionModel>().OrderBy(b => b.BillingTransactionId);

                    var patCreditDetails = new { Patient = currPatient, CreditItems = patCreditInvoice };


                    responseData.Results = patCreditDetails;
                }
                else if (reqType != null && reqType == "allSettlementDetails")
                {
                    var allSettlments = billingDbContext.BillSettlements.Include("Patient").Include("Patient.CountrySubDivision")
                                        .OrderByDescending(s => s.SettlementReceiptNo).ToList();

                    responseData.Results = allSettlments;
                }
                //added: sud: 21may'18-- for duplicate print of settlementid
                else if (reqType == "settlementInfoBySettlmntId" && settlementId != null)
                {
                    RbacDbContext rbacDbContext = new RbacDbContext(connString);

                    BillSettlementModel currSettlmnt = billingDbContext.BillSettlements.Include("BillingTransactions").Include("Patient").Include("Patient.CountrySubDivision")
                                                       .Where(b => b.SettlementId == settlementId.Value)
                                                       .FirstOrDefault();
                    if (currSettlmnt != null)
                    {
                        string billingUser = rbacDbContext.Users.Where(u => u.EmployeeId == currSettlmnt.CreatedBy).Select(u => u.UserName).FirstOrDefault();
                        currSettlmnt.BillingUser = billingUser;
                        if (currSettlmnt.BillingTransactions != null)
                        {
                            currSettlmnt.BillingTransactions.ForEach(txn =>
                            {
                                txn.Patient = null;
                            });
                        }
                    }
                    responseData.Results = currSettlmnt;
                }
                else
                {
                    responseData.Status       = "Failed";
                    responseData.ErrorMessage = "billTransactionitems is invalid";
                }


                //responseData.Results = null;
            }
            catch (Exception ex)
            {
                responseData.Status       = "Failed";
                responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString();
            }
            return(DanpheJSONConvert.SerializeObject(responseData, true));
        }
コード例 #4
0
        public string Get(string reqType, int patientId, int ipVisitId, int?billingTxnId, string billStatus)
        {
            DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>();

            responseData.Status = "OK";//by default status would be OK, hence assigning at the top
            try
            {
                BillingDbContext dbContext = new BillingDbContext(connString);
                //sud:10Sept'18 -- Pending in below function-- get ward/bed details of patient.
                if (reqType == "list-ip-patients")
                {
                    var ipPatients = (from pat in dbContext.Patient
                                      join adm in dbContext.Admissions
                                      on pat.PatientId equals adm.PatientId
                                      where adm.AdmissionStatus == "admitted"
                                      join vis in dbContext.Visit
                                      on adm.PatientVisitId equals vis.PatientVisitId
                                      join doc in dbContext.Employee.DefaultIfEmpty()
                                      on adm.AdmittingDoctorId equals doc.EmployeeId

                                      select new
                    {
                        PatientId = pat.PatientId,
                        PatientNo = pat.PatientCode,
                        pat.DateOfBirth,
                        pat.Gender,
                        pat.PhoneNumber,
                        VisitId = adm.PatientVisitId,
                        IpNumber = vis.VisitCode,
                        PatientName = pat.FirstName + " " + (string.IsNullOrEmpty(pat.MiddleName) ? "" : pat.MiddleName + " ") + pat.LastName,
                        FirstName = pat.FirstName,
                        LastName = pat.LastName,
                        MiddleName = pat.MiddleName,
                        AdmittedDate = adm.AdmissionDate,
                        DischargeDate = adm.AdmissionStatus == "admitted" ? adm.DischargeDate : (DateTime?)DateTime.Now,
                        AdmittingDoctorId = adm.AdmittingDoctorId,
                        AdmittingDoctorName = doc != null ? doc.FirstName + " " + doc.LastName : null,
                        ProvisionalAmount = (
                            dbContext.BillingTransactionItems.Where(itm => itm.PatientId == pat.PatientId &&
                                                                    itm.BillStatus == "provisional").Sum(itm => itm.TotalAmount)
                            ),
                        DepositAdded = (
                            dbContext.BillingDeposits.Where(dep => dep.PatientId == pat.PatientId &&
                                                            dep.PatientVisitId == vis.PatientVisitId &&
                                                            dep.DepositType.ToLower() == "deposit" &&
                                                            dep.IsActive == true)
                            .Sum(dep => dep.Amount)
                            ),

                        DepositReturned = (
                            dbContext.BillingDeposits.Where(dep =>
                                                            dep.PatientId == pat.PatientId &&
                                                            dep.PatientVisitId == vis.PatientVisitId &&
                                                            (dep.DepositType.ToLower() == "depositdeduct" || dep.DepositType.ToLower() == "returndeposit") &&
                                                            dep.IsActive == true).Sum(dep => dep.Amount)
                            ),

                        BedInformation = (from bedInfos in dbContext.PatientBedInfos
                                          where bedInfos.PatientVisitId == adm.PatientVisitId
                                          select new
                        {
                            Ward = bedInfos.Ward.WardName,
                            BedCode = bedInfos.Bed.BedCode,
                            BedNumber = bedInfos.Bed.BedNumber,
                            StartedOn = bedInfos.StartedOn,
                        }).OrderByDescending(a => a.StartedOn).FirstOrDefault()
                    }).ToList();

                    responseData.Results = ipPatients.OrderByDescending(a => a.AdmittedDate);
                }
                else if (reqType == "pat-pending-items")
                {
                    //Check if we can apply ipVisitId condition here..
                    var pendingItems = dbContext.BillingTransactionItems.Where(itm => itm.PatientId == patientId &&
                                                                               itm.BillStatus == "provisional" && itm.Quantity > 0 &&
                                                                               (itm.IsInsurance == false || itm.IsInsurance == null)).AsEnumerable().ToList(); //Excluding insurance items
                    var bedPatInfo = (from bedInfo in dbContext.PatientBedInfos
                                      where bedInfo.PatientVisitId == ipVisitId
                                      select bedInfo).OrderBy(x => x.PatientBedInfoId).ToList().LastOrDefault();
                    DateTime admDate     = dbContext.Admissions.Where(a => a.PatientVisitId == bedPatInfo.PatientVisitId && a.PatientId == bedPatInfo.PatientId).Select(a => a.AdmissionDate).FirstOrDefault();
                    var      tempTime    = admDate.TimeOfDay;
                    var      EndDateTime = DateTime.Now.Date + tempTime;
                    TimeSpan qty;
                    var      checkBedFeatureId = dbContext.PatientBedInfos.Where(a => a.PatientVisitId == bedPatInfo.PatientVisitId && a.PatientId == bedPatInfo.PatientId && bedPatInfo.BedFeatureId == a.BedFeatureId).Select(a => a.BedFeatureId).ToList();
                    pendingItems.ForEach(itm =>
                    {
                        if (itm.ItemId == bedPatInfo.BedFeatureId && bedPatInfo.EndedOn == null && itm.ModifiedBy == null)
                        {
                            //var StartedOn = Convert.ToDateTime(bedPatInfo.StartedOn).Date;
                            //int totalDays = Convert.ToInt32((DateTime.Now.Date - StartedOn).TotalDays);
                            //itm.Quantity = itm.Quantity + totalDays;
                            // TimeSpan qty = DateTime.Now.Subtract(bedPatInfo.StartedOn.Value);
                            // itm.Quantity =  (int)qty.TotalDays + itm.Quantity;
                            itm.IsLastBed = true;
                            if (DateTime.Now > EndDateTime)
                            {
                                qty          = EndDateTime.Subtract(bedPatInfo.StartedOn.Value);
                                itm.Quantity = (checkBedFeatureId.Count > 1) ? ((int)qty.TotalDays + itm.Quantity + 1) : (itm.Quantity = (int)qty.TotalDays + 1);
                                if (bedPatInfo.StartedOn.Value.Date != EndDateTime.Date)
                                {
                                    itm.Quantity = (DateTime.Now.TimeOfDay > EndDateTime.TimeOfDay) ? (itm.Quantity + 1) : itm.Quantity;
                                }
                            }
                            else
                            {
                                qty          = DateTime.Now.Subtract(bedPatInfo.StartedOn.Value);
                                itm.Quantity = (checkBedFeatureId.Count > 1) ? ((int)qty.TotalDays + itm.Quantity + 1) : ((int)qty.TotalDays) + 1;
                            }
                        }
                    });
                    var srvDepts  = dbContext.ServiceDepartment.ToList();
                    var billItems = dbContext.BillItemPrice.ToList();
                    //update integrationName and integrationServiceDepartmentName
                    //required while updating quantity of ADT items.
                    pendingItems.ForEach(penItem =>
                    {
                        var itemIntegrationDetail = (from itm in billItems
                                                     join srv in srvDepts on itm.ServiceDepartmentId equals srv.ServiceDepartmentId
                                                     where itm.ServiceDepartmentId == penItem.ServiceDepartmentId && itm.ItemId == penItem.ItemId
                                                     select new
                        {
                            ItemIntegrationName = itm.IntegrationName,
                            SrvIntegrationName = srv.IntegrationName
                        }).FirstOrDefault();
                        if (itemIntegrationDetail != null)
                        {
                            penItem.ItemIntegrationName    = itemIntegrationDetail.ItemIntegrationName;
                            penItem.SrvDeptIntegrationName = itemIntegrationDetail.SrvIntegrationName;
                        }
                    });
                    var admInfo = (from pat in dbContext.Patient
                                   where pat.PatientId == patientId
                                   join adm in dbContext.Admissions
                                   on pat.PatientId equals adm.PatientId
                                   where adm.PatientVisitId == ipVisitId
                                   join vis in dbContext.Visit
                                   on adm.PatientVisitId equals vis.PatientVisitId
                                   join doc in dbContext.Employee.DefaultIfEmpty()
                                   on adm.AdmittingDoctorId equals doc.EmployeeId

                                   select new
                    {
                        AdmissionPatientId = adm.PatientAdmissionId,
                        PatientId = pat.PatientId,
                        PatientNo = pat.PatientCode,
                        pat.Gender,
                        pat.DateOfBirth,
                        pat.PhoneNumber,
                        VisitId = adm.PatientVisitId,
                        IpNumber = vis.VisitCode,
                        PatientName = pat.FirstName + " " + (string.IsNullOrEmpty(pat.MiddleName) ? "" : pat.MiddleName + " ") + pat.LastName,
                        FirstName = pat.FirstName,
                        LastName = pat.LastName,
                        MiddleName = pat.MiddleName,
                        AdmittedOn = adm.AdmissionDate,
                        DischargedOn = adm.AdmissionStatus == "admitted" ? (DateTime?)DateTime.Now : adm.DischargeDate,
                        AdmittingDoctorId = adm.AdmittingDoctorId,
                        AdmittingDoctorName = doc != null ? (string.IsNullOrEmpty(doc.Salutation) ? "" : doc.Salutation + ". ") + doc.FirstName + " " + (string.IsNullOrEmpty(doc.MiddleName) ? "" : doc.MiddleName + " ") + doc.LastName : null,
                        ProcedureType = adm.ProcedureType,
                        ProvisionalItems = (
                            dbContext.BillingTransactionItems.Where(itm => itm.PatientId == pat.PatientId &&
                                                                    itm.BillStatus == "provisional" && itm.Quantity > 0 &&
                                                                    (itm.IsInsurance == false || itm.IsInsurance == null))).ToList(), //excluding Insurance Items

                        DepositAdded = (
                            dbContext.BillingDeposits.Where(dep => dep.PatientId == pat.PatientId &&
                                                            dep.PatientVisitId == vis.PatientVisitId &&
                                                            dep.DepositType.ToLower() == "deposit" &&
                                                            dep.IsActive == true)
                            .Sum(dep => dep.Amount)
                            ),

                        DepositReturned = (
                            dbContext.BillingDeposits.Where(dep =>
                                                            dep.PatientId == pat.PatientId &&
                                                            dep.PatientVisitId == vis.PatientVisitId &&
                                                            (dep.DepositType.ToLower() == "depositdeduct" || dep.DepositType.ToLower() == "returndeposit") &&
                                                            dep.IsActive == true
                                                            ).Sum(dep => dep.Amount)
                            ),
                        DepositTxns = (
                            dbContext.BillingDeposits.Where(dep => dep.PatientId == pat.PatientId &&
                                                            //dep.PatientVisitId == vis.PatientVisitId &&
                                                            dep.IsActive == true)
                            ).ToList(),

                        BedsInformation = (
                            from bedInfo in dbContext.PatientBedInfos
                            where bedInfo.PatientVisitId == adm.PatientVisitId
                            join ward in dbContext.Wards
                            on bedInfo.WardId equals ward.WardId
                            join bf in dbContext.BedFeatures
                            on bedInfo.BedFeatureId equals bf.BedFeatureId
                            join bed in dbContext.Beds
                            on bedInfo.BedId equals bed.BedId
                            select new
                        {
                            bedInfo.PatientBedInfoId,
                            BedId = bedInfo.BedId,
                            WardId = ward.WardId,
                            WardName = ward.WardName,
                            BedFeatureName = bf.BedFeatureName,
                            bed.BedNumber,
                            PricePerDay = bedInfo.BedPrice,
                            StartedOn = bedInfo.StartedOn,
                            EndedOn = bedInfo.EndedOn.HasValue ? bedInfo.EndedOn : DateTime.Now
                                      //NoOfHours = ((TimeSpan)((bedInfo.EndedOn.HasValue ? bedInfo.EndedOn : DateTime.Now) - bedInfo.StartedOn)).Hours,
                        }).OrderByDescending(a => a.PatientBedInfoId).FirstOrDefault(),

                        BedDetails = (from bedInfos in dbContext.PatientBedInfos
                                      join bedFeature in dbContext.BedFeatures on bedInfos.BedFeatureId equals bedFeature.BedFeatureId
                                      join bed in dbContext.Beds on bedInfos.BedId equals bed.BedId
                                      join ward in dbContext.Wards on bed.WardId equals ward.WardId
                                      where (bedInfos.PatientVisitId == adm.PatientVisitId)
                                      select new BedDetailVM
                        {
                            PatientBedInfoId = bedInfos.PatientBedInfoId,
                            BedFeatureId = bedFeature.BedFeatureId,
                            WardName = ward.WardName,
                            BedCode = bed.BedCode,
                            BedFeature = bedFeature.BedFeatureName,
                            StartDate = bedInfos.StartedOn,
                            EndDate = bedInfos.EndedOn,
                            BedPrice = bedInfos.BedPrice,
                            Action = bedInfos.Action,
                            //calculated in clientSide
                            Days = 0,
                        }).OrderByDescending(a => a.PatientBedInfoId).ToList()
                    }).FirstOrDefault();
                    var patIpInfo = new
                    {
                        AdmissionInfo    = admInfo,
                        PendingBillItems = pendingItems,
                        allBillItem      = billItems
                    };

                    responseData.Results = patIpInfo;
                }
                else if (reqType == "pat-bill-items-for-receipt")
                {
                    try
                    {
                        DataTable patBillItems = dbContext.GetItemsForBillingReceipt(patientId, billingTxnId, billStatus);
                        responseData.Status  = "OK";
                        responseData.Results = patBillItems;
                    }
                    catch (Exception ex)
                    {
                        //Insert exception details into database table.
                        responseData.Status       = "Failed";
                        responseData.ErrorMessage = ex.Message;
                    }
                    //return DanpheJSONConvert.SerializeObject(responseData);
                }
                else if (reqType == "additional-info-discharge-receipt" && ipVisitId != 0)
                {
                    RbacDbContext              rbacDbContext    = new RbacDbContext(connString);
                    AdmissionDetailVM          admInfo          = null;
                    PatientDetailVM            patientDetail    = null;
                    List <DepositDetailVM>     deposits         = null;
                    BillingTransactionDetailVM billingTxnDetail = null;

                    var visitNAdmission = (from visit in dbContext.Visit.Include(v => v.Admission)
                                           where visit.PatientVisitId == ipVisitId
                                           select visit).FirstOrDefault();
                    if (visitNAdmission != null && visitNAdmission.Admission != null)
                    {
                        var patId      = visitNAdmission.PatientId;
                        var patVisitId = visitNAdmission.PatientVisitId;
                        ////invoice is not generated till then IsCurrent is false :: 18th Dec '18
                        //bool isCurrent = billingTxnId != null ? false : true;
                        var billTxn = dbContext.BillingTransactions.Where(a => a.BillingTransactionId == billingTxnId).FirstOrDefault();

                        if (billTxn != null && billTxn.ReturnStatus == false)
                        {
                            deposits = (from deposit in dbContext.BillingDeposits
                                        where deposit.PatientId == patId &&
                                        deposit.PatientVisitId == ipVisitId && deposit.DepositType != "depositcancel" &&
                                        deposit.IsActive == true
                                        join settlement in dbContext.BillSettlements on deposit.SettlementId
                                        equals settlement.SettlementId into settlementTemp
                                        from billSettlement in settlementTemp.DefaultIfEmpty()
                                        select new DepositDetailVM
                            {
                                DepositId = deposit.DepositId,
                                IsActive = deposit.IsActive,
                                ReceiptNo = "DR" + deposit.ReceiptNo.ToString(),
                                ReceiptNum = deposit.ReceiptNo,             //yubraj: to check whether receipt number is null or not for client side use
                                Date = deposit.CreatedOn,
                                Amount = deposit.Amount,
                                Balance = deposit.DepositBalance,
                                DepositType = deposit.DepositType,
                                ReferenceInvoice = deposit.SettlementId != null ? "SR " + billSettlement.SettlementReceiptNo.ToString() : null,
                            }).OrderBy(a => a.Date).ToList();
                        }
                        else
                        {
                            deposits = (from deposit in dbContext.BillingDeposits
                                        where deposit.PatientId == patId &&
                                        deposit.PatientVisitId == ipVisitId &&
                                        ((deposit.IsActive == true && deposit.DepositType == "Deposit") ||
                                         (deposit.BillingTransactionId == billingTxnId && (deposit.DepositType == "depositdeduct" || deposit.DepositType == "ReturnDeposit")))
                                        join settlement in dbContext.BillSettlements on deposit.SettlementId
                                        equals settlement.SettlementId into settlementTemp
                                        from billSettlement in settlementTemp.DefaultIfEmpty()
                                        select new DepositDetailVM
                            {
                                DepositId = deposit.DepositId,
                                IsActive = deposit.IsActive,
                                ReceiptNo = "DR" + deposit.ReceiptNo.ToString(),
                                ReceiptNum = deposit.ReceiptNo,             //yubraj: to check whether receipt number is null or not for client side use
                                Date = deposit.CreatedOn,
                                Amount = deposit.Amount,
                                Balance = deposit.DepositBalance,
                                DepositType = deposit.DepositType,
                                ReferenceInvoice = deposit.SettlementId != null ? "SR " + billSettlement.SettlementReceiptNo.ToString() : null,
                            }).OrderBy(a => a.Date).ToList();
                        }
                        //dischDetail.AdmissionInfo.AdmittingDoctor = "Dr. Anil Shakya";

                        AdmissionDbContext    admDbContext = new AdmissionDbContext(connString);
                        EmployeeModel         admittingDoc = dbContext.Employee.Where(e => e.EmployeeId == visitNAdmission.ProviderId).FirstOrDefault();
                        DepartmentModel       dept         = dbContext.Departments.Where(d => d.DepartmentId == admittingDoc.DepartmentId).FirstOrDefault();
                        List <PatientBedInfo> patBeds      = admDbContext.PatientBedInfos.Where(b => b.PatientVisitId == visitNAdmission.PatientVisitId).OrderByDescending(a => a.PatientBedInfoId).ToList();

                        WardModel ward = null;
                        //we're getting first ward from admission info as WardName. <needs revision>
                        if (patBeds != null && patBeds.Count > 0)
                        {
                            int wardId = patBeds.ElementAt(0).WardId;
                            ward = admDbContext.Wards.Where(w => w.WardId == wardId).FirstOrDefault();
                        }

                        admInfo = new AdmissionDetailVM()
                        {
                            AdmissionDate   = visitNAdmission.Admission.AdmissionDate,
                            DischargeDate   = visitNAdmission.Admission.DischargeDate.HasValue ? visitNAdmission.Admission.DischargeDate.Value : DateTime.Now,
                            Department      = dept != null ? dept.DepartmentName : "",//need to change this and get this from ADT-Bed Info table--sud: 20Aug'18
                            RoomType        = ward != null ? ward.WardName : "",
                            LengthOfStay    = CalculateBedStayForAdmission(visitNAdmission.Admission),
                            AdmittingDoctor = visitNAdmission.ProviderName,
                            ProcedureType   = visitNAdmission.Admission.ProcedureType
                        };

                        patientDetail = (from pat in dbContext.Patient
                                         join sub in dbContext.CountrySubdivisions on pat.CountrySubDivisionId equals sub.CountrySubDivisionId
                                         where pat.PatientId == visitNAdmission.PatientId
                                         select new PatientDetailVM
                        {
                            PatientId = pat.PatientId,
                            PatientName = pat.FirstName + " " + (string.IsNullOrEmpty(pat.MiddleName) ? "" : pat.MiddleName + " ") + pat.LastName,
                            HospitalNo = pat.PatientCode,
                            DateOfBirth = pat.DateOfBirth,
                            Gender = pat.Gender,
                            Address = pat.Address,
                            ContactNo = pat.PhoneNumber,
                            InpatientNo = visitNAdmission.VisitCode,
                            CountrySubDivision = sub.CountrySubDivisionName
                        }).FirstOrDefault();
                    }

                    //ashim: 14Sep2018 : BillingDetail for Discharge Bill

                    billingTxnDetail = (from bil in dbContext.BillingTransactions
                                        join emp in dbContext.Employee on bil.CreatedBy equals emp.EmployeeId
                                        join fiscalYear in dbContext.BillingFiscalYears on bil.FiscalYearId equals fiscalYear.FiscalYearId
                                        where bil.BillingTransactionId == billingTxnId
                                        select new BillingTransactionDetailVM
                    {
                        FiscalYear = fiscalYear.FiscalYearFormatted,
                        ReceiptNo = bil.InvoiceNo,
                        InvoiceNumber = bil.InvoiceCode + bil.InvoiceNo.ToString(),
                        BillingDate = bil.CreatedOn,
                        PaymentMode = bil.PaymentMode,
                        DepositBalance = bil.DepositBalance + bil.DepositReturnAmount,
                        CreatedBy = bil.CreatedBy,
                        DepositDeductAmount = bil.DepositReturnAmount,
                        TotalAmount = bil.TotalAmount,
                        Discount = bil.DiscountAmount,
                        SubTotal = bil.SubTotal,
                        Quantity = bil.TotalQuantity,
                        User = "",
                        Remarks = bil.Remarks,
                        PrintCount = bil.PrintCount,
                        ReturnStatus = bil.ReturnStatus,
                        OrganizationId = bil.OrganizationId,
                        ExchangeRate = bil.ExchangeRate
                    }).FirstOrDefault();
                    if (billingTxnDetail != null)
                    {
                        billingTxnDetail.User = rbacDbContext.Users.Where(usr => usr.EmployeeId == billingTxnDetail.CreatedBy).Select(a => a.UserName).FirstOrDefault();
                        if (billingTxnDetail.OrganizationId != null)
                        {
                            billingTxnDetail.OrganizationName = dbContext.CreditOrganization.Where(a => a.OrganizationId == billingTxnDetail.OrganizationId).Select(b => b.OrganizationName).FirstOrDefault();
                        }
                    }


                    var dischargeBillInfo = new
                    {
                        AdmissionInfo    = admInfo,
                        DepositInfo      = deposits,
                        BillingTxnDetail = billingTxnDetail,
                        PatientDetail    = patientDetail
                    };

                    responseData.Results = dischargeBillInfo;
                    responseData.Status  = "OK";
                }
            }
            catch (Exception ex)
            {
                responseData.Status       = "Failed";
                responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString();
            }
            return(DanpheJSONConvert.SerializeObject(responseData, true));
        }