public ActionResult post_to_poyroll(int?id)
        {
            try
            {
                if (id != null)
                {
                    var punishment = dbcontext.Discipline_PunishmentTransaction.FirstOrDefault(m => m.ID == id);
                    var stats      = dbcontext.status.FirstOrDefault(m => m.ID == punishment.stat_ID);
                    if (stats.statu == check_status.Approved && punishment.Posted_to_payroll == false)
                    {
                        var details = dbcontext.Discipline_PunishmentTransaction_Detail.Where(m => m.Transaction_Number == punishment.Transaction_Number).ToList();
                        foreach (var item in details)
                        {
                            var ID_pen          = int.Parse(item.PenaltyItem_Code);
                            var header_penality = dbcontext.Discipline_PenaltyItem_Header.FirstOrDefault(m => m.ID == ID_pen);
                            if (header_penality.LinkToPayroll == true)
                            {
                                //var salary_items = dbcontext.Discipline_PenaltyItem_Detail.Where(m => m.PenaltyItem_Code == header_penality.ID.ToString()).ToList();
                                var Header_group_id = int.Parse(header_penality.CodeGroupID);
                                var Salcode_header  = dbcontext.SalaryCodeGroup_Header.FirstOrDefault(a => a.ID == Header_group_id);
                                var Salcode         = dbcontext.SalaryCodeGroup_Detail.Where(a => a.CodeGroupID == Salcode_header.CodeGroupID).ToList();

                                foreach (var item2 in Salcode)
                                {
                                    ///////salary item


                                    var new_Record = new Employee_Payroll_Transactions();
                                    var stru       = dbcontext.StructureModels.FirstOrDefault(m => m.All_Models == ChModels.Payroll).Structure_Code;
                                    var model_     = dbcontext.Employee_Payroll_Transactions.ToList();
                                    if (model_.Count() == 0)
                                    {
                                        new_Record.TransactionNumber = stru + "1";
                                    }
                                    else
                                    {
                                        new_Record.TransactionNumber = stru + (model_.LastOrDefault().ID + 1).ToString();
                                    }
                                    //============================================================================================
                                    var emp_id = int.Parse(punishment.Employee_Code);
                                    var emp    = dbcontext.Employee_Profile.FirstOrDefault(a => a.ID == emp_id);
                                    new_Record.Employee_Code = emp.Code;

                                    var salary_item = dbcontext.salary_code.FirstOrDefault(a => a.SalaryCodeID == item2.SalaryCodeID);

                                    new_Record.SalaryCodeID = item2.SalaryCodeID;
                                    //==============================================================================================
                                    new_Record.TransactionDate = punishment.Transaction_Date;
                                    string Transaction = punishment.Transaction_Date.ToString();
                                    new_Record.TransactionMonth = DateTime.Parse(Transaction).Month;
                                    new_Record.TransactionYear  = DateTime.Parse(Transaction).Year;
                                    new_Record.EffectiveDate    = punishment.Event_Date;
                                    string Effective = punishment.Event_Date.ToString();
                                    new_Record.EffectiveMonth   = DateTime.Parse(Effective).Month;
                                    new_Record.EffectiveYear    = DateTime.Parse(Effective).Year;
                                    new_Record.TransactionValue = (double?)item2.DefaultValue;


                                    /////    new_Record.JournalName_BatchCode = model.Employee_Payroll_Transactions.JournalName_BatchCode;
                                    new_Record.CreatedDate = DateTime.Now.Date;
                                    new_Record.CreatedBy   = User.Identity.Name;

                                    new_Record.SourceDocumentType     = Payment_Type_Source_Document.penalites.GetHashCode();
                                    new_Record.SourceDocumentRefrence = punishment.Transaction_Number;
                                    var details_punishment = dbcontext.Discipline_PunishmentTransaction_Detail.FirstOrDefault(m => m.Transaction_Number == punishment.Transaction_Number);
                                    new_Record.SourceDocumentDescription = details_punishment.penal_des;
                                    new_Record.SourceDocumentNotes       = details_punishment.penal_des + '/' + punishment.Transaction_Number;
                                    /////new_Record.TransactionNotes = model.Employee_Payroll_Transactions.TransactionNotes;
                                    // new_Record.CostCenterCode = emp.CostCenterCode;
                                    new_Record.CostCenterCode = "88";
                                    if ((bool)salary_item.EnableExtendedFields)
                                    {
                                        new_Record.ExtendedFields_Code = salary_item.ExtendedFields_Code;
                                    }
                                    else
                                    {
                                        new_Record.ExtendedFields_Code = null;
                                    }
                                    //    new_Record.Contract_Number = model.Employee_Payroll_Transactions.Contract_Number;

                                    new_Record.TransactionStatus = check_status.created.GetHashCode();
                                    new_Record.check_status      = HR.Models.Infra.check_status.created;
                                    new_Record.name_state        = nameof(check_status.created);
                                    var username = User.Identity.Name;
                                    var Date     = Convert.ToDateTime("1/1/1900");
                                    var s        = new status {
                                        statu = HR.Models.Infra.check_status.created, created_by = username, Type = Models.Infra.Type.Employee_Payroll_Transactions, approved_bydate = Date, cancaled_bydate = Date, created_bydate = DateTime.Now.Date, Rejected_bydate = Date, return_to_reviewdate = Date
                                    };
                                    var st = dbcontext.status.Add(s);
                                    dbcontext.SaveChanges();
                                    new_Record.statID = s.ID;

                                    var Header = dbcontext.Employee_Payroll_Transactions.Add(new_Record);
                                    dbcontext.SaveChanges();
                                    //=============================================================================================
                                }
                            }
                        }
                        punishment.PostedBy          = User.Identity.Name;
                        punishment.PostedDate        = DateTime.Now;
                        punishment.Posted_to_payroll = true;
                        dbcontext.SaveChanges();
                        TempData["Message"] = "post to payroll successfully";
                        return(RedirectToAction("index"));
                    }
                    else
                    {
                        TempData["Message"] = "post to payroll faild";
                        return(RedirectToAction("index"));
                    }
                }


                else
                {
                    var punishment = dbcontext.Discipline_PunishmentTransaction.Where(m => m.Posted_to_payroll == false && m.stat.statu == check_status.Approved).ToList();
                    foreach (var item1 in punishment)
                    {
                        var stats = dbcontext.status.FirstOrDefault(m => m.ID == item1.stat_ID);
                        if (stats.statu == check_status.Approved && item1.Posted_to_payroll == false)
                        {
                            var details = dbcontext.Discipline_PunishmentTransaction_Detail.Where(m => m.Transaction_Number == item1.Transaction_Number).ToList();
                            foreach (var item in details)
                            {
                                var ID_pen          = int.Parse(item.PenaltyItem_Code);
                                var header_penality = dbcontext.Discipline_PenaltyItem_Header.FirstOrDefault(m => m.ID == ID_pen);
                                if (header_penality.LinkToPayroll == true)
                                {
                                    var Header_group_id = int.Parse(header_penality.CodeGroupID);
                                    var Salcode_header  = dbcontext.SalaryCodeGroup_Header.FirstOrDefault(a => a.ID == Header_group_id);
                                    var Salcode         = dbcontext.SalaryCodeGroup_Detail.Where(a => a.CodeGroupID == Salcode_header.CodeGroupID).ToList();

                                    foreach (var item2 in Salcode)
                                    {
                                        ///////salary item


                                        var new_Record = new Employee_Payroll_Transactions();
                                        var stru       = dbcontext.StructureModels.FirstOrDefault(m => m.All_Models == ChModels.Payroll).Structure_Code;
                                        var model_     = dbcontext.Employee_Payroll_Transactions.ToList();
                                        if (model_.Count() == 0)
                                        {
                                            new_Record.TransactionNumber = stru + "1";
                                        }
                                        else
                                        {
                                            new_Record.TransactionNumber = stru + (model_.LastOrDefault().ID + 1).ToString();
                                        }
                                        //============================================================================================
                                        var emp_id = int.Parse(item1.Employee_Code);
                                        var emp    = dbcontext.Employee_Profile.FirstOrDefault(a => a.ID == emp_id);
                                        new_Record.Employee_Code = emp.Code;


                                        var salary_item = dbcontext.salary_code.FirstOrDefault(a => a.SalaryCodeID == item2.SalaryCodeID);
                                        new_Record.SalaryCodeID = item2.SalaryCodeID;
                                        //==============================================================================================
                                        new_Record.TransactionDate = item1.Transaction_Date;
                                        string Transaction = item1.Transaction_Date.ToString();
                                        new_Record.TransactionMonth = DateTime.Parse(Transaction).Month;
                                        new_Record.TransactionYear  = DateTime.Parse(Transaction).Year;
                                        new_Record.EffectiveDate    = item1.Event_Date;
                                        string Effective = item1.Event_Date.ToString();
                                        new_Record.EffectiveMonth   = DateTime.Parse(Effective).Month;
                                        new_Record.EffectiveYear    = DateTime.Parse(Effective).Year;
                                        new_Record.TransactionValue = (double?)item2.DefaultValue;


                                        /////    new_Record.JournalName_BatchCode = model.Employee_Payroll_Transactions.JournalName_BatchCode;
                                        new_Record.CreatedDate = DateTime.Now.Date;
                                        new_Record.CreatedBy   = User.Identity.Name;

                                        new_Record.SourceDocumentType     = Payment_Type_Source_Document.penalites.GetHashCode();
                                        new_Record.SourceDocumentRefrence = item1.Transaction_Number;
                                        var details_punishment = dbcontext.Discipline_PunishmentTransaction_Detail.FirstOrDefault(m => m.Transaction_Number == item1.Transaction_Number);
                                        new_Record.SourceDocumentDescription = details_punishment.penal_des;
                                        new_Record.SourceDocumentNotes       = details_punishment.penal_des + '/' + item1.Transaction_Number;
                                        /////new_Record.TransactionNotes = model.Employee_Payroll_Transactions.TransactionNotes;
                                        // new_Record.CostCenterCode = emp.CostCenterCode;
                                        new_Record.CostCenterCode = "88";
                                        if ((bool)salary_item.EnableExtendedFields)
                                        {
                                            new_Record.ExtendedFields_Code = salary_item.ExtendedFields_Code;
                                        }
                                        else
                                        {
                                            new_Record.ExtendedFields_Code = null;
                                        }
                                        //    new_Record.Contract_Number = model.Employee_Payroll_Transactions.Contract_Number;

                                        new_Record.TransactionStatus = check_status.created.GetHashCode();
                                        new_Record.check_status      = HR.Models.Infra.check_status.created;
                                        new_Record.name_state        = nameof(check_status.created);
                                        var username = User.Identity.Name;
                                        var Date     = Convert.ToDateTime("1/1/1900");
                                        var s        = new status {
                                            statu = HR.Models.Infra.check_status.created, created_by = username, Type = Models.Infra.Type.Employee_Payroll_Transactions, approved_bydate = Date, cancaled_bydate = Date, created_bydate = DateTime.Now.Date, Rejected_bydate = Date, return_to_reviewdate = Date
                                        };
                                        var st = dbcontext.status.Add(s);
                                        dbcontext.SaveChanges();
                                        new_Record.statID = s.ID;

                                        var Header = dbcontext.Employee_Payroll_Transactions.Add(new_Record);
                                        dbcontext.SaveChanges();
                                        //=============================================================================================
                                    }
                                    item1.PostedBy          = User.Identity.Name;
                                    item1.PostedDate        = DateTime.Now;
                                    item1.Posted_to_payroll = true;
                                    dbcontext.SaveChanges();
                                }
                            }
                        }
                    }
                    TempData["Message"] = "post to payroll successfully";
                    return(RedirectToAction("index"));
                }
            }
            catch (Exception)
            {
                return(RedirectToAction("index"));
            }
        }
        public ActionResult Create(Employee_Payroll_Transactions model, FormCollection form, string[] joblevelgrade, string[] JoblevelClass, string[] JobClass)
        {
            try
            {
                var Month      = form["Month"].Split(',');
                var Year       = form["Year"].Split(',');
                var percentage = form["percentage"].Split(',');


                if (joblevelgrade[0] == "1")
                {
                    var Joblevelgrade = dbcontext.Job_level_gradee.ToList();
                    foreach (var item in Joblevelgrade)
                    {
                        int    ID = item.ID;
                        var    min_basic_salary = item.min_basic_salary;
                        double year             = double.Parse(Year[0]);
                        double month            = double.Parse(Month[0]);
                        double Percentage       = double.Parse(percentage[0]);
                        var    Allowance        = (min_basic_salary * Percentage) / 100;
                        double newsalary        = (Allowance + min_basic_salary);
                        var    new_details      = new special_allowance_job_level_grade {
                            Job_level_gradeID = ID, Year = year, Month = month, Percentage = Percentage, Allowance_amount = Allowance, pervious_basic = min_basic_salary, new_basic_sallary = newsalary
                        };
                        dbcontext.special_allowance_job_level_grade.Add(new_details);
                        dbcontext.SaveChanges();
                        item.min_basic_salary = newsalary;
                        dbcontext.SaveChanges();
                    }
                }
                if (JoblevelClass[0] == "1")
                {
                    var jobleveclass = dbcontext.Job_level_class.ToList();
                    foreach (var item in jobleveclass)
                    {
                        int    ID = item.ID;
                        var    min_basic_salary = item.min_basic_salary;
                        double year             = double.Parse(Year[0]);
                        double month            = double.Parse(Month[0]);
                        double Percentage       = double.Parse(percentage[0]);
                        var    Allowance        = (min_basic_salary * Percentage) / 100;
                        double newsalary        = (Allowance + min_basic_salary);
                        var    new_details      = new special_allowance_job_level_class {
                            Job_level_classID = ID, Year = year, Month = month, Percentage = Percentage, Allowance_amount = Allowance, pervious_basic = min_basic_salary, new_basic_sallary = newsalary
                        };
                        dbcontext.special_allowance_job_level_class.Add(new_details);
                        dbcontext.SaveChanges();
                        item.min_basic_salary = newsalary;
                        dbcontext.SaveChanges();
                    }
                }
                if (JobClass[0] == "1")
                {
                    var joblevelsetup = dbcontext.job_level_setup.ToList();
                    foreach (var item in joblevelsetup)
                    {
                        int    ID = item.ID;
                        var    min_basic_salary = item.min_basic_salary;
                        double year             = double.Parse(Year[0]);
                        double month            = double.Parse(Month[0]);
                        double Percentage       = double.Parse(percentage[0]);
                        var    Allowance        = (min_basic_salary * Percentage) / 100;
                        double newsalary        = (Allowance + min_basic_salary);
                        var    new_details      = new special {
                            job_level_setupID = ID, Year = year, Month = month, Percentage = Percentage, Allowance_amount = Allowance, pervious_basic = min_basic_salary, new_basic_sallary = newsalary
                        };
                        dbcontext.special.Add(new_details);
                        dbcontext.SaveChanges();
                        item.min_basic_salary = newsalary;
                        dbcontext.SaveChanges();
                    }
                }

                return(RedirectToAction("index"));
            }
            catch (Exception e)
            {
                return(View(model));
            }
        }