public async Task <IActionResult> Edit(PayslipMaster payslipMaster)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (payslipMaster.Month == "" || payslipMaster.Month == null)
                    {
                        ModelState.AddModelError(string.Empty, "Please select month and try again.");
                        ViewBag.EmployeeCode = new SelectList(_userManager.Users.OrderBy(p => p.EmployeeCode), "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);
                        return(View(payslipMaster));
                    }

                    if (payslipMaster.Year < 2019)
                    {
                        ModelState.AddModelError(string.Empty, "Please select year and try again.");
                        ViewBag.EmployeeCode = new SelectList(_userManager.Users.OrderBy(p => p.EmployeeCode), "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);
                        return(View(payslipMaster));
                    }

                    // var exists = db.PayslipMasters.Any(p =>
                    //      p.Month == payslipMaster.Month &&
                    //      p.Year == payslipMaster.Year &&
                    //      p.EmployeeCode == payslipMaster.EmployeeCode);

                    MonthsEnum month = GetFinDate(payslipMaster.Month);

                    payslipMaster.UpdatedBy   = User.Identity.Name;
                    payslipMaster.UpdatedDate = DateTime.Now;
                    payslipMaster.FinDate     = new DateTime(payslipMaster.Year, (int)month, (int)month == 3 ? 31 : 1);

                    // if (exists)
                    // {
                    //     ModelState.AddModelError(string.Empty, "Payslip already exist for this month.");
                    //     ViewBag.EmployeeCode = new SelectList(_userManager.Users, "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);
                    //     return View(payslipMaster);
                    // }

                    //_dbContext.PayslipMasters.Add(payslipMaster);
                    db.Entry(payslipMaster).State = EntityState.Modified;
                    await _dbContext.SaveChangesAsync();

                    return(RedirectToAction("Index"));
                }

                ViewBag.EmployeeCode = new SelectList(_userManager.Users.OrderBy(p => p.EmployeeCode), "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);

                return(View(payslipMaster));
            }
            catch (Exception ex)
            {
                if (ex.InnerException.Message.Contains("IX_PayslipMasters_Month_Year_EmployeeCode"))
                {
                    ViewBag.Message = " Payslip already exist for this month.";
                }

                ViewBag.EmployeeCode = new SelectList(_userManager.Users.OrderBy(p => p.EmployeeCode), "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);
                return(View(payslipMaster));
            }
        }
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            PayslipMaster payslipMaster = await db.PayslipMasters.FindAsync(id);

            if (payslipMaster == null)
            {
                return(NotFound());
            }

            ViewBag.EmployeeCode = new SelectList(_userManager.Users, "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);

            return(View(payslipMaster));
        }
        public async Task <IActionResult> Create(PayslipMaster payslipMaster)
        {
            if (ModelState.IsValid)
            {
                if (payslipMaster.Month == "" || payslipMaster.Month == null)
                {
                    ModelState.AddModelError(string.Empty, "Please select month and try again.");
                    ViewBag.EmployeeCode = new SelectList(_userManager.Users, "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);
                    return(View(payslipMaster));
                }

                if (payslipMaster.Year < 2019)
                {
                    ModelState.AddModelError(string.Empty, "Please select year and try again.");
                    ViewBag.EmployeeCode = new SelectList(_userManager.Users, "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);
                    return(View(payslipMaster));
                }

                var exists = db.PayslipMasters.Any(p =>
                                                   p.Month == payslipMaster.Month &&
                                                   p.Year == payslipMaster.Year &&
                                                   p.EmployeeCode == payslipMaster.EmployeeCode);

                MonthsEnum month = GetFinDate(payslipMaster.Month);

                payslipMaster.CreatedBy   = User.Identity.Name;
                payslipMaster.CreatedDate = DateTime.Now;
                payslipMaster.FinDate     = new DateTime(payslipMaster.Year, (int)month, (int)month == 3 ? 31 : 1);

                if (exists)
                {
                    ModelState.AddModelError(string.Empty, "Payslip already exist for this month.");
                    ViewBag.EmployeeCode = new SelectList(_userManager.Users, "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);
                    return(View(payslipMaster));
                }

                _dbContext.PayslipMasters.Add(payslipMaster);
                await _dbContext.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            ViewBag.EmployeeCode = new SelectList(_userManager.Users, "EmployeeCode", "EmployeeCode", payslipMaster.EmployeeCode);

            return(View(payslipMaster));
        }
        //, out int count
        public List <PayslipMaster> GetRec(PaySlipMasterViewModel model)
        {
            List <PayslipMaster> payslipMasters = new List <PayslipMaster>();
            var fileName = $"{Directory.GetCurrentDirectory()}{@"\wwwroot\files"}" + "\\" + model.ExcelFile.FileName;

            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
            //int cnt = 0;
            using (var stream = System.IO.File.Open(fileName, FileMode.Open, FileAccess.Read))
            {
                using (var reader = ExcelReaderFactory.CreateReader(stream))
                {
                    while (reader.Read())
                    {
                        if (!reader.GetValue(0).ToString().Contains("SNO"))
                        {
                            bool exists = db.PayslipMasters.Any(p =>
                                                                p.Month == model.Month &&
                                                                p.Year == model.Year &&
                                                                p.EmployeeCode == reader.GetValue(1).ToString());

                            if (exists)
                            {
                                continue;
                            }

                            MonthsEnum month = GetFinDate(model.Month);

                            var payslip = new PayslipMaster()
                            {
                                EmployeeCode = reader.GetValue(1).ToString(),
                                WorkingDays  = Convert.ToInt32(reader.GetValue(2).ToString()),
                                //GrossPay = Convert.ToDouble(reader.GetValue(3).ToString()),
                                Basic           = Convert.ToDouble(reader.GetValue(3).ToString()),
                                HRA             = Convert.ToDouble(reader.GetValue(4).ToString()),
                                TA              = Convert.ToDouble(reader.GetValue(5).ToString()),
                                LTA             = Convert.ToDouble(reader.GetValue(6).ToString()),
                                CEA             = Convert.ToDouble(reader.GetValue(7).ToString()),
                                SPL             = Convert.ToDouble(reader.GetValue(8).ToString()),
                                Arrears         = Convert.ToDouble(reader.GetValue(9).ToString()),
                                MonthlyGross    = Convert.ToDouble(reader.GetValue(10).ToString()),
                                EmpEPF          = Convert.ToDouble(reader.GetValue(11).ToString()),
                                EmpESI          = Convert.ToDouble(reader.GetValue(12).ToString()),
                                TAX             = Convert.ToDouble(reader.GetValue(13).ToString()),
                                TDS             = Convert.ToDouble(reader.GetValue(14).ToString()),
                                OtherDeduction  = Convert.ToDouble(reader.GetValue(15).ToString()),
                                TotalDeductions = Convert.ToDouble(reader.GetValue(16).ToString()),
                                TakeHome        = Convert.ToDouble(reader.GetValue(17).ToString()),

                                Month       = model.Month,
                                Year        = model.Year,
                                CreatedBy   = User.Identity.Name,
                                CreatedDate = DateTime.Now,
                                FinDate     = new DateTime(model.Year, (int)month, (int)month == 3 ? 31 : 1)
                            };

                            payslipMasters.Add(payslip);
                            //cnt++;
                        }
                    }
                }
            }
            //Inserted = true;
            //count = cnt;
            return(payslipMasters);
        }