示例#1
0
        public LoanResponseViewModel Add(LoanRequestViewModel loan)
        {
            var loanEntity = _mapper.Map <Loan>(loan);
            var result     = _loanBusiness.Add(loanEntity, loan.BookKey);

            return(_mapper.Map <LoanResponseViewModel>(result));
        }
        public ActionResult Edit(int?id)
        {
            LoanRequestViewModel vm = new LoanRequestViewModel();

            try
            {
                Db db = new Db(DbServices.ConnectionString);

                if (id == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }
                Product           product           = ProductServices.Get(id.Value, db);
                Request           request           = RequestServices.Get(id.Value, db);
                LoanRequest       loanRequest       = LoanRequestServices.Get(id.Value, db);
                RefundableProduct refundableProduct = RefundableProductServices.Get(id.Value, db);

                if (product == null || request == null || loanRequest == null || refundableProduct == null)
                {
                    return(HttpNotFound());
                }

                // For Product
                //ViewBag.EmployeeList = new SelectList(EmployeeServices.List(db), "Id", "Id_Name", product.Employee);
                ViewBag.ProductTypeList = new SelectList(ProductTypeServices.List(db), "Id", "Name", product.ProductType);

                // For Request
                //We need to customise the droplist for two options
                ViewBag.BypassStatusList = new SelectList(BypassStatusServices.List(db).Where((c => (c.Id == 0 || c.Id == 2))), "Id", "Name");


                EmployeeProductCalculatorFilter f = new EmployeeProductCalculatorFilter();
                f.EmployeeId = product.Employee; f.ProductTypeId = (short)product.ProductType;
                f.Amount     = (decimal)request.Amount; f.Period = (short)refundableProduct.PaymentPeriod;
                EmployeeProductCalculatorResult result = db.EmployeeProductCalculatorFirstOrDefault(f);
                if (result != null)
                {
                    ViewBag.Calculations = result;
                }

                vm.RequestProduct = product;
                vm.Request        = request;
                vm.LoanRequest    = loanRequest;
                vm.RequestProductProductRefundableProduct = refundableProduct;
            }
            catch (CfException cfex)
            {
                TempData["Failure"] = cfex.ErrorDefinition.LocalizedMessage;
            }
            catch (Exception ex)
            {
                TempData["Failure"] = ex.Message;
            }
            return(View(vm));
        }
示例#3
0
        public ActionResult <string> Post([FromBody] LoanRequestViewModel loan)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(loan));
                }
                var result = _loanServices.Add(loan);

                if (result.ValidationResult.Errors.Any())
                {
                    return(AddValidationErrors(result.ValidationResult.Errors));
                }

                return(Ok(Labels.Success));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                return(new StatusCodeResult(500));
            }
        }
        public ActionResult Edit(LoanRequestViewModel model)
        {
            Db db = new Db(DbServices.ConnectionString);

            if (ModelState.IsValid)
            {
                try
                {
                    EmployeeProductCalculatorFilter f = new EmployeeProductCalculatorFilter();
                    f.EmployeeId = model.RequestProduct.Employee; f.ProductTypeId = (short)model.RequestProduct.ProductType;
                    f.Amount     = (decimal)model.Request.Amount; f.Period = (short)model.RequestProductProductRefundableProduct.PaymentPeriod;
                    List <EmployeeProductCalculatorResult> result = db.EmployeeProductCalculator(f);
                    if (result.Count > 0)
                    {
                        model.RequestProductProductRefundableProduct.NetAmount    = result[0].NetAmount.Value;
                        model.RequestProductProductRefundableProduct.ProfitAmount = result[0].ProfitAmount.Value;
                        model.RequestProductProductRefundableProduct.Installment  = result[0].Installment.Value;
                    }
                    // 1- Add Prouct
                    // set the Amount of the Produt the same as Request
                    //model.RequestProduct.Amount = model.Request.Amount;
                    ProductServices.Update(CurrentUser.Id, model.RequestProduct, db);
                    ProductServices.Update(CurrentUser.Id, model.RequestProduct, db);

                    //2-Add Request
                    //model.Request.Product = model.RequestProduct.Id;
                    // model.Request.RequestStatus = (int)RequestStatusEnum.New;
                    //model.Request.Cost = 5;
                    RequestServices.Update(CurrentUser.Id, model.Request, db);

                    //3-Add LoanRequest
                    //model.LoanRequest.Request = model.RequestProduct.Id;
                    LoanRequestServices.Update(CurrentUser.Id, model.LoanRequest, db);

                    //4- Add RefundableProduct

                    //model.RequestProductProductRefundableProduct.Product = model.RequestProduct.Id;
                    RefundableProductServices.Update(CurrentUser.Id, model.RequestProductProductRefundableProduct, db);

                    TempData["Success"] = ResourceServices.GetString(Cf.Data.Resources.ResourceBase.Culture, "UI", "UpdateConfirmed");

                    return(RedirectToAction("Index", "LoanRequest"));
                }
                catch (CfException cfex)
                {
                    TempData["Failure"] = cfex.ErrorDefinition.LocalizedMessage;
                }
                catch (Exception ex)
                {
                    TempData["Failure"] = ex.Message;
                }
            }

            // For Product
            ViewBag.EmployeeList    = new SelectList(EmployeeServices.List(db), "Id", "FirstName", model.RequestProduct.Employee);
            ViewBag.ProductTypeList = new SelectList(ProductTypeServices.List(db), "Id", "Name", model.RequestProduct.ProductType);

            // For Request
            ViewBag.BypassStatusList  = new SelectList(BypassStatusServices.List(db), "Id", "Name", model.Request.BypassStatus);
            ViewBag.ProductList       = new SelectList(ProductServices.List(db), "Id", "Notes", model.Request.Product);
            ViewBag.RequestStatusList = new SelectList(RequestStatusServices.List(db), "Id", "Name", model.Request.RequestStatus);


            return(View(model));
        }
        public ActionResult Create(LoanRequestViewModel model)
        {
            int productId = 0;

            try
            {
                Db db = new Db(DbServices.ConnectionString);

                if (!(db.Connection.State == ConnectionState.Open))
                {
                    db.Connection.Open();
                }
                db.Transaction = db.Connection.BeginTransaction();

                if (ModelState.IsValid)
                {
                    try
                    {
                        EmployeeProductCalculatorFilter f = new EmployeeProductCalculatorFilter();
                        f.EmployeeId = model.RequestProduct.Employee; f.ProductTypeId = (short)model.RequestProduct.ProductType;
                        f.Amount     = (decimal)model.Request.Amount; f.Period = (short)model.RequestProductProductRefundableProduct.PaymentPeriod;
                        List <EmployeeProductCalculatorResult> result = db.EmployeeProductCalculator(f);
                        if (result.Count > 0)
                        {
                            model.RequestProductProductRefundableProduct.NetAmount    = result[0].NetAmount.Value;
                            model.RequestProductProductRefundableProduct.ProfitAmount = result[0].ProfitAmount.Value;
                            model.RequestProductProductRefundableProduct.Installment  = result[0].Installment.Value;
                        }
                        // 1- Add Prouct
                        // set the Amount of the Produt the same as Request
                        model.RequestProduct.Amount = model.Request.Amount;
                        Product p = ProductServices.Insert(CurrentUser.Id, model.RequestProduct, db);
                        productId = p.Id;

                        //2-Add Request
                        model.Request.Product       = p.Id;
                        model.Request.RequestStatus = (int)RequestStatusEnum.New;
                        model.Request.Cost          = 5;
                        Request r = RequestServices.Insert(CurrentUser.Id, model.Request, db);

                        //3-Add LoanRequest
                        model.LoanRequest.Request = p.Id;
                        LoanRequestServices.Insert(CurrentUser.Id, model.LoanRequest, db);

                        //4- Add RefundableProduct

                        model.RequestProductProductRefundableProduct.Product = p.Id;
                        RefundableProductServices.Insert(CurrentUser.Id, model.RequestProductProductRefundableProduct, db);

                        TempData["Success"] = ResourceServices.GetString(Cf.Data.Resources.ResourceBase.Culture, "UI", "InsertConfirmed");
                    }
                    catch (CfException cfex)
                    {
                        TempData["Failure"] = cfex.ErrorDefinition.LocalizedMessage;
                    }
                    catch (Exception ex)
                    {
                        TempData["Failure"] = ex.Message;
                    }
                }

                if (db.Transaction != null)
                {
                    db.Transaction.Commit();
                }
                return(RedirectToAction("Details", new { id = productId }));
            }
            catch (CfException cfex)
            {
                TempData["Failure"] = cfex.ErrorDefinition.LocalizedMessage;
            }
            catch (Exception ex)
            {
                TempData["Failure"] = ex.Message;
            }
            return(View());
        }
示例#6
0
        public async Task <IActionResult> Post([FromBody] LoanRequestViewModel requestObject)
        {
            try
            {
                if (requestObject == null)
                {
                    arrError.Add("No data found!");
                }

                if (string.IsNullOrEmpty(requestObject.name))
                {
                    arrError.Add("Empty Name!");
                }

                if (string.IsNullOrEmpty(requestObject.cpf))
                {
                    arrError.Add("Empty CPF!");
                }

                if (requestObject.terms <= 0)
                {
                    arrError.Add("Invalid Terms!");
                }

                if (requestObject.income <= 0)
                {
                    arrError.Add("Invalid Income!");
                }

                if (requestObject.birthDate == null || requestObject.birthDate == DateTime.MinValue)
                {
                    arrError.Add("Invalid BirthDate!");
                }

                var lstTerms = await termsService.GetByFilterAsync(t => t.Id == t.Id);

                var objTerms = (lstTerms.Where(t => t.Term == Convert.ToInt32(requestObject.terms)).FirstOrDefault() != null ?
                                lstTerms.Where(t => t.Term == Convert.ToInt32(requestObject.terms)).FirstOrDefault() : null);

                if (objTerms == null || string.IsNullOrEmpty(objTerms.Id))
                {
                    arrError.Add($"Invalid Term. It can be: {string.Join(",", lstTerms.Select(t => t.Term))} !");
                }

                if (arrError.Count > 0)
                {
                    return(BadRequest(new { errors = arrError }));
                }

                #region Customer object

                var cpfParam = requestObject.cpf.Replace(".", "").Replace("-", "").Replace("/", "").Replace(@"\", "");

                var objCustomer = new Customer
                {
                    CpfCnpj    = cpfParam,
                    Name       = requestObject.name,
                    BirthDate  = Convert.ToDateTime(requestObject.birthDate.ToString()),
                    Modificado = DateTime.Now
                };

                var objCustomerExist = await customerService.GetByFilterAsync(c => c.CpfCnpj == cpfParam);

                if (objCustomerExist != null && objCustomerExist.ToList().Count > 0)
                {
                    objCustomer.Id           = objCustomerExist.FirstOrDefault().Id;
                    objCustomer.StatusRow    = "U"; //Update
                    objCustomer.IdUserUpdate = -1;  //System

                    customerService.Put <CustomerValidator>(objCustomer);
                }
                else
                {
                    objCustomer.Id           = Customer.GetNewId();
                    objCustomer.StatusRow    = "I"; //Insert
                    objCustomer.IdUserInsert = 1;

                    customerService.Post <CustomerValidator>(objCustomer);
                }

                #endregion Customer object

                var loanRequestId = LoanRequest.GetNewId();

                #region Request object

                var objLoanRequest = new LoanRequest
                {
                    Id           = loanRequestId,
                    IdCustomer   = objCustomer.Id,
                    VlAmout      = Convert.ToDecimal(requestObject.amount),
                    VlIncome     = Convert.ToDecimal(requestObject.income),
                    IdTerms      = objTerms.Id,
                    Modificado   = DateTime.Now,
                    StatusRow    = "I", //Insert
                    IdUserInsert = -1,  //System
                };

                loanRequestService.Post <LoanRequestValidator>(objLoanRequest);

                objLoanRequest.Customer = objCustomer;
                objLoanRequest.Terms    = objTerms;

                #endregion Request object

                #region Process object

                var loanProcessId = LoanProcess.GetNewId();

                var objLoanProcess = new LoanProcess
                {
                    Id            = loanProcessId,
                    IdLoanRequest = loanRequestId,
                    IdStatus      = Status.Processing,
                    IdTerms       = objTerms.Id,
                    VlAmout       = Convert.ToDecimal(requestObject.amount),
                    Modificado    = DateTime.Now,
                    StatusRow     = "I", //Insert
                    IdUserInsert  = -1,  //System
                };

                loanProcessService.Post <LoanProcessValidator>(objLoanProcess);

                objLoanProcess.LoanRequest = objLoanRequest;

                #endregion Process object

                var sqsMessage = new SQSHelpers();
                sqsMessage.attibutes = new Dictionary <string, string> {
                    { "Id", loanProcessId }
                };
                var sendMessageOk = await sqsMessage.SendMessage(JsonConvert.SerializeObject(objLoanProcess), configuration["ProcessQueue"].ToString());

                if (sendMessageOk != System.Net.HttpStatusCode.OK)
                {
                    return(BadRequest("Temporary error. Try again!"));
                }

                return(new ObjectResult(new { Id = loanRequestId }));
            }
            catch (ArgumentNullException ex)
            {
                arrError.Add(ex);
                return(NotFound(new { errors = arrError }));
            }
            catch (Exception ex)
            {
                arrError.Add(ex);
                return(BadRequest(new { errors = arrError }));
            }
        }