Ejemplo n.º 1
0
        public async Task <Unit> Handle(ProcessInterfaceDataChangeLogsRequest request, CancellationToken cancellationToken)
        {
            var paymentRequestStatus = await _paymentRequestRepository.GetPaymentRequestStatus((int)BusinessApplicationType.TRAX, request.CompanyId, null, request.TransactionDocumentId);

            if (paymentRequestStatus == null || ((InterfaceStatus)paymentRequestStatus.DocumentStatus == InterfaceStatus.None || (InterfaceStatus)paymentRequestStatus.DocumentStatus == InterfaceStatus.TransmitError))
            {
                long eventId;
                _unitOfWork.BeginTransaction();
                var eventdata = new Event((int)EventSubType.PaymentRequest, request.CashId, request.CashDocumentRef, (int)InterfaceStatus.ReadyToTransmit, request.CompanyId, null);
                try
                {
                    eventId = await _interfaceEventLogService.CreateEventAsync(eventdata);

                    // Insert record into InterfaceStatus
                    await ProcessStatusUpdate(request, InterfaceStatus.ReadyToTransmit, "Ready To Transmit");

                    _unitOfWork.Commit();
                }
                catch
                {
                    _unitOfWork.Rollback();
                    throw;
                }

                var companyDate = await _systemDateTimeService.GetCompanyDate(request.CompanyId);

                _logger.LogInformation("Cash with DocumentId {Atlas_PaymentRequestCashDocumentId} having status {Atlas_PaymentRequestStatus} is sent to Treasury System at {Atlas_DateTime}", request.CashDocumentRef, InterfaceStatus.ReadyToTransmit, companyDate);

                var paymentRequestMessage = await _paymentRequestRepository.GetTRAXMessageAsync(request.CashId, request.CompanyId);

                var eventHistory = new EventHistory(eventId, "Message Generated", paymentRequestMessage, null, null);
                _unitOfWork.BeginTransaction();
                try
                {
                    await _interfaceEventLogService.CreateEventHistoryAsync(eventHistory, request.CompanyId);

                    _unitOfWork.Commit();
                }
                catch
                {
                    _unitOfWork.Rollback();
                    throw;
                }

                var legalEntityCode = await _paymentRequestRepository.GetLegalEntityCodeAsync(request.CompanyId, request.BusinessApplicationType);

                await SendBusinessObjectToInterface(request, paymentRequestMessage, legalEntityCode, eventId);
            }
            else
            {
                _logger.LogWarning("Invalid Document ({Atlas_DocumentReference}) status {Atlas_InterfaceStatus}.", request.DocumentReference, ((InterfaceStatus)paymentRequestStatus.DocumentStatus).ToString());
            }

            return(Unit.Value);
        }
        public async Task <Unit> Handle(ProcessInterfaceDataChangeLogsRequest request, CancellationToken cancellationToken)
        {
            int tAorJLTypeId = 0;
            // There should be no record in DB the first time.
            var docStatus = await _accountingInterfaceRepository.GetDocumentStatus((int)BusinessApplicationType.AX, request.CompanyId, null, request.TransactionDocumentId, request.DocumentId);

            var docReference = await _accountingInterfaceRepository.GetDocumentReferenceByAccountingId(request.DocumentId, (int)request.DocumentTypeId, request.CompanyId);

            if (docStatus == InterfaceStatus.None || docStatus == InterfaceStatus.TransmitError)
            {
                long eventId;
                if (request.DocumentTypeId == DocumentType.ManualTemporaryAdjustment)
                {
                    tAorJLTypeId = await _accountingInterfaceRepository.GetTATypeIdAsync(request.TransactionDocumentId, request.DocumentTypeId, request.CompanyId);
                }

                if (request.DocumentTypeId == DocumentType.RegularJournal)
                {
                    tAorJLTypeId = await _accountingInterfaceRepository.GetJLTypeIdAsync(request.TransactionDocumentId, request.DocumentTypeId, request.CompanyId);
                }

                EventSubType eventSubType = await GetEventSubType(request.DocumentTypeId, tAorJLTypeId);

                _unitOfWork.BeginTransaction();
                var eventdata = new Event((int)eventSubType, request.DocumentId, docReference, (int)InterfaceStatus.ReadyToTransmit, request.CompanyId, null);

                try
                {
                    eventId = await _interfaceEventLogService.CreateEventAsync(eventdata);

                    // Insert Record into InterfaceStatus
                    await ProcessStatusUpdate(request, InterfaceStatus.InterfaceReady, "Ready To be Interfaced");

                    _unitOfWork.Commit();
                }
                catch
                {
                    _unitOfWork.Rollback();
                    throw;
                }

                var companyDate = await _systemDateTimeService.GetCompanyDate(request.CompanyId);

                _logger.LogInformation("Accounting Document with DocumentId {Atlas_DocumentId} having status {Atlas_InterfaceStatus} is sent to Accounting System at {Atlas_DateTime}", request.DocumentId, docStatus.ToString(), companyDate);

                var accountingInterfaceXMLMessage = await _accountingInterfaceRepository.GetESBMessageAsync(request.DocumentId, request.CompanyId);

                var eventHistory = new EventHistory(eventId, "Message Generated", accountingInterfaceXMLMessage, null, null);
                _unitOfWork.BeginTransaction();
                try
                {
                    await _interfaceEventLogService.CreateEventHistoryAsync(eventHistory, request.CompanyId);

                    _unitOfWork.Commit();
                }
                catch
                {
                    _unitOfWork.Rollback();
                    throw;
                }

                await SendBusinessObjectToInterface(request, accountingInterfaceXMLMessage, tAorJLTypeId, eventId, false);
            }
            else
            {
                _logger.LogWarning("Invalid Document ({Atlas_DocumentReference}) status {Atlas_InterfaceStatus}.", request.DocumentReference, docStatus.ToString());
            }

            return(Unit.Value);
        }