public Dictionary <AgriculturalStageEnum, FieldsStage> CalculateStagesFromCurrent(FieldsStage currentStage) { var stages = new Dictionary <AgriculturalStageEnum, FieldsStage>(); var stagesInfo = _agriculturalStageData.AgriculturalStages.Where(s => s.Id > currentStage.Id); currentStage.Duration = _agriculturalStageData.AgriculturalStages.FirstOrDefault(s => s.Id == currentStage.Id).Duration; stages.Add(currentStage.Id, currentStage); var nextStageDate = currentStage.StartDate + currentStage.Duration; foreach (var stage in stagesInfo) { var newStage = new FieldsStage { Id = stage.Id, StartDate = nextStageDate, Duration = stage.Duration, IsCurrent = false }; stages.Add(stage.Id, newStage); nextStageDate = newStage.StartDate + newStage.Duration; } return(stages); }
public void UpdateField(Guid id, int cultureId, AgriculturalStageEnum stage, DateTime startDate) { var field = GetField(id); var culture = _cropData.Crops.FirstOrDefault(c => c.Id == cultureId); field.Culture = culture.Name; var currentStage = new FieldsStage { Id = stage, StartDate = startDate, IsCurrent = true }; var stages = _fieldsStageService.CalculateStagesFromCurrent(field.FieldsStages, currentStage); field.FieldsStages = stages; _fieldsRepository.UpdateField(field); }
private void AddNewFieldToList(string location, List <Field> fields) { var field = new Field() { HouseLocation = location, CultureSeedPrice = 0m, FertilizePrice = 0m, HarvestTax = 0m }; var currentStage = new FieldsStage { Id = AgriculturalStageEnum.Ready, StartDate = DateTime.Now, IsCurrent = true }; var stages = _fieldsStageService.CalculateStagesFromCurrent(currentStage); field.FieldsStages = stages; fields.Add(field); }
public Dictionary <AgriculturalStageEnum, FieldsStage> CalculateStagesFromCurrent(Dictionary <AgriculturalStageEnum, FieldsStage> stages, FieldsStage currentStage) { currentStage.Duration = _agriculturalStageData.AgriculturalStages.FirstOrDefault(s => s.Id == currentStage.Id).Duration; var nextStageDate = currentStage.StartDate + currentStage.Duration; foreach (var stage in stages) { if (stage.Key == currentStage.Id) { stage.Value.StartDate = currentStage.StartDate; } else if (stage.Key > currentStage.Id) { stage.Value.StartDate = nextStageDate; nextStageDate = stage.Value.StartDate + stage.Value.Duration; if (stage.Key == AgriculturalStageEnum.Restoring && currentStage.Id > AgriculturalStageEnum.Grazing) { stages[AgriculturalStageEnum.Ready].StartDate = nextStageDate; } } } return(stages); }