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); }