Exemplo n.º 1
0
        public async Task <OperationDataResult <Paged <StatByYearModel> > > GetTransportersStatsByYear(TransportersYearRequestModel pnRequestModel)
        {
            try
            {
                var trashInspectionsQuery
                    = _dbContext.TrashInspections
                      .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                      .Where(x => x.Date.Year == pnRequestModel.Year)
                      .AsQueryable();

                var transportersStatsByYearModel = new Paged <StatByYearModel>();

                var transporterQuery = _dbContext.Transporters
                                       .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                                       .AsQueryable();

                var exludeSort = new List <string>
                {
                    "Weighings",
                    "ControlPercentage",
                    "AmountOfWeighingsControlled",
                    "ApprovedPercentage",
                    "NotApprovedPercentage",
                    "ConditionalApprovedPercentage"
                };
                //if (!pnRequestModel.NameFilter.IsNullOrEmpty() && pnRequestModel.NameFilter != "")
                //{
                //    transporterQuery = transporterQuery.Where(x =>
                //        x.Name.Contains(pnRequestModel.NameFilter) ||
                //        x.Description.Contains(pnRequestModel.NameFilter));
                //}

                transporterQuery = QueryHelper.AddSortToQuery(transporterQuery, pnRequestModel.Sort,
                                                              pnRequestModel.IsSortDsc, exludeSort);


                var transportersStatByYear = await transporterQuery
                                             .Select(x => new StatByYearModel
                {
                    Id                            = x.Id,
                    Name                          = x.Name,
                    Weighings                     = trashInspectionsQuery.Count(t => t.TransporterId == x.Id),
                    ControlPercentage             = 0,
                    AmountOfWeighingsControlled   = trashInspectionsQuery.Count(t => t.TransporterId == x.Id && t.Status == 100),
                    ApprovedPercentage            = trashInspectionsQuery.Count(t => t.TransporterId == x.Id && t.IsApproved && t.Status == 100),
                    NotApprovedPercentage         = trashInspectionsQuery.Count(t => t.TransporterId == x.Id && t.ApprovedValue == "3" && t.Status == 100),
                    ConditionalApprovedPercentage = trashInspectionsQuery.Count(t => t.TransporterId == x.Id && t.ApprovedValue == "2" && t.Status == 100)
                })
                                             .ToListAsync();

                foreach (var statByYearModel in transportersStatByYear)
                {
                    if (statByYearModel.AmountOfWeighingsControlled > 0 && statByYearModel.Weighings > 0)
                    {
                        statByYearModel.ControlPercentage = Math.Round((statByYearModel.AmountOfWeighingsControlled / statByYearModel.Weighings) * 100, 1);
                    }
                    else
                    {
                        statByYearModel.ControlPercentage = 0;
                    }

                    if (statByYearModel.ApprovedPercentage > 0 && statByYearModel.AmountOfWeighingsControlled > 0)
                    {
                        statByYearModel.ApprovedPercentage =
                            Math.Round((statByYearModel.ApprovedPercentage / statByYearModel.AmountOfWeighingsControlled) * 100, 1);
                    }
                    else
                    {
                        statByYearModel.ApprovedPercentage = 0;
                    }

                    if (statByYearModel.ConditionalApprovedPercentage > 0 && statByYearModel.AmountOfWeighingsControlled > 0)
                    {
                        statByYearModel.ConditionalApprovedPercentage =
                            Math.Round((statByYearModel.ConditionalApprovedPercentage / statByYearModel.AmountOfWeighingsControlled) * 100, 1);
                    }
                    else
                    {
                        statByYearModel.ConditionalApprovedPercentage = 0;
                    }

                    if (statByYearModel.NotApprovedPercentage > 0 && statByYearModel.AmountOfWeighingsControlled > 0)
                    {
                        statByYearModel.NotApprovedPercentage =
                            Math.Round((statByYearModel.NotApprovedPercentage / statByYearModel.AmountOfWeighingsControlled) * 100, 1);
                    }
                    else
                    {
                        statByYearModel.NotApprovedPercentage = 0;
                    }
                }

                if (!string.IsNullOrEmpty(pnRequestModel.Sort) && exludeSort.Contains(pnRequestModel.Sort))
                {
                    transportersStatByYear = pnRequestModel.IsSortDsc
                        ? transportersStatByYear.OrderByDescending(x => x.GetPropValue(pnRequestModel.Sort)).ToList()
                        : transportersStatByYear.OrderBy(x => x.GetPropValue(pnRequestModel.Sort)).ToList();
                }


                transportersStatsByYearModel.Total =
                    _dbContext.Transporters.Count(x => x.WorkflowState != Constants.WorkflowStates.Removed);
                transportersStatsByYearModel.Entities = transportersStatByYear;

                return(new OperationDataResult <Paged <StatByYearModel> >(true, transportersStatsByYearModel));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _coreHelper.LogException(e.Message);
                return(new OperationDataResult <Paged <StatByYearModel> >(false,
                                                                          _trashInspectionLocalizationService.GetString("ErrorObtainingTransporters")));
            }
        }
 public async Task <OperationDataResult <Paged <StatByYearModel> > > GetTransportersStatsByYear([FromBody] TransportersYearRequestModel requestModel)
 {
     return(await _transporterService.GetTransportersStatsByYear(requestModel));
 }