Skip to content

Commit d3e0b35

Browse files
authored
Merge pull request #226 from lzaslav/task-product-type
Add manufacturer specific logic to create harvest commodity product
2 parents 005b266 + 861516c commit d3e0b35

File tree

5 files changed

+73
-18
lines changed

5 files changed

+73
-18
lines changed

ISOv4Plugin/ISOModels/ISOTask.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ public static ISOTask ReadXML(XmlNode taskNode)
140140
task.DefaultTreatmentZoneCode = taskNode.GetXmlNodeValueAsNullableInt("@H");
141141
task.PositionLostTreatmentZoneCode = taskNode.GetXmlNodeValueAsNullableInt("@I");
142142
task.OutOfFieldTreatmentZoneCode = taskNode.GetXmlNodeValueAsNullableInt("@J");
143+
task.ProprietarySchemaExtensions = ReadProperietarySchemaExtensions(taskNode);
143144

144145
//Treatment Zones
145146
XmlNodeList tznNodes = taskNode.SelectNodes("TZN");

ISOv4Plugin/Mappers/Factories/TimeLogMapperFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public IEnumerable<OperationData> ImportTimeLogs(ISOTask loggedTask, int? prescr
6565
: _timeLogMapper.ImportTimeLogs(loggedTask, timeLogGroup, prescriptionID));
6666
}
6767

68-
return _manufacturer?.PostProcessOperationData(_taskDataMapper, operationDatas) ?? operationDatas;
68+
return _manufacturer?.PostProcessOperationData(_taskDataMapper, loggedTask, operationDatas) ?? operationDatas;
6969
}
7070

7171
public IEnumerable<ISOTimeLog> ExportTimeLogs(IEnumerable<OperationData> operationDatas, string dataPath)

ISOv4Plugin/Mappers/Manufacturers/CNH.cs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,12 @@ public string GetProductManufacturer(ISOProduct isoProduct)
215215
}
216216

217217

218-
public IEnumerable<OperationData> PostProcessOperationData(TaskDataMapper taskDataMapper, IEnumerable<OperationData> operationDatas)
218+
public IEnumerable<OperationData> PostProcessOperationData(TaskDataMapper taskDataMapper, ISOTask isoTask, IEnumerable<OperationData> operationDatas)
219219
{
220220
var result = new List<OperationData>();
221221

222+
var cropNameFromTask = GetCropName(isoTask);
223+
222224
var catalog = taskDataMapper.AdaptDataModel.Catalog;
223225
foreach (var operationData in operationDatas)
224226
{
@@ -244,11 +246,56 @@ public IEnumerable<OperationData> PostProcessOperationData(TaskDataMapper taskDa
244246
continue;
245247
}
246248
}
249+
250+
if (!string.IsNullOrEmpty(cropNameFromTask) &&
251+
operationData.OperationType != OperationTypeEnum.DataCollection &&
252+
(operationData.ProductIds == null || operationData.ProductIds.Count == 0))
253+
{
254+
operationData.ProductIds = new List<int>
255+
{
256+
AddOrGetHavestCommodityProduct(catalog, cropNameFromTask).Id.ReferenceId
257+
};
258+
}
259+
247260
result.Add(operationData);
248261
}
249262
return result;
250263
}
251264

