Пример #1
0
        public async Task <IActionResult> CreateSavedReportPlan(SavedReportPlanViewModel model)
        {
            try {
                model.Fields.ForEach(x => {
                    if (x.Name.Equals("Total Customers") && x.Count < 1)
                    {
                        ModelState.AddModelError("Count", "Total Customers field must be more than 0");
                    }
                    else if (x.Name.Equals("Total") && x.Count < 1)
                    {
                        ModelState.AddModelError("Count", "Total field must be more than 0");
                    }
                });

                if (!ModelState.IsValid)
                {
                    var allErrors = ModelState.Values.SelectMany(v => v.Errors);
                    var errors    = allErrors.Select(x => x.ErrorMessage).ToList();
                    throw new Exception($"Form is not valid!\n{string.Join('\n', errors)}");
                }

                var userId = new Guid(User.FindFirstValue(ClaimTypes.NameIdentifier));

                var result = await _reportBusinessManager.CreateSavedPlanReport(userId, _mapper.Map <SavedReportDto>(model));

                if (result == null)
                {
                    return(NotFound());
                }

                return(Ok(_mapper.Map <SavedReportPlanViewModel>(result)));
            } catch (Exception er) {
                return(BadRequest(er.Message ?? er.StackTrace));
            }
        }
Пример #2
0
        public async Task <IActionResult> GenerateSavedReportPlan(ReportFilterViewModel model)
        {
            try {
                if (!ModelState.IsValid)
                {
                    throw new Exception("Form is not valid!");
                }

                var userId = new Guid(User.FindFirstValue(ClaimTypes.NameIdentifier));
                var item   = await _reportBusinessManager.GetSavedPlanReport(userId, model.CompanyId, model.Date);

                var customerTypes = await _customerBusinessManager.GetCustomerTypes();

                SavedReportPlanViewModel result;
                if (item != null)
                {
                    result = _mapper.Map <SavedReportPlanViewModel>(item);
                    result.Fields.ForEach(x => {
                        if (x.Name.Equals("Total Customers"))
                        {
                            x.CountReadOnly = true;
                            x.AmountDisplay = false;
                        }
                        else if (x.Name.Equals("Balance") || x.Name.Equals("No Balance"))
                        {
                            x.CountReadOnly = true;
                            x.AmountDisplay = false;
                        }
                        else if (x.Name.Equals("Total Late") || x.Name.Equals("Total"))
                        {
                            x.AmountReadOnly = true;
                            x.CountReadOnly  = true;
                        }
                        else if (customerTypes.Any(y => y.Name.Equals(x.Name)))
                        {
                            x.AmountDisplay = false;
                        }
                    });
                }
                else
                {
                    var fields = new List <SavedReportPlanFieldViewModel>();
                    fields.Add(new SavedReportPlanFieldViewModel()
                    {
                        Name          = "Total Customers",
                        CountReadOnly = true,
                        AmountDisplay = false,
                    });

                    //Add customer types
                    foreach (var ctype in customerTypes)
                    {
                        fields.Add(new SavedReportPlanFieldViewModel()
                        {
                            Name          = ctype.Name,
                            AmountDisplay = false
                        });
                    }

                    fields.Add(new SavedReportPlanFieldViewModel()
                    {
                        Name          = "Balance",
                        CountReadOnly = true,
                        AmountDisplay = false
                    });

                    fields.Add(new SavedReportPlanFieldViewModel()
                    {
                        Name          = "No Balance",
                        CountReadOnly = true,
                        AmountDisplay = false
                    });

                    //Add Balance
                    #region CREATE HEADERS
                    var daysPerPeriod = 30;

                    for (int i = -1; i < model.NumberOfPeriods; i++)
                    {
                        var from = (i < 0 ? -1 : 1) + i * daysPerPeriod;
                        var to   = (i + 1) * daysPerPeriod;

                        fields.Add(new SavedReportPlanFieldViewModel()
                        {
                            Name = $"{from}-{to}"
                        });
                    }

                    fields.Add(new SavedReportPlanFieldViewModel()
                    {
                        Name = $"{1 + model.NumberOfPeriods * daysPerPeriod}+",
                    });

                    fields.Add(new SavedReportPlanFieldViewModel()
                    {
                        Name           = "Total Late",
                        CountDisplay   = true,
                        AmountReadOnly = true,
                        CountReadOnly  = true
                    });

                    fields.Add(new SavedReportPlanFieldViewModel()
                    {
                        Name           = "Total",
                        CountDisplay   = true,
                        AmountReadOnly = true,
                        CountReadOnly  = true
                    });
                    #endregion

                    result = new SavedReportPlanViewModel()
                    {
                        CompanyId       = model.CompanyId,
                        Date            = model.Date,
                        Fields          = fields,
                        NumberOfPeriods = model.NumberOfPeriods,
                    };
                }

                string html = await _viewRenderService.RenderToStringAsync("_SavedReportPlanPartial", result);

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