public ActionResult TrainSettings(string Data)
        {
            try
            {
                int CustomerId = 0;
                if (this.Session["CustomerId"] != null)
                {
                    CustomerId = Convert.ToInt16(this.Session["CustomerId"]);
                }
                List<train> trains = this.trainRepository.GetAll().Where(p => p.customer_customerID == CustomerId).ToList();
                Trainsettings trainDetails = new Trainsettings();
                var customer = this.customerRepository.GetById(CustomerId);
                int NoofTrains = Convert.ToInt16(customer.num_trains);
                var trainData = this.modifiedCondRepository.GetTrains(CustomerId);

                if (trainData != 0)
                {
                    long trId = 0;
                    if (Data == null)
                    {
                        trId = this.modifiedCondRepository.GetTrainIdByCsutomer(CustomerId);
                    }
                    else
                    {
                        trId = Convert.ToInt16(Data);
                    }
                    var train = this.modifiedCondRepository.GetTrainDetailsByCustomerIdandTrainId(trId, CustomerId);
                    if (trains.Count == 0)
                    {
                        for (int i = 0; i < NoofTrains; i++)
                        {
                            trainDetails.TrianNoList.Add(new SelectListItem() { Text = "Train " + (i + 1), Value = "0" });
                        }
                    }
                    else
                    {
                        for (int i = 0; i < trains.Count; i++)
                        {
                            trainDetails.TrianNoList.Add(new SelectListItem() { Text = "Train " + (i + 1), Value = trains[i].trainID.ToString() });
                        }
                    }
                    trainDetails.Train = train;
                    if (train != null && train.num_beds_cation == 2)
                    {
                        trainDetails.cation = true;
                    }
                    if (train != null && train.num_beds_anion == 2)
                    {
                        trainDetails.anion = true;
                    }
                    if (train != null && train.using_manifold == "NO")
                    {
                        trainDetails.manifold = false;
                    }
                    else if (train != null && train.using_manifold == "YES")
                    {
                        trainDetails.manifold = true;
                    }
                    List<vessel> lstVessels = new List<vessel>();
                    List<int> VesselNumbers = new List<int>();

                    if (Data == null)
                    {
                        lstVessels = this.modifiedVesselRepository.FetchVesselsList(Convert.ToInt16(trId));
                        trainDetails.VesslsList = lstVessels;
                        for (int i = 0; i < trainDetails.VesslsList.Count; i++)
                        {

                            var resin = this.modifiedVesselRepository.GetResinById(lstVessels[i].resin_data_product_id);
                            if (resin != null)
                            {
                                lstVessels[i].ResinModel = resin.model_number;
                                lstVessels[i].ResinData = resin.primary_type + " " + resin.manufacturer + "(" + resin.model_number + ")";
                            }
                            if (i == 2 || i == 3)
                            {
                                VesselNumbers.Add(Convert.ToInt32(lstVessels[i].vessel_number));
                            }

                            if (lstVessels[i].with_degassifier == "1")
                            {
                                lstVessels[i].Degasifier = true;
                            }
                            if (lstVessels[i].with_polisher == "1")
                            {
                                lstVessels[i].Polisher = true;
                            }
                            if (trainDetails.manifold == false) // Set number of regens to "N/A" if the user is not using a manifold
                            {
                                lstVessels[i].num_regens = "N/A";
                            }
                        }
                        if (VesselNumbers.Count == 1)
                        {
                            lstVessels.Add(new vessel() { vessel_number = VesselNumbers[0] == 3 ? 4 : 3 });
                            lstVessels = lstVessels.OrderBy(x => x.vessel_number).ToList();
                            trainDetails.VesslsList = lstVessels;
                        }
                        else if (VesselNumbers.Count == 2)
                        {
                            lstVessels = lstVessels.OrderBy(x => x.vessel_number).ToList();
                            trainDetails.VesslsList = lstVessels;
                        }
                        else
                        {
                            for (int i = trainDetails.VesslsList.Count; i < 4; i++)
                            {

                                lstVessels.Add(new vessel());

                            }
                        }

                        return this.PartialView("_TrainSettings", trainDetails);
                    }
                    else // This happens when the user switches between trains!!!
                    {
                        lstVessels = this.modifiedVesselRepository.FetchVesselsList(Convert.ToInt16(trId));
                        trainDetails.VesslsList = lstVessels;
                        int i = 0;
                        if (lstVessels != null)
                        {
                            foreach (var Vessel in lstVessels)
                            {
                                if (i == 2 || i == 3)
                                {
                                    VesselNumbers.Add(Convert.ToInt32(Vessel.vessel_number));
                                }
                                var resin = this.modifiedVesselRepository.GetResinById(Vessel.resin_data_product_id);
                                Vessel.ResinModel = resin.model_number;
                                Vessel.ResinData = resin.primary_type + " " + resin.manufacturer + "(" + resin.model_number + ")";
                                if (lstVessels[i].with_degassifier == "1")
                                {
                                    lstVessels[i].Degasifier = true;
                                }
                                if (lstVessels[i].with_polisher == "1")
                                {
                                    lstVessels[i].Polisher = true;
                                }
                                i = i + 1;
                            }
                        }
                        if (VesselNumbers.Count == 1)
                        {
                            lstVessels.Add(new vessel() { vessel_number = VesselNumbers[0] == 3 ? 4 : 3 });
                            lstVessels = lstVessels.OrderBy(x => x.vessel_number).ToList();
                            trainDetails.VesslsList = lstVessels;
                        }
                        else if (VesselNumbers.Count == 2)
                        {
                            lstVessels = lstVessels.OrderBy(x => x.vessel_number).ToList();
                            trainDetails.VesslsList = lstVessels;
                        }
                        else if (trainDetails.VesslsList != null)
                        {
                            for (int j = trainDetails.VesslsList.Count; j < 4; j++)
                            {
                                lstVessels.Add(new vessel());
                            }
                        }
                        return this.PartialView("_bedsettings", trainDetails);
                    }
                }
                else
                {
                    trainDetails.Train = new train();
                    trainDetails.cation = false;
                    trainDetails.anion = false;
                    trainDetails.Train.using_manifold = "NO";
                    trainDetails.manifold = false;
                    for (int i = 0; i < NoofTrains; i++)
                    {
                        trainDetails.TrianNoList.Add(new SelectListItem() { Text = "Train " + (i + 1), Value = "0" });
                    }
                    List<vessel> lstVessels = new List<vessel>();
                    for (int i = 0; i < 4; i++)
                    {
                        lstVessels.Add(new vessel());
                    }
                    trainDetails.VesslsList = lstVessels;
                    return this.PartialView("_TrainSettings", trainDetails);
                }
            }
            catch
            {
                throw;
            }
        }
        /// <summary>
        /// Processes the train settings.
        /// </summary>
        /// <param name="trainSettings">The train settings.</param>
        /// <param name="train">The train.</param>
        /// <returns></returns>
        private train ProcessTrainSettings(Trainsettings trainSettings, train train)
        {
            List<vessel> lstVessels = new List<vessel>();
            train = trainSettings.Train;
            train.customer_customerID = Convert.ToInt32(this.Session["CustomerId"]);
            if (train.using_manifold == null)
            {
                train.using_manifold = "NO";
            }
            var TrainInDB = this.modifiedCondRepository.GetTrainDetailsByCustomerIdandTrainId(train.trainID, train.customer_customerID);
            if (TrainInDB != null)
            {
                this.modifiedTrainRepository.UpdateTrain(train);
            }
            else
            {
                this.trainRepository.Insert(train);
            }
            this.trainRepository.SubmitChanges();
            List<vessel> vessels = null;
            if (trainSettings.Train != null && trainSettings.Train.trainID != 0)
            {
                vessels = this.modifiedVesselRepository.FetchVesselsList(trainSettings.Train.trainID);
            }
            if (vessels == null || vessels.Count == 0)
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    int vesselNumber = 0;
                    foreach (vessel vessel in trainSettings.VesslsList)
                    {
                        try
                        {
                            vesselNumber = vesselNumber + 1;
                            if (vessel.UpdateVessel == "True")
                            {
                                vessel.with_degassifier = vessel.Degasifier == true ? "1" : "0";
                                vessel.with_polisher = vessel.Polisher == true ? "1" : "0";
                                if (vesselNumber > 0 && vesselNumber < 5)
                                {
                                    vessel.vessel_number = vesselNumber;
                                    if (vesselNumber == 1 || vesselNumber == 3)
                                    {
                                        vessel.bed_number = "1";
                                    }
                                    else
                                    {
                                        vessel.bed_number = "2";
                                    }
                                }
                                vessel.vesselID = this.modifiedVesselRepository.GetNewVesselId();
                                vessel.vessel_customerID = this.Session["CustomerId"].ToString();
                                vessel.train_trainID = train.trainID;
                                int resinDataProductId = this.modifiedVesselRepository.GetResinId(vessel.ResinModel);
                                vessel.resin_data_product_id = resinDataProductId;

                                if (vessel.num_regens == null)
                                {
                                    vessel.num_regens = "00";
                                }

                                this.modifiedVesselRepository.InsertVessel(vessel);
                                this.vesselRepository.SubmitChanges();
                            }
                            else if (vessel.UpdateVessel == "False" && !string.IsNullOrEmpty(vessel.name))
                            {
                                this.modifiedVesselRepository.DeleteVessel(vessel);
                            }
                        }
                        catch
                        {
                            throw;

                        }
                    }
                    scope.Complete();
                }
                this.Session["HasTrainDetails"] = "Yes";
            }
            else
            {
                train = trainSettings.Train;
                if (train.customer_customerID == 0)
                {
                    train.customer_customerID = Convert.ToInt32(this.Session["CustomerId"]);
                }
                using (TransactionScope scope = new TransactionScope())
                {
                    int vesselNumber = 0;
                    lstVessels = this.modifiedVesselRepository.FetchVesselsList(Convert.ToInt16(train.trainID));
                    int vesselcount = 0;
                    foreach (vessel vessel in trainSettings.VesslsList)  // This Updates the DB's Vessel Data with updated view information entered in by the user
                    {
                        vesselNumber = vesselNumber + 1;
                        if (vessel.UpdateVessel == "True")
                        {
                            vessel.with_degassifier = vessel.Degasifier == true ? "1" : "0";
                            vessel.with_polisher = vessel.Polisher == true ? "1" : "0";
                            vessel.throughput = vessel.throughput == null ? "0" : vessel.throughput;
                            int resinDataProductId = this.modifiedVesselRepository.GetResinId(vessel.ResinModel);
                            vessel.resin_data_product_id = resinDataProductId;
                            if (vesselNumber > 0 && vesselNumber < 5)
                            {
                                vessel.vessel_number = vesselNumber;
                                if (vesselNumber == 1 || vesselNumber == 2)
                                {
                                    vessel.bed_number = "1";
                                }
                                else
                                {
                                    vessel.bed_number = "2";
                                }
                            }
                            vessel.vessel_customerID = this.Session["CustomerId"].ToString();
                            vessel.train_trainID = train.trainID;

                            // Ensure that all num-regens data is populated
                            if(train.using_manifold == "NO")
                            {
                                vessel.num_regens = (lstVessels.ElementAt(vesselcount).num_regens) != null ? lstVessels.ElementAt(vesselcount).num_regens : "00";  // If we are not using a manifold store the previous manifold data (if it exists, otherwise store 00)
                                vessel.throughput = (lstVessels.ElementAt(vesselcount).throughput) != null ? lstVessels.ElementAt(vesselcount).throughput : "00";  // If we are not using a manifold store the previous manifold data (if it exists, otherwise store 00)
                            }
                            else if (vessel.num_regens == null || vessel.throughput == null)
                            {
                                vessel.num_regens = "000";
                                vessel.throughput = "000";
                            }

                            try
                            {
                                this.modifiedVesselRepository.UpdateVessel(vessel);//Delete vessel if its not being updated to DB
                            }
                            catch
                            {
                                throw;
                            }
                        }
                        else if (vessel.UpdateVessel == "False" && !string.IsNullOrEmpty(vessel.name))
                        {
                            this.modifiedVesselRepository.DeleteVessel(vessel);
                        }
                        vesselcount++;
                    }
                    scope.Complete();
                }
            }
            return train;
        }
 public string TrainSettingsWithoutRedirect(Trainsettings trainSettings)
 {
     train train = new train();
     try
     {
         train = ProcessTrainSettings(trainSettings, train);
         return "true";
     }
     catch
     {
         return "false";
         throw;
     }
 }
        public ActionResult TrainSettings(Trainsettings trainSettings)
        {
            train train = new train();
            try
            {
                train = ProcessTrainSettings(trainSettings, train);
            }
            catch
            {
                throw;
            }

            return RedirectToAction("DashBoard");
        }
        /// <summary>
        /// Processes the train settings.
        /// </summary>
        /// <param name="trainSettings">The train settings.</param>
        /// <param name="train">The train.</param>
        /// <returns></returns>
        private train ProcessTrainSettings(Trainsettings trainSettings, train train)
        {
            train = trainSettings.Train;
            train.customer_customerID = Convert.ToInt32(this.Session["CustomerId"]);
            if (train.using_manifold == null)
            {
                train.using_manifold = "NO";
            }
            var TrainInDB = this.modifiedCondRepository.GetTrainDetailsByCustomerIdandTrainId(train.trainID, train.customer_customerID);
            if (TrainInDB != null)
            {
                this.modifiedTrainRepository.UpdateTrain(train);
            }
            else
            {
                this.trainRepository.Insert(train);
            }
            this.trainRepository.SubmitChanges();
            List<vessel> vessels = null;
            if (trainSettings.Train != null && trainSettings.Train.trainID != 0)
            {
                vessels = this.modifiedVesselRepository.FetchVesselsList(trainSettings.Train.trainID);
            }
            if (vessels == null || vessels.Count == 0)
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    int vesselNumber = 0;
                    foreach (vessel vessel in trainSettings.VesslsList)
                    {
                        try
                        {
                            vesselNumber = vesselNumber + 1;
                            if (vessel.UpdateVessel == "True")
                            {
                                vessel.with_degassifier = vessel.Degasifier == true ? "1" : "0";
                                vessel.with_polisher = vessel.Polisher == true ? "1" : "0";
                                if (vesselNumber > 0 && vesselNumber < 5)
                                {
                                    vessel.vessel_number = vesselNumber;
                                    if (vesselNumber == 1 || vesselNumber == 3)
                                    {
                                        vessel.bed_number = "1";
                                    }
                                    else
                                    {
                                        vessel.bed_number = "2";
                                    }
                                }
                                vessel.vesselID = this.modifiedVesselRepository.GetNewVesselId();
                                vessel.vessel_customerID = this.Session["CustomerId"].ToString();
                                vessel.train_trainID = train.trainID;
                                int resinDataProductId = this.modifiedVesselRepository.GetResinId(vessel.ResinModel);
                                vessel.resin_data_product_id = resinDataProductId;
                                this.modifiedVesselRepository.InsertVessel(vessel);
                                this.vesselRepository.SubmitChanges();
                            }
                            else if (vessel.UpdateVessel == "False" && !string.IsNullOrEmpty(vessel.name))
                            {
                                this.modifiedVesselRepository.DeleteVessel(vessel);
                            }
                        }
                        catch
                        {
                            throw;

                        }
                    }
                    scope.Complete();
                }
                this.Session["HasTrainDetails"] = "Yes";
            }
            else
            {
                train = trainSettings.Train;
                if (train.customer_customerID == 0)
                {
                    train.customer_customerID = Convert.ToInt32(this.Session["CustomerId"]);
                }
                using (TransactionScope scope = new TransactionScope())
                {
                    int vesselNumber = 0;
                    foreach (vessel vessel in trainSettings.VesslsList)
                    {
                        vesselNumber = vesselNumber + 1;
                        if (vessel.UpdateVessel == "True")
                        {
                            vessel.with_degassifier = vessel.Degasifier == true ? "1" : "0";
                            vessel.with_polisher = vessel.Polisher == true ? "1" : "0";
                            vessel.throughput = vessel.throughput == null ? "0" : vessel.throughput;
                            int resinDataProductId = this.modifiedVesselRepository.GetResinId(vessel.ResinModel);
                            vessel.resin_data_product_id = resinDataProductId;
                            if (vesselNumber > 0 && vesselNumber < 5)
                            {
                                vessel.vessel_number = vesselNumber;
                                if (vesselNumber == 1 || vesselNumber == 2)
                                {
                                    vessel.bed_number = "1";
                                }
                                else
                                {
                                    vessel.bed_number = "2";
                                }
                            }
                            vessel.vessel_customerID = this.Session["CustomerId"].ToString();
                            vessel.train_trainID = train.trainID;
                            try
                            {
                                this.modifiedVesselRepository.UpdateVessel(vessel);//Delete vessel if its not being updated to DB
                            }
                            catch
                            {
                                throw;
                            }
                        }
                        else if (vessel.UpdateVessel == "False" && !string.IsNullOrEmpty(vessel.name))
                        {
                            this.modifiedVesselRepository.DeleteVessel(vessel);
                        }
                    }
                    scope.Complete();
                }
            }
            return train;
        }