Example #1
0
        public ActionResult Edit(int Id = -1)
        {
            //sys validations
            if (Id == -1)
            {
                NotifyUser(errorDefault, controllerTraceId + "Detail.111 No se recibió el parámetro Id");
                return(RedirectToAction("Index"));
            }

            if (!Configurations.BenefitProgram_Coupon_IsOpen || (!Configurations.BenefitProgram_Coupon_S1_IsOpen && !Configurations.BenefitProgram_Coupon_S2_IsOpen))
            {
                NotifyUser(messageError: "Ha concluido la temporada de captura de compras");
                return(RedirectToAction("Detail", new { Id = Id }));
            }

            ViewBag.CanRegisterS1 = Configurations.BenefitProgram_Coupon_S1_IsOpen;
            ViewBag.CanRegisterS2 = Configurations.BenefitProgram_Coupon_S2_IsOpen;

            ContractSubdistributor item = controller.Retrieve(Id);

            if (item != null && controller.ResultManager.IsCorrect)
            {
                foreach (DistributorPurchasesXContractSubdistributor purchaseItem in item.DistributorPurchases)
                {
                    if (purchaseItem.DistributorId == CurrentUser.ParentId)
                    {
                        return(View(purchaseItem));
                    }
                }
                NotifyUser(messageError: errorDefault, messageDebug: "No se encontro un registro de DistributorPurchasesXContractSubdistributor para el usuario logueado con parentId '" + CurrentUser.ParentId + "'");
            }

            NotifyUser(resultManager: controller.ResultManager);
            return(RedirectToAction("Index"));
        }
        public ContractSubdistributor Retrieve(int id)
        {
            ResultManager.IsCorrect = false;
            //initial validations
            //-sys validations
            if (id == -1 || id == 0)
            {//no id was received
                ResultManager.Add(ErrorDefault, Trace + "Retrieve.131 No se recibio el parametro id");
                return(null);
            }

            ContractSubdistributor auxItem = null;

            try
            {
                auxItem = Repository.ContractsSubdistributor.Get(id);
                if (auxItem == null)
                {
                    ResultManager.Add(ErrorDefault, Trace + "Retrieve.511 No se encontró un convenio con id '" + id + "'");
                }
                else
                {
                    ResultManager.IsCorrect = true;
                }
            }
            catch (Exception ex)
            {
                ResultManager.Add(ErrorDefault, Trace + "Retrieve.511 Excepción al obtener el convenio a editar: " + ex.Message);
            }

            return(auxItem);
        }
Example #3
0
        /// <summary>
        /// Retrieve a new instance of a subdistributor contract, setting the initial information (discount type, last contract amounts, etc)
        /// </summary>
        /// <param name="id">Subdistributor id</param>
        /// <returns></returns>
        public ContractSubdistributor InitializeNew(int id)
        {
            ResultManager.Clear();
            ContractSubdistributor item = null;

            try
            {
                PSD.Controller.SubdistributorController subdistributorController = new Controller.SubdistributorController(Configurations);

                item = ContractSubdistributor.NewEmpty();
                item.Subdistributor       = subdistributorController.RetrieveSubdistributor(id);
                item.SubdistributorId     = id;
                item.RegisteredRegionName = item.Subdistributor.BNAddress.AddressColony.AddressPostalCode.AddressMunicipality.Zone.RegionName;
                item.RegisteredZoneName   = item.Subdistributor.BNAddress.AddressColony.AddressPostalCode.AddressMunicipality.Zone.Name;

                //set discount type (for benefits program->coupons->discountTable)
                ContractSubdistributor auxLastContract = Repository.ContractsSubdistributor.GetPastYearSubdistributorContract(id);
                if (auxLastContract == null)
                {//first contract
                    item.DiscountType = 0;
                }
                else
                {//contract renovation
                    item.DiscountType = auxLastContract.DiscountType + 1;
                }

                ResultManager.IsCorrect = true;
            }
            catch (Exception ex)
            {
                ResultManager.Add(ErrorDefault, Trace + "InitializeNew.511 Excepción al inicializar el nuevo elemento" + ex.Message);
            }
            return(item);
        }
Example #4
0
        public ActionResult Create(int Id = -1)
        {
            if (Id == -1)
            {
                NotifyUser(errorDefault, controllerTraceId + ".Create.111 No se recibio el parámetro id");
                return(RedirectToAction("Index"));
            }

            PSD.Controller.DistributorController distributorController = new Controller.DistributorController(Configurations);
            ViewBag.AvailableDistributors = GetDistributors(distributorController.GetSubdistributorZones(Id));

            ContractSubdistributor item = controller.InitializeNew(Id);

            return(View(item));
        }
Example #5
0
        public ActionResult RegisterPurchase(int Id)
        {
            if (!Configurations.BenefitProgram_Coupon_IsOpen || (!Configurations.BenefitProgram_Coupon_S1_IsOpen && !Configurations.BenefitProgram_Coupon_S2_IsOpen))
            {
                NotifyUser(messageError: "Ha concluido la temporada de captura de compras");
                return(RedirectToAction("Detail", new { Id = Id }));
            }

            ViewBag.CanRegisterS1 = Configurations.BenefitProgram_Coupon_S1_IsOpen;
            ViewBag.CanRegisterS2 = Configurations.BenefitProgram_Coupon_S2_IsOpen;

            ContractSubdistributor auxContractSubdistributor = controller.Retrieve(Id);

            return(View(auxContractSubdistributor));
        }
        public ActionResult Detail(int Id = -1)
        {
            //sys validations
            if (Id == -1)
            {
                NotifyUser(errorDefault, controllerTraceId + "Detail.111 No se recibió el parámetro Id");
                return(RedirectToAction("Index"));
            }

            ContractSubdistributor item = controller.Retrieve(Id);

            if (item != null && controller.ResultManager.IsCorrect)
            {
                return(View(item));
            }

            NotifyUser(resultManager: controller.ResultManager);
            return(RedirectToAction("Index"));
        }
