Class: Dscf::Marketplace::DeliveryOrderItem
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Dscf::Marketplace::DeliveryOrderItem
- Defined in:
- app/models/dscf/marketplace/delivery_order_item.rb
Class Method Summary collapse
- .ransackable_associations(_auth_object = nil) ⇒ Object
-
.ransackable_attributes(_auth_object = nil) ⇒ Object
Ransack configuration for secure filtering.
Instance Method Summary collapse
-
#comprehensive_damage_report ⇒ Object
Loss/Damage Reporting Methods.
- #damaged? ⇒ Boolean
- #deliver! ⇒ Object
- #delivered? ⇒ Boolean
- #discrepancy_amount ⇒ Object
- #dispute_delivery!(reason, disputed_by) ⇒ Object
- #disputed? ⇒ Boolean
- #has_discrepancy? ⇒ Boolean
- #mark_damaged!(quantity) ⇒ Object
- #mark_missing!(quantity) ⇒ Object
- #missing? ⇒ Boolean
- #pending? ⇒ Boolean
- #picked_up? ⇒ Boolean
- #pickup! ⇒ Object
- #product_name ⇒ Object
-
#receiver_confirm!(confirmed_quantity, notes = nil, confirmed_by = nil) ⇒ Object
Handoff workflow methods.
- #receiver_confirmed? ⇒ Boolean
- #report_issue!(issue_type, quantity, description, reported_by) ⇒ Object
- #requires_resolution? ⇒ Boolean
- #unit_name ⇒ Object
- #verification_complete? ⇒ Boolean
Class Method Details
.ransackable_associations(_auth_object = nil) ⇒ Object
28 29 30 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 28 def self.ransackable_associations(_auth_object = nil) %w[delivery_order order_item pickup_address dropoff_address] end |
.ransackable_attributes(_auth_object = nil) ⇒ Object
Ransack configuration for secure filtering
24 25 26 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 24 def self.ransackable_attributes(_auth_object = nil) %w[id delivery_order_id order_item_id pickup_address_id dropoff_address_id quantity status pickup_verified_quantity dropoff_verified_quantity damaged_quantity missing_quantity receiver_confirmed_by receiver_confirmed_at receiver_notes handoff_checklist_completed created_at updated_at] end |
Instance Method Details
#comprehensive_damage_report ⇒ Object
Loss/Damage Reporting Methods
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 152 def comprehensive_damage_report { item_id: id, product_name: order_item&.product&.name, expected_quantity: quantity, received_quantity: dropoff_verified_quantity, damaged_quantity: damaged_quantity, missing_quantity: missing_quantity, total_discrepancy: discrepancy_amount, issue_description: receiver_notes, reported_at: receiver_confirmed_at, reported_by: receiver_confirmed_by, requires_resolution: requires_resolution? } end |
#damaged? ⇒ Boolean
44 45 46 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 44 def damaged? status == "damaged" end |
#deliver! ⇒ Object
66 67 68 69 70 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 66 def deliver! return false unless picked_up? update!(status: :delivered, dropoff_verified_quantity: pickup_verified_quantity.to_f - (damaged_quantity || 0) - (missing_quantity || 0)) true end |
#delivered? ⇒ Boolean
40 41 42 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 40 def delivered? status == "delivered" end |
#discrepancy_amount ⇒ Object
138 139 140 141 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 138 def discrepancy_amount return 0 unless has_discrepancy? (pickup_verified_quantity - dropoff_verified_quantity).abs end |
#dispute_delivery!(reason, disputed_by) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 106 def dispute_delivery!(reason, disputed_by) return false unless delivered? || receiver_confirmed? update!( status: :disputed, receiver_notes: reason, receiver_confirmed_at: Time.current, receiver_confirmed_by: disputed_by ) create_dispute_record true end |
#disputed? ⇒ Boolean
56 57 58 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 56 def disputed? status == "disputed" end |
#has_discrepancy? ⇒ Boolean
133 134 135 136 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 133 def has_discrepancy? return false unless verification_complete? pickup_verified_quantity != dropoff_verified_quantity end |
#mark_damaged!(quantity) ⇒ Object
119 120 121 122 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 119 def mark_damaged!(quantity) update!(status: :damaged, damaged_quantity: quantity) true end |
#mark_missing!(quantity) ⇒ Object
124 125 126 127 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 124 def mark_missing!(quantity) update!(status: :missing, missing_quantity: quantity) true end |
#missing? ⇒ Boolean
48 49 50 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 48 def missing? status == "missing" end |
#pending? ⇒ Boolean
32 33 34 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 32 def pending? status == "pending" end |
#picked_up? ⇒ Boolean
36 37 38 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 36 def picked_up? status == "picked_up" end |
#pickup! ⇒ Object
60 61 62 63 64 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 60 def pickup! return false unless pending? update!(status: :picked_up, pickup_verified_quantity: quantity) true end |
#product_name ⇒ Object
143 144 145 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 143 def product_name order_item&.product_name end |
#receiver_confirm!(confirmed_quantity, notes = nil, confirmed_by = nil) ⇒ Object
Handoff workflow methods
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 73 def receiver_confirm!(confirmed_quantity, notes = nil, confirmed_by = nil) return false unless in_transit? update!( status: :receiver_confirmed, dropoff_verified_quantity: confirmed_quantity, receiver_notes: notes, receiver_confirmed_at: Time.current, receiver_confirmed_by: confirmed_by, handoff_checklist_completed: true ) notify_receiver_confirmation true end |
#receiver_confirmed? ⇒ Boolean
52 53 54 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 52 def receiver_confirmed? status == "receiver_confirmed" end |
#report_issue!(issue_type, quantity, description, reported_by) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 88 def report_issue!(issue_type, quantity, description, reported_by) return false unless delivered? || picked_up? || pending? return false unless [ "damaged", "missing" ].include?(issue_type) return false if quantity > self.quantity update!( status: issue_type.to_sym, # :damaged or :missing damaged_quantity: ((issue_type == "damaged") ? quantity : 0), missing_quantity: ((issue_type == "missing") ? quantity : 0), receiver_notes: description, receiver_confirmed_at: Time.current, receiver_confirmed_by: reported_by, handoff_checklist_completed: true ) notify_platform_of_issue true end |
#requires_resolution? ⇒ Boolean
168 169 170 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 168 def requires_resolution? has_discrepancy? || damaged? || missing? || disputed? end |
#unit_name ⇒ Object
147 148 149 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 147 def unit_name order_item&.unit_name end |
#verification_complete? ⇒ Boolean
129 130 131 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 129 def verification_complete? pickup_verified_quantity.present? && dropoff_verified_quantity.present? end |