public async Task <Unit> Handle(AuthorizeForPostingCommand request, CancellationToken cancellationToken) { _unitOfWork.BeginTransaction(); try { // TODO: validation = Only document within following status can be updated: PostingStatus.MappingError, PostingStatus.Held, PostingStatus.Incomplete var listOfDocId = request.AccountingDocuments.Select(d => d.AccountingId).ToList(); bool postOpClosedPolicy = await CommonRules.CheckPrivileges(_authorizationService, _identityService); await AuthorizeForPosting(listOfDocId, request.Company, postOpClosedPolicy); _unitOfWork.Commit(); _logger.LogInformation($"Authorize for posting documents {string.Join(",", listOfDocId)}."); } catch { _unitOfWork.Rollback(); throw; } return(Unit.Value); }
public async Task <Unit> Handle(ProcessHeldAndMappingErrorDocumentCommand request, CancellationToken cancellationToken) { _unitOfWork.BeginTransaction(); try { var companyDate = await _systemDateTimeService.GetCompanyDate(request.Company); IEnumerable <AccountingDocument> accountingDocuments = await _accountingQueries.GetAccountingDocumentInHeldAndMappingErrorState(request.Company); foreach (AccountingDocument accountingDocument in accountingDocuments) { await CommonRules.CalculateFunctionalAndStatutoryCurrencyAccountingLine(_foreignExchangeRateService, accountingDocument); AccountingSetupDto accountingSetup = await _accountingQueries.GetAccountingSetup((int)accountingDocument.TransactionDocumentTypeId, request.Company); accountingDocument.StatusId = await ReturnAccountingDocumentStatus(accountingDocument, companyDate, request.Company, accountingSetup); await _accountingDocumentRepository.UpdateAccountingDocument(accountingDocument, request.Company); if (accountingDocument.StatusId == PostingStatus.Authorised) { bool postOpClosedPolicy = await CommonRules.CheckPrivileges(_authorizationService, _identityService); await EnqueuePostingProcessorMessage(accountingDocument.AccountingId, request.Company, postOpClosedPolicy); } } _unitOfWork.Commit(); } catch { _unitOfWork.Rollback(); throw; } return(Unit.Value); }