Example #7
0
        public ActionResult Create(ContractSubdistributor model, List <int> selectedDistributors = null)
        {
            if (model == null)
            {
                NotifyUser(messageError: errorDefault, messageDebug: "No se recibió el modelo");
            }
            else
            {
                if (selectedDistributors == null)
                {
                    NotifyUser(messageError: "Se debe seleccionar al menos un distribuidor", messageDebug: "No se recibió el parámetro 'selectedDistributors'");
                }
                else
                {
                    //fill in selected distributors in model
                    model.DistributorPurchases = new List <DistributorPurchasesXContractSubdistributor>();
                    foreach (int item in selectedDistributors)
                    {
                        model.DistributorPurchases.Add(new DistributorPurchasesXContractSubdistributor()
                        {
                            ContractSubdistributorId = model.Id, DistributorId = item
                        });
                    }

                    if (controller.Create(model, true) || controller.ResultManager.IsCorrect)
                    {
                        NotifyUser(resultManager: controller.ResultManager);
                        return(RedirectToAction("Index"));
                    }
                }
            }

            PSD.Controller.DistributorController distributorController = new Controller.DistributorController(Configurations);
            ViewBag.AvailableDistributors = GetDistributors(distributorController.GetSubdistributorZones(model.Id));

            PSD.Controller.SubdistributorController subdistributorController = new Controller.SubdistributorController(Configurations);
            model.Subdistributor   = subdistributorController.RetrieveSubdistributor(model.SubdistributorId);
            model.SubdistributorId = model.SubdistributorId;

            NotifyUser(resultManager: controller.ResultManager);
            return(View(model));
        }
Example #8
0
        public ActionResult RegisterPurchase(ContractSubdistributor model, int selectedMonth = -1, decimal purchaseAmount = 0)
        {
            if (model == null)
            {
                NotifyUser(messageError: errorDefault, messageDebug: "No se recibió el modelo");
            }
            else
            {
                if (selectedMonth == -1)
                {
                    NotifyUser(messageError: "Se debe seleccionar el mes", messageDebug: "No se recibió el parámetro 'selectedDistributors'");
                }
                else
                {
                    if (purchaseAmount == 0)
                    {
                        NotifyUser(messageError: "El monto no puede ser cero", messageDebug: "No se recibió el parámetro 'selectedDistributors'");
                    }
                    else
                    {
                        if (controller.RegisterPurchase(model, selectedMonth, purchaseAmount) && controller.ResultManager.IsCorrect)
                        {
                            NotifyUser(messageOk: "La compra ha sido registrada");
                            return(RedirectToAction("Index"));
                        }
                    }
                }
            }
            PSD.Controller.DistributorController distributorController = new Controller.DistributorController(Configurations);
            ViewBag.AvailableDistributors = GetDistributors(distributorController.GetSubdistributorZones(model.Id));

            PSD.Controller.SubdistributorController subdistributorController = new Controller.SubdistributorController(Configurations);
            model.Subdistributor   = subdistributorController.RetrieveSubdistributor(model.SubdistributorId);
            model.SubdistributorId = model.SubdistributorId;

            ViewBag.CanRegisterS1 = Configurations.BenefitProgram_Coupon_S1_IsOpen;
            ViewBag.CanRegisterS2 = Configurations.BenefitProgram_Coupon_S1_IsOpen;

            NotifyUser(resultManager: controller.ResultManager);
            return(View(model));
        }
