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); }
/// <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); }
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)); }
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")); }
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)); }
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)); }
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); }
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); }