private void RuleOnApproved(UserSessionModel user, CommissionRequest entity) { // Apply approved commission entity.Quote.CommissionRequestId = entity.CommissionRequestId; entity.Quote.ApprovedCommissionPercentage = entity.ApprovedCommissionPercent.Value; entity.Quote.CommissionPercentage = entity.ApprovedCommissionPercent.Value; // Apply approved discount multipliers entity.Quote.ApprovedDiscountPercentageVRV = entity.ApprovedCommissionPercentVRV.Value; entity.Quote.ApprovedDiscountPercentageSplit = entity.ApprovedMultiplierSplit.Value; entity.Quote.ApprovedDiscountPercentageUnitary = entity.ApprovedCommissionPercentUnitary.Value; entity.Quote.ApprovedDiscountPercentageLCPackage = entity.ApprovedCommissionPercentLCPackage.Value; entity.Quote.TotalNet = entity.TotalNet.Value; // Remove awaiting commission request entity.Quote.AwaitingCommissionRequest = false; //RecalculateQuote(user, entity); RecalculateCommission(user, entity); if (this.Response.IsOK) { this.Response.AddSuccess("Commission request approved."); } }
public void RulesOnStatusChange(UserSessionModel user, CommissionRequest entity) { if (base.Entry.HasChanged("CommissionRequestStatusTypeId")) { entity.StatusTypeModifiedBy = user.UserId; entity.StatusTypeModifiedOn = DateTime.Now; if (entity.Quote.Project == null) { // Needed for quote calculations Db.QueryProjectViewableByProjectId(user, entity.ProjectId).Include("Owner").Include("Owner.Business").Load(); } if (entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Pending) { RuleOnAddOrUpdate(user, entity); } if (entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Rejected || entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Deleted) { RuleOnRejectOrDelete(user, entity); } if (entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Approved) { RuleOnApproved(user, entity); } //RecalculateQuote(user, entity); } }
private void RuleOnRejectOrDelete(UserSessionModel user, CommissionRequest entity) { entity.Quote.CommissionRequestId = null; entity.Quote.AwaitingCommissionRequest = false; entity.ApprovedMultiplier = 0; entity.ApprovedMultiplierSplit = 0; entity.ApprovedMultiplierVRV = 0; entity.ApprovedMultiplierUnitary = 0; entity.ApprovedMultiplierLCPackage = 0; RecalculateQuote(user, entity); if (entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Rejected) { if (this.Response.IsOK) { this.Response.AddSuccess("Commission request rejected."); } } else { if (this.Response.IsOK) { this.Response.AddSuccess("Commission request deleted."); } } }
public IHttpActionResult PutCommissionRequest(int id, CommissionRequest commissionRequest) //modify and update comm request data of specific id { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != commissionRequest.CommID) { return(BadRequest()); } db.Entry(commissionRequest).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { if (!CommissionRequestExists(id)) { return(NotFound()); } else { throw; } } return(StatusCode(HttpStatusCode.NoContent)); }
private void RuleOnAddOrUpdate(UserSessionModel user, CommissionRequest entity) { // Apply approved commission entity.Quote.CommissionRequestId = entity.CommissionRequestId; entity.Quote.CommissionPercentage = entity.RequestedCommissionPercent.Value; entity.Quote.ApprovedCommissionPercentage = entity.ApprovedCommissionPercent.Value; entity.Quote.TotalNet = entity.TotalNet.Value; }
private void RecalculateQuote(UserSessionModel user, CommissionRequest entity) { Entry = Db.Entry(entity.Quote); entity.Quote.RecalculationRequired = true; Entry.State = EntityState.Modified; new QuoteServices(this, "Quote").ApplyBusinessRules(user, entity.Quote); }
public IHttpActionResult GetCommissionRequest(int id) //fetch commission request data of specific id { CommissionRequest commissionRequest = db.CommissionRequests.Find(id); if (commissionRequest == null) { return(NotFound()); } return(Ok(commissionRequest)); }
public IHttpActionResult PostCommissionRequest(CommissionRequest commissionRequest) //add new comm request data { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } db.CommissionRequests.Add(commissionRequest); db.SaveChanges(); return(CreatedAtRoute("DefaultApi", new { id = commissionRequest.CommID }, commissionRequest)); }
public IHttpActionResult DeleteCommissionRequest(int id) //delete comm request data of specific id { CommissionRequest commissionRequest = db.CommissionRequests.Find(id); if (commissionRequest == null) { return(NotFound()); } db.CommissionRequests.Remove(commissionRequest); db.SaveChanges(); return(Ok(commissionRequest)); }
private void RecalculateCommission(UserSessionModel user, CommissionRequest entity) { if (entity.CommissionRequestStatusTypeId != (byte)CommissionRequestStatusTypeEnum.Approved) { if (entity.Quote == null) { entity.Quote = Db.QueryQuoteViewableByQuoteId(user, entity.QuoteId).FirstOrDefault(); } if (entity.Quote == null) { this.Response.AddCritical(ResourceModelProject.MP140); return; } #region VRV Commission // VRV Commission Calculation entity.TotalNetVRV = entity.Quote.TotalListVRV * entity.RequestedMultiplierVRV; entity.RequestedCommissionVRV = entity.TotalNetVRV * (entity.RequestedCommissionPercentVRV / 100); // VRV Net Material Cost entity.RequestedNetMultiplierValueVRV = entity.TotalNetVRV - entity.RequestedCommissionVRV; if (entity.Quote.TotalListVRV != 0) { entity.RequestedNetMaterialMultiplierVRV = entity.RequestedNetMultiplierValueVRV / entity.Quote.TotalListVRV; } #endregion VRV Commission #region Split Commission // Split Commission Requested entity.TotalNetSplit = entity.Quote.TotalListSplit * entity.RequestedMultiplierSplit; entity.RequestedCommissionSplit = entity.TotalNetSplit * (entity.RequestedCommissionPercentSplit / 100); // Split Net Material Cost entity.RequestedNetMultiplierValueSplit = entity.TotalNetSplit - entity.RequestedCommissionSplit; if (entity.Quote.TotalListSplit != 0) { entity.RequestedNetMaterialMultiplierSplit = entity.RequestedNetMultiplierValueSplit / entity.Quote.TotalListSplit; } else { entity.RequestedNetMaterialMultiplierSplit = 0; } #endregion Split Commission #region UnitaryCommission entity.TotalNetUnitary = entity.Quote.TotalListUnitary * entity.RequestedMultiplierUnitary; entity.RequestedCommissionUnitary = entity.TotalNetUnitary * (entity.RequestedCommissionPercentUnitary / 100); entity.RequestedNetMultiplierValueUnitary = entity.TotalNetUnitary - entity.RequestedCommissionUnitary; if (entity.Quote.TotalListUnitary != 0) { entity.RequestedNetMaterialMultiplierUnitary = entity.RequestedNetMultiplierValueUnitary / entity.Quote.TotalListUnitary; } else { entity.RequestedNetMaterialMultiplierUnitary = 0; } #endregion #region LCPackageCommission entity.TotalNetLCPackage = entity.Quote.TotalListLCPackage * entity.RequestedMultiplierLCPackage; entity.RequestedCommissionLCPackage = entity.TotalNetLCPackage * (entity.RequestedCommissionPercentLCPackage / 100); entity.RequestedNetMultiplierValueLCPackage = entity.TotalNetLCPackage - entity.RequestedCommissionLCPackage; if (entity.Quote.TotalListLCPackage != 0) { entity.RequestedNetMaterialMultiplierLCPackage = entity.RequestedNetMultiplierValueLCPackage / entity.Quote.TotalListLCPackage; } else { entity.RequestedNetMaterialMultiplierLCPackage = 0; } #endregion // Requested Commission Total entity.RequestedCommissionTotal = entity.RequestedCommissionVRV + entity.RequestedCommissionSplit + entity.RequestedCommissionUnitary + entity.RequestedCommissionLCPackage; // Total Net entity.TotalNet = entity.TotalNetSplit + entity.TotalNetVRV + entity.TotalNetUnitary + entity.TotalNetLCPackage; entity.RequestedCommissionPercent = (entity.RequestedCommissionTotal / entity.TotalNet) * 100; // Net Material Calculations entity.RequestedNetMaterialValue = entity.TotalNet - entity.RequestedCommissionTotal; entity.RequestedNetMaterialValueMultiplier = entity.RequestedNetMaterialValue / (entity.Quote.TotalListSplit + entity.Quote.TotalListVRV + entity.Quote.TotalListUnitary + entity.Quote.TotalListLCPackage); // Total Net Multiplier entity.RequestedMultiplier = entity.TotalNet / (entity.Quote.TotalListSplit + entity.Quote.TotalListVRV + entity.Quote.TotalListUnitary + entity.Quote.TotalListLCPackage); } }
public void RulesCommon(UserSessionModel user, CommissionRequest entity) { if (entity.Quote == null) { Db.QueryQuoteViewableByQuoteId(user, entity.QuoteId).Load(); } if (entity.HasCompetitorPrice && (entity.CompetitorPrice == null || entity.CompetitorPrice.Value < 0)) { this.Response.Messages.AddError("CompetitorPrice", Resources.ResourceModelProject.MP100); } if (entity.HasCompetitorQuote) { string fileLocation = Utilities.GetDARDirectory(entity.QuoteId) + entity.CompetitorQuoteFileName; if (string.IsNullOrWhiteSpace(entity.CompetitorQuoteFileName) || !File.Exists(fileLocation)) { this.Response.Messages.AddError("CompetitorQuoteFileName", Resources.ResourceModelProject.MP101); } } if (entity.HasCompetitorLineComparsion) { string fileLocation = Utilities.GetDARDirectory(entity.QuoteId) + entity.CompetitorLineComparsionFileName; if (string.IsNullOrWhiteSpace(entity.CompetitorLineComparsionFileName) || !File.Exists(fileLocation)) { this.Response.Messages.AddError("CompetitorLineComparsionFileName", Resources.ResourceModelProject.MP102); } } if (string.IsNullOrEmpty(entity.Notes) && entity.IsCommissionCalculation != true) // uncommment this code if the CommissionRequest View need to have the Request Notes TextArea { this.Response.Messages.AddError("Notes", Resources.ResourceModelProject.MP106); } if (string.IsNullOrEmpty(entity.ResponseNotes) && base.Entry.HasChanged("CommissionRequestStatusTypeId") && (entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Rejected || entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Approved)) { this.Response.Messages.AddError("ResponseNotes", Resources.ResourceModelProject.MP107); } if (entity.CommissionRequestStatusTypeId == (byte)CommissionRequestStatusTypeEnum.Pending) { if (entity.SystemBasisDesignTypeId == null) { this.Response.Messages.AddError("SystemBasisDesignTypeId", Resources.ResourceModelProject.MP108); } if (entity.ZoneStrategyTypeId == null) { this.Response.Messages.AddError("ZoneStrategyTypeId", Resources.ResourceModelProject.MP109); } if (entity.BrandApprovedTypeId == null) { this.Response.Messages.AddError("BrandApprovedTypeId", Resources.ResourceModelProject.MP110); } if (entity.BrandSpecifiedTypeId == null) { this.Response.Messages.AddError("BrandSpecifiedTypeId", Resources.ResourceModelProject.MP111); } if (entity.FundingTypeId == null) { this.Response.Messages.AddError("FundingTypeId", Resources.ResourceModelProject.MP122); } } var quoteItems = Db.QuoteItemsByQuoteId(user, entity.QuoteId).Include("Product").ToList(); this.quoteService.SetQuoteItemMultipliers(entity.Quote, quoteItems, entity); }