Example #9
0
        public bool Delete(int contractId)
        {
            ResultManager.Clear();

            // validate bayer contract associated
            ContractSubdistributor item = Repository.ContractsSubdistributor.Get(contractId);

            if (item.ContractSubdistributorStatusId == 1 || item.ContractSubdistributorStatusId == 2)
            {
                if (!CurrentUser.IsInRole(UserRole.AppAdmin))
                {
                    ResultManager.Add("Este convenio no puede ser eliminado en el estatus actual, solo puede eliminarse por el administrado", Trace + "Delete.111 Error por Regla de negocio: no se puede eliminar un convenio con estatus activo/vencido, a menos que sea por el administrador.");
                    return(false);
                }
            }

            // now proceed with the delete operation
            try
            {
                IEnumerable <int> purchaseIds = Repository.DistributorPurchasesXContractSubdistributors.GetAll().Where(x => x.ContractSubdistributorId == contractId).Select(y => y.Id);
                foreach (int purchaseId in purchaseIds)
                {
                    Repository.DistributorPurchasesXContractSubdistributors.Remove(purchaseId);
                }

                Repository.SubdistributorDiscountCoupons.Remove(item.SubdistributorDiscountCoupon.Id);
                Repository.SubdistributorPromotionCoupons.Remove(item.SubdistributorPromotionCoupon.Id);

                Repository.ContractsSubdistributor.Remove(contractId);

                Repository.Complete();
                ResultManager.IsCorrect = true;
            }
            catch (Exception ex)
            {
                ErrorManager.Add(Trace + "", ErrorDefault, "Exception while deleting subdistributor contract ", ex);
                ResultManager.IsCorrect = false;
            }

            return(ResultManager.IsCorrect);
        }
        public bool RegisterPurchase(ContractSubdistributor model, int selectedMonth = -1, decimal purchaseAmount = 0)
        {
            ResultManager.IsCorrect = false;
            //initial validations
            //-sys validations
            if (model == null)
            {
                ResultManager.Add(ErrorDefault, Trace + "RegisterPurchase.111 No se recibio el modelo");
                return(false);
            }
            //-business validations
            if (selectedMonth < 1 || selectedMonth > 12)
            {
                ResultManager.Add(ErrorDefault, Trace + "RegisterPurchase.311 Valor inesperado para mes seleccionado, se esperaba numero entre 1 y 12, se recibio '" + selectedMonth + "'");
                return(false);
            }

            //register purchase
            ContractSubdistributor auxContract = null;
            DistributorPurchasesXContractSubdistributor auxDistributorPurchase = null;
            BayerEmployee auxRTV = new BayerEmployee();

            try
            {
                auxContract = Repository.ContractsSubdistributor.Get(model.Id);
                int     purchaseId    = 0;
                decimal auxTotalMonth = 0;
                foreach (DistributorPurchasesXContractSubdistributor item in auxContract.DistributorPurchases)
                {
                    if (item.Distributor.IdB == CurrentUser.EmployeeId)
                    {
                        purchaseId = item.Id;
                    }
                }
                auxDistributorPurchase = Repository.DistributorPurchasesXContractSubdistributors.Get(purchaseId);

                switch (selectedMonth)
                {
                case 1:
                    auxContract.PurchaseTotalJan += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalJan;
                    auxContract.PurchaseTotalS1            += purchaseAmount;
                    auxDistributorPurchase.PurchaseJan     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS1 += purchaseAmount;
                    break;

                case 2:
                    auxContract.PurchaseTotalFeb += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalFeb;
                    auxContract.PurchaseTotalS1            += purchaseAmount;
                    auxDistributorPurchase.PurchaseFeb     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS1 += purchaseAmount;
                    break;

                case 3:
                    auxContract.PurchaseTotalMar += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalMar;
                    auxContract.PurchaseTotalS1            += purchaseAmount;
                    auxDistributorPurchase.PurchaseMar     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS1 += purchaseAmount;
                    break;

                case 4:
                    auxContract.PurchaseTotalApr += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalApr;
                    auxContract.PurchaseTotalS1            += purchaseAmount;
                    auxDistributorPurchase.PurchaseApr     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS1 += purchaseAmount;
                    break;

                case 5:
                    auxContract.PurchaseTotalMay += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalMay;
                    auxContract.PurchaseTotalS1            += purchaseAmount;
                    auxDistributorPurchase.PurchaseMay     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS1 += purchaseAmount;
                    break;

                case 6:
                    auxContract.PurchaseTotalJun += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalJun;
                    auxContract.PurchaseTotalS1            += purchaseAmount;
                    auxDistributorPurchase.PurchaseJun     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS1 += purchaseAmount;
                    break;

                case 7:
                    auxContract.PurchaseTotalJul += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalJul;
                    auxContract.PurchaseTotalS2            += purchaseAmount;
                    auxDistributorPurchase.PurchaseJul     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS2 += purchaseAmount;
                    break;

                case 8:
                    auxContract.PurchaseTotalAgo += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalAgo;
                    auxContract.PurchaseTotalS2            += purchaseAmount;
                    auxDistributorPurchase.PurchaseAgo     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS2 += purchaseAmount;
                    break;

                case 9:
                    auxContract.PurchaseTotalSep += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalSep;
                    auxContract.PurchaseTotalS2            += purchaseAmount;
                    auxDistributorPurchase.PurchaseSep     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS2 += purchaseAmount;
                    break;

                case 10:
                    auxContract.PurchaseTotalOct += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalOct;
                    auxContract.PurchaseTotalS2            += purchaseAmount;
                    auxDistributorPurchase.PurchaseOct     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS2 += purchaseAmount;
                    break;

                case 11:
                    auxContract.PurchaseTotalNov += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalNov;
                    auxContract.PurchaseTotalS2            += purchaseAmount;
                    auxDistributorPurchase.PurchaseNov     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS2 += purchaseAmount;
                    break;

                case 12:
                    auxContract.PurchaseTotalDic += purchaseAmount;
                    auxTotalMonth = auxContract.PurchaseTotalDic;
                    auxContract.PurchaseTotalS2            += purchaseAmount;
                    auxDistributorPurchase.PurchaseDic     += purchaseAmount;
                    auxDistributorPurchase.PurchaseTotalS2 += purchaseAmount;
                    break;
                }

                auxContract.PurchaseTotal            += purchaseAmount;
                auxDistributorPurchase.PurchaseTotal += purchaseAmount;

                //update coupon discount
                decimal auxDiscountPercentage = 0;
                PSD.Controller.BenefitPrograms.Coupon.CouponManagementController couponManagementContoller = new BenefitPrograms.Coupon.CouponManagementController(Configurations);
                auxDiscountPercentage = couponManagementContoller.GetDiscountPercentage(auxContract.GoalTotalPercentage, auxContract.DiscountType);
                if (auxDiscountPercentage > 0)
                {
                    auxContract.SubdistributorDiscountCoupon.HasCoupon    = true;
                    auxContract.SubdistributorDiscountCoupon.CouponAmount = (auxDiscountPercentage / 100) * auxContract.PurchaseTotal;

                    if (selectedMonth <= 6)
                    {
                        auxContract.SubdistributorDiscountCoupon.HasCouponS1    = true;
                        auxContract.SubdistributorDiscountCoupon.CouponAmountS1 = (auxDiscountPercentage / 100) * auxContract.PurchaseTotalS1;
                    }
                    else
                    {
                        auxContract.SubdistributorDiscountCoupon.HasCouponS2    = true;
                        auxContract.SubdistributorDiscountCoupon.CouponAmountS2 = (auxDiscountPercentage / 100) * auxContract.PurchaseTotalS2;
                    }
                }

                /*deprecated, value set for coupon S1 and S2 is wrong, it should be updated with the sum of all months promotions, not only current one (thru promotion loop?)
                 * //update coupon promotion
                 * decimal auxPromotionPercentage = 0;
                 * auxPromotionPercentage = couponManagementContoller.GetPromotionPercentage(auxTotalMonth, selectedMonth);
                 * if (auxPromotionPercentage > 0)
                 * {
                 *  auxContract.SubdistributorPromotionCoupon.HasCoupon = true;
                 *  auxContract.SubdistributorPromotionCoupon.CouponAmount = (auxPromotionPercentage / 100) * auxContract.PurchaseTotal;
                 *
                 *  if (selectedMonth <= 6)
                 *  {
                 *      auxContract.SubdistributorPromotionCoupon.HasCouponS1 = true;
                 *      auxContract.SubdistributorPromotionCoupon.CouponAmountS1 = (auxPromotionPercentage / 100) * auxTotalMonth;
                 *  }
                 *  else
                 *  {
                 *      auxContract.SubdistributorPromotionCoupon.HasCouponS2 = true;
                 *      auxContract.SubdistributorPromotionCoupon.CouponAmountS2 = (auxPromotionPercentage / 100) * auxTotalMonth;
                 *  }
                 * }
                 */

                //update coupon promotion
                //-clear previous amounts
                auxContract.SubdistributorPromotionCoupon.HasCoupon      = false;
                auxContract.SubdistributorPromotionCoupon.HasCouponS1    = false;
                auxContract.SubdistributorPromotionCoupon.HasCouponS2    = false;
                auxContract.SubdistributorPromotionCoupon.CouponAmount   = 0;
                auxContract.SubdistributorPromotionCoupon.CouponAmountS1 = 0;
                auxContract.SubdistributorPromotionCoupon.CouponAmountS2 = 0;

                //set new purchases into aux for looping
                decimal[] auxPurchaseXMonth = new decimal[13];
                auxPurchaseXMonth[1]  = auxContract.PurchaseTotalJan;
                auxPurchaseXMonth[2]  = auxContract.PurchaseTotalFeb;
                auxPurchaseXMonth[3]  = auxContract.PurchaseTotalMar;
                auxPurchaseXMonth[4]  = auxContract.PurchaseTotalApr;
                auxPurchaseXMonth[5]  = auxContract.PurchaseTotalMay;
                auxPurchaseXMonth[6]  = auxContract.PurchaseTotalJun;
                auxPurchaseXMonth[7]  = auxContract.PurchaseTotalJul;
                auxPurchaseXMonth[8]  = auxContract.PurchaseTotalAgo;
                auxPurchaseXMonth[9]  = auxContract.PurchaseTotalSep;
                auxPurchaseXMonth[10] = auxContract.PurchaseTotalOct;
                auxPurchaseXMonth[11] = auxContract.PurchaseTotalNov;
                auxPurchaseXMonth[12] = auxContract.PurchaseTotalDic;

                //loop thu each month and update coupon
                decimal auxPromotionPercentage = 0;
                for (int a = 1; a <= 12; a++)
                {
                    auxPromotionPercentage = couponManagementContoller.GetPromotionPercentage(auxPurchaseXMonth[a], a);
                    if (auxPromotionPercentage > 0)
                    {
                        auxContract.SubdistributorPromotionCoupon.HasCoupon     = true;
                        auxContract.SubdistributorPromotionCoupon.CouponAmount += (auxPromotionPercentage / 100) * auxPurchaseXMonth[a];

                        if (a <= 6)
                        {
                            auxContract.SubdistributorPromotionCoupon.HasCouponS1     = true;
                            auxContract.SubdistributorPromotionCoupon.CouponAmountS1 += (auxPromotionPercentage / 100) * auxPurchaseXMonth[a];
                        }
                        else
                        {
                            auxContract.SubdistributorPromotionCoupon.HasCouponS2     = true;
                            auxContract.SubdistributorPromotionCoupon.CouponAmountS2 += (auxPromotionPercentage / 100) * auxPurchaseXMonth[a];
                        }
                    }
                }


                Repository.Complete();
                ResultManager.IsCorrect = true;
            }
            catch (Exception ex)
            {
                ResultManager.Add(ErrorDefault, Trace + "UpdateAndApprove.511 Excepción al crear el nuevo elemento" + ex.Message);
            }

            if (ResultManager.IsCorrect)
            {
                ResultManager.Add("La compra ha sido registrada", "");

                if (true)//SendEmailContractApproved(auxRTV.Name, auxRTV.EMail, auxContract.Id, auxContract.IdB))
                {
                    //ResultManager.Add("Se ha enviado un correo al RTV para la aprobación final", "");
                }
                else
                {
                    //ResultManager.Add("No se pudo enviar actualización por correo al RTV");
                }
            }

            return(ResultManager.IsCorrect);
        }
        public bool Edit(DistributorPurchasesXContractSubdistributor model)
        {
            ResultManager.IsCorrect = false;
            //initial validations
            //-sys validations
            if (model == null)
            {
                ResultManager.Add(ErrorDefault, Trace + "Edit.111 No se recibio el modelo");
                return(false);
            }
            if (model.Id <= 0)
            {
                ResultManager.Add(ErrorDefault, Trace + "Edit.111 No se recibio el Id del DistributorPurchasesXContractSubdistributor a editar en el modelo");
                return(false);
            }
            if (model.ContractSubdistributorId <= 0)
            {
                ResultManager.Add(ErrorDefault, Trace + "Edit.111 No se recibio el Id del contrato a editar en el modelo");
                return(false);
            }
            //-business validations

            ContractSubdistributor auxContract = null;
            DistributorPurchasesXContractSubdistributor auxDistributorPurchase = null;
            BayerEmployee auxRTV       = new BayerEmployee();
            decimal       auxAmountdif = 0;

            try
            {
                auxContract            = Repository.ContractsSubdistributor.Get(model.ContractSubdistributorId);
                auxDistributorPurchase = Repository.DistributorPurchasesXContractSubdistributors.Get(model.Id);

                if (model.PurchaseJan != auxDistributorPurchase.PurchaseJan)
                {
                    auxAmountdif = model.PurchaseJan - auxDistributorPurchase.PurchaseJan;
                    auxContract.PurchaseTotalJan           += auxAmountdif;
                    auxContract.PurchaseTotalS1            += auxAmountdif;
                    auxDistributorPurchase.PurchaseJan     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS1 += auxAmountdif;
                }
                if (model.PurchaseFeb != auxDistributorPurchase.PurchaseFeb)
                {
                    auxAmountdif = model.PurchaseFeb - auxDistributorPurchase.PurchaseFeb;
                    auxContract.PurchaseTotalFeb           += auxAmountdif;
                    auxContract.PurchaseTotalS1            += auxAmountdif;
                    auxDistributorPurchase.PurchaseFeb     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS1 += auxAmountdif;
                }
                if (model.PurchaseMar != auxDistributorPurchase.PurchaseMar)
                {
                    auxAmountdif = model.PurchaseMar - auxDistributorPurchase.PurchaseMar;
                    auxContract.PurchaseTotalMar           += auxAmountdif;
                    auxContract.PurchaseTotalS1            += auxAmountdif;
                    auxDistributorPurchase.PurchaseMar     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS1 += auxAmountdif;
                }
                if (model.PurchaseApr != auxDistributorPurchase.PurchaseApr)
                {
                    auxAmountdif = model.PurchaseApr - auxDistributorPurchase.PurchaseApr;
                    auxContract.PurchaseTotalApr           += auxAmountdif;
                    auxContract.PurchaseTotalS1            += auxAmountdif;
                    auxDistributorPurchase.PurchaseApr     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS1 += auxAmountdif;
                }
                if (model.PurchaseMay != auxDistributorPurchase.PurchaseMay)
                {
                    auxAmountdif = model.PurchaseMay - auxDistributorPurchase.PurchaseMay;
                    auxContract.PurchaseTotalMay           += auxAmountdif;
                    auxContract.PurchaseTotalS1            += auxAmountdif;
                    auxDistributorPurchase.PurchaseMay     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS1 += auxAmountdif;
                }
                if (model.PurchaseJun != auxDistributorPurchase.PurchaseJun)
                {
                    auxAmountdif = model.PurchaseJun - auxDistributorPurchase.PurchaseJun;
                    auxContract.PurchaseTotalJun           += auxAmountdif;
                    auxContract.PurchaseTotalS1            += auxAmountdif;
                    auxDistributorPurchase.PurchaseJun     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS1 += auxAmountdif;
                }
                if (model.PurchaseJul != auxDistributorPurchase.PurchaseJul)
                {
                    auxAmountdif = model.PurchaseJul - auxDistributorPurchase.PurchaseJul;
                    auxContract.PurchaseTotalJul           += auxAmountdif;
                    auxContract.PurchaseTotalS2            += auxAmountdif;
                    auxDistributorPurchase.PurchaseJul     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS2 += auxAmountdif;
                }
                if (model.PurchaseAgo != auxDistributorPurchase.PurchaseAgo)
                {
                    auxAmountdif = model.PurchaseAgo - auxDistributorPurchase.PurchaseAgo;
                    auxContract.PurchaseTotalAgo           += auxAmountdif;
                    auxContract.PurchaseTotalS2            += auxAmountdif;
                    auxDistributorPurchase.PurchaseAgo     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS2 += auxAmountdif;
                }
                if (model.PurchaseSep != auxDistributorPurchase.PurchaseSep)
                {
                    auxAmountdif = model.PurchaseSep - auxDistributorPurchase.PurchaseSep;
                    auxContract.PurchaseTotalSep           += auxAmountdif;
                    auxContract.PurchaseTotalS2            += auxAmountdif;
                    auxDistributorPurchase.PurchaseSep     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS2 += auxAmountdif;
                }
                if (model.PurchaseOct != auxDistributorPurchase.PurchaseOct)
                {
                    auxAmountdif = model.PurchaseOct - auxDistributorPurchase.PurchaseOct;
                    auxContract.PurchaseTotalOct           += auxAmountdif;
                    auxContract.PurchaseTotalS2            += auxAmountdif;
                    auxDistributorPurchase.PurchaseOct     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS2 += auxAmountdif;
                }
                if (model.PurchaseNov != auxDistributorPurchase.PurchaseNov)
                {
                    auxAmountdif = model.PurchaseNov - auxDistributorPurchase.PurchaseNov;
                    auxContract.PurchaseTotalNov           += auxAmountdif;
                    auxContract.PurchaseTotalS2            += auxAmountdif;
                    auxDistributorPurchase.PurchaseNov     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS2 += auxAmountdif;
                }
                if (model.PurchaseDic != auxDistributorPurchase.PurchaseDic)
                {
                    auxAmountdif = model.PurchaseDic - auxDistributorPurchase.PurchaseDic;
                    auxContract.PurchaseTotalDic           += auxAmountdif;
                    auxContract.PurchaseTotalS2            += auxAmountdif;
                    auxDistributorPurchase.PurchaseDic     += auxAmountdif;
                    auxDistributorPurchase.PurchaseTotalS2 += auxAmountdif;
                }

                auxContract.PurchaseTotal            += auxAmountdif;
                auxDistributorPurchase.PurchaseTotal += auxAmountdif;

                //update coupon discount
                //*clear coupon discount values
                auxContract.SubdistributorDiscountCoupon.CouponAmount   = 0;
                auxContract.SubdistributorDiscountCoupon.CouponAmountS1 = 0;
                auxContract.SubdistributorDiscountCoupon.CouponAmountS2 = 0;
                auxContract.SubdistributorDiscountCoupon.HasCoupon      = false;
                auxContract.SubdistributorDiscountCoupon.HasCouponS1    = false;
                auxContract.SubdistributorDiscountCoupon.HasCouponS2    = false;
                //*calculate new values
                decimal auxDiscountPercentage = 0;
                PSD.Controller.BenefitPrograms.Coupon.CouponManagementController couponManagementContoller = new BenefitPrograms.Coupon.CouponManagementController(Configurations);
                auxDiscountPercentage = couponManagementContoller.GetDiscountPercentage(auxContract.GoalTotalPercentage, auxContract.DiscountType);
                if (auxDiscountPercentage > 0)
                {
                    //update total
                    auxContract.SubdistributorDiscountCoupon.HasCoupon    = true;
                    auxContract.SubdistributorDiscountCoupon.CouponAmount = (auxDiscountPercentage / 100) * auxContract.PurchaseTotal;

                    //update semester1
                    //auxDiscountPercentage = couponManagementContoller.GetDiscountPercentage(auxContract.GoalTotalS1Percentage, auxContract.DiscountType);
                    if (auxDiscountPercentage > 0)
                    {
                        auxContract.SubdistributorDiscountCoupon.HasCouponS1    = true;
                        auxContract.SubdistributorDiscountCoupon.CouponAmountS1 = (auxDiscountPercentage / 100) * auxContract.PurchaseTotalS1;
                    }

                    //update semester2
                    //auxDiscountPercentage = couponManagementContoller.GetDiscountPercentage(auxContract.GoalTotalS2Percentage, auxContract.DiscountType);
                    if (auxDiscountPercentage > 0)
                    {
                        auxContract.SubdistributorDiscountCoupon.HasCouponS2    = true;
                        auxContract.SubdistributorDiscountCoupon.CouponAmountS2 = (auxDiscountPercentage / 100) * auxContract.PurchaseTotalS2;
                    }
                }

                //update coupon promotion
                //-clear previous amounts
                auxContract.SubdistributorPromotionCoupon.HasCoupon      = false;
                auxContract.SubdistributorPromotionCoupon.HasCouponS1    = false;
                auxContract.SubdistributorPromotionCoupon.HasCouponS2    = false;
                auxContract.SubdistributorPromotionCoupon.CouponAmount   = 0;
                auxContract.SubdistributorPromotionCoupon.CouponAmountS1 = 0;
                auxContract.SubdistributorPromotionCoupon.CouponAmountS2 = 0;

                //set new purchases into aux for looping
                decimal[] auxPurchaseXMonth = new decimal[13];
                auxPurchaseXMonth[1]  = auxContract.PurchaseTotalJan;
                auxPurchaseXMonth[2]  = auxContract.PurchaseTotalFeb;
                auxPurchaseXMonth[3]  = auxContract.PurchaseTotalMar;
                auxPurchaseXMonth[4]  = auxContract.PurchaseTotalApr;
                auxPurchaseXMonth[5]  = auxContract.PurchaseTotalMay;
                auxPurchaseXMonth[6]  = auxContract.PurchaseTotalJun;
                auxPurchaseXMonth[7]  = auxContract.PurchaseTotalJul;
                auxPurchaseXMonth[8]  = auxContract.PurchaseTotalAgo;
                auxPurchaseXMonth[9]  = auxContract.PurchaseTotalSep;
                auxPurchaseXMonth[10] = auxContract.PurchaseTotalOct;
                auxPurchaseXMonth[11] = auxContract.PurchaseTotalNov;
                auxPurchaseXMonth[12] = auxContract.PurchaseTotalDic;

                //loop thu each month and update coupon
                decimal auxPromotionPercentage = 0;
                for (int a = 1; a <= 12; a++)
                {
                    auxPromotionPercentage = couponManagementContoller.GetPromotionPercentage(auxPurchaseXMonth[a], a);
                    if (auxPromotionPercentage > 0)
                    {
                        auxContract.SubdistributorPromotionCoupon.HasCoupon     = true;
                        auxContract.SubdistributorPromotionCoupon.CouponAmount += (auxPromotionPercentage / 100) * auxPurchaseXMonth[a];

                        if (a <= 6)
                        {
                            auxContract.SubdistributorPromotionCoupon.HasCouponS1     = true;
                            auxContract.SubdistributorPromotionCoupon.CouponAmountS1 += (auxPromotionPercentage / 100) * auxPurchaseXMonth[a];
                        }
                        else
                        {
                            auxContract.SubdistributorPromotionCoupon.HasCouponS2     = true;
                            auxContract.SubdistributorPromotionCoupon.CouponAmountS2 += (auxPromotionPercentage / 100) * auxPurchaseXMonth[a];
                        }
                    }
                }

                Repository.Complete();
                ResultManager.IsCorrect = true;
            }
            catch (Exception ex)
            {
                ResultManager.Add(ErrorDefault, Trace + "Edit.511 Excepción al editar montos de compras" + ex.Message);
            }

            if (ResultManager.IsCorrect)
            {
                //ResultManager.Add("La compra ha sido registrada", "");
            }

            return(ResultManager.IsCorrect);
        }
