public static InstallmentPaymentFormViewModel Create(ITInstallmentRepository installmentRepository, IMEmployeeRepository mEmployeeRepository, string loanCode)
        {
            installmentRepository.DbContext.BeginTransaction();
            InstallmentPaymentFormViewModel viewModel = new InstallmentPaymentFormViewModel();
            TInstallment ins = installmentRepository.GetLastInstallment(loanCode);

            if (ins == null)
            {
                ins = new TInstallment();
            }
            viewModel.installment = ins;
            viewModel.installment.InstallmentPaymentDate = DateTime.Today;
            installmentRepository.DbContext.RollbackTransaction();

            var       listEmployee = mEmployeeRepository.GetEmployeeByDept(EnumDepartment.COL.ToString());
            MEmployee employee     = new MEmployee();

            //mCustomer.SupplierName = "-Pilih Supplier-";
            listEmployee.Insert(0, employee);

            var collector = from emp in listEmployee
                            //where emp.DepartmentId.DepartmentName == "COLLECTOR"
                            select new { Id = emp.Id, Name = emp.PersonId != null ? emp.PersonId.PersonName : "-Pilih Kolektor-" };

            viewModel.CollectorList = new SelectList(collector, "Id", "Id", string.Empty);

            return(viewModel);
        }
        public ActionResult Payment(TInstallment viewModel, FormCollection formCollection)
        {
            string Message = string.Empty;
            bool   Success = true;

            try
            {
                _installmentRepository.DbContext.BeginTransaction();
                TInstallment installment = _installmentRepository.Get(viewModel.Id);

                ////validate receipt no
                //if (installment.InstallmentReceiptNo != formCollection["ReceiptNo"])
                //{
                //    throw new Exception("No kwitansi salah, data angsuran tidak dapat disimpan.");
                //}

                installment.EmployeeId             = viewModel.EmployeeId;
                installment.InstallmentPaymentDate = Helper.CommonHelper.ConvertToDate(formCollection["InstallmentPaymentDate"]);
                installment.InstallmentPaid        = Helper.CommonHelper.ConvertToDecimal(formCollection["InstallmentPaid"]);
                installment.InstallmentFine        = Helper.CommonHelper.ConvertToDecimal(formCollection["InstallmentFine"]);
                installment.InstallmentStatus      = EnumInstallmentStatus.Paid.ToString();
                installment.InstallmentReceiptNo   = formCollection["ReceiptNo"];

                installment.ModifiedBy   = User.Identity.Name;
                installment.ModifiedDate = DateTime.Now;
                installment.DataStatus   = EnumDataStatus.Updated.ToString();
                _installmentRepository.Update(installment);

                _installmentRepository.DbContext.CommitTransaction();


                _loanRepository.DbContext.BeginTransaction();
                //update loan status to Paid when all installment have been paid
                _loanRepository.UpdateLoanToPaid(installment.LoanId.Id);
                _loanRepository.DbContext.CommitTransaction();

                Success = true;
                Message = "Pembayaran Angsuran Berhasil Disimpan.";
            }
            catch (Exception ex)
            {
                Success = false;
                Message = "Error :\n" + ex.GetBaseException().Message;
                _installmentRepository.DbContext.RollbackTransaction();
            }
            var e = new
            {
                Success,
                Message
            };

            return(Json(e, JsonRequestBehavior.AllowGet));
        }
        public ActionResult Acquittance(FormCollection formCollection, string loanCode)
        {
            string Message = string.Empty;
            bool   Success = true;

            try
            {
                _installmentRepository.DbContext.BeginTransaction();
                TInstallment installment = _installmentRepository.GetLastInstallment(loanCode);

                installment.EmployeeId             = _mEmployeeRepository.Get(formCollection["EmployeeId"]);
                installment.InstallmentPaymentDate = Helper.CommonHelper.ConvertToDate(formCollection["InstallmentPaymentDate"]);
                installment.InstallmentPaid        = Helper.CommonHelper.ConvertToDecimal(formCollection["MustPaid"]);
                installment.InstallmentStatus      = EnumInstallmentStatus.Paid.ToString();
                installment.InstallmentReceiptNo   = formCollection["ReceiptNo"];

                installment.ModifiedBy   = User.Identity.Name;
                installment.ModifiedDate = DateTime.Now;
                installment.DataStatus   = EnumDataStatus.Updated.ToString();
                _installmentRepository.Update(installment);

                _installmentRepository.DbContext.CommitTransaction();


                _loanRepository.DbContext.BeginTransaction();
                //update loan status to Paid when all installment have been paid
                TLoan loan = installment.LoanId;
                loan.LoanStatus = EnumLoanStatus.Paid.ToString();

                loan.ModifiedBy   = User.Identity.Name;
                loan.ModifiedDate = DateTime.Now;
                loan.DataStatus   = EnumDataStatus.Updated.ToString();

                _loanRepository.Update(loan);
                _loanRepository.DbContext.CommitTransaction();

                Success = true;
                Message = "Pelunasan Angsuran Berhasil Disimpan.";
            }
            catch (Exception ex)
            {
                Success = false;
                Message = "Error :\n" + ex.GetBaseException().Message;
                _installmentRepository.DbContext.RollbackTransaction();
            }
            var e = new
            {
                Success,
                Message
            };

            return(Json(e, JsonRequestBehavior.AllowGet));
        }