forked from FarmMaps/FarmMapsApiClient
		
	Updated Blight and Zonering
This commit is contained in:
		@@ -36,8 +36,13 @@ namespace FarmMapsBlight
 | 
				
			|||||||
            taskRequest.attributes["plantingDate"] = plantingDate.ToUniversalTime().ToString("o");
 | 
					            taskRequest.attributes["plantingDate"] = plantingDate.ToUniversalTime().ToString("o");
 | 
				
			||||||
            taskRequest.attributes["emergeDate"] = emergeDate.ToUniversalTime().ToString("o");
 | 
					            taskRequest.attributes["emergeDate"] = emergeDate.ToUniversalTime().ToString("o");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var fungicide1 = "{\"ai1\": \"propamocarb\", \"ai2\": \"fluopicolide\", \"ai3\": \"cymoxanil\", \"code\": \"infinito12curz\", \"name\": \"infinito 1,2 l + curzate partner 0,2 kg\", \"maxdose\": \"1\", \"mindose\": \"1\", \"safedays\": \"14\", \"emergence\": true, \"newgrowth\": \"1\", \"contentai1\": \"525.2\", \"contentai2\": \"62.5\", \"contentai3\": \"600\", \"fastgrowth\": true, \"contentunit\": \"l/ha + kg/ha\", \"rainfastness\": \"2.5\", \"tuberfilling\": true, \"aidescription\": \"(propamocarb + fluopicolide) 1.2 l/ha + cymoxanil 0.2 kg/ha\", \"curativescore\": \"2\", \"dryingtimemax\": \"2\", \"dryingtimemin\": \"2\", \"vracompatible\": false, \"maxapplications\": \"4\", \"preventivescore\": \"3\", \"recommendeddose\": \"1\", \"tuberprotection\": \"3.3\", \"eradicativescore\": \"2\", \"earlytubersetting\": true, \"protectioncategory\": \"2\", \"applicationrateunit\": null, \"ctgbregistrationnumber\": \"12927 n + 12755 n\"}";
 | 
				
			||||||
 | 
					            var fungicide2 = "{\"ai1\": \"fluazinam\", \"ai2\": \"cymoxanil\", \"ai3\": null, \"code\": \"kunshi\", \"name\": \"kunshi\", \"maxdose\": \"0.5\", \"mindose\": \"0.4\", \"safedays\": \"1\", \"emergence\": false, \"newgrowth\": \"1\", \"contentai1\": \"375\", \"contentai2\": \"250\", \"contentai3\": \"0\", \"fastgrowth\": true, \"contentunit\": \"g/kg\", \"rainfastness\": \"2.5\", \"tuberfilling\": false, \"aidescription\": \"(fluazinam + cymoxanil) 0.5 kg/ha\", \"curativescore\": \"2\", \"dryingtimemax\": \"2\", \"dryingtimemin\": \"1\", \"vracompatible\": true, \"maxapplications\": \"5\", \"preventivescore\": \"2.9\", \"recommendeddose\": \"0.5\", \"tuberprotection\": \"3.3\", \"eradicativescore\": \"1\", \"earlytubersetting\": false, \"protectioncategory\": \"1\", \"applicationrateunit\": \"kg/ha\", \"ctgbregistrationnumber\": \"14371 n\"}";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<Spray> sprays = new List<Spray>();
 | 
					            List<Spray> sprays = new List<Spray>();
 | 
				
			||||||
            sprays.Add(new Spray() { fungicideCode = "FLEX", SprayTime = new DateTime(2020, 7, 1), dose = 0.6, isVRA = false });
 | 
					            sprays.Add(new Spray() { fungicide = JsonConvert.DeserializeObject<Fungicide>(fungicide1), sprayTime = new DateTime(2020, 6, 24), dose = 0.6, isVRA = false });
 | 
				
			||||||
 | 
					            sprays.Add(new Spray() { fungicide = JsonConvert.DeserializeObject<Fungicide>(fungicide2), sprayTime = new DateTime(2020, 7, 2), dose = 0.6, isVRA = false });
 | 
				
			||||||
 | 
					            //sprays.Add(new Spray() { fungicideCode = "FLEX", SprayTime = new DateTime(2020, 7, 1), dose = 0.6, isVRA = false });
 | 
				
			||||||
            taskRequest.attributes["sprays"] = JsonConvert.SerializeObject(sprays);
 | 
					            taskRequest.attributes["sprays"] = JsonConvert.SerializeObject(sprays);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<Irrigation> irrigations = new List<Irrigation>();
 | 
					            List<Irrigation> irrigations = new List<Irrigation>();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <None Update="appsettings.json">
 | 
					    <None Update="appsettings.json">
 | 
				
			||||||
      <CopyToOutputDirectory>always</CopyToOutputDirectory>
 | 
					      <CopyToOutputDirectory>>always</CopyToOutputDirectory>
 | 
				
			||||||
    </None>
 | 
					    </None>
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										44
									
								
								FarmMapsBlight/Models/Fungicide.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								FarmMapsBlight/Models/Fungicide.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace FarmMapsBlight.Models {
 | 
				
			||||||
 | 
					    public class Fungicide {
 | 
				
			||||||
 | 
					        public string code { get; set; }
 | 
				
			||||||
 | 
					        public string name { get; set; }
 | 
				
			||||||
 | 
					        public string ctgbregistrationnumber { get; set; }
 | 
				
			||||||
 | 
					        public string ai1 { get; set; }
 | 
				
			||||||
 | 
					        public string ai2 { get; set; }
 | 
				
			||||||
 | 
					        public string ai3 { get; set; }
 | 
				
			||||||
 | 
					        public double contentai1 { get; set; }
 | 
				
			||||||
 | 
					        public double contentai2 { get; set; }
 | 
				
			||||||
 | 
					        public double contentai3 { get; set; }
 | 
				
			||||||
 | 
					        public string contentunit { get; set; }
 | 
				
			||||||
 | 
					        public string aidescription { get; set; }
 | 
				
			||||||
 | 
					        public int protectioncategory { get; set; }
 | 
				
			||||||
 | 
					        public double preventivescore { get; set; }
 | 
				
			||||||
 | 
					        public double curativescore { get; set; }
 | 
				
			||||||
 | 
					        public string applicationrateunit { get; set; }
 | 
				
			||||||
 | 
					        public double recommendeddose { get; set; }
 | 
				
			||||||
 | 
					        public double newgrowth { get; set; }
 | 
				
			||||||
 | 
					        public double tuberprotection { get; set; }
 | 
				
			||||||
 | 
					        public double dryingtimemin { get; set; }
 | 
				
			||||||
 | 
					        public double dryingtimemax { get; set; }
 | 
				
			||||||
 | 
					        public double rainfastness { get; set; }
 | 
				
			||||||
 | 
					        public double mindose { get; set; }
 | 
				
			||||||
 | 
					        public double maxdose { get; set; }
 | 
				
			||||||
 | 
					        public int? maxapplications { get; set; }
 | 
				
			||||||
 | 
					        public bool vracompatible { get; set; }
 | 
				
			||||||
 | 
					        public double eradicativescore { get; set; }
 | 
				
			||||||
 | 
					        public bool emergence { get; set; }
 | 
				
			||||||
 | 
					        public bool fastgrowth { get; set; }
 | 
				
			||||||
 | 
					        public bool earlytubersetting { get; set; }
 | 
				
			||||||
 | 
					        public bool tuberfilling { get; set; }
 | 
				
			||||||
 | 
					        public int? safedays { get; set; }
 | 
				
			||||||
 | 
					        public double takeback {
 | 
				
			||||||
 | 
					            get {
 | 
				
			||||||
 | 
					                return curativescore * 6;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,8 +4,9 @@ namespace FarmMapsBlight.Models
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    public class Spray
 | 
					    public class Spray
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public DateTime SprayTime { get; set; }
 | 
					        public DateTime sprayTime { get; set; }
 | 
				
			||||||
        public string fungicideCode { get; set; }
 | 
					        public string fungicideCode { get; set; }
 | 
				
			||||||
 | 
					        public Fungicide fungicide { get; set; }
 | 
				
			||||||
        public double dose { get; set; }
 | 
					        public double dose { get; set; }
 | 
				
			||||||
        public bool isVRA { get; set; }
 | 
					        public bool isVRA { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ namespace FarmmapsApi.Services
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task<Item> UploadDataAsync(UserRoot root, string itemType, string filePath, string itemName) {
 | 
					        public async Task<Item> UploadDataAsync(UserRoot root, string itemType, string filePath, string itemName) {
 | 
				
			||||||
            var startUpload = DateTime.UtcNow;
 | 
					            var startUpload = DateTime.UtcNow.AddSeconds(-3);
 | 
				
			||||||
            var result = await _farmmapsApiService.UploadFile(filePath, root.Code,
 | 
					            var result = await _farmmapsApiService.UploadFile(filePath, root.Code,
 | 
				
			||||||
                progress => _logger.LogInformation($"Status: {progress.Status} - BytesSent: {progress.BytesSent}"));
 | 
					                progress => _logger.LogInformation($"Status: {progress.Status} - BytesSent: {progress.BytesSent}"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -90,9 +90,9 @@ namespace FarmmapsApi.Services
 | 
				
			|||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //the taskmap is a child of the input tiff
 | 
					            //the taskmap is a child of the input tiff *** Update feb 2021: it is a child of the cropfield. 
 | 
				
			||||||
            var itemName = "Taskmap";
 | 
					            var itemName = "Taskmap";
 | 
				
			||||||
            var taskMapItem = await FindChildItemAsync(tiffItem.Code,
 | 
					            var taskMapItem = await FindChildItemAsync(tiffItem.ParentCode,
 | 
				
			||||||
                SHAPE_PROCESSED_ITEMTYPE, itemName);
 | 
					                SHAPE_PROCESSED_ITEMTYPE, itemName);
 | 
				
			||||||
            if (taskMapItem == null) {
 | 
					            if (taskMapItem == null) {
 | 
				
			||||||
                _logger.LogError("Could not find the shape taskmap as a child item under the input");
 | 
					                _logger.LogError("Could not find the shape taskmap as a child item under the input");
 | 
				
			||||||
@@ -131,8 +131,6 @@ namespace FarmmapsApi.Services
 | 
				
			|||||||
            await PollTask(TimeSpan.FromSeconds(3), async source => {
 | 
					            await PollTask(TimeSpan.FromSeconds(3), async source => {
 | 
				
			||||||
                _logger.LogInformation($"Trying to get {containsName} data");
 | 
					                _logger.LogInformation($"Trying to get {containsName} data");
 | 
				
			||||||
                var uploadedFilesChildren = await _farmmapsApiService.GetItemChildrenAsync(parentCode, itemType);
 | 
					                var uploadedFilesChildren = await _farmmapsApiService.GetItemChildrenAsync(parentCode, itemType);
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                Func<Item, bool> func = filter ?? (i => i.Name.ToLower().Contains(containsName.ToLower()));
 | 
					                Func<Item, bool> func = filter ?? (i => i.Name.ToLower().Contains(containsName.ToLower()));
 | 
				
			||||||
                dataItem = uploadedFilesChildren.FirstOrDefault(func);
 | 
					                dataItem = uploadedFilesChildren.FirstOrDefault(func);
 | 
				
			||||||
                if (dataItem != null || tries == maxTries) {
 | 
					                if (dataItem != null || tries == maxTries) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ namespace FarmmapsZonering.Models
 | 
				
			|||||||
        public string Formula { get; set; }
 | 
					        public string Formula { get; set; }
 | 
				
			||||||
        public string OutputFileName { get; set; }
 | 
					        public string OutputFileName { get; set; }
 | 
				
			||||||
        public string CropFieldName { get; set; }
 | 
					        public string CropFieldName { get; set; }
 | 
				
			||||||
        public string LayerName { get; set; }
 | 
					        public string CalculatedLayerName { get; set; }
 | 
				
			||||||
        public string CalculatedQuantity { get; set; }
 | 
					        public string CalculatedQuantity { get; set; }
 | 
				
			||||||
        public string CalculatedUnit { get; set; }
 | 
					        public string CalculatedUnit { get; set; }
 | 
				
			||||||
        public bool CreateNewCropfield { get; set; }
 | 
					        public bool CreateNewCropfield { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,13 +49,18 @@ namespace FarmmapsZonering.Services
 | 
				
			|||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var itemName = $"VRAZonering";
 | 
					            var uploadedFilesChildren = await _farmmapsApiService.GetItemChildrenAsync(cropfieldItem.Code);
 | 
				
			||||||
             var applianceMapItem = await _generalService.FindChildItemAsync(cropfieldItem.Code,
 | 
					            //int last = uploadedFilesChildren.Count - 1;
 | 
				
			||||||
                GEOTIFF_PROCESSED_ITEMTYPE, itemName,
 | 
					            //var applianceMapItem = uploadedFilesChildren[last];
 | 
				
			||||||
                                //i => i.Updated >= itemTask.Finished.GetValueOrDefault(DateTime.UtcNow) &&
 | 
					
 | 
				
			||||||
                                //     i.Name.ToLower().Contains(itemName.ToLower()));
 | 
					
 | 
				
			||||||
                                i => 
 | 
					            var itemName = output.Name;
 | 
				
			||||||
                     i.Name.ToLower().Contains(itemName.ToLower()));
 | 
					            //var itemName = $"VRAZonering";
 | 
				
			||||||
 | 
					            var applianceMapItem = await _generalService.FindChildItemAsync(cropfieldItem.Code,
 | 
				
			||||||
 | 
					                            GEOTIFF_PROCESSED_ITEMTYPE, itemName,
 | 
				
			||||||
 | 
					                           i => i.Updated >= itemTask.Finished.GetValueOrDefault(DateTime.UtcNow) &&
 | 
				
			||||||
 | 
					                                       i.Name.ToLower().Contains(itemName.ToLower()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (applianceMapItem == null)
 | 
					            if (applianceMapItem == null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _logger.LogError("Could not find the VRAZonering geotiff child item under cropfield");
 | 
					                _logger.LogError("Could not find the VRAZonering geotiff child item under cropfield");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,7 +73,7 @@ namespace FarmmapsZonering
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            bool useCreatedCropfield = true;
 | 
					            bool useCreatedCropfield = false;
 | 
				
			||||||
            bool GetWatBal = input.GetWatBal;
 | 
					            bool GetWatBal = input.GetWatBal;
 | 
				
			||||||
            bool getVanDerSat = input.GetVanDerSat;
 | 
					            bool getVanDerSat = input.GetVanDerSat;
 | 
				
			||||||
            bool StoreVanDerSatStatistics = input.storeVanDerSatStatistics;
 | 
					            bool StoreVanDerSatStatistics = input.storeVanDerSatStatistics;
 | 
				
			||||||
@@ -102,11 +102,6 @@ namespace FarmmapsZonering
 | 
				
			|||||||
                _settings.CropfieldName = cropfieldItem.Name;
 | 
					                _settings.CropfieldName = cropfieldItem.Name;
 | 
				
			||||||
                _settings.CropfieldItemCode = cropfieldItem.Code;
 | 
					                _settings.CropfieldItemCode = cropfieldItem.Code;
 | 
				
			||||||
                SaveSettings(settingsfile);
 | 
					                SaveSettings(settingsfile);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                cropfieldItem = await _generalService.CreateCropfieldItemAsync(myDrive.Code, "Cropfield VRA Zonering", 2020,
 | 
					 | 
				
			||||||
                    @"{ ""type"": ""Polygon"", ""coordinates"": [ [ [ 5.670991253771027, 52.796788997702613 ], [ 5.671526456638633, 52.797291618546666 ], [ 5.671275936147413, 52.797422436717852 ], [ 5.671959173850738, 52.798269302728798 ], [ 5.670649634919365, 52.798778791408822 ], [ 5.671503682048522, 52.799591206957416 ], [ 5.675159003761311, 52.798193567415474 ], [ 5.673029579585948, 52.796024727480535 ], [ 5.670991253771027, 52.796788997702613 ] ] ] }");
 | 
					 | 
				
			||||||
                _settings.CropfieldItemCode = cropfieldItem.Code;
 | 
					 | 
				
			||||||
                SaveSettings(settingsfile);
 | 
					 | 
				
			||||||
            }            
 | 
					            }            
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -163,7 +158,7 @@ namespace FarmmapsZonering
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var outputItem = await _zoneringService.CreateApplicationMapAsync(cropfieldItem, input.Formula, new Output()
 | 
					            var outputItem = await _zoneringService.CreateApplicationMapAsync(cropfieldItem, input.Formula, new Output()
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Name = input.LayerName,
 | 
					                    Name = input.CalculatedLayerName,
 | 
				
			||||||
                    Quantity = input.CalculatedQuantity,
 | 
					                    Quantity = input.CalculatedQuantity,
 | 
				
			||||||
                    Unit = input.CalculatedUnit,
 | 
					                    Unit = input.CalculatedUnit,
 | 
				
			||||||
                 
 | 
					                 
 | 
				
			||||||
@@ -175,17 +170,18 @@ namespace FarmmapsZonering
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
                new InputParameter()
 | 
					                new InputParameter()
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    ItemCode = inputOneItem.Code,
 | 
					                    ItemCode = inputTwoItem.Code,
 | 
				
			||||||
                    LayerName = inputOneItem.Data["layers"][0]["name"].ToString()
 | 
					                    LayerName = inputTwoItem.Data["layers"][0]["name"].ToString()
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
             _logger.LogInformation("Downloading output");
 | 
					            _logger.LogInformation("Downloading output");
 | 
				
			||||||
 | 
					            _logger.LogInformation($"outputitem: {outputItem} with code {outputItem.Code} and date {outputItem.DataDate}");
 | 
				
			||||||
 | 
					            //_logger.LogInformation($"Data: {outputItem.Data}");
 | 
				
			||||||
                       
 | 
					                       
 | 
				
			||||||
            await _farmmapsApiService.DownloadItemAsync(outputItem.Code,
 | 
					            await _farmmapsApiService.DownloadItemAsync(outputItem.Code,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Path.Combine(DownloadFolder, $"{input.OutputFileName}.zip"));
 | 
					                Path.Combine(DownloadFolder, $"{input.OutputFileName}.zoning.zip"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Functions to save previously created cropfields
 | 
					        // Functions to save previously created cropfields
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user