Class: Edi::BaseEdiService
- Inherits:
-
BaseService
- Object
- BaseService
- Edi::BaseEdiService
- 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
-
#orchestrator ⇒ Object
readonly
Returns the value of attribute orchestrator.
Instance Method Summary collapse
-
#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).
-
#initialize(orchestrator, options = {}) ⇒ BaseEdiService
constructor
A new instance of BaseEdiService.
-
#mark_duplicate_po_as_notified(po_number, edi_log_id) ⇒ Object
protected
No-op: notification tracking is now based on processed logs without orders.
- #report_order_creation_issues(batch_process_results) ⇒ Object protected
- #safe_process_edi_communication_log(ecl) ⇒ Object
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, = {}) @orchestrator = orchestrator super() end |
Instance Attribute Details
#orchestrator ⇒ Object (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)
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 |