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)); }
public PaymentController(AdmissionDbContext context) { _context = context; }
public MarksController(AdmissionDbContext context) { _context = context; }
public StudentsController(AdmissionDbContext context) { _context = context; }
public AccountController(AdmissionDbContext context) { _context = context; }
public loginController(AdmissionDbContext context) { _context = context; }
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)); }
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)); }
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)); }