265+
private HarvestedCommodityProduct AddOrGetHavestCommodityProduct(ApplicationDataModel.ADM.Catalog catalog, string cropName)
266+
{
267+
Crop adaptCrop = catalog.Crops.FirstOrDefault(x => x.Name.EqualsIgnoreCase(cropName));
268+
if (adaptCrop == null)
269+
{
270+
// Create a new one
271+
adaptCrop = new Crop
272+
{
273+
Name = cropName
274+
};
275+
catalog.Crops.Add(adaptCrop);
276+
}
277+
278+
var commodityProduct = catalog.Products.OfType<HarvestedCommodityProduct>()
279+
.FirstOrDefault(x => x.Description.EqualsIgnoreCase(cropName) && x.CropId == adaptCrop.Id.ReferenceId);
280+
if (commodityProduct == null)
281+
{
282+
// New harvested commodity product
283+
commodityProduct = new HarvestedCommodityProduct
284+
{
285+
Category = CategoryEnum.Variety,
286+
Form = ProductFormEnum.Solid,
287+
ProductType = ProductTypeEnum.Variety,
288+
HasHarvestCommodity = true,
289+
Description = cropName
290+
};
291+
292+
commodityProduct.CropId = adaptCrop.Id.ReferenceId;
293+
294+
catalog.Products.Add(commodityProduct);
295+
}
296+
return commodityProduct;
297+
}
298+
252299
public void PostProcessPolygons(List<Polygon> polygons)
253300
{
254301
var groupedPolygons = polygons.GroupBy(x => x.ExteriorRing != null).ToDictionary(x => x.Key, x => x.ToList());

ISOv4Plugin/Mappers/Manufacturers/ManufacturerFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ internal interface IManufacturer
1515
CategoryEnum? GetProductCategory(ISOProduct isoProduct);
1616
string GetProductManufacturer(ISOProduct isoProduct);
1717

18-
IEnumerable<OperationData> PostProcessOperationData(TaskDataMapper taskDataMapper, IEnumerable<OperationData> operationDatas);
18+
IEnumerable<OperationData> PostProcessOperationData(TaskDataMapper taskDataMapper, ISOTask isoTask, IEnumerable<OperationData> operationDatas);
1919
void PostProcessPolygons(List<Polygon> polygons);
2020
}
2121

ISOv4Plugin/Mappers/ProductMapper.cs

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ public Product ImportProduct(ISOProduct isoProduct)
213213
{
214214
//First check if we've already created a matching seed product from the crop type
215215
Product product = DataModel.Catalog.Products.FirstOrDefault(p => p.ProductType == ProductTypeEnum.Variety && p.Description == isoProduct.ProductDesignator)
216+
?? CreateCropProductFromCropType(isoProduct)
216217
?? CreateNewProductInstance(isoProduct);
217218

218219
//ID
@@ -349,6 +350,25 @@ private string GetQuantityDDI(string quantityDDI, ProductFormEnum productForm)
349350
}
350351

351352
private Product CreateNewProductInstance(ISOProduct isoProduct)
353+
{
354+
Product product;
355+
//Type
356+
switch (isoProduct.ProductType)
357+
{
358+
case ISOProductType.Mixture:
359+
case ISOProductType.TemporaryMixture:
360+
product = new MixProduct();
361+
product.ProductType = ProductTypeEnum.Mix;
362+
break;
363+
default:
364+
product = new GenericProduct();
365+
product.ProductType = _manufacturer?.GetProductType(isoProduct) ?? ProductTypeEnum.Generic;
366+
break;
367+
}
368+
return product;
369+
}
370+
371+
private Product CreateCropProductFromCropType(ISOProduct isoProduct)
352372
{
353373
// If there is a manufacturer defined attribute representing a crop name, use it
354374
string cropName = _manufacturer?.GetCropName(isoProduct);
@@ -357,6 +377,7 @@ private Product CreateNewProductInstance(ISOProduct isoProduct)
357377
// New crop variety product
358378
var cropProduct = new CropVarietyProduct();
359379
cropProduct.ProductType = ProductTypeEnum.Variety;
380+
cropProduct.Description = cropName;
360381

361382
// Check if there is already Crop in ADAPT model
362383
Crop adaptCrop = TaskDataMapper.AdaptDataModel.Catalog.Crops.FirstOrDefault(x => x.Name.EqualsIgnoreCase(cropName));
@@ -371,21 +392,7 @@ private Product CreateNewProductInstance(ISOProduct isoProduct)
371392
return cropProduct;
372393
}
373394

374-
Product product;
375-
//Type
376-
switch (isoProduct.ProductType)
377-
{
378-
case ISOProductType.Mixture:
379-
case ISOProductType.TemporaryMixture:
380-
product = new MixProduct();
381-
product.ProductType = ProductTypeEnum.Mix;
382-
break;
383-
default:
384-
product = new GenericProduct();
385-
product.ProductType = _manufacturer?.GetProductType(isoProduct) ?? ProductTypeEnum.Generic;
386-
break;
387-
}
388-
return product;
395+
return null;
389396
}
390397

391398
/// <summary>

0 commit comments

Comments
 (0)