public ChangeDescription ChangeStartDateOnPumpingIntake(PumpingIntake Intake, Plant plant, DateTime NewDate) { ChangeDescription change = GetGenericPlantIntake(); int id; if (DataBaseConnection.TryGetPrimaryID(Intake, plant, out id)) { change.PrimaryKeys["INTAKEPLANTID"] = id.ToString(); } change.Action = TableAction.EditValue; if (Intake.StartNullable.HasValue) { change.ChangeValues.Add(new Change("STARTDATE", NewDate.ToShortDateString(), Intake.StartNullable.Value.ToShortDateString())); } else { change.ChangeValues.Add(new Change("STARTDATE", NewDate.ToShortDateString(), "")); } return(change); }
public ChangeDescription RemoveIntakeFromPlant(PumpingIntake Intake, Plant plant) { ChangeDescription change = GetGenericPlantIntake(); int id; change.Action = TableAction.DeleteRow; change.ChangeValues.Add(new Change("PLANTID", "", plant.IDNumber.ToString())); change.ChangeValues.Add(new Change("BOREHOLENO", "", Intake.Intake.well.ID)); change.ChangeValues.Add(new Change("INTAKENO", "", Intake.Intake.IDNumber.ToString())); if (Intake.StartNullable.HasValue) { change.ChangeValues.Add(new Change("STARTDATE", "", Intake.StartNullable.Value.ToShortDateString())); } if (Intake.EndNullable.HasValue) { change.ChangeValues.Add(new Change("ENDDATE", "", Intake.EndNullable.Value.ToShortDateString())); } if (DataBaseConnection.TryGetPrimaryID(Intake, plant, out id)) { change.PrimaryKeys["INTAKEPLANTID"] = id.ToString(); } return(change); }
private void AddIntake() { IntakeAdded = new PumpingIntake(SelectedIntake, CurrentPlant.plant); CurrentPlant.PumpingIntakes.Add(IntakeAdded); CurrentIntake = IntakeAdded; CanApply = true; }
public void GetPrimaryIDTest() { Wells.Well w = new HydroNumerics.Wells.Well("193. 125A"); w.AddNewIntake(1); Plant plant = new Plant(2065); PumpingIntake Intake = new PumpingIntake(w.Intakes.First(), plant); int actual; Assert.IsTrue(Reader.TryGetPrimaryID(Intake, plant, out actual)); Assert.AreEqual(707, actual); }
private void RemoveIntake() { if (IntakeAdded == null) { IntakeRemoved = CurrentIntake; CanApply = true; } else //This was an intake added previously { IntakeAdded = null; CanApply = false; } CurrentPlant.PumpingIntakes.Remove(CurrentIntake); }
public ChangeDescription AddIntakeToPlant(PumpingIntake Intake, Plant plant) { ChangeDescription change = GetGenericPlantIntake(); change.Action = TableAction.InsertRow; change.ChangeValues.Add(new Change("PLANTID", plant.IDNumber.ToString(), "")); change.ChangeValues.Add(new Change("BOREHOLENO", Intake.Intake.well.ID, "")); change.ChangeValues.Add(new Change("INTAKENO", Intake.Intake.IDNumber.ToString(), "")); if (Intake.StartNullable.HasValue) change.ChangeValues.Add(new Change("STARTDATE", Intake.StartNullable.Value.ToShortDateString(), "")); if (Intake.EndNullable.HasValue) change.ChangeValues.Add(new Change("ENDDATE", Intake.EndNullable.Value.ToShortDateString(), "")); return change; }
void PumpingIntakes_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) { foreach (var V in e.NewItems) { PumpingIntake PI = V as PumpingIntake; plant.PumpingIntakes.Add(PI); } } if (e.OldItems != null) { foreach (var V in e.OldItems) { PumpingIntake PI = V as PumpingIntake; plant.PumpingIntakes.Remove(PI); } } RaisePropertyChanged("MissingData"); wells = null; RaisePropertyChanged("Wells"); }
public ChangeDescription AddIntakeToPlant(PumpingIntake Intake, Plant plant) { ChangeDescription change = GetGenericPlantIntake(); change.Action = TableAction.InsertRow; change.ChangeValues.Add(new Change("PLANTID", plant.IDNumber.ToString(), "")); change.ChangeValues.Add(new Change("BOREHOLENO", Intake.Intake.well.ID, "")); change.ChangeValues.Add(new Change("INTAKENO", Intake.Intake.IDNumber.ToString(), "")); if (Intake.StartNullable.HasValue) { change.ChangeValues.Add(new Change("STARTDATE", Intake.StartNullable.Value.ToShortDateString(), "")); } if (Intake.EndNullable.HasValue) { change.ChangeValues.Add(new Change("ENDDATE", Intake.EndNullable.Value.ToShortDateString(), "")); } return(change); }
public ChangeDescription RemoveIntakeFromPlant(PumpingIntake Intake, Plant plant) { return(ChangeController.RemoveIntakeFromPlant(Intake, plant)); }
/// <summary> /// Applies the change in the description to a plant or a well. /// Returns true if the change could be applied. /// No checks on previous values or dates. /// </summary> /// <param name="plants"></param> /// <param name="wells"></param> /// <param name="cd"></param> /// <returns></returns> public bool ApplySingleChange(IPlantCollection plants, IWellCollection wells, ChangeDescription cd) { string wellid = ""; int plantid; int intakeno = -1; IWell CurrentWell; bool succeded = false; switch (cd.Table) { case JupiterTables.BOREHOLE: wellid = cd.PrimaryKeys["BOREHOLENO"]; if (wells.TryGetValue(wellid, out CurrentWell)) { foreach (var c in cd.ChangeValues) { switch (c.Column.ToUpper()) { case "XUTM": CurrentWell.X = double.Parse(c.NewValue); succeded = true; break; case "YUTM": CurrentWell.Y = double.Parse(c.NewValue); succeded = true; break; case "ELEVATION": CurrentWell.Terrain = double.Parse(c.NewValue); succeded = true; break; default: break; } } } break; case JupiterTables.SCREEN: wellid = cd.PrimaryKeys["BOREHOLENO"]; if (wells.TryGetValue(wellid, out CurrentWell)) { int screenNumber = int.Parse(cd.PrimaryKeys["SCREENNO"]); if (cd.Action == TableAction.EditValue) { var screen = CurrentWell.Intakes.SelectMany(var => var.Screens).FirstOrDefault(var2 => var2.Number == screenNumber); if (screen != null) { foreach (var cv in cd.ChangeValues) { if (cv.Column == "TOP") screen.DepthToTop = double.Parse(cv.NewValue); else if (cv.Column == "BOTTOM") screen.DepthToBottom = double.Parse(cv.NewValue); succeded = true; } } } else if (cd.Action == TableAction.InsertRow) { intakeno = int.Parse(cd.ChangeValues.Single(var => var.Column == "INTAKENO").NewValue); IIntake CurrentIntake = CurrentWell.Intakes.Single(var => var.IDNumber == intakeno); if (CurrentIntake != null) { Screen sc = new Screen(CurrentIntake); sc.DepthToTop = double.Parse(cd.ChangeValues.Single(var => var.Column == "TOP").NewValue); sc.DepthToBottom = double.Parse(cd.ChangeValues.Single(var => var.Column == "BOTTOM").NewValue); succeded = true; } } } break; case JupiterTables.DRWPLANTINTAKE: if (cd.Action == TableAction.EditValue || cd.Action == TableAction.DeleteRow) { int tableid; if (int.TryParse(cd.PrimaryKeys.First().Value, out tableid)) { if (DataBaseConnection.TryGetPlant(tableid, out plantid, out wellid, out intakeno)) succeded = true; } else //No ID Change of a change { if (cd.Action == TableAction.EditValue) { if (int.TryParse(cd.ChangeValues[0].NewValue, out plantid)) { wellid = cd.ChangeValues[1].NewValue; if (int.TryParse(cd.ChangeValues[2].NewValue, out intakeno)) succeded = true; } } else if (int.TryParse(cd.ChangeValues[0].OldValue, out plantid)) { wellid = cd.ChangeValues[1].OldValue; if (int.TryParse(cd.ChangeValues[2].OldValue, out intakeno)) succeded = true; } } if (succeded) { var pi = plants[plantid].PumpingIntakes.FirstOrDefault(var => var.Intake.well.ID == wellid & var.Intake.IDNumber == intakeno); if (pi != null) { if (cd.Action == TableAction.DeleteRow) plants[plantid].PumpingIntakes.Remove(pi); else { var start = cd.ChangeValues.SingleOrDefault(var => var.Column == "STARTDATE"); if (start != null) pi.StartNullable = DateTime.Parse(start.NewValue); var end = cd.ChangeValues.SingleOrDefault(var => var.Column == "ENDDATE"); if (end != null) pi.EndNullable = DateTime.Parse(end.NewValue); } succeded = true; } } } else //insertrow { plantid = int.Parse(cd.ChangeValues.First(var => var.Column == "PLANTID").NewValue); Plant p; if (plants.TryGetValue(plantid, out p)) { wellid = cd.ChangeValues.First(var => var.Column == "BOREHOLENO").NewValue; IWell w; if (wells.TryGetValue(wellid, out w)) { intakeno = int.Parse(cd.ChangeValues.First(var => var.Column == "INTAKENO").NewValue); IIntake I = w.Intakes.First(var => var.IDNumber == intakeno); if (I != null) { PumpingIntake pi = new PumpingIntake(I, p); var s = cd.ChangeValues.FirstOrDefault(var => var.Column == "STARTDATE"); if (s != null) pi.StartNullable = DateTime.Parse(s.NewValue); s = cd.ChangeValues.FirstOrDefault(var => var.Column == "ENDDATE"); if (s != null) pi.EndNullable = DateTime.Parse(s.NewValue); p.PumpingIntakes.Add(pi); succeded = true; } } } } break; case JupiterTables.WATLEVEL: wellid = cd.PrimaryKeys["BOREHOLENO"]; if (wells.TryGetValue(wellid, out CurrentWell)) { DateTime TimeOfMeasure; int WatlevelNo = int.Parse(cd.PrimaryKeys["WATLEVELNO"]); if (DataBaseConnection.TryGetIntakeNoTimeOfMeas(CurrentWell, WatlevelNo, out intakeno, out TimeOfMeasure)) { IIntake CurrentIntake = CurrentWell.Intakes.SingleOrDefault(var => var.IDNumber == intakeno); if (CurrentIntake != null) { var item = CurrentIntake.HeadObservations.Items.FirstOrDefault(var => var.Time == TimeOfMeasure); if (item != null) { CurrentIntake.HeadObservations.Items.Remove(item); succeded = true; } } } } break; default: break; } return succeded; }
public ChangeDescription ChangeEndDateOnPumpingIntake(PumpingIntake Intake, Plant plant, DateTime NewDate) { ChangeDescription change = GetGenericPlantIntake(); int id; if (DataBaseConnection.TryGetPrimaryID(Intake, plant, out id)) change.PrimaryKeys["INTAKEPLANTID"] = id.ToString(); change.Action = TableAction.EditValue; if (Intake.EndNullable.HasValue) change.ChangeValues.Add(new Change("ENDDATE", NewDate.ToShortDateString(), Intake.EndNullable.Value.ToShortDateString())); else change.ChangeValues.Add(new Change("ENDDATE", NewDate.ToShortDateString(), "")); return change; }
public ChangeDescription RemoveIntakeFromPlant(PumpingIntake Intake, Plant plant) { ChangeDescription change = GetGenericPlantIntake(); int id; change.Action = TableAction.DeleteRow; change.ChangeValues.Add(new Change("PLANTID", "", plant.IDNumber.ToString())); change.ChangeValues.Add(new Change("BOREHOLENO", "", Intake.Intake.well.ID)); change.ChangeValues.Add(new Change("INTAKENO", "", Intake.Intake.IDNumber.ToString())); if (Intake.StartNullable.HasValue) change.ChangeValues.Add(new Change("STARTDATE", "", Intake.StartNullable.Value.ToShortDateString())); if (Intake.EndNullable.HasValue) change.ChangeValues.Add(new Change("ENDDATE", "", Intake.EndNullable.Value.ToShortDateString())); if (DataBaseConnection.TryGetPrimaryID(Intake, plant, out id)) change.PrimaryKeys["INTAKEPLANTID"] = id.ToString(); return change; }
/// <summary> /// Creates wells from DataRows based on ShapeReaderConfiguration /// </summary> /// <param name="DS"></param> /// <param name="SRC"></param> public static void FillInFromNovanaShape(DataRow[] DS, ShapeReaderConfiguration SRC, IWellCollection Wells, IPlantCollection Plants) { bool ReadPumpActivity = false; bool ReadPlants = false; bool ReadLayer = false; if (DS.First().Table.Columns.Contains(SRC.FraAArHeader) & DS.First().Table.Columns.Contains(SRC.TilAArHeader)) { ReadPumpActivity = true; } if (DS.First().Table.Columns.Contains(SRC.LayerHeader)) { ReadLayer = true; } if (Plants != null) { if (DS.First().Table.Columns.Contains(SRC.PlantIDHeader)) { ReadPlants = true; } } IWell CurrentWell; IIntake CurrentIntake; foreach (DataRow DR in DS) { string wellID = DR[SRC.WellIDHeader].ToString(); //Find the well in the dictionary if (Wells.Contains(wellID)) { CurrentWell = Wells[wellID]; } else { //Add a new well if it was not found CurrentWell = new Well(wellID); CurrentWell.UsedForExtraction = true; Wells.Add(CurrentWell); } int intakeno = Convert.ToInt32(DR[SRC.IntakeNumber]); CurrentIntake = CurrentWell.Intakes.FirstOrDefault(var => var.IDNumber == intakeno); if (CurrentIntake == null) { CurrentIntake = CurrentWell.AddNewIntake(intakeno); } if (ReadLayer) { if (!Convert.IsDBNull(DR[SRC.LayerHeader])) { CurrentIntake.Layer = Convert.ToInt32(DR[SRC.LayerHeader]); } } if (ReadPlants) { Plant CurrentPlant; int PlantID = Convert.ToInt32(DR[SRC.PlantIDHeader]); if (!Plants.TryGetValue(PlantID, out CurrentPlant)) { CurrentPlant = new Plant(PlantID); Plants.Add(CurrentPlant); } PumpingIntake CurrentPumpingIntake = new PumpingIntake(CurrentIntake, CurrentPlant); CurrentPlant.PumpingIntakes.Add(CurrentPumpingIntake); if (ReadPumpActivity) { CurrentPumpingIntake.Start = new DateTime(Convert.ToInt32(DR[SRC.FraAArHeader]), 1, 1); CurrentPumpingIntake.End = new DateTime(Convert.ToInt32(DR[SRC.TilAArHeader]), 12, 31); } } CurrentWell.X = Convert.ToDouble(DR[SRC.XHeader]); CurrentWell.Y = Convert.ToDouble(DR[SRC.YHeader]); CurrentWell.Terrain = Convert.ToDouble(DR[SRC.TerrainHeader]); Screen CurrentScreen = new Screen(CurrentIntake); CurrentScreen.BottomAsKote = Convert.ToDouble(DR[SRC.BOTTOMHeader]); CurrentScreen.TopAsKote = Convert.ToDouble(DR[SRC.TOPHeader]); } }
private void Apply() { if (IntakeAdded != null) { ChangeDescription cd = CVM.ChangeController.AddIntakeToPlant(IntakeAdded, CurrentPlant.plant); CurrentChange.changeDescription.Action = cd.Action; CurrentChange.changeDescription.ChangeValues = cd.ChangeValues; CurrentChange.changeDescription.PrimaryKeys = cd.PrimaryKeys; } else if (IntakeRemoved != null) { ChangeDescription cd = CVM.ChangeController.RemoveIntakeFromPlant(IntakeRemoved, CurrentPlant.plant); CurrentChange.changeDescription.Action = cd.Action; CurrentChange.changeDescription.ChangeValues = cd.ChangeValues; CurrentChange.changeDescription.PrimaryKeys = cd.PrimaryKeys; } else //Only the dates have been changed { if (StartDateChange != null) { if (StartDateChange.PrimaryKeys.Values.First() == "") //It is a change of change { ChangeDescription cd = CVM.ChangeController.AddIntakeToPlant(CurrentIntake, CurrentPlant.plant); CurrentChange.changeDescription.Action = TableAction.EditValue; CurrentChange.changeDescription.ChangeValues = cd.ChangeValues; CurrentChange.changeDescription.PrimaryKeys = cd.PrimaryKeys; } else { CurrentChange.changeDescription = StartDateChange; } if (EndDateChange != null) { CurrentChange.changeDescription.ChangeValues.Add(EndDateChange.ChangeValues[0]); } } else if (EndDateChange != null) { if (EndDateChange.PrimaryKeys.Values.First() == "") //It is a change of change { ChangeDescription cd = CVM.ChangeController.AddIntakeToPlant(CurrentIntake, CurrentPlant.plant); CurrentChange.changeDescription.Action = TableAction.EditValue; CurrentChange.changeDescription.ChangeValues = cd.ChangeValues; CurrentChange.changeDescription.PrimaryKeys = cd.PrimaryKeys; } else { CurrentChange.changeDescription = EndDateChange; } } } //call distribute extraction again. CurrentPlant.plant.DistributeExtraction(true); CurrentChange.IsDirty = true; CurrentChange.IsApplied = true; CVM.AddChange(CurrentChange, false); CurrentChange = new ChangeDescriptionViewModel(CVM.ChangeController.GetGenericPlantIntake()); IntakeRemoved = null; IntakeAdded = null; EndDateChange = null; StartDateChange = null; CanApply = false; }
/// <summary> /// Applies the change in the description to a plant or a well. /// Returns true if the change could be applied. /// No checks on previous values or dates. /// </summary> /// <param name="plants"></param> /// <param name="wells"></param> /// <param name="cd"></param> /// <returns></returns> public bool ApplySingleChange(IPlantCollection plants, IWellCollection wells, ChangeDescription cd) { string wellid = ""; int plantid; int intakeno = -1; IWell CurrentWell; bool succeded = false; switch (cd.Table) { case JupiterTables.BOREHOLE: wellid = cd.PrimaryKeys["BOREHOLENO"]; if (wells.TryGetValue(wellid, out CurrentWell)) { foreach (var c in cd.ChangeValues) { switch (c.Column.ToUpper()) { case "XUTM": CurrentWell.X = double.Parse(c.NewValue); succeded = true; break; case "YUTM": CurrentWell.Y = double.Parse(c.NewValue); succeded = true; break; case "ELEVATION": CurrentWell.Terrain = double.Parse(c.NewValue); succeded = true; break; default: break; } } } break; case JupiterTables.SCREEN: wellid = cd.PrimaryKeys["BOREHOLENO"]; if (wells.TryGetValue(wellid, out CurrentWell)) { int screenNumber = int.Parse(cd.PrimaryKeys["SCREENNO"]); if (cd.Action == TableAction.EditValue) { var screen = CurrentWell.Intakes.SelectMany(var => var.Screens).FirstOrDefault(var2 => var2.Number == screenNumber); if (screen != null) { foreach (var cv in cd.ChangeValues) { if (cv.Column == "TOP") { screen.DepthToTop = double.Parse(cv.NewValue); } else if (cv.Column == "BOTTOM") { screen.DepthToBottom = double.Parse(cv.NewValue); } succeded = true; } } } else if (cd.Action == TableAction.InsertRow) { intakeno = int.Parse(cd.ChangeValues.Single(var => var.Column == "INTAKENO").NewValue); IIntake CurrentIntake = CurrentWell.Intakes.Single(var => var.IDNumber == intakeno); if (CurrentIntake != null) { Screen sc = new Screen(CurrentIntake); sc.DepthToTop = double.Parse(cd.ChangeValues.Single(var => var.Column == "TOP").NewValue); sc.DepthToBottom = double.Parse(cd.ChangeValues.Single(var => var.Column == "BOTTOM").NewValue); succeded = true; } } } break; case JupiterTables.DRWPLANTINTAKE: if (cd.Action == TableAction.EditValue || cd.Action == TableAction.DeleteRow) { int tableid; if (int.TryParse(cd.PrimaryKeys.First().Value, out tableid)) { if (DataBaseConnection.TryGetPlant(tableid, out plantid, out wellid, out intakeno)) { succeded = true; } } else //No ID Change of a change { if (cd.Action == TableAction.EditValue) { if (int.TryParse(cd.ChangeValues[0].NewValue, out plantid)) { wellid = cd.ChangeValues[1].NewValue; if (int.TryParse(cd.ChangeValues[2].NewValue, out intakeno)) { succeded = true; } } } else if (int.TryParse(cd.ChangeValues[0].OldValue, out plantid)) { wellid = cd.ChangeValues[1].OldValue; if (int.TryParse(cd.ChangeValues[2].OldValue, out intakeno)) { succeded = true; } } } if (succeded) { var pi = plants[plantid].PumpingIntakes.FirstOrDefault(var => var.Intake.well.ID == wellid & var.Intake.IDNumber == intakeno); if (pi != null) { if (cd.Action == TableAction.DeleteRow) { plants[plantid].PumpingIntakes.Remove(pi); } else { var start = cd.ChangeValues.SingleOrDefault(var => var.Column == "STARTDATE"); if (start != null) { pi.StartNullable = DateTime.Parse(start.NewValue); } var end = cd.ChangeValues.SingleOrDefault(var => var.Column == "ENDDATE"); if (end != null) { pi.EndNullable = DateTime.Parse(end.NewValue); } } succeded = true; } } } else //insertrow { plantid = int.Parse(cd.ChangeValues.First(var => var.Column == "PLANTID").NewValue); Plant p; if (plants.TryGetValue(plantid, out p)) { wellid = cd.ChangeValues.First(var => var.Column == "BOREHOLENO").NewValue; IWell w; if (wells.TryGetValue(wellid, out w)) { intakeno = int.Parse(cd.ChangeValues.First(var => var.Column == "INTAKENO").NewValue); IIntake I = w.Intakes.First(var => var.IDNumber == intakeno); if (I != null) { PumpingIntake pi = new PumpingIntake(I, p); var s = cd.ChangeValues.FirstOrDefault(var => var.Column == "STARTDATE"); if (s != null) { pi.StartNullable = DateTime.Parse(s.NewValue); } s = cd.ChangeValues.FirstOrDefault(var => var.Column == "ENDDATE"); if (s != null) { pi.EndNullable = DateTime.Parse(s.NewValue); } p.PumpingIntakes.Add(pi); succeded = true; } } } } break; case JupiterTables.WATLEVEL: wellid = cd.PrimaryKeys["BOREHOLENO"]; if (wells.TryGetValue(wellid, out CurrentWell)) { DateTime TimeOfMeasure; int WatlevelNo = int.Parse(cd.PrimaryKeys["WATLEVELNO"]); if (DataBaseConnection.TryGetIntakeNoTimeOfMeas(CurrentWell, WatlevelNo, out intakeno, out TimeOfMeasure)) { IIntake CurrentIntake = CurrentWell.Intakes.SingleOrDefault(var => var.IDNumber == intakeno); if (CurrentIntake != null) { var item = CurrentIntake.HeadObservations.Items.FirstOrDefault(var => var.Time == TimeOfMeasure); if (item != null) { CurrentIntake.HeadObservations.Items.Remove(item); succeded = true; } } } } break; default: break; } return(succeded); }