Class: Edi::BaseEdiService

Inherits:
BaseService show all
Includes:
AddressAbbreviator
Defined in:
app/services/edi/base_edi_service.rb

Direct Known Subclasses

Amazon::APlusContentProcessor, Amazon::APlusContentRetriever, Amazon::AcknowledgeMessageSender, Amazon::BuyBoxStatusRetriever, Amazon::CatalogItemInformationProcessor, Amazon::CatalogItemInformationRetriever, Amazon::ConfirmMessageProcessor, Amazon::ConfirmMessageSender, Amazon::DeleteListingMessageProcessor, Amazon::DiscontinueFlowProcessor, Amazon::FbaOrderMessageProcessor, Amazon::FbaOrderMessageRetriever, Amazon::FeedMessageSender, Amazon::FeedSubmissionResultProcessor, Amazon::InventoryMessageProcessor, Amazon::ListingItemInformationProcessor, Amazon::ListingItemInformationRetriever, Amazon::ListingItemSchemaRetriever, Amazon::ListingMessageFeedProcessor, Amazon::ListingMessageProcessor, Amazon::OrderMessageProcessor, Amazon::OrderMessageRetriever, Amazon::OrderStatusVerifier, Amazon::PriceMessageProcessor, Amazon::ProductDataProcessor, Amazon::Sender, AmazonVc::AcknowledgeMessageSender, AmazonVc::CatalogItemInformationProcessor, AmazonVc::CatalogItemInformationRetriever, AmazonVc::ConfirmMessageProcessor, AmazonVc::ConfirmMessageSender, AmazonVc::DeleteListingMessageProcessor, AmazonVc::InventoryMessageProcessor, AmazonVc::InventoryMessageSender, AmazonVc::InvoiceMessageProcessor, AmazonVc::InvoiceMessageSender, AmazonVc::ListingItemInformationProcessor, AmazonVc::ListingItemInformationRetriever, AmazonVc::ListingItemValidationErrorsRetriever, AmazonVc::ListingMessageProcessor, AmazonVc::OldCatalogItemInformationProcessor, AmazonVc::OldCatalogItemInformationRetriever, AmazonVc::OldSender, AmazonVc::OrderMessageProcessor, AmazonVc::OrderMessageRetriever, AmazonVc::PackingSlipProcessor, AmazonVc::PackingSlipRetriever, AmazonVc::Sender, AmazonVc::TransactionMessageProcessor, Commercehub::AcknowledgeMessageSender, Commercehub::ConfirmMessageProcessor, Commercehub::ConfirmMessageSender, Commercehub::FaMessageProcessor, Commercehub::FaMessageSender, Commercehub::InventoryMessageProcessor, Commercehub::InventoryMessageSender, Commercehub::InvoiceMessageProcessor, Commercehub::InvoiceMessageSender, Commercehub::OrderMessageProcessor, Commercehub::OrderMessageRetriever, Commercehub::PackingSlipProcessor, Commercehub::PackingSlipReaderCostcoCa, Commercehub::PackingSlipReaderLowesCa, Commercehub::PackingSlipReaderLowesCom, Commercehub::PackingSlipReaderThdCa, Commercehub::PackingSlipReaderThdUs, Commercehub::PackingSlipRetriever, Commercehub::RemitMessageProcessor, Commercehub::RemitMessageRetriever, Commercehub::ReturnAuthorizationMessageRetriever, Commercehub::ReturnNotificationMessageProcessor, Commercehub::ReturnNotificationMessageSender, Houzz::ConfirmMessageProcessor, Houzz::ConfirmMessageSender, Houzz::InventoryMessageProcessor, Houzz::InventoryMessageSender, Houzz::InventorySender, Houzz::OrderMessageProcessor, Houzz::OrderMessageRetriever, Houzz::Sender, Menard::DiscontinueFlowProcessor, Menard::InventoryMessageProcessor, Menard::InventoryMessageSender, MftGateway::AcknowledgeMessageSender, MftGateway::ConfirmMessageProcessor, MftGateway::ConfirmMessageSender, MftGateway::InventoryMessageProcessor, MftGateway::InventoryMessageSender, MftGateway::InvoiceMessageProcessor, MftGateway::InvoiceMessageSender, MftGateway::OrderMessageProcessor, MftGateway::Sender, MiraklSeller::ConfirmMessageProcessor, MiraklSeller::ConfirmMessageSender, MiraklSeller::FaMessageProcessor, MiraklSeller::FaMessageSender, MiraklSeller::InvoiceMessageProcessor, MiraklSeller::OrderMessageProcessor, MiraklSeller::OrderMessageRetriever, MiraklSeller::PriceImportMessageProcessor, MiraklSeller::PriceMessageProcessor, MiraklSeller::PriceMessageSender, MiraklSeller::ProductDataProcessor, MiraklSeller::ProductDataSender, MiraklSeller::ProductImportMessageProcessor, MiraklSeller::Sender, Walmart::AcknowledgeMessageSender, Walmart::CatalogItemInformationProcessor, Walmart::CatalogItemInformationRetriever, Walmart::ConfirmMessageProcessor, Walmart::ConfirmMessageSender, Walmart::DiscontinueFlowProcessor, Walmart::FeedMessageSender, Walmart::FeedSubmissionResultProcessor, Walmart::InventoryMessageProcessor, Walmart::ListingMessageFeedProcessor, Walmart::OrderMessageProcessor, Walmart::OrderMessageRetriever, Walmart::PriceMessageProcessor, Wayfair::AcknowledgeMessageSender, Wayfair::CatalogItemInformationProcessor, Wayfair::CatalogItemInformationRetriever, Wayfair::CatalogItemInformationUpdater, Wayfair::CatalogItemUpdateSender, Wayfair::ConfirmMessageProcessor, Wayfair::ConfirmMessageSender, Wayfair::InventoryMessageProcessor, Wayfair::InventoryMessageSender, Wayfair::OrderMessageProcessor, Wayfair::OrderMessageRetriever, Wayfair::PackingSlipRetriever, Wayfair::Sender, Wayfair::TaxonomyAttributeRetriever

Constant Summary

Constants included from AddressAbbreviator

AddressAbbreviator::MAX_LENGTH

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from AddressAbbreviator

#abbreviate_street, #collect_street_originals, #record_address_abbreviation_notes

Methods inherited from BaseService

#log_debug, #log_error, #log_info, #log_warning, #logger, #options, #process, #tagged_logger

Constructor Details

#initialize(orchestrator, options = {}) ⇒ BaseEdiService

Returns a new instance of BaseEdiService.



9
10
11
12
# File 'app/services/edi/base_edi_service.rb', line 9

def initialize(orchestrator, options = {})
  @orchestrator = orchestrator
  super(options)
end

Instance Attribute Details

#orchestratorObject (readonly)

Returns the value of attribute orchestrator.



7
8
9
# File 'app/services/edi/base_edi_service.rb', line 7

def orchestrator
  @orchestrator
end

Instance Method Details

#duplicate_po_already_notified?(po_number, current_edi_log_id) ⇒ Boolean (protected)

Check if we've already sent a notification about this duplicate PO
Looks for processed EDI logs with this PO that have no associated order
(meaning they detected a duplicate and sent a notification)

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/services/edi/base_edi_service.rb', line 36

def duplicate_po_already_notified?(po_number, current_edi_log_id)
  return false if po_number.blank?

  # Find processed EDI logs for this partner that:
  # 1. Contain this PO in their data
  # 2. Have NO associated orders (meaning they didn't create an order = duplicate detection)
  EdiCommunicationLog
    .where(partner: orchestrator.partner, category: 'order_batch')
    .where(state: 'processed')
    .where('edi_communication_logs.created_at > ?', 30.days.ago)
    .where('edi_communication_logs.id != ?', current_edi_log_id.to_i)
    .where('edi_communication_logs.data LIKE ?', "%#{po_number}%")
    .left_joins(:orders)
    .where(orders: { id: nil })
    .exists?
end

#mark_duplicate_po_as_notified(po_number, edi_log_id) ⇒ Object (protected)

No-op: notification tracking is now based on processed logs without orders



54
55
56
57
# File 'app/services/edi/base_edi_service.rb', line 54

def mark_duplicate_po_as_notified(po_number, edi_log_id)
  # Tracking is implicit: when this log is marked 'processed' without creating an order,
  # future checks will find it and skip sending duplicate notifications
end

#report_order_creation_issues(batch_process_results) ⇒ Object (protected)



26
27
28
29
30
31
# File 'app/services/edi/base_edi_service.rb', line 26

def report_order_creation_issues(batch_process_results)
  orders_created = batch_process_results.flat_map(&:orders_created)
  if (orders_to_report = orders_created.to_a.select(&:requires_intervention?)).present?
    InternalMailer.edi_orders_notification(orders_to_report).deliver_later
  end
end

#safe_process_edi_communication_log(ecl) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'app/services/edi/base_edi_service.rb', line 14

def safe_process_edi_communication_log(ecl)
  process_communication_log(ecl)
rescue StandardError => e
  msg = "Exception while processing edi_communication_log #{ecl.id}: #{e}"
  ErrorReporting.error(e, msg)
  ecl.notes = msg
  ecl.error!
  logger.error msg
end