public async Task <int> Handle(CreateReportCriteriasCommand request, CancellationToken cancellationToken) { _unitOfWork.BeginTransaction(); try { var grid = await _gridQueries.GetGrid(request.ReportCriterias.GridName, request.Company); if (grid == null) { throw new Exception($"No grid configuration found for {request.ReportCriterias.GridName}."); } var dynamicQueryDefinition = Mapper.Map <DynamicQueryDefinition>(request.ReportCriterias); var columnConfiguration = Mapper.Map <List <ColumnConfiguration> >(grid.Columns); var companyDate = await _systemDateTimeService.GetCompanyDate(request.Company); var criterias = DynamicQueryBuilder.BuildReportFilters(dynamicQueryDefinition, columnConfiguration, companyDate); ReportPredicate predicate = new ReportPredicate { CompanyId = request.Company, Criterias = criterias.Select(c => new ReportCriteria { Value = c.Item1, TableAlias = c.Item2 }) }; var predicateId = await _reportRepository.CreateReportCriteriasAsync(predicate); _unitOfWork.Commit(); _logger.LogInformation("New report criterias created with id {Atlas_PredicateId}.", predicateId); return(predicateId); } catch { _unitOfWork.Rollback(); throw; } }