это лишь лист от той партянки, в которой надо разобраться.
сложного ничего. да. но вот как с листа охватить взглядом реально вообще? специально не говорю какой контекст. т.к. тоже в первый раз отчет этот вижу. и даже не знаю работало там изначально или нет
просто мата не хватает. как такое можно поддерживать, не имея доступа к проду. и не зная как должно быть.
вот для кого пишут книжки типа канонической "чистый код"?
я бы на код ревью точно такое развернул нахрен. ну строк 10 кода, которые сможешь сразу прочитать — да. без проблем. но такое заворачивать.. НАХРЕНА???? Убил бы.
так он там блин еще коменты пишет о красоте кода....
var resultCollection = reportData.GroupBy(g => g.CropId).Select(g =>
{
var crop = g.First();
return new PlanExecutionControlReportItem
{
CropId = crop.CropId,
CropName = crop.CropName,
Technologies = g.GroupBy(t => t.TechnologyId).Select(t =>
{
var technologyFirst = t.First();
var dateRange = t
.Where(x => x.FactOperationSquare > 0)
.Select(x => x.FactDateEnd.Date)
.Distinct()
.OrderBy(d => d)
.ToArray();
if (t.Any(tr => tr.OperationGroupId.HasValue && tr.TreatmentId != Guid.Empty) && t.Key.HasValue)
{
var planExecutionControlItems = t.Where(x => x.OperationGroupId.HasValue).ToList();
var reportItem = new List<PlanExecutionControlReportTreatment>();
var excludedItems = new List<PlanExecutionControlItem>();
var operationGroupItems = planExecutionControlItems.GroupBy(x => x.OperationGroupId);
foreach (var group in operationGroupItems)
{
var operationTypeIds = operationTypes.Where(p => p.Value.Contains(group.Key.Value)).Select(p => p.Key).ToList();
operationTypeIds.Add(Guid.Empty);
var rows = group.Where(tr => tr.OperationGroupId == group.Key && operationTypeIds.Contains(tr.TreatmentId)).ToArray();
if (!rows.Any()) continue;
var operationItemRow = CreateReportItem(rows, dateRange, null, true);
reportItem.Add(operationItemRow);
var technologyOperation = rows.First();
var groupByTreatment = group.Where(tr => tr.OperationGroupId == group.Key && operationTypeIds.Contains(tr.TreatmentId)).GroupBy(x => x.TreatmentId);
foreach (var treatmentItems in groupByTreatment)
{
if (!treatmentItems.Any()) continue;
var treatmentRow = CreateReportItem(treatmentItems.ToArray(), dateRange, operationItemRow.Path.ToList(), false, operationItemRow.PlanDateBegin, operationItemRow.PlanDateStop, technologyOperation);
reportItem.Add(treatmentRow);
reportItem.AddRange(treatmentItems
.Where(tr => tr.OperationGroupId == group.Key && operationTypeIds.Contains(tr.TreatmentId))
.GroupBy(tr => new { tr.LayerId })
.Select(tr => CreateReportItem(tr.ToArray(), dateRange, treatmentRow.Path.ToList(), false, treatmentRow.PlanDateBegin, treatmentRow.PlanDateStop, technologyOperation))
.ToArray());
}
excludedItems.AddRange(group.Where(tr => tr.OperationGroupId == group.Key && !operationTypeIds.Contains(tr.TreatmentId)));
}
excludedItems.AddRange(t.Where(x => !x.OperationGroupId.HasValue));
reportItem.AddRange(excludedItems
.GroupBy(tr => new { tr.LayerId })
.Select(tr => CreateReportItem(tr.ToArray(), dateRange))
.ToArray());
return new PlanExecutionControlReportTechnology
{
TechnologyId = technologyFirst.TechnologyId,
TechnologyName = technologyFirst.TechnologyName,
Treatments = reportItem.OrderBy(tr => tr.TreatmentName).ToArray(),
};
}
if (t.Any(tr => tr.OperationGroupId.HasValue) && t.Key.HasValue)
{
var planExecutionControlItems = t.ToList();
var reportItem = new List<PlanExecutionControlReportTreatment>();
var excludedItems = new List<PlanExecutionControlItem>();
var operationGroupItems = planExecutionControlItems.GroupBy(x => x.OperationGroupId);
foreach (var group in operationGroupItems)
{
var operationTypeIds = operationTypes.Where(p => p.Value.Contains(group.Key ?? Guid.Empty)).Select(p => p.Key).ToArray();
var rows = group.Where(tr => tr.OperationGroupId == group.Key || operationTypeIds.Contains(tr.TreatmentId)).ToArray();
var operationItemRow = CreateReportItem(rows, dateRange, null, true);
reportItem.Add(operationItemRow);
reportItem.AddRange(rows
.Where(tr => tr.OperationGroupId == group.Key || operationTypeIds.Contains(tr.TreatmentId))
.GroupBy(tr => new { tr.LayerId })
.Select(tr => CreateReportItem(tr.ToArray(), dateRange, operationItemRow.Path.ToList()))
.ToArray());
excludedItems.AddRange(group.Where(tr => tr.OperationGroupId == group.Key && !operationTypeIds.Contains(tr.TreatmentId)));
}
excludedItems.AddRange(t.Where(x => !x.OperationGroupId.HasValue));
reportItem.AddRange(excludedItems
.GroupBy(tr => new { tr.LayerId })
.Select(tr => CreateReportItem(tr.ToArray(), dateRange))
.ToArray());
return new PlanExecutionControlReportTechnology
{
TechnologyId = technologyFirst.TechnologyId,
TechnologyName = technologyFirst.TechnologyName,
Treatments = reportItem.OrderBy(tr => tr.TreatmentName).ToArray(),
};
}
return new PlanExecutionControlReportTechnology
{
TechnologyId = technologyFirst.TechnologyId,
TechnologyName = technologyFirst.TechnologyName,
Treatments = t
.GroupBy(tr => new { tr.TreatmentId, tr.LayerId })
.Select(tr => CreateReportItem(tr.ToArray(), dateRange))
.OrderBy(tr => tr.TreatmentName)
.ToArray()
};
}).OrderBy(t => t.TechnologyName).ToArray()
};
}).OrderBy(g => g.CropName).ToArray();