Example #12
0
        public bool Create(ContractSubdistributor model, bool sendToDistributorReview = true)
        {
            ResultManager.IsCorrect = false;
            //initial validations
            //-sys validations
            if (model == null)
            {
                ResultManager.Add(ErrorDefault, Trace + "Create.111 No se recibio el modelo");
                return(false);
            }
            //-business validations
            if (model.SubdistributorId == 0 || model.SubdistributorId == -1)
            {
                ResultManager.Add("Se debe seleccionar un subdistribuidor");
                return(false);
            }
            if (model.DistributorPurchases == null || model.DistributorPurchases.Count == 0)
            {
                ResultManager.Add("Se debe seleccionar al menos un distribuidor");
                return(false);
            }

            /*
             * if (model.GRVBayerEmployeeId == 0 || model.GRVBayerEmployeeId == -1)
             * {
             *  ResultManager.Add("Se debe tener asignado un GRV");
             *  return false;
             * }
             * if (model.RTVBayerEmployeeId == 0 || model.RTVBayerEmployeeId == -1)
             * {
             *  ResultManager.Add("Se debe tener asignado un RTV");
             *  return false;
             * }
             */
            if (model.Year == 0 || model.Year == -1)
            {
                ResultManager.Add("Se debe indicar el año del convenio");
                return(false);
            }
            if (string.IsNullOrWhiteSpace(model.RegisteredZoneName))
            {
                ResultManager.Add("Debe haber una zona asignada");
                return(false);
            }
            if (model.AmountGoalS1Pre == 0 || model.AmountGoalS1Pre == -1)
            {
                ResultManager.Add("El monto S1 no puede estar vacio");
                return(false);
            }
            if (model.AmountGoalS2Pre == 0 || model.AmountGoalS2Pre == -1)
            {
                ResultManager.Add("El monto S2 no puede estar vacio");
                return(false);
            }
            if (model.AmountGoalTotalPre == 0 || model.AmountGoalTotalPre == -1)
            {
                ResultManager.Add("El total de monto meta no puede estar vacio");
                return(false);
            }
            if (model.Subdistributor.Type == "Subdistribuidor" && model.AmountGoalTotalPre < 75000)
            {
                ResultManager.Add("El total de monto meta no puede ser menor a $75,000 MXN para un subdistribuidor");
                return(false);
            }
            if (model.Subdistributor.Type == "Agricultor" && model.AmountGoalTotalPre < 50000)
            {
                ResultManager.Add("El total de monto meta no puede ser menor a $50,000 MXN para un agricultor");
                return(false);
            }

            //insert new item
            try
            {
                ContractSubdistributor newContract = new ContractSubdistributor();

                newContract.IdB = Repository.AppConfigurations.IdBCounterGetNextContractSubdistributor();
                newContract.SubdistributorId     = model.SubdistributorId;
                newContract.GRVBayerEmployeeId   = CurrentUser.Id; //model.GRVBayerEmployeeId;
                newContract.RTVBayerEmployeeId   = CurrentUser.Id; //model.RTVBayerEmployeeId;
                newContract.RegisteredRegionName = model.RegisteredRegionName;
                newContract.RegisteredZoneName   = model.RegisteredZoneName;
                newContract.Year               = model.Year;
                newContract.AmountGoalS1       = newContract.AmountGoalS1Pre = model.AmountGoalS1Pre;
                newContract.AmountGoalS2       = newContract.AmountGoalS2Pre = model.AmountGoalS2Pre;
                newContract.AmountGoalTotalPre = newContract.AmountGoalTotal = model.AmountGoalTotalPre;

                foreach (DistributorPurchasesXContractSubdistributor item in model.DistributorPurchases)
                {
                    newContract.DistributorPurchases.Add(
                        new DistributorPurchasesXContractSubdistributor()
                    {
                        ContractSubdistributorId = newContract.Id,
                        DistributorId            = item.DistributorId
                    }
                        );
                }

                //set initial contract status
                if (sendToDistributorReview)
                {
                    newContract.ContractSubdistributorStatusId = 4;//4:revision subdistribuidor
                }
                else
                {
                    newContract.ContractSubdistributorStatusId = 3;//3:revision bayer
                }

                //update current contract at subdistributor
                Subdistributor auxSubdistributor = Repository.Subdistributors.Get(newContract.SubdistributorId);
                if (auxSubdistributor == null)
                {
                    throw new Exception("No se encontro el subdistribuidor con id '" + newContract.SubdistributorId + "' para actualizar el convenio actual");
                }
                auxSubdistributor.CurrentContract = newContract;

                //create discount coupon entry
                SubdistributorDiscountCoupon newDiscountCoupon = new SubdistributorDiscountCoupon();
                newDiscountCoupon.HasCoupon                          =
                    newDiscountCoupon.HasCouponS1                    =
                        newDiscountCoupon.HasCouponS2                =
                            newDiscountCoupon.IsCalculated           =
                                newDiscountCoupon.IsCalculatedS1     =
                                    newDiscountCoupon.IsCalculatedS2 =
                                        false;
                newContract.SubdistributorDiscountCoupon = newDiscountCoupon;

                //create promotion coupon entry
                SubdistributorPromotionCoupon newPromotionCoupon = new SubdistributorPromotionCoupon();
                newPromotionCoupon.HasCoupon                          =
                    newPromotionCoupon.HasCouponS1                    =
                        newPromotionCoupon.HasCouponS2                =
                            newPromotionCoupon.IsCalculated           =
                                newPromotionCoupon.IsCalculatedS1     =
                                    newPromotionCoupon.IsCalculatedS2 =
                                        false;
                newContract.SubdistributorPromotionCoupon = newPromotionCoupon;

                //set default values
                newContract.ContractDate     = Common.Dates.Today;
                newContract.ContractFilePath = string.Empty;

                Repository.ContractsSubdistributor.Add(newContract);
                Repository.Complete();
                ResultManager.IsCorrect = true;
            }
            catch (Exception ex)
            {
                ResultManager.Add(ErrorDefault, Trace + "Create.511 Excepción al crear el nuevo elemento" + ex.Message);
            }

            if (ResultManager.IsCorrect)
            {
                ResultManager.Add("El convenio ha sido creado", "");
                try
                {
                    //send email to subdistributor
                    SubdistributorEmployee auxSubdistributorEmployee = Repository.Subdistributors.Get(model.SubdistributorId).SubdistributorEmployees.FirstOrDefault();
                    if (SendEmailToSubdistributorContractCreated(auxSubdistributorEmployee.NameDisplay, auxSubdistributorEmployee.EMail, auxSubdistributorEmployee.Subdistributor.CurrentContract.Id, auxSubdistributorEmployee.Subdistributor.CurrentContract.IdB))
                    {
                        ResultManager.Add("Se ha enviado una notificación por correo electrónico al subdistribuidor", "");
                    }
                    else
                    {
                        ResultManager.Add("No se pudo notificar por correo electrónico al subdistribuidor");
                    }
                }
                catch (Exception ex)
                {
                    ResultManager.Add(ErrorDefault, Trace + "Create.511 Excepción al crear el convenio: " + ex.Message);
                }
            }

            return(ResultManager.IsCorrect);
        }
        /*
         * public bool UpdateAndApprove(ContractSubdistributor model)
         * {
         *  ResultManager.IsCorrect = false;
         *  //initial validations
         *  //-sys validations
         *  if (model == null)
         *  {
         *      ResultManager.Add(ErrorDefault, Trace + "UpdateAndApprove.111 No se recibio el modelo");
         *      return false;
         *  }
         *  //-business validations
         *
         *  //approve
         *  ContractSubdistributor auxContract = null;
         *  BayerEmployee auxRTV = new BayerEmployee();
         *  try
         *  {
         *      auxContract = Repository.ContractsSubdistributor.Get(model.Id);
         *
         *      auxContract.AmountGoalS1 = model.AmountGoalS1;
         *      auxContract.AmountGoalS2 = model.AmountGoalS2;
         *      auxContract.AmountGoalTotal = model.AmountGoalTotal;
         *
         *      auxContract.ContractSubdistributorStatusId = 3;
         *
         *      //set rtv info for email send (will be lost from auxContract after Repository.Complete())
         *      auxRTV.EMail = auxContract.RTVBayerEmployee.EMail;
         *      auxRTV.Name = auxContract.RTVBayerEmployee.NameDisplay;
         *
         *      Repository.Complete();
         *      ResultManager.IsCorrect = true;
         *  }
         *  catch (Exception ex)
         *  {
         *      ResultManager.Add(ErrorDefault, Trace + "UpdateAndApprove.511 Excepción al crear el nuevo elemento" + ex.Message);
         *  }
         *
         *  if (ResultManager.IsCorrect)
         *  {
         *      ResultManager.Add("El convenio ha sido actualizado", "");
         *
         *      if (SendEmailContractApproved(auxRTV.Name, auxRTV.EMail, auxContract.Id, auxContract.IdB))
         *      {
         *          ResultManager.Add("Se ha enviado un correo al RTV para la aprobación final", "");
         *      }
         *      else
         *      {
         *          ResultManager.Add("No se pudo enviar actualización por correo al RTV");
         *      }
         *  }
         *
         *  return ResultManager.IsCorrect;
         * }
         */

        /*
         * public bool Approve(int contractId)
         * {
         *  ResultManager.IsCorrect = false;
         *  //initial validations
         *  //-sys validations
         *  if (contractId == -1)
         *  {
         *      ResultManager.Add(ErrorDefault, Trace + "Approve.111 No se recibio el parámetro id");
         *      return false;
         *  }
         *  //-business validations
         *
         *  //approve
         *  int auxSubdistributorId = -1;
         *  ContractSubdistributor auxContract = null;
         *  try
         *  {
         *      auxContract = Repository.ContractsSubdistributor.Get(contractId);
         *      auxContract.ContractSubdistributorStatusId = 3;
         *
         *      auxSubdistributorId = auxContract.SubdistributorId;
         *
         *      Repository.Complete();
         *      ResultManager.IsCorrect = true;
         *  }
         *  catch (Exception ex)
         *  {
         *      ResultManager.Add(ErrorDefault, Trace + "Approve.511 Excepción al crear el nuevo elemento" + ex.Message);
         *  }
         *
         *  if (ResultManager.IsCorrect)
         *  {
         *      ResultManager.Add("El convenio ha sido actualizado", "");
         *      DistributorEmployee auxDistributorEmployee = Repository.Distributors.Get(auxSubdistributorId).DistributorUsers.FirstOrDefault();
         *      if (SendEmailContractApproved(auxDistributorEmployee.NameDisplay, auxDistributorEmployee.EMail, contractId, auxContract.IdB))
         *      {
         *          ResultManager.Add("Se ha enviado un correo al distribuidor", "");
         *      }
         *      else
         *      {
         *          ResultManager.Add("No se pudo enviar actualización por correo al distribuidor");
         *      }
         *  }
         *
         *  return ResultManager.IsCorrect;
         * }
         */

        public bool Approve(int id)
        {
            ResultManager.IsCorrect = false;
            //initial validations
            //-sys validations
            if (id == -1)
            {
                ResultManager.Add(ErrorDefault, Trace + "Approve.111 No se recibio el parámetro id");
                return(false);
            }
            //-business validations

            ContractSubdistributor auxContract  = null;
            string auxSubdistributorDisplayName = string.Empty;
            string auxSubdistributorEmail       = string.Empty;
            string auxRtvDisplayName            = string.Empty;
            string auxRtvEmail    = string.Empty;
            string auxContractIdB = string.Empty;

            try
            {
                //retrieve contract to update
                auxContract = Repository.ContractsSubdistributor.Get(id);

                //set new values
                auxContract.ContractSubdistributorStatusId = 1;//1:active

                //save aux informationto send emails
                SubdistributorEmployee auxSubdistributorEmployee = auxContract.Subdistributor.SubdistributorEmployees.FirstOrDefault();
                auxSubdistributorDisplayName = auxSubdistributorEmployee.NameDisplay;
                auxSubdistributorEmail       = auxSubdistributorEmployee.EMail;
                auxRtvDisplayName            = auxContract.RTVBayerEmployee.NameDisplay;
                auxRtvEmail    = auxContract.RTVBayerEmployee.EMail;
                auxContractIdB = auxContract.IdB;

                //save changes
                Repository.Complete();
                ResultManager.IsCorrect = true;
            }
            catch (Exception ex)
            {
                ResultManager.Add(ErrorDefault, Trace + "Approve.311 Excepción al actualizar la información del contrato id '" + id + "'" + ex.Message);
                return(false);
            }

            if (ResultManager.IsCorrect)
            {
                ResultManager.Add("El convenio ha sido actualizado", "");
                try
                {
                    //send email to subdistributor
                    if (SendEmailToSubdistributorContractApproved(auxSubdistributorDisplayName, auxSubdistributorEmail, id, auxContract.IdB))
                    {
                        ResultManager.Add("Se ha enviado un correo al distribuidor", "");
                    }
                    else
                    {
                        ResultManager.Add("No se pudo enviar actualización por correo al distribuidor");
                    }

                    //send email to rtv
                    if (SendEmailToBayerEmployeeContractApproved(auxRtvDisplayName, auxRtvEmail, id, auxContract.IdB))
                    {
                        ResultManager.Add("Se ha enviado un correo al rtv", "");
                    }
                    else
                    {
                        ResultManager.Add("No se pudo enviar actualización por correo al rtv");
                    }
                }
                catch (Exception ex)
                {
                    ResultManager.Add("Error al enviar notificaciones de correo", Trace + "Create.711 Excepción al enviar notificación de correo del convenio: " + ex.Message);
                }
            }

            return(ResultManager.IsCorrect);
        }