public void Save(CommodityOwnerViewModel commodityOwnerVM)
 {
     //var age = DateTime.Now.Year - commodityOwnerVM.DateOfBirth.Year;
     //if(age < 18 || age > 120)
     //{
     //    throw new DomainValidationException(new ValidationResultInfo(), "Farmer must be over 17 years old.");
     //}
     CommodityOwner commodityOwner = new CommodityOwner(commodityOwnerVM.Id);
     commodityOwner.Code = commodityOwnerVM.Code;
     commodityOwner.Surname = commodityOwnerVM.Surname;
     commodityOwner.FirstName = commodityOwnerVM.FirstName;
     commodityOwner.LastName = commodityOwnerVM.LastName;
     commodityOwner.IdNo = commodityOwnerVM.IdNo;
     commodityOwner.PinNo = commodityOwnerVM.PinNo;
     commodityOwner.DateOfBirth = commodityOwnerVM.DateOfBirth;
     commodityOwner.MaritalStatus = (MaritalStatas) commodityOwnerVM.MaritalStatus;//_maritalStatusRepository.GetById(commodityOwnerVM.MaritalStatus);
     commodityOwner.Gender = (Gender)commodityOwnerVM.Gender;
     commodityOwner.PhysicalAddress = commodityOwnerVM.PhysicalAddress;
     commodityOwner.PostalAddress = commodityOwnerVM.PostalAddress;
     commodityOwner.Email = commodityOwnerVM.Email;
     commodityOwner.PhoneNumber = commodityOwnerVM.PhoneNumber;
     commodityOwner.BusinessNumber = commodityOwnerVM.BusinessNumber;
     commodityOwner.FaxNumber = commodityOwnerVM.FaxNumber;
     commodityOwner.OfficeNumber = commodityOwnerVM.OfficeNumber;
     commodityOwner.Description = commodityOwnerVM.Description;
     commodityOwner.CommodityOwnerType = _commodityOwnerTypeRepository.GetById(commodityOwnerVM.CommodityOwnerType);
     commodityOwner._Status = EntityStatus.Active;
     commodityOwner.CommoditySupplier = (CommoditySupplier) _commoditySupplierRepository.GetById(commodityOwnerVM.CommoditySupplier);
     _commodityOwnerRepository.Save(commodityOwner);
 }
 CommodityOwnerViewModel Map(CommodityOwner commodityOwner)
 {
     CommodityOwnerViewModel commodityOwnerVM = new CommodityOwnerViewModel();
     commodityOwnerVM.Id = commodityOwner.Id;
     commodityOwnerVM.Code = commodityOwner.Code;
     commodityOwnerVM.Surname = commodityOwner.Surname;
     commodityOwnerVM.FirstName = commodityOwner.FirstName;
     commodityOwnerVM.LastName = commodityOwner.LastName;
     commodityOwnerVM.IdNo = commodityOwner.IdNo;
     commodityOwnerVM.PinNo = commodityOwner.PinNo;
     commodityOwnerVM.Gender = (int)commodityOwner.Gender;
     commodityOwnerVM.PhysicalAddress = commodityOwner.PhysicalAddress;
     commodityOwnerVM.PostalAddress = commodityOwner.PostalAddress;
     commodityOwnerVM.Email = commodityOwner.Email;
     commodityOwnerVM.PhoneNumber = commodityOwner.PhoneNumber;
     commodityOwnerVM.BusinessNumber = commodityOwner.BusinessNumber;
     commodityOwnerVM.FaxNumber = commodityOwner.FaxNumber;
     commodityOwnerVM.OfficeNumber = commodityOwner.OfficeNumber;
     commodityOwnerVM.Description = commodityOwner.Description;
     commodityOwnerVM.DateOfBirth = DateTime.Parse(commodityOwner.DateOfBirth.ToString());
     commodityOwnerVM.MaritalStatus = (int) commodityOwner.MaritalStatus;//commodityOwner.MaritalStatus.Id;
     commodityOwnerVM.CommodityOwnerType = commodityOwner.CommodityOwnerType.Id;
     commodityOwnerVM.CommoditySupplier = commodityOwner.CommoditySupplier.Id;
     commodityOwnerVM.IsActive = (int)commodityOwner._Status;
     return commodityOwnerVM;
 }
        public ActionResult EditFarmer(Guid CommoditySupplierId, CommodityOwnerViewModel vm)
        {
            ViewBag.GenderList = _commodityOwnerViewModelBuilder.Gender();
            ViewBag.MaritalStatusList = _commodityOwnerViewModelBuilder.MaritalStatus();
            ViewBag.CommodityOwnerTypeList = _commodityOwnerViewModelBuilder.CommodityOwnerType();
            ViewBag.CommoditySupplierList = _commodityOwnerViewModelBuilder.CommoditySupplier();
            ViewBag.CommoditySupplierId = CommoditySupplierId;
            try
            {
                _commodityOwnerViewModelBuilder.Save(vm);
                TempData["msg"] = "Farmer Successfully Edited";
                return RedirectToAction("ListFarmers", new { CommoditySupplierId = CommoditySupplierId });
            }
            catch (DomainValidationException ve)
            {
                ValidationSummary.DomainValidationErrors(ve, ModelState);
                _log.Debug("Failed to edit Commodity owner " + ve.Message);
                _log.Error("Failed to edit Commodity owner" + ve.ToString());

                return View();
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                _log.Debug("Failed to edit Commodity owner " + ex.Message);
                _log.Error("Failed to edit Commodity owner" + ex.ToString());
                return View();
            }
        }
        public ActionResult CreateFarmer(Guid CommoditySupplierId, CommodityOwnerViewModel vm)
        { 
            ViewBag.GenderList = _commodityOwnerViewModelBuilder.Gender();
            ViewBag.MaritalStatusList = _commodityOwnerViewModelBuilder.MaritalStatus();
            ViewBag.CommodityOwnerTypeList = _commodityOwnerViewModelBuilder.CommodityOwnerType();
            ViewBag.CommoditySupplierList = _commodityOwnerViewModelBuilder.CommoditySupplier();
            ViewBag.CommoditySupplierId = CommoditySupplierId;

            try
            {
                vm.Id = Guid.NewGuid();
               // vm.DateOfBirth = DateTime.Now.AddYears(-10);
                vm.CommoditySupplier = CommoditySupplierId;
                _commodityOwnerViewModelBuilder.Save(vm);

                TempData["msg"] = "Farmer Successfully Created";

                return RedirectToAction("ListFarmers", new { CommoditySupplierId = CommoditySupplierId });
            }
            catch (DomainValidationException ve)
            {
                TempData["msg"] = ve.Message;
                ValidationSummary.DomainValidationErrors(ve, ModelState);
                _log.Debug("Failed to create commodity owners " + ve.Message);
                _log.Error("Failed to create commodity owners" + ve.ToString());

                return View(vm);
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                _log.Debug("Failed to create commodity owners " + ex.Message);
                _log.Error("Failed to create commodity owners" + ex.ToString());

                return View(vm);
            }

        }
        public ActionResult CreateCommoditySupplier(CommoditySupplierViewModel vm)
        {
            
            ViewBag.CommoditySupplierTypeList = _commoditySupplierViewModelBuilder.CommoditySupplierType();
            ViewBag.ParentCostCentreList = _commoditySupplierViewModelBuilder.ParentCostCentre();
            ViewBag.Banks = _commoditySupplierViewModelBuilder.GetBanks();
            ViewBag.GenderList = _commodityOwnerViewModelBuilder.Gender();
            ViewBag.MaritalStatusList = _commodityOwnerViewModelBuilder.MaritalStatus();
            ViewBag.CommodityOwnerTypeList = _commodityOwnerViewModelBuilder.CommodityOwnerType();
            ViewBag.UnassignedCentresList = _centreRepository.GetAll().Select(r => new { r.Id, r.Name }).ToDictionary(d => d.Id, d => d.Name);
            LoadBranches(vm.BankId);

            if (!ModelState.IsValid)
            {
                return View(vm);
            }

            var allocatedCenter = _centreRepository.GetById(vm.SelectedCentreId);
            try
            {
                using (var tran = new TransactionScope())
                {
                    var commoditySupplierDto = new CommoditySupplierDTO
                    {
                            MasterId = vm.CommoditySupplierId,
                            Name = vm.Name,
                            AccountName = vm.AccountName,
                            AccountNo = vm.AccountNo,
                            PinNo = vm.PinNo,
                            BankId = vm.BankId,
                            BankBranchId = vm.BankBranchId,
                            CommoditySupplierTypeId = vm.CommoditySupplierType,
                            CostCentreCode = vm.CostCentreCode,
                            ParentCostCentreId = vm.ParentCostCentreId,
                        
                        };
                    _commoditySupplierViewModelBuilder.Save(commoditySupplierDto);
                    var commodityOwnerViewModel = new CommodityOwnerViewModel
                        {
                            Id=vm.CommodityOwnerId,
                            Code=vm.OwnerCode,
                            CommodityOwnerType=vm.CommodityOwnerType,
                            DateOfBirth=vm.DateOfBirth,
                            BusinessNumber=vm.BusinessNumber,
                            Description=vm.Description,
                            Email=vm.Email,
                            FaxNumber=vm.FaxNumber,
                            FirstName=vm.FirstName,
                            LastName=vm.LastName,
                            Surname=vm.Surname,
                            Gender=vm.Gender,
                            IdNo=vm.IdNo,
                            MaritalStatus=vm.MaritalStatus,
                            OfficeNumber=vm.OfficeNumber,
                            PhoneNumber=vm.PhoneNumber,
                            PhysicalAddress=vm.PhysicalAddress,
                            PinNo=vm.OwnerPinNo,
                            PostalAddress=vm.PostalAddress,
                            CommoditySupplier=vm.CommoditySupplierId
                        };

                    _commodityOwnerViewModelBuilder.Save(commodityOwnerViewModel);
                    var commodityProducerViewModel = new CommodityProducerViewModel
                        {
                            Id=vm.CommodityProducerId,
                            Code=vm.FarmCode,
                            Acrage=vm.Acrage,
                            Name=vm.FarmName,
                            RegNo=vm.RegNo,
                            PhysicalAddress=vm.FarmPhysicalAddress,
                            Description=vm.FarmDescription,
                            CommoditySupplierId=vm.CommoditySupplierId,
                            AssignedFarmCentres = new List<Centre>(){allocatedCenter},

                        };
                    _commodityProducerViewModelBuilder.Save(commodityProducerViewModel);

                    AssignCenter(vm.SelectedCentreId, vm.CommodityProducerId);

                    TempData["msg"] = "Commodity supplier Successfully Created";
                    tran.Complete();
                }


                return RedirectToAction("ListCommoditySuppliers");
            }
            catch (DomainValidationException ve)
            {
                ValidationSummary.DomainValidationErrors(ve, ModelState);
                _log.Debug("Failed to create commodity suppliers " + ve.Message);
                _log.Error("Failed to create commodity suppliers" + ve.ToString());

                return View(vm);
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                _log.Debug("Failed to create Commodity suppliers " + ex.Message);
                _log.Error("Failed to create Commodity suppliers" + ex.ToString());

                return View(vm);
            }

        }