public string DischargedPatientBillBreakup(int VisitId, int PatientId)
        {
            DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>();

            try
            {
                AdmissionDbContext admissionDbContext = new AdmissionDbContext(connString);
                ReportingDbContext reportingDbContext = new ReportingDbContext(connString);
                var result = (from addm in admissionDbContext.Admissions
                              where addm.PatientVisitId == VisitId
                              join visit in admissionDbContext.Visits
                              on addm.PatientVisitId equals visit.PatientVisitId
                              join pat in admissionDbContext.Patients
                              on addm.PatientId equals pat.PatientId

                              from addmInfo in admissionDbContext.PatientBedInfos
                              join ward in admissionDbContext.Wards
                              on addmInfo.WardId equals ward.WardId
                              join bed in admissionDbContext.Beds
                              on addmInfo.BedId equals bed.BedId
                              where addmInfo.PatientVisitId == VisitId
                              select new
                {
                    Patient = new
                    {
                        IPNumber = visit.VisitCode,
                        PatName = pat.FirstName + " " + (string.IsNullOrEmpty(pat.MiddleName) ? "" : pat.MiddleName + " ") + pat.LastName,
                        Address = pat.Address,
                        Age = pat.Age,
                        Gender = pat.Gender,
                        PatientCode = pat.PatientCode,
                        InvoiceDateTime = System.DateTime.Now,
                        AdmissionDate = addm.AdmissionDate,
                        DischargeDate = addm.DischargeDate,
                        AdmittedDoctor = from emp in admissionDbContext.Employees
                                         where emp.EmployeeId == addm.AdmittingDoctorId
                                         select emp.FirstName + " " + (string.IsNullOrEmpty(emp.MiddleName) ? "" : emp.MiddleName + " ") + emp.LastName,
                        Ward = ward.WardName + " " + ward.WardLocation,
                        BedNo = bed.BedNumber
                    }
                }).FirstOrDefault();
                DataTable dischargeBill = reportingDbContext.BillDischargeBreakup(VisitId, PatientId);

                var resultData = new
                {
                    Patient    = result,
                    ReportData = dischargeBill
                };
                responseData.Status  = "OK";
                responseData.Results = resultData;
            }
            catch (Exception ex)
            {
                //Insert exception details into database table.
                responseData.Status       = "Failed";
                responseData.ErrorMessage = ex.Message;
            }
            return(DanpheJSONConvert.SerializeObject(responseData));
        }
Beispiel #2
0
 public PaymentController(AdmissionDbContext context)
 {
     _context = context;
 }
Beispiel #3
0
 public MarksController(AdmissionDbContext context)
 {
     _context = context;
 }
Beispiel #4
0
 public StudentsController(AdmissionDbContext context)
 {
     _context = context;
 }
Beispiel #5
0
 public AccountController(AdmissionDbContext context)
 {
     _context = context;
 }
 public loginController(AdmissionDbContext context)
 {
     _context = context;
 }
Beispiel #7
0
        public string Get(string reqType, string status, int patientId, int patientVisitId, DateTime?fromDate,
                          DateTime?toDate, int employeeId)
        {
            DanpheHTTPResponse <object> responseData = new DanpheHTTPResponse <object>();

            try
            {
                responseData.Status = "OK";
                DoctorsDbContext dbContext = new DoctorsDbContext(connString);


                if (reqType == "patientOverview" && patientId != 0)
                {
                    PatientModel       patientModel = new PatientModel();
                    PatientDbContext   patDbContext = new PatientDbContext(connString);
                    AdmissionDbContext admDbContext = new AdmissionDbContext(connString);

                    patientModel = (from pat in patDbContext.Patients
                                    where pat.PatientId == patientId
                                    select pat).Include(a => a.Visits.Select(v => v.Vitals))
                                   .Include(a => a.Problems)
                                   .Include(a => a.Allergies)
                                   .Include(a => a.Addresses)
                                   .Include(a => a.LabRequisitions)
                                   .Include(a => a.UploadedFiles)
                                   //.Include(a => a.ImagingReports)
                                   .Include(a => a.ImagingItemRequisitions)
                                   .Include(a => a.MedicationPrescriptions)
                                   .FirstOrDefault <PatientModel>();

                    //this will remove all other orders from past and only orders which matches visit-id will be shown (lab order / imaging order)
                    if (patientModel != null && patientModel.Visits != null && patientModel.Visits.Count > 0)
                    {
                        patientModel.LabRequisitions         = patientModel.LabRequisitions.Where(a => a.PatientVisitId == patientVisitId && a.BillingStatus != "returned").ToList();
                        patientModel.ImagingItemRequisitions = patientModel.ImagingItemRequisitions.Where(a => a.PatientVisitId == patientVisitId && a.BillingStatus != "returned").ToList();
                    }

                    //add vitals to patient
                    if (patientModel != null && patientModel.Visits != null && patientModel.Visits.Count > 0)
                    {
                        patientModel.Vitals = patientModel.Visits.SelectMany(a => a.Vitals).ToList();
                        //take last three vitals only..
                        patientModel.Vitals = patientModel.Vitals.OrderByDescending(a => a.CreatedOn).Take(3).ToList();
                    }

                    //add profilePic info to patient
                    if (patientModel != null && patientModel.UploadedFiles != null && patientModel.PatientId == patientId)
                    {
                        patientModel.ProfilePic = (from p in patientModel.UploadedFiles
                                                   where p.IsActive == true && p.FileType == "profile-pic"
                                                   select p).FirstOrDefault();
                        if (patientModel.ProfilePic != null)
                        {
                            patientModel.ProfilePic.FileBase64String = Convert.ToBase64String(patientModel.ProfilePic.FileBinaryData);
                        }
                    }

                    //remove resolved problems
                    if (patientModel != null && patientModel.Problems != null && patientModel.Problems.Count > 0)
                    {
                        patientModel.Problems = patientModel.Problems.Where(p => p.IsResolved == false).ToList();
                    }

                    MasterDbContext   masterDbContext = new MasterDbContext(connString);
                    PharmacyDbContext phrmDbContext   = new PharmacyDbContext(connString);

                    if (patientModel.CountrySubDivisionId != 0)
                    {
                        var subDiv = (from subdiv in masterDbContext.CountrySubDivision
                                      where subdiv.CountrySubDivisionId == patientModel.CountrySubDivisionId
                                      select subdiv.CountrySubDivisionName
                                      ).FirstOrDefault();

                        patientModel.CountrySubDivisionName = subDiv;
                    }

                    //add medication prescription if any.
                    //need to get it as pharmacy model later on, now we're mapping this as MedicationPrescription model only.
                    if (patientModel != null)
                    {
                        var patPrescriptions = phrmDbContext.PHRMPrescriptionItems.Where(p => p.PatientId == patientModel.PatientId).ToList();
                        if (patPrescriptions != null && patPrescriptions.Count > 0)
                        {
                            var allItems  = phrmDbContext.PHRMItemMaster.ToList();
                            var presItems = (from pres in patPrescriptions
                                             join itm in allItems
                                             on pres.ItemId equals itm.ItemId
                                             select new MedicationPrescriptionModel()
                            {
                                MedicationId = itm.ItemId,
                                MedicationName = itm.ItemName,
                                Frequency = pres.Frequency.HasValue ? pres.Frequency.Value.ToString() : "",
                                Duration = pres.HowManyDays.Value,
                                CreatedOn = pres.CreatedOn
                            }).ToList();

                            patientModel.MedicationPrescriptions = presItems;
                        }


                        //var presc = patPrescriptions[0];
                    }

                    //this is for getting current patients admission details (for current visit)
                    var bedInfo = (from txn in admDbContext.PatientBedInfos
                                   join bed in admDbContext.Beds on txn.BedId equals bed.BedId
                                   join ward in admDbContext.Wards on txn.WardId equals ward.WardId
                                   where txn.PatientId == patientId && txn.PatientVisitId == patientVisitId && txn.EndedOn == null
                                   select new
                    {
                        bed.BedNumber,
                        ward.WardName
                    }).FirstOrDefault();

                    if (bedInfo != null)
                    {
                        patientModel.BedNo    = bedInfo.BedNumber;
                        patientModel.WardName = bedInfo.WardName;
                    }

                    ////we're taking allergen from generic list: sud-15Jun'18
                    //List<PHRMGenericModel> genericList = phrmDbContext.PHRMGenericModel.ToList();
                    ////add name to allergies
                    //if (patientModel != null && patientModel.Allergies != null && patientModel.Allergies.Count > 0)
                    //{
                    //    foreach (var allergy in patientModel.Allergies)
                    //    {
                    //        if (allergy.AllergenAdvRecId != 0 && allergy.AllergenAdvRecId != null)
                    //        {
                    //            allergy.AllergenAdvRecName = genericList.Where(a => a.GenericId == allergy.AllergenAdvRecId)
                    //                                         .FirstOrDefault().GenericName;
                    //        }
                    //        if (allergy.AllergyType == "Others") {
                    //            allergy.AllergenAdvRecName = allergy.Others;
                    //        }

                    //    }
                    //}

                    responseData.Results = patientModel;
                }

                else if (reqType == "otherRequestsOfPatient")
                {
                    BillingDbContext billingDbContext = new BillingDbContext(base.connString);
                    var itemList = (from billItemRequisition in billingDbContext.BillItemRequisitions
                                    where (billItemRequisition.PatientId == patientId &&
                                           billItemRequisition.PatientVisitId == patientVisitId &&
                                           (billItemRequisition.DepartmentName.ToLower() != "lab" && billItemRequisition.DepartmentName.ToLower() != "radiology"))
                                    select billItemRequisition
                                    ).ToList();

                    responseData.Status  = "OK";
                    responseData.Results = itemList;
                }

                else if (reqType == "providertodaysvisit")
                {
                    if (toDate == null)
                    {
                        RbacUser currentUser = HttpContext.Session.Get <RbacUser>("currentuser");
                        int      providerId  = currentUser.EmployeeId;//check if we've to pass userid or employeeid--sudarshan 15mar'17
                        var      today       = DateTime.Today;
                        //show only today's visits for the provider.. and if the visittype is inpatient then  the addmission status shouled be admitted ..Dharam 9th Sept 2017..
                        var visitList = (from visit in dbContext.Visits.Include("Admission").Include("Patient")
                                         where visit.VisitStatus == status &&
                                         (DbFunctions.TruncateTime(visit.VisitDate) == DbFunctions.TruncateTime(today) || visit.Admission.AdmissionStatus == "admitted") &&
                                         visit.ProviderId == providerId && visit.BillingStatus != "returned"
                                         select visit).ToList()
                                        .OrderBy(v => v.VisitDate).ThenBy(v => v.VisitTime).ToList();
                        responseData.Results = visitList;
                    }
                    else // visit records according to selected Date
                    {
                        RbacUser currentUser  = HttpContext.Session.Get <RbacUser>("currentuser");
                        int      providerId   = currentUser.EmployeeId;//check if we've to pass userid or employeeid--sudarshan 15mar'17
                        var      departmentId = dbContext.Employees.Where(a => a.EmployeeId == providerId).Select(a => a).FirstOrDefault();
                        //show only today's visits for the provider.. and if the visittype is inpatient then  the addmission status shouled be admitted ..Dharam 9th Sept 2017..
                        var visitList = (from visit in dbContext.Visits.Include("Admission").Include("Patient")
                                         where DbFunctions.TruncateTime(visit.VisitDate) == DbFunctions.TruncateTime(toDate) && // visit.VisitStatus == status &&
                                         (DbFunctions.TruncateTime(visit.VisitDate) == DbFunctions.TruncateTime(toDate) || visit.Admission.AdmissionStatus == "admitted") &&
                                         visit.DepartmentId == departmentId.DepartmentId && visit.BillingStatus != "returned"
                                         select visit).ToList()
                                        .OrderBy(v => v.VisitDate).ThenBy(v => v.VisitTime).ToList().GroupBy(a => a.ProviderName)
                                        .Select(v => new { ProviderName = v.Select(p => p.ProviderName).FirstOrDefault(), visit = v }).ToList();

                        responseData.Results = visitList;
                    }
                }
                //get all the past visits of the provider
                else if (reqType == "providerpastvisits")
                {
                    RbacUser currentUser  = HttpContext.Session.Get <RbacUser>("currentuser");
                    int      providerId   = currentUser.EmployeeId;//check if we've to pass userid or employeeid--sudarshan 15mar'17
                    var      departmentId = dbContext.Employees.Where(a => a.EmployeeId == providerId).Select(a => a).FirstOrDefault();
                    //gets all visits earlier than today for this provider.. and if the visittype is inpatient then  the addmission status shouled be discharged ..Dharam 9th Sept 2017..
                    var visitList = (from visit in dbContext.Visits.Include("Admission").Include("Patient")
                                     where visit.DepartmentId == departmentId.DepartmentId
                                     //&& (visit.Admission == null || visit.Admission.AdmissionStatus == "discharged")
                                     select visit).ToList()
                                    .Where(v => v.VisitDate.Date >= fromDate && v.VisitDate <= toDate && v.BillingStatus != "returned")
                                    .OrderByDescending(v => v.VisitDate).ThenByDescending(v => v.VisitTime).ToList();
                    responseData.Results = visitList;
                }

                else if (reqType == "providerDeptVisits")
                {
                    RbacUser        currentUser  = HttpContext.Session.Get <RbacUser>("currentuser");
                    int             providerId   = currentUser.EmployeeId;
                    MasterDbContext mstDbContext = new MasterDbContext(base.connString);
                    int?            DeptId       = (from emp in mstDbContext.Employees
                                                    where emp.EmployeeId == providerId
                                                    select emp.DepartmentId).FirstOrDefault();
                    var empList = mstDbContext.Employees.ToList();
                    var visits  = (from visit in dbContext.Visits.Include("Admission").Include("Patient")
                                   where visit.ProviderId != providerId
                                   //&& (visit.Admission == null || visit.Admission.AdmissionStatus == "discharged")
                                   select visit).ToList()
                                  .Where(v => v.VisitDate.Date >= fromDate && v.VisitDate <= toDate)
                                  .OrderByDescending(v => v.VisitDate).ThenByDescending(v => v.VisitTime).ToList();

                    List <VisitModel> visitLists = (from v in visits
                                                    join e in empList on v.ProviderId equals e.EmployeeId
                                                    where e.DepartmentId == DeptId
                                                    select v).ToList();
                    responseData.Results = visitLists;
                }
                else if (reqType == "departmentByEmployeeId")
                {
                    var depid       = dbContext.Employees.Where(a => a.EmployeeId == employeeId).Select(a => a.DepartmentId).FirstOrDefault();
                    var department  = dbContext.Departments.Where(a => a.DepartmentId == depid).Select(a => a.DepartmentName).FirstOrDefault();
                    var deptDoctors = dbContext.Employees.Where(a => a.DepartmentId == depid && a.Salutation == "Dr")
                                      .Select(a => new
                    {
                        a.DepartmentId,
                        a.EmployeeId,
                        ProviderName = a.Salutation + ". " + a.FirstName + " " + (string.IsNullOrEmpty(a.MiddleName) ? " " : a.MiddleName + " ") + a.LastName
                    }).ToList();
                    responseData.Results = new
                    {
                        DepartmentId   = depid,
                        DepartmentName = department,
                        Providers      = deptDoctors
                    };
                }
                else if (reqType == "patientVisitType")
                {
                    var result = (from type in dbContext.Visits group type by type.VisitType into x select x.Select(a => a.VisitType).Distinct().ToList());
                    responseData.Results = result;
                }

                else
                {
                    responseData.Status       = "Failed";
                    responseData.ErrorMessage = "invalid patient id";
                }
            }
            catch (Exception ex)
            {
                responseData.Status       = "Failed";
                responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString();
            }

            return(DanpheJSONConvert.SerializeObject(responseData, true));
        }
Beispiel #8
0
        public string Get(string reqType, string status)
        {
            HelpdeskDbContext           dbContextHelpdesk = new HelpdeskDbContext(connString);
            AdmissionDbContext          dbAdmission       = new AdmissionDbContext(connString);
            DanpheHTTPResponse <object> responseData      = new DanpheHTTPResponse <object>();



            try
            {
                //gets the EmployeeInfo from Employee table
                if (reqType == "getHelpdesk")
                {
                    //.ToList()is done two times,since we can't use requestDate.Date inside IQueryable
                    List <EmployeeInfoModel> empsInfoList = dbContextHelpdesk.GetEmployeeInfo();
                    //where d.EmployeeId == employeeId


                    responseData.Status = "OK";
                    //loads EmployeeInfo with requested status
                    responseData.Results = empsInfoList;
                }
                //gets the BedInformation from Bed,Bedtype and Ward tables
                if (reqType == "getBedinfo")
                {
                    //.ToList()is done two times,since we can't use requestDate.Date inside IQueryable
                    DynamicReport bedsInfoList = dbContextHelpdesk.GetBedInformation();

                    responseData.Status  = "OK";
                    responseData.Results = bedsInfoList;
                }
                //gets the BedInformation , Patient Information and Ward Name
                if (reqType == "getBedPatientInfo")
                {
                    var bedpatientinfo = dbAdmission.Beds.ToList().GroupJoin(dbAdmission.PatientBedInfos.ToList().Where(a => a.EndedOn == null), a => a.BedId, b => b.BedId, (a, b) =>
                                                                             new BedPatientViewModel
                    {
                        BedId            = a.BedId,
                        WardId           = a.WardId,
                        BedCode          = a.BedCode,
                        PatientId        = b.Select(s => s.PatientId).FirstOrDefault(),
                        PatientBedInfoId = b.Select(s => s.PatientBedInfoId).FirstOrDefault(),
                        StartedOn        = b.Select(s => s.StartedOn).FirstOrDefault(),
                        EndedOn          = b.Select(s => s.EndedOn).FirstOrDefault(),
                        BedNumber        = a.BedNumber,
                        IsOccupied       = a.IsOccupied
                    }).GroupJoin(dbAdmission.Patients.ToList(), a => a.PatientId, b => b.PatientId, (a, b) =>
                                 new BedPatientViewModel
                    {
                        BedId            = a.BedId,
                        WardId           = a.WardId,
                        BedCode          = a.BedCode,
                        PatientId        = b.Select(s => s.PatientId).FirstOrDefault(),
                        PatientBedInfoId = a.PatientBedInfoId,
                        StartedOn        = a.StartedOn,
                        EndedOn          = a.EndedOn,
                        BedNumber        = a.BedNumber,
                        IsOccupied       = a.IsOccupied,
                        PatientName      = b.Select(s => s.FirstName).FirstOrDefault() + " " + b.Select(s => s.MiddleName).FirstOrDefault() + " " + b.Select(s => s.LastName).FirstOrDefault(),
                        PatientCode      = b.Select(s => s.PatientCode).FirstOrDefault(),
                        Address          = b.Select(s => s.Address).FirstOrDefault()
                    }).GroupJoin(dbAdmission.Wards.ToList(), a => a.WardId, b => b.WardId, (a, b) =>
                                 new BedPatientViewModel
                    {
                        BedId            = a.BedId,
                        WardId           = b.Select(s => s.WardId).FirstOrDefault(),
                        WardName         = b.Select(s => s.WardName).FirstOrDefault(),
                        BedCode          = a.BedCode,
                        PatientId        = a.PatientId,
                        PatientBedInfoId = a.PatientBedInfoId,
                        StartedOn        = a.StartedOn,
                        EndedOn          = a.EndedOn,
                        BedNumber        = a.BedNumber,
                        IsOccupied       = a.IsOccupied,
                        PatientName      = a.PatientName,
                        PatientCode      = a.PatientCode,
                        Address          = a.Address
                    }).GroupJoin(dbAdmission.Admissions.ToList(), a => a.PatientId, b => b.PatientId, (a, b) =>
                                 new BedPatientViewModel
                    {
                        BedId              = a.BedId,
                        WardId             = a.WardId,
                        WardName           = a.WardName,
                        BedCode            = a.BedCode,
                        PatientId          = a.PatientId,
                        PatientBedInfoId   = a.PatientBedInfoId,
                        StartedOn          = a.StartedOn,
                        EndedOn            = a.EndedOn,
                        BedNumber          = a.BedNumber,
                        IsOccupied         = a.IsOccupied,
                        PatientName        = a.PatientName,
                        PatientCode        = a.PatientCode,
                        Address            = a.Address,
                        PatientVisitId     = b.Select(s => s.PatientVisitId).FirstOrDefault(),
                        PatientAdmissionId = b.Select(s => s.PatientAdmissionId).FirstOrDefault(),
                        DischargedDate     = b.Select(s => s.DischargeDate).FirstOrDefault(),
                        AdmittedDate       = b.Select(s => s.AdmissionDate).FirstOrDefault()
                    });

                    responseData.Status  = "OK";
                    responseData.Results = bedpatientinfo;
                }
                //gets the WardInformation from WardBedType and Ward tables
                if (reqType == "getWardinfo")
                {
                    //data from GetWardInformation Method from Dbcontext
                    List <WardInformationModel> wardsInfoList = dbContextHelpdesk.GetWardInformation();

                    responseData.Status  = "OK";
                    responseData.Results = wardsInfoList;
                }
                else if (reqType == "getBedFeature")
                {
                    DanpheHTTPResponse <DataTable> data = new DanpheHTTPResponse <DataTable>();
                    try
                    {
                        HelpdeskDbContext helpdeskDbContext = new HelpdeskDbContext(connString);
                        DataTable         dtResult          = helpdeskDbContext.BedFeatureReprot();
                        data.Status  = "OK";
                        data.Results = dtResult;
                    }
                    catch (Exception ex)
                    {
                        //Insert exception details into database table.
                        data.Status       = "Failed";
                        data.ErrorMessage = ex.Message;
                    }
                    return(DanpheJSONConvert.SerializeObject(data));
                }
            }
            catch (Exception ex)
            {
                responseData.Status       = "Failed";
                responseData.ErrorMessage = ex.Message + " exception details:" + ex.ToString();
            }
            return(DanpheJSONConvert.SerializeObject(responseData, true));
        }
Beispiel #9
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));
        }