Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
 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;
    }
Ejemplo n.º 7
0
        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");
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
 public ChangeDescription RemoveIntakeFromPlant(PumpingIntake Intake, Plant plant)
 {
     return(ChangeController.RemoveIntakeFromPlant(Intake, plant));
 }
Ejemplo n.º 10
0
    /// <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;
    }
Ejemplo n.º 11
0
    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;
    }
Ejemplo n.º 12
0
    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;
    }
Ejemplo n.º 13
0
        /// <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]);
            }
        }
Ejemplo n.º 14
0
        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;
        }
Ejemplo n.º 15
0
        /// <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);
        }