public ActionResult UpdateProducer(long ProducerID)
        {
            ProducerVM      updateVM = new ProducerVM();
            IProducerInfoDO producer = _ProducerAccess.ViewProducerByID(ProducerID);

            updateVM.Producer = ProducerMap.MapDOtoPO(producer);

            return(View(updateVM));
        }
        public ActionResult UpdateProducer(ProducerVM changeproducer)
        {
            ActionResult oResult = null;

            if (Session["UserName"] == null || ((int)Session["UserLevel"] > 2))
            {
                RedirectToAction("Login", "User");
            }
            else
            {
                //if the info was entered as required
                if (ModelState.IsValid)
                {
                    try
                    {
                        IProducerInfoDO updateProducer = ProducerMap.MapPOtoDO(changeproducer.Producer);
                        //call to producer data access method
                        _ProducerAccess.UpdateProducer(updateProducer);
                    }
                    catch (Exception e)
                    {
                        //what to do with exception, what to write

                        if (e.Message.Contains("duplicate"))
                        {
                            changeproducer.ErrorMessage = "Unable to process request, duplicate record already exists";
                        }
                        else
                        {
                            changeproducer.ErrorMessage = "We apologize but we were unable to handle your request at this time.";
                        }
                    }
                    finally
                    {
                    }

                    if (changeproducer.ErrorMessage == null)
                    {
                        //if no errors take them to producer list to see if their submission was added
                        oResult = RedirectToAction("ViewProducers", "Producer");
                    }
                    else
                    {
                        //if any errors caught then redirect to screen to change producer info, same as they came from
                        oResult = View(changeproducer);
                    }
                }
                else
                {
                    oResult = View(changeproducer);
                }
            }
            return(oResult);
        }
        public ActionResult AddProducer(ProducerVM viewModel)
        {
            ActionResult oResponse = null;

            if (Session["UserName"] == null || (int)Session["UserLevel"] > 2)
            {
                oResponse = RedirectToAction("Login", "User");
            }
            else
            {
                if (ModelState.IsValid)
                {
                    try
                    {
                        IProducerInfoDO locationform = ProducerMap.MapPOtoDO(viewModel.Producer);
                        _ProducerAccess.InsertProducer(locationform);
                    }
                    catch (Exception e)
                    {
                        if (e.Message.Contains("duplicate"))
                        {
                            //if that Company name is already in the DB, push this message to user
                            viewModel.ErrorMessage = String.Format("There is already a {0} in the database.", viewModel.Producer.CompanyName);
                        }
                        else
                        {
                            //other errors thatn duplicate
                            viewModel.ErrorMessage = "We apologize but we were unable to handle your request at this time.";
                        }
                    }
                    finally
                    {
                        //nothing to do here
                    }
                    if (viewModel.ErrorMessage == null)
                    {
                        oResponse = RedirectToAction("ViewProducers", "Producer");
                    }
                    else
                    {
                        oResponse = View(viewModel);
                    }
                }
                else
                {
                    oResponse = View(viewModel);
                }
            }
            return(oResponse);
        }
        public ActionResult ViewProducers()
        {
            //instantiate new viewmodel obj.
            ProducerVM newVM = new ProducerVM();

            //make sure user is authorized to add producer
            if (Session["UserName"] == null || (int)Session["UserLevel"] == 3)
            {
                RedirectToAction("Login", "User");
            }
            else
            {
                //instantiated new viewmodel, fill below
                try
                {
                    //call to DAL for method, reader fills list in method
                    List <IProducerInfoDO> ProducerData = _ProducerAccess.ViewAllProducers();
                    //call to method from mapping class
                    newVM.ProducerList = ProducerMap.MapDOtoPO(ProducerData);


                    //get a fresh list of shipments
                    List <IShipmentInfoDO> mylist = _ShipmentAccess.ViewAllShipments();
                    //Map each from DO to a BO
                    List <IShipmentInfoBO> viewTop = ShipmentMap.MapDOtoBO(mylist);
                    //call to the business logic, pass the information.
                    long topProducerID = _ShipmentLogic.GetTopProducer(viewTop);
                    //turn id into an object by calling down to the database, map in line.
                    newVM.Producer = ProducerMap.MapDOtoPO(_ProducerAccess.ViewProducerByID(topProducerID));
                    //now top producer is in PO form, can display using producerVM
                }
                catch (Exception)
                {
                    newVM.ErrorMessage = "There was an issue obtaining the list";
                }
                finally
                {
                    ///nothing else needs to happen
                }
            }


            return(View(newVM));
        }
        private SelectList PopulateProducersDDL()
        {
            //for entereing shipments, need to know it is coming from a farmer in the db!
            List <IProducerInfoDO> databaseProducers = _ProducerAccess.ViewAllProducers();

            //map
            List <ProducerPO> mappedProducers = ProducerMap.MapDOtoPO(databaseProducers);
            List <ProducerPO> actualList      = new List <ProducerPO>();

            //add dummy location for "default" on dropdown, otherwise it sets to ACTUAL location
            actualList.Add(new ProducerPO()
            {
                ProducerID = 0, CompanyName = " -- Please choose a Producer --"
            });

            //after dummy is in top stop, add range from db
            actualList.AddRange(mappedProducers);

            //producer id what is listed, user will see label as Company Name
            return(new SelectList(actualList, "ProducerID", "CompanyName"));
        }