void PostCommit(RequestDataHolder holder) { _eventBus.Publish(new OnRequestStatusChangedEvent { ID = holder.Request.ID, RefID = holder.Request.RefID, OldStatus = holder.OldStatus, NewStatus = holder.NewStatus }); var schemes = new List <SchemeHolder>(); foreach (var item in holder.Request.LineItems) { var certificate = holder.Certificates?.FirstOrDefault(e => e.Scheme == item.Scheme && e.SubScheme == item.SubScheme); if (certificate != null) { var premise = holder.Request.Premises?.FirstOrDefault(e => e.IsPrimary); if (!float.TryParse(premise?.Area, out float area)) { area = 0f; } schemes.Add(new SchemeHolder { Scheme = item.Scheme.Value, SubScheme = item.SubScheme, NoOfProducts = certificate.Menus?.Count() ?? 0, StartsFrom = certificate.StartsFrom.Value, ExpiresOn = certificate.ExpiresOn.Value, Area = area }); } } if (schemes.Any()) { _eventBus.Publish(new GenerateBillEvent { RequestID = holder.Request.ID, RefID = holder.Request.RefID, Type = BillType.Stage2, RequestType = holder.Request.Type, CustomerID = holder.Request.CustomerID, CustomerName = holder.Request.CustomerName, Expedite = holder.Request.Expedite, Schemes = schemes, ReferenceDate = holder.Request.SubmittedOn }); } }
public async Task Invoke() { await new ApprovalPolicyValidator(_review, _dbContext) .Next(new HC02ApprovalValidator(_review, _dbContext)) .Next(new AmmendCertificateValidator(_review, _dbContext)) .Invoke(); var oldStatus = _requestBasic.Status; var approvedLineItems = _review.LineItems.Where(e => e.Approved.Value).ToList(); var approved = approvedLineItems.Count() >= 1; RequestStatus newStatus = approved ? RequestStatus.PendingMuftiAck : RequestStatus.Rejected; if (approved && _requestBasic.CodeID == null) { throw new BadRequestException( await _dbContext.Transalation.GetTranslation(Locale.EN, "RequestApproveNoCode")); } await _dbContext.Request.InsertReview(_review); var logText = await _dbContext.Transalation.GetTranslation(Locale.EN, approved? "RequestApproved" : "RequestRejected"); var logID = await _dbContext.Log.InsertLog(new Log { Action = logText, UserID = _review.ReviewerID.Value, UserName = _review.ReviewerName, }); await _dbContext.Request.MapLog(_review.RequestID, logID); await _dbContext.Request.InsertActionHistory(new RequestActionHistory { Action = RequestActionType.Approved, RequestID = _review.RequestID, Officer = new Officer { ID = _review.ReviewerID.Value, Name = _review.ReviewerName } }); await _dbContext.Request.UpdateStatus(_review.RequestID, newStatus, null); IList <Certificate> certificates = null; if (approved) { certificates = await GenerateCertificate(approvedLineItems, new Officer(_review.ReviewerID.Value, _review.ReviewerName)); } var _holder = new RequestDataHolder() { Request = _requestBasic, OldStatus = oldStatus, NewStatus = newStatus, Certificates = certificates }; PostCommit(_holder); await new SyncNewIngredientSubCommand( _review, _dbContext, _eventBus) .Invoke(); }