コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
        }