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
31 32 33 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 31 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
27 28 29 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 27 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
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 155 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
47 48 49 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 47 def damaged? status == "damaged" end |
#deliver! ⇒ Object
69 70 71 72 73 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 69 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
43 44 45 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 43 def delivered? status == "delivered" end |
#discrepancy_amount ⇒ Object
141 142 143 144 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 141 def discrepancy_amount return 0 unless has_discrepancy? (pickup_verified_quantity - dropoff_verified_quantity).abs end |
#dispute_delivery!(reason, disputed_by) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 109 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
59 60 61 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 59 def disputed? status == "disputed" end |
#has_discrepancy? ⇒ Boolean
136 137 138 139 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 136 def has_discrepancy? return false unless verification_complete? pickup_verified_quantity != dropoff_verified_quantity end |
#mark_damaged!(quantity) ⇒ Object
122 123 124 125 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 122 def mark_damaged!(quantity) update!(status: :damaged, damaged_quantity: quantity) true end |
#mark_missing!(quantity) ⇒ Object
127 128 129 130 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 127 def mark_missing!(quantity) update!(status: :missing, missing_quantity: quantity) true end |
#missing? ⇒ Boolean
51 52 53 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 51 def missing? status == "missing" end |
#pending? ⇒ Boolean
35 36 37 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 35 def pending? status == "pending" end |
#picked_up? ⇒ Boolean
39 40 41 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 39 def picked_up? status == "picked_up" end |
#pickup! ⇒ Object
63 64 65 66 67 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 63 def pickup! return false unless pending? update!(status: :picked_up, pickup_verified_quantity: quantity) true end |
#product_name ⇒ Object
146 147 148 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 146 def product_name order_item&.product_name end |
#receiver_confirm!(confirmed_quantity, notes = nil, confirmed_by = nil) ⇒ Object
Handoff workflow methods
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 76 def receiver_confirm!(confirmed_quantity, notes = nil, confirmed_by = nil) return false unless picked_up? || pending? || delivered? 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
55 56 57 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 55 def receiver_confirmed? status == "receiver_confirmed" end |
#report_issue!(issue_type, quantity, description, reported_by) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 91 def report_issue!(issue_type, quantity, description, reported_by) return false unless delivered? || picked_up? || pending? return false unless [ "damaged", "missing", "wrong_item", "incomplete" ].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
171 172 173 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 171 def requires_resolution? has_discrepancy? || damaged? || missing? || disputed? end |
#unit_name ⇒ Object
150 151 152 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 150 def unit_name order_item&.unit_name end |
#verification_complete? ⇒ Boolean
132 133 134 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 132 def verification_complete? pickup_verified_quantity.present? && dropoff_verified_quantity.present? end |