public List <PatientPartialDetails> GetDepositForPatientEmergency(int EmergencyId, string Name)
        {
            EHMSEntities ent  = new EHMSEntities();
            string       name = Name.Trim();
            List <PatientPartialDetails> PatientDetailList  = new List <PatientPartialDetails>();
            List <PatientPartialDetails> PatientDetailList1 = new List <PatientPartialDetails>();

            if (EmergencyId == 0 && name == "")
            {
                var data = ent.OpdMasters.Take(20).ToList();
                foreach (var item in data)
                {
                    PatientPartialDetails obj = new PatientPartialDetails();
                    obj.PatientId           = item.OpdID;
                    obj.PatientDepartmentId = 1001;
                    obj.PatientFullName     = item.FirstName + ' ' + item.MiddleName + ' ' + item.LastName;
                    obj.Age          = item.AgeYear;
                    obj.DepartmentID = 1001;
                    obj.Sex          = item.Sex;
                    PatientDetailList.Add(obj);
                }

                return(PatientDetailList);
            }

            else if (EmergencyId == 0 && name != "")
            {
                OpdMaster a        = new OpdMaster();
                var       dataName = ent.OpdMasters.Take(20).ToList();
                foreach (var item in dataName)
                {
                    PatientPartialDetails obj = new PatientPartialDetails();
                    obj.PatientId           = item.OpdID;
                    obj.PatientDepartmentId = 1001;
                    obj.PatientFullName     = item.FirstName + ' ' + item.MiddleName + ' ' + item.LastName;

                    obj.Age          = item.AgeYear;
                    obj.DepartmentID = 1001;
                    obj.Sex          = item.Sex;
                    PatientDetailList1.Add(obj);
                }



                var data = PatientDetailList1.Where(x => x.PatientFullName.Contains(name)).ToList();

                foreach (var item in data)
                {
                    PatientPartialDetails obj = new PatientPartialDetails();
                    obj.PatientId           = obj.PatientId;
                    obj.PatientDepartmentId = 1001;
                    obj.PatientFullName     = item.PatientFullName;
                    obj.Age          = item.Age;
                    obj.DepartmentID = 1001;
                    obj.Sex          = item.Sex;
                    PatientDetailList.Add(obj);
                }

                return(PatientDetailList);
            }
            else if (EmergencyId != 0 && name == "")
            {
                var data = ent.OpdMasters.Where(x => x.OpdID == EmergencyId).ToList();
                foreach (var item in data)
                {
                    PatientPartialDetails obj = new PatientPartialDetails();
                    obj.PatientId           = item.OpdID;
                    obj.PatientDepartmentId = 1001;
                    obj.PatientFullName     = item.FirstName + ' ' + item.MiddleName + ' ' + item.LastName;
                    obj.Age          = item.AgeYear;
                    obj.DepartmentID = 1001;
                    obj.Sex          = item.Sex;
                    PatientDetailList.Add(obj);
                }

                return(PatientDetailList);
            }
            else
            {
                var data = ent.OpdMasters.Where(x => x.OpdID == EmergencyId).ToList();
                foreach (var item in data)
                {
                    PatientPartialDetails obj = new PatientPartialDetails();
                    obj.PatientId           = item.OpdID;
                    obj.PatientDepartmentId = 1001;
                    obj.PatientFullName     = item.FirstName + ' ' + item.MiddleName + ' ' + item.LastName;
                    obj.Age          = item.AgeYear;
                    obj.DepartmentID = 1001;
                    obj.Sex          = item.Sex;
                    PatientDetailList.Add(obj);
                }

                return(PatientDetailList);

                //return new List<OpdModel>(AutoMapper.Mapper.Map<IEnumerable<OpdMaster>, IEnumerable<OpdModel>>(query)).ToList();
            }
        }
        public int Update(EmergecyMasterModel model)
        {
            int       i     = 0;
            OpdMaster opdmo = new OpdMaster();

            using (EHMSEntities ent = new EHMSEntities())
            {
                var objToEdit = ent.EmergencyMasters.Where(x => x.EmergencyMasterId == model.EmergencyMasterId).FirstOrDefault();
                AutoMapper.Mapper.Map(model, objToEdit);
                objToEdit.CreatedBy = (int)HospitalManagementSystem.Utility.GetCurrentLoginUserId();

                objToEdit.Status           = 1;
                objToEdit.CreatedDate      = DateTime.Today;
                objToEdit.OutcomeTypeId    = 1;
                ent.Entry(objToEdit).State = System.Data.EntityState.Modified;

                var objToEditObjOpd = ent.OpdMasters.Where(x => x.DepartmentPatientId == model.EmergencyMasterId).FirstOrDefault();
                AutoMapper.Mapper.Map(opdmo, objToEditObjOpd);

                objToEditObjOpd.PatientTitle     = model.ObjOpdMaster.PatientTitle;
                objToEditObjOpd.FirstName        = model.OpdEmergencyViewModel.Firstname;
                objToEditObjOpd.MiddleName       = model.OpdEmergencyViewModel.MiddleName;
                objToEditObjOpd.LastName         = model.OpdEmergencyViewModel.LastName;
                objToEditObjOpd.AgeYear          = model.OpdEmergencyViewModel.AgeYear;
                objToEditObjOpd.Sex              = model.OpdEmergencyViewModel.Gender;
                objToEditObjOpd.MaritalStatus    = model.ObjOpdMaster.MaritalStatus;
                objToEditObjOpd.BloodGroup       = model.ObjOpdMaster.BloodGroup;
                objToEditObjOpd.Address          = model.OpdEmergencyViewModel.Address;
                ent.Entry(objToEditObjOpd).State = System.Data.EntityState.Modified;

                List <EmergencyTriageModel> modell = new List <EmergencyTriageModel>();

                modell = AutoMapper.Mapper.Map <IEnumerable <EmergencyTriage>, IEnumerable <EmergencyTriageModel> >(ent.EmergencyTriages).ToList();
                var trid = modell.Where(m => m.EmergencyMasterId == model.EmergencyMasterId).Select(m => m.EmergencyTriageId).SingleOrDefault();

                var a = objToEdit.EmergencyTriages.Select(m => m.EmergencyMasterId).SingleOrDefault();

                int PreResistratrionPre = Convert.ToInt32(trid);
                int b = Convert.ToInt32(a);
                model.EmergencyTriageModel.EmergencyTriageId = PreResistratrionPre;
                model.EmergencyTriageModel.EmergencyMasterId = b;
                var objToEditDetails = ent.EmergencyTriages.Where(x => x.EmergencyTriageId == model.EmergencyTriageModel.EmergencyTriageId).FirstOrDefault();

                objToEditDetails.sourceTypeId = 1;
                objToEditDetails.SourceId     = 1;
                objToEditDetails.TriageLevel  = 1;
                AutoMapper.Mapper.Map(model.EmergencyTriageModel, objToEditDetails);
                objToEditDetails.sourceTypeId     = 1;
                objToEditDetails.SourceId         = 1;
                objToEditDetails.TriageLevel      = 1;
                objToEditDetails.DoctorId         = model.EmergencyTriageModel.DoctorId;
                objToEditDetails.MedicalOfficer   = model.EmergencyTriageModel.MedicalOfficer;
                ent.Entry(objToEditDetails).State = System.Data.EntityState.Modified;

                var objtoeditPatientFee = ent.EmergencyFeeDetails.Where(x => x.EmergencyMasterId == model.EmergencyMasterId).FirstOrDefault();

                objtoeditPatientFee.RegistrationFee         = model.EmergencyFeeDetailsModel.RegistrationFee;
                objtoeditPatientFee.DoctorFee               = 0;
                objtoeditPatientFee.MemberDiscountAmount    = 0;
                objtoeditPatientFee.OtherDiscountPercentage = 0;
                objtoeditPatientFee.TotalAmount             = model.EmergencyFeeDetailsModel.RegistrationFee;
                objtoeditPatientFee.Remarks = model.EmergencyFeeDetailsModel.Remarks;

                i = ent.SaveChanges();
            }
            return(i);
        }
        public int Insert(DepositMasterModel model)
        {
            using (EHMSEntities ent = new EHMSEntities())
            {
                //Insert into CA Table
                //If User already exist, dont insert
                //check if user has alreary accountheadcode in opdmaster
                //Get Currnet receipt number
                int UserReceiptNumber    = Utility.GetMaxBillNumberFromDepartment("Deposit", 1);
                int UserAccountHeadIdInt = 0;
                var userAccountHeadId    = ent.OpdMasters.Where(x => x.OpdID == model.PatientId).FirstOrDefault();
                if (userAccountHeadId.AccountHeadId != null)
                {
                    UserAccountHeadIdInt = (int)userAccountHeadId.AccountHeadId;
                }

                var ObjGlAccSubGroup = new GL_AccSubGroups();
                if (UserAccountHeadIdInt > 0)
                {
                }

                else
                {
                    ObjGlAccSubGroup = new GL_AccSubGroups()
                    {
                        AccGroupID      = 2,
                        AccSubGroupName = HospitalManagementSystem.Utility.GetPatientNameWithIdFromOpd(model.PatientId),
                        ParentID        = 1258,
                        HierarchyCode   = "2.1253.1257.1258",
                        HeadLevel       = 5,
                        AccountCode     = null,
                        IsLeafLevel     = true,
                        Status          = true,
                        CreatedBy       = HospitalManagementSystem.Utility.GetCurrentLoginUserId(),
                        CreatedDate     = DateTime.Now,
                        Remarks         = "Deposit",
                        BranchId        = 1
                    };

                    ent.GL_AccSubGroups.Add(ObjGlAccSubGroup);
                    ent.SaveChanges();
                    UserAccountHeadIdInt = ObjGlAccSubGroup.AccSubGruupID;
                }


                //Update in opdmaster table
                OpdMaster AccountHeadId = (from x in ent.OpdMasters
                                           where x.OpdID == model.PatientId
                                           select x).First();
                AccountHeadId.AccountHeadId = UserAccountHeadIdInt;

                var SaveDepositMaster = AutoMapper.Mapper.Map <DepositMasterModel, PatientDepositMaster>(model);
                SaveDepositMaster.CreatedBy           = Utility.GetCurrentLoginUserId();
                SaveDepositMaster.CreatedDate         = DateTime.Now;
                SaveDepositMaster.CreatedDepartmentId = Utility.GetCurrentUserDepartmentId();
                SaveDepositMaster.Status          = true;
                SaveDepositMaster.SwipeCardId     = "NN009";
                SaveDepositMaster.ReceiptID       = UserReceiptNumber;
                SaveDepositMaster.SwipeCardDetail = "ScardDetails";

                ent.PatientDepositMasters.Add(SaveDepositMaster);

                //Get Currrent Receipt Number
                int ReceiptNumberInt = Utility.GetMaxBillNumberFromDepartment("Hospital", 1);


                var ObjCentralizedBillingMaster = new CentralizedBillingMaster()
                {
                    BillNo              = ReceiptNumberInt,
                    BillDate            = DateTime.Now,
                    TotalBillAmount     = model.DepositedAmount,
                    Narration1          = "Deposit",
                    Narration2          = "",
                    DepartmentName      = "CB",
                    SubDepartmentId     = 1,
                    PatientLogId        = HospitalManagementSystem.Utility.getPatientLogID(model.PatientId),
                    PatientId           = model.PatientId,
                    CreatedDepartmentId = HospitalManagementSystem.Utility.GetCurrentUserDepartmentId(),
                    CreatedBy           = HospitalManagementSystem.Utility.GetCurrentLoginUserId(),
                    CreatedDate         = DateTime.Now,
                    Remarks             = "Deposit",
                    Status              = true,
                    BranchId            = 1,
                    JVStatus            = false,
                    ReceiptId           = Utility.GetMaxDepositeNumber(),
                    IsHandover          = false,
                    ReturnedAmount      = Convert.ToDecimal(0),
                    TenderAmount        = Convert.ToDecimal(0),
                    TotalDiscountAmount = Convert.ToDecimal(0),
                    TotalDiscountID     = 0,
                    PayableType         = 1//general
                };

                ent.CentralizedBillingMasters.Add(ObjCentralizedBillingMaster);

                var ObjCentralizedBillingDetails = new CentralizedBillingDetail()
                {
                    BillNo           = ReceiptNumberInt,
                    AccountHeadID    = 1258,                 //deposit
                    AccountSubHeadID = UserAccountHeadIdInt, //patientId
                    Amount           = model.DepositedAmount,
                    Status           = true,
                    DepartmentId     = 1003//Ipd Department
                };
                ent.CentralizedBillingDetails.Add(ObjCentralizedBillingDetails);

                var ObjCentralizedBillingPaymentType = new CentralizedBillingPaymentType()
                {
                    BillNo           = ReceiptNumberInt,
                    PaymentTypeID    = 372,
                    Amount           = model.DepositedAmount,
                    Status           = true,
                    PaymentSubTypeID = Convert.ToInt32(0)
                };
                ent.CentralizedBillingPaymentTypes.Add(ObjCentralizedBillingPaymentType);

                //update Bill Number
                SetupHospitalBillNumber billNumber = (from x in ent.SetupHospitalBillNumbers
                                                      where x.DepartmentName == "Hospital" && x.FiscalYearId == 1
                                                      select x).First();
                billNumber.BillNumber = billNumber.BillNumber + 1;
                ent.SaveChanges();

                //update Bill Number
                SetupHospitalBillNumber billNumberDeposit = (from x in ent.SetupHospitalBillNumbers
                                                             where x.DepartmentName == "Deposit" && x.FiscalYearId == 1
                                                             select x).First();
                billNumberDeposit.BillNumber = billNumberDeposit.BillNumber + 1;
                ent.SaveChanges();

                return(SaveDepositMaster.PatientDepositMasterId);
            }
        }
        public int Insert(EmergecyMasterModel model)
        {
            int i = 0;

            using (EHMSEntities ent = new EHMSEntities())
            {
                int maxemerid;
                var query = ent.EmergencyMasters.Where(m => m.EmergencyMasterId == ent.EmergencyMasters.Max(n => n.EmergencyMasterId)).SingleOrDefault();
                if (query == null)
                {
                    maxemerid = 1;
                }
                else
                {
                    maxemerid = query.EmergencyMasterId + 1;
                }

                var objToSaveOpd = new OpdMaster()
                {
                    PatientTitle        = model.ObjOpdMaster.PatientTitle,
                    FirstName           = model.ObjOpdMaster.FirstName,
                    MiddleName          = model.ObjOpdMaster.MiddleName,
                    LastName            = model.ObjOpdMaster.LastName,
                    Sex                 = model.ObjOpdMaster.Sex,
                    AgeYear             = model.ObjOpdMaster.AgeYear,
                    MaritalStatus       = model.ObjOpdMaster.MaritalStatus,
                    BloodGroup          = model.ObjOpdMaster.BloodGroup,
                    RegistrationDate    = DateTime.Now,
                    RegistrationSource  = "Emer",
                    CreatedBy           = HospitalManagementSystem.Utility.GetCurrentLoginUserId(),
                    DepartmentId        = Utility.GetCurrentUserDepartmentId(),
                    DepartmentPatientId = maxemerid,
                    CreatedDate         = DateTime.Now,
                    RegistrationMode    = "Visit",
                    Address             = model.ObjOpdMaster.Address,
                    Status              = true,
                    PaidOnPaid          = true,
                    CountryID           = model.ObjOpdMaster.CountryID
                };

                ent.OpdMasters.Add(objToSaveOpd);
                ent.SaveChanges();

                var objToSave = AutoMapper.Mapper.Map <EmergecyMasterModel, EmergencyMaster>(model);
                try
                {
                    objToSave.OpdMasterId     = maxemerid;
                    objToSave.EmergencyNumber = maxemerid;
                    objToSave.SerialNumber    = maxemerid;
                    objToSave.CreatedBy       = HospitalManagementSystem.Utility.GetCurrentLoginUserId();
                    objToSave.Status          = 1;
                    objToSave.CreatedDate     = DateTime.Today;
                    objToSave.OutcomeTypeId   = 1;
                    objToSave.OpdMasterId     = objToSaveOpd.OpdID;
                    ent.EmergencyMasters.Add(objToSave);
                    ent.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                          eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                              ve.PropertyName, ve.ErrorMessage);
                        }
                    }
                    throw;
                }



                var objtosavedetails = AutoMapper.Mapper.Map <EmergencyTriageModel, EmergencyTriage>(model.EmergencyTriageModel);
                objtosavedetails.EmergencyMasterId = objToSave.EmergencyMasterId;
                objtosavedetails.sourceTypeId      = 1;
                objtosavedetails.SourceId          = 1;
                objtosavedetails.TriageLevel       = 1;
                ent.EmergencyTriages.Add(objtosavedetails);
                //feedetails
                var objTosaveFeedetails = AutoMapper.Mapper.Map <EmergencyFeeDetailsModel, EmergencyFeeDetail>(model.EmergencyFeeDetailsModel);
                // decimal? aa = objTosaveFeedetails.DoctorFee;
                objTosaveFeedetails.EmergencyMasterId       = objToSave.EmergencyMasterId;
                objTosaveFeedetails.FeeDate                 = objToSave.CreatedDate;
                objTosaveFeedetails.OtherDiscountPercentage = 0;
                objTosaveFeedetails.DoctorFee               = 0;
                objTosaveFeedetails.RegistrationFee         = model.EmergencyFeeDetailsModel.RegistrationFee;
                objTosaveFeedetails.TotalAmount             = model.EmergencyFeeDetailsModel.RegistrationFee;
                ent.EmergencyFeeDetails.Add(objTosaveFeedetails);

                //Legder&Transaction
                string LedgerName = "A/C " + model.ObjOpdMaster.FirstName + " " + (model.ObjOpdMaster.MiddleName + " " ?? string.Empty) + model.ObjOpdMaster.LastName;


                var objtoInsertLedger = new GL_LedgerMaster()
                {
                    AccountGroupID    = 1,
                    AccountSubGroupID = 1,
                    AccountTypeID     = 1,
                    CreatedBy         = Utility.GetCurrentLoginUserId(),
                    CreatedDate       = DateTime.Now,
                    DepartmentID      = 1001,
                    LedgerName        = LedgerName,
                    SourceID          = objToSaveOpd.OpdID,
                    LedgerSourceType  = "Patient",
                    Status            = 1
                };

                ent.GL_LedgerMaster.Add(objtoInsertLedger);
                ent.SaveChanges();


                var objToSavePatientLogMaster = new PatientLogMaster()
                {
                    PatientId        = objToSaveOpd.OpdID,
                    RegistrationDate = Convert.ToDateTime(objToSave.CreatedDate),
                    DepartmentId     = 1001,
                    Status           = true
                };

                ent.PatientLogMasters.Add(objToSavePatientLogMaster);
                ent.SaveChanges();

                //Patient logmaster max id

                int?intPatientLogID = objToSavePatientLogMaster.OpdMasterLogId;

                //if (intPatientLogID == null)
                //{
                //    intPatientLogID = 1;
                //}
                //else
                //{
                //    intPatientLogID = intPatientLogID;

                //}

                int    BillNumberInt = Utility.GetMaxBillNumberFromDepartment("Hospital", 1);
                string BillNumberStr = "BL-" + BillNumberInt.ToString();

                //Insert into new table

                //Emergency Ticket
                var ObjCentralizedBillingDetails = new CentralizedBillingDetail()
                {
                    BillNo        = BillNumberInt,
                    AccountHeadID = 357,//Emergency Ticket
                    Amount        = Convert.ToDecimal(404),
                    Status        = true,
                    DepartmentId  = 1001,
                    Times         = 1
                };
                ent.CentralizedBillingDetails.Add(ObjCentralizedBillingDetails);

                var ObjCentralizedBillingDetailstax = new CentralizedBillingDetail()
                {
                    BillNo        = BillNumberInt,
                    AccountHeadID = 1261,//Emergency Ticket
                    Amount        = Convert.ToDecimal(20.2),
                    Status        = true,
                    DepartmentId  = 1001,
                    Times         = 1
                };

                ent.CentralizedBillingDetails.Add(ObjCentralizedBillingDetailstax);


                var ObjCentralizedBillingPaymentType = new CentralizedBillingPaymentType()
                {
                    BillNo           = BillNumberInt,
                    PaymentTypeID    = 372,//Cash or bank from coa
                    PaymentSubTypeID = 0,
                    Amount           = model.EmergencyFeeDetailsModel.RegistrationFee,
                    Status           = true
                };
                ent.CentralizedBillingPaymentTypes.Add(ObjCentralizedBillingPaymentType);

                var ObjCentralizedBillingMaster = new CentralizedBillingMaster()
                {
                    BillNo              = BillNumberInt,
                    BillDate            = DateTime.Today,
                    TotalBillAmount     = model.EmergencyFeeDetailsModel.RegistrationFee,
                    TotalDiscountID     = 0,
                    TotalDiscountAmount = 0,
                    Narration1          = "Narraion",
                    Narration2          = "",
                    DepartmentName      = "Emergency",
                    SubDepartmentId     = 1,
                    PatientLogId        = (int)intPatientLogID,
                    PatientId           = objToSaveOpd.OpdID,
                    //JVNumber=1
                    JVStatus            = false,
                    CreatedDepartmentId = HospitalManagementSystem.Utility.GetCurrentUserDepartmentId(),
                    CreatedBy           = HospitalManagementSystem.Utility.GetCurrentLoginUserId(),
                    CreatedDate         = DateTime.Now,
                    Remarks             = "Emergency",
                    Status         = true,
                    BranchId       = 1,
                    IsHandover     = false,
                    ReceiptId      = 0,
                    ReturnedAmount = Convert.ToDecimal(0),
                    TenderAmount   = Convert.ToDecimal(0)
                };
                ent.CentralizedBillingMasters.Add(ObjCentralizedBillingMaster);


                var objtoSaveCentralizedBilling = new CentralizedBilling()
                {
                    AccountHeadId       = 19,
                    Amount              = model.EmergencyFeeDetailsModel.RegistrationFee,
                    AmountDate          = DateTime.Now,
                    PaymentType         = "Cash",
                    Narration1          = "Fee Details",
                    Narration2          = "Emergecy Fee",
                    DepartmentName      = "Emergency",
                    SubDepartmentId     = Utility.GetCurrentUserDepartmentId(),
                    BillNumber          = BillNumberStr,
                    LedgerMasterId      = objtoInsertLedger.LedgerMasterID,
                    PatientLogId        = (int)intPatientLogID,
                    PatientId           = objToSaveOpd.OpdID,
                    JVStatus            = false,
                    CreatedBy           = Utility.GetCurrentLoginUserId(),
                    CreatedDepartmentId = Utility.GetCurrentUserDepartmentId(),
                    CreatedDate         = DateTime.Now,
                    Remarks             = "Emergency",
                    PaidOnPaid          = false,
                    Status              = true
                };
                ent.CentralizedBillings.Add(objtoSaveCentralizedBilling);

                var objToInsertTran = new GL_Transaction()
                {
                    Amount            = model.EmergencyFeeDetailsModel.RegistrationFee,
                    DepartmentID      = 1001,
                    Dr_Cr             = "Cr",
                    LedgerMasterID    = objtoInsertLedger.LedgerMasterID,
                    Narration1        = "Emergency Fee",
                    RefNo             = maxemerid,
                    TransactionDate   = DateTime.Now,
                    TransactionTypeID = 1,
                    FeeTypeId         = 19,//emergency fee
                    CreatedBy         = HospitalManagementSystem.Utility.GetCurrentLoginUserId(),
                    CreatedDate       = DateTime.Now,
                };

                ent.GL_Transaction.Add(objToInsertTran);


                //update Bill Number
                SetupHospitalBillNumber billNumber = (from x in ent.SetupHospitalBillNumbers
                                                      where x.DepartmentName == "Hospital" && x.FiscalYearId == 1
                                                      select x).First();
                billNumber.BillNumber = billNumber.BillNumber + 1;


                //update vouchernumber
                //SetupVoucherNumber vouchernumber = (from x in ent.SetupVoucherNumber
                //                                    where x.DepartmentID == 1 && x.FiscalYear == 1
                //                                    select x).First();
                //vouchernumber.VoucherNo = vouchernumber.VoucherNo + 1;

                i = ent.SaveChanges();
            }

            return(i);
        }