public ActionResult create(int id)
        {
            try
            {
                ViewBag.emp       = dbcontext.Employee_Profile.Where(m => m.Active == true).ToList().Select(m => new { Code = m.Code + "--[" + m.Name + ']', ID = m.ID });
                ViewBag.loan_type = dbcontext.LoanInAdvanceSetup.ToList().Select(m => new { Code = m.LoanTypeCode + "--[" + m.LoanTypeDesc + ']', ID = m.ID });

                var loan            = dbcontext.LoanRequest.FirstOrDefault(m => m.ID == id);
                var installment     = dbcontext.LoanInstallment.Where(m => m.LoanRequestNumber == loan.LoanRequestNumber).ToList();
                var loan_adjustment = new LoanAdjustment();
                //////////////////////////////////
                var stru         = dbcontext.StructureModels.FirstOrDefault(m => m.All_Models == ChModels.Payroll).Structure_Code;
                var All_requests = dbcontext.LoanAdjustment.ToList();
                if (All_requests.Count() == 0)
                {
                    loan_adjustment.TransactionNumber = stru + "1";
                }
                else
                {
                    loan_adjustment.TransactionNumber = stru + (All_requests.LastOrDefault().ID + 1).ToString();
                }
                //////////////////////////////////

                loan_adjustment.TransactionDate   = DateTime.Now.Date;
                loan_adjustment.LoanRequestNumber = loan.LoanRequestNumber;
                loan_adjustment.PaidAmount        = 0;
                loan_adjustment.InstallmentAmount = loan.LoanInstallmentAmount;
                loan_adjustment.InstallmentNumber = loan.NumberOfInstallment.ToString();
                loan_adjustment.TotalPaidAmount   = loan.TotalPaidAmount;
                loan_adjustment.TotalUnpaidAmount = loan.TotalRemainingAmount;

                /////////////////////////////////
                var installmentVM = new List <loan_installmentVM>();
                foreach (var item in installment)
                {
                    installmentVM.Add(new loan_installmentVM {
                        freez = false, LoanInstallment = item
                    });
                }
                var Our_model = new adjustmentVM {
                    type = Type.Monthly, loan = loan, installment = installmentVM, adjustment = loan_adjustment
                };
                return(View(Our_model));
            }
            catch (Exception)
            {
                return(RedirectToAction("index"));
            }
        }
        public ActionResult create(adjustmentVM model, FormCollection Form)
        {
            try
            {
                ViewBag.emp       = dbcontext.Employee_Profile.Where(m => m.Active == true).ToList().Select(m => new { Code = m.Code + "--[" + m.Name + ']', ID = m.ID });
                ViewBag.loan_type = dbcontext.LoanInAdvanceSetup.ToList().Select(m => new { Code = m.LoanTypeCode + "--[" + m.LoanTypeDesc + ']', ID = m.ID });
                var loan = dbcontext.LoanRequest.FirstOrDefault(m => m.ID == model.loan.ID);
                var sta  = dbcontext.status.FirstOrDefault(m => m.ID == loan.statusID);
                if (sta.statu == check_status.Approved || sta.statu == check_status.Rejected || sta.statu == check_status.Closed || sta.statu == check_status.Canceled)
                {
                    TempData["message"] = HR.Resource.training.status_message;
                    return(RedirectToAction("index"));
                }
                var installment  = dbcontext.LoanInstallment.Where(m => m.IsPaid == false && m.IsActive == true && m.IsFreeze == false && m.LoanRequestNumber == loan.LoanRequestNumber).ToList();
                var installment2 = dbcontext.LoanInstallment.Where(m => m.LoanRequestNumber == loan.LoanRequestNumber).ToList();
                model.installment = new List <loan_installmentVM>();
                foreach (var item in installment2)
                {
                    model.installment.Add(new loan_installmentVM {
                        freez = false, LoanInstallment = item
                    });
                }
                if (model.type == Type.Money)
                {
                    var loan_request_number2 = "";
                    var paid  = 0;
                    var flag2 = false;
                    foreach (var item in installment)
                    {
                        flag2 = true;
                        if (model.adjustment.PaidAmount == 0)
                        {
                            break;
                        }
                        if (model.adjustment.PaidAmount < item.UnpaidAmount)////القيمه المدفوعة اقل من قيمة القسط الحالى
                        {
                            item.PaidAmount             = item.UnpaidAmount - model.adjustment.PaidAmount;
                            item.UnpaidAmount           = item.UnpaidAmount - item.PaidAmount;
                            model.adjustment.PaidAmount = model.adjustment.PaidAmount - item.PaidAmount;
                            loan_request_number2        = item.LoanRequestNumber;
                            paid += (int)item.PaidAmount;
                            //====
                            var Payment_Type_Source_Document_ = Payment_Type_Source_Document.Loan.GetHashCode();
                            var transaction = dbcontext.Employee_Payroll_Transactions.FirstOrDefault(m => m.SourceDocumentDescription == item.ID.ToString() && m.SourceDocumentType == Payment_Type_Source_Document_);
                            transaction.TransactionValue = item.UnpaidAmount;
                            dbcontext.SaveChanges();
                            //====
                        }
                        else if (model.adjustment.PaidAmount > item.UnpaidAmount && model.adjustment.PaidAmount <= loan.TotalRemainingAmount)///القيمة المدفوعة اكبر من قيمة القسط الحالى
                        {
                            item.InstallmenNotes        = "this installment payed by adjustment with number";
                            item.IsPaid                 = true;
                            model.adjustment.PaidAmount = model.adjustment.PaidAmount - item.UnpaidAmount;
                            item.PaidAmount             = item.UnpaidAmount;
                            item.UnpaidAmount           = 0;
                            loan_request_number2        = item.LoanRequestNumber;
                            paid += (int)item.PaidAmount;
                            //====
                            var Payment_Type_Source_Document_ = Payment_Type_Source_Document.Loan.GetHashCode();
                            var transaction = dbcontext.Employee_Payroll_Transactions.FirstOrDefault(m => m.SourceDocumentDescription == item.ID.ToString() && m.SourceDocumentType == Payment_Type_Source_Document_);
                            transaction.TransactionValue = item.UnpaidAmount;
                            dbcontext.SaveChanges();
                            //====
                        }
                        else if (model.adjustment.PaidAmount == item.UnpaidAmount)//القيمة المدفوعة بتساوى قيمة القسط الحالى
                        {
                            item.InstallmenNotes        = "this installment payed by adjustment with number";
                            item.IsPaid                 = true;
                            model.adjustment.PaidAmount = model.adjustment.PaidAmount - item.UnpaidAmount;
                            item.PaidAmount             = item.UnpaidAmount;
                            item.UnpaidAmount           = 0;
                            loan_request_number2        = item.LoanRequestNumber;
                            paid += (int)item.PaidAmount;
                            //====
                            var Payment_Type_Source_Document_ = Payment_Type_Source_Document.Loan.GetHashCode();
                            var transaction = dbcontext.Employee_Payroll_Transactions.FirstOrDefault(m => m.SourceDocumentDescription == item.ID.ToString() && m.SourceDocumentType == Payment_Type_Source_Document_);
                            transaction.TransactionValue = item.UnpaidAmount;
                            dbcontext.SaveChanges();
                            //====
                        }
                        else
                        {
                            TempData["Message"] = "you paid more than Remaining amount";
                            return(View(model));
                        }

                        dbcontext.SaveChanges();
                        //===
                        var loan_request = dbcontext.LoanRequest.FirstOrDefault(m => m.LoanRequestNumber == loan_request_number2);
                        loan_request.TotalPaidAmount      = loan_request.TotalPaidAmount + item.PaidAmount;
                        loan_request.TotalRemainingAmount = loan_request.TotalRemainingAmount - item.PaidAmount;
                        dbcontext.SaveChanges();
                        //===
                    }
                    if (flag2)
                    {
                        model.adjustment.CreatedBy         = User.Identity.Name;
                        model.adjustment.CreatedDate       = DateTime.Now.Date;
                        model.adjustment.LoanRequestNumber = loan.LoanRequestNumber;
                        model.adjustment.PaidAmount        = paid;
                        model.adjustment.TotalPaidAmount   = loan.TotalPaidAmount;
                        model.adjustment.TotalUnpaidAmount = loan.TotalRemainingAmount;
                        dbcontext.LoanAdjustment.Add(model.adjustment);
                        dbcontext.SaveChanges();
                    }
                }
                else
                {
                    ////////////////////////////////////
                    double?paid = 0.0;
                    bool   flag = false;
                    var    loan_request_number = "";
                    var    selected            = Form["frezz"].Split(',');
                    foreach (var item in selected)
                    {
                        if (item != " ")
                        {
                            var ID = int.Parse(item);
                            var spacial_installment = dbcontext.LoanInstallment.FirstOrDefault(m => m.ID == ID);
                            if (spacial_installment.IsPaid == false && spacial_installment.IsActive == true)
                            {
                                paid = paid + spacial_installment.UnpaidAmount;
                                spacial_installment.PaidAmount   = spacial_installment.UnpaidAmount;
                                spacial_installment.UnpaidAmount = 0;
                                spacial_installment.IsPaid       = true;
                                dbcontext.SaveChanges();
                                flag = true;
                                loan_request_number = spacial_installment.LoanRequestNumber;
                                //====
                                var Payment_Type_Source_Document_ = Payment_Type_Source_Document.Loan.GetHashCode();

                                var transaction = dbcontext.Employee_Payroll_Transactions.FirstOrDefault(m => m.SourceDocumentDescription == spacial_installment.ID.ToString() && m.SourceDocumentType == Payment_Type_Source_Document_);
                                transaction.TransactionValue = 0;
                                dbcontext.SaveChanges();
                                //====
                            }
                        }
                    }
                    if (flag)
                    {
                        var loan_request = dbcontext.LoanRequest.FirstOrDefault(m => m.LoanRequestNumber == loan_request_number);
                        loan_request.TotalPaidAmount      = loan_request.TotalPaidAmount + paid;
                        loan_request.TotalRemainingAmount = loan_request.TotalRemainingAmount - paid;
                        dbcontext.SaveChanges();
                        ///////////
                        //////////
                        model.adjustment.CreatedBy         = User.Identity.Name;
                        model.adjustment.CreatedDate       = DateTime.Now.Date;
                        model.adjustment.LoanRequestNumber = loan.LoanRequestNumber;
                        model.adjustment.PaidAmount        = paid;
                        model.adjustment.TotalPaidAmount   = loan.TotalPaidAmount;
                        model.adjustment.TotalUnpaidAmount = loan.TotalRemainingAmount;
                        dbcontext.LoanAdjustment.Add(model.adjustment);
                        dbcontext.SaveChanges();
                    }
                }
                //=================================check for alert==================================
                var get_result_check = HR.Controllers.check.check_alert("loan adjustmetn transaction", HR.Models.user.Action.Create, HR.Models.user.type_field.form);
                if (get_result_check != null)
                {
                    var inbox = new Models.user.Alert_inbox {
                        send_from_user_id = User.Identity.Name, send_to_user_id = get_result_check.send_to_ID_user, title = get_result_check.Subject, Subject = get_result_check.Message
                    };
                    if (get_result_check.until != null)
                    {
                        if (get_result_check.until.Value.Year != 0001)
                        {
                            inbox.until = get_result_check.until;
                        }
                    }
                    ApplicationDbContext dbcontext = new ApplicationDbContext();
                    dbcontext.Alert_inbox.Add(inbox);
                    dbcontext.SaveChanges();
                }
                //===================================================================================
                ////////////////////////////////
                return(RedirectToAction("index"));
            }
            catch (Exception)
            {
                return(View(model));
            }
        }