public async Task <SectionPostingStatus> Handle(UpdateAccountingDocumentCommand request, CancellationToken cancellationToken) { _unitOfWork.BeginTransaction(); try { SectionPostingStatus reference; AccountingDocument accountingDocument = new AccountingDocument(); accountingDocument = await MapCommandToAccountingDocument(request); var isJLorTADocument = (accountingDocument.TransactionDocumentTypeId == (int)DocumentType.MTA || accountingDocument.TransactionDocumentTypeId == (int)DocumentType.MJL) ? true : false; var isPostedType = accountingDocument.StatusId == PostingStatus.Posted ? true : false; var authorizationEditAccountingEntriesPolicy = await _authorizationService.AuthorizeAsync(_identityService.GetUser(), accountingDocument, Policies.EditAccountingEntriesPolicy); var authorizationCreateEditDocumentPolicy = await _authorizationService.AuthorizeAsync(_identityService.GetUser(), accountingDocument, Policies.CreateEditDocumentPolicy); var authorizationPostingManagementPolicy = await _authorizationService.AuthorizeAsync(_identityService.GetUser(), accountingDocument, Policies.PostingManagementPolicy); if ((authorizationEditAccountingEntriesPolicy.Succeeded && isPostedType) || ((authorizationCreateEditDocumentPolicy.Succeeded && isJLorTADocument) || (authorizationPostingManagementPolicy.Succeeded && !isJLorTADocument))) { reference = await _accountingDocumentRepository.UpdateAccountingDocument(accountingDocument, request.Company); } else { throw new AtlasSecurityException("One or more privileges are required to perform this action."); } _unitOfWork.Commit(); _logger.LogInformation("Accounting Document updated", reference.PostingStatusId); return(reference); } catch { _unitOfWork.Rollback(); throw; } }
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); }