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)); }