예제 #1
0
        public async Task <IActionResult> CustomerCreditUtilizedSettingsView([FromQuery] ReportFilterViewModel model)
        {
            try {
                if (!ModelState.IsValid)
                {
                    throw new Exception("Form is not valid!");
                }

                var company = await _companyBusinessManager.GetCompany(model.CompanyId);

                var creditUtilizedSettings = await _businessManager.GetCustomerCreditUtilizedSettings(model.CompanyId, model.Date);

                model.RoundType = creditUtilizedSettings == null ? company.Settings.RoundType : creditUtilizedSettings.RoundType;

                var report = await _reportBusinessManager.GetAgingReport(model.CompanyId, model.Date, 30, model.NumberOfPeriods, false);

                var creditUtilizedList = new List <CustomerCreditUtilizedViewModel>();

                foreach (var data in report.Rows)
                {
                    var customer = data.Customer;

                    var creditUtilizeds = await _businessManager.GetCustomerCreditUtilizeds(customer.Id);

                    var creditUtilized = creditUtilizeds
                                         .OrderByDescending(x => x.CreatedDate)
                                         .Where(x => x.CreatedDate <= model.Date).FirstOrDefault();

                    if (creditUtilized != null && creditUtilized.IsIgnored)
                    {
                        var value = data.Data["Total"];

                        if (model.RoundType == Core.Data.Enum.RoundType.RoundUp)
                        {
                            value = Math.Ceiling(value);
                        }
                        else if (model.RoundType == Core.Data.Enum.RoundType.RoundDown)
                        {
                            value = Math.Floor(value);
                        }
                        if (creditUtilized.Value < value)
                        {
                            creditUtilizedList.Add(_mapper.Map <CustomerCreditUtilizedViewModel>(creditUtilized));
                        }
                    }
                }
                creditUtilizedList = creditUtilizedList.OrderBy(x => x.CreatedDate == model.Date).ToList();
                var viewDataDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                {
                    { "CreditUtilizedList", _mapper.Map <List <CustomerCreditUtilizedViewModel> >(creditUtilizedList) }
                };

                string html = await _viewRenderService.RenderToStringAsync("_CreateCustomerCreditsPartial", model, viewDataDictionary);

                return(Ok(html));
            } catch (Exception er) {
                return(BadRequest(er.Message ?? er.StackTrace));
            }
        }