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
29 30 31 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 29 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
25 26 27 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 25 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
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 153 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
45 46 47 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 45 def damaged? status == "damaged" end |
#deliver! ⇒ Object
67 68 69 70 71 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 67 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
41 42 43 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 41 def delivered? status == "delivered" end |
#discrepancy_amount ⇒ Object
139 140 141 142 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 139 def discrepancy_amount return 0 unless has_discrepancy? (pickup_verified_quantity - dropoff_verified_quantity).abs end |
#dispute_delivery!(reason, disputed_by) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 107 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
57 58 59 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 57 def disputed? status == "disputed" end |
#has_discrepancy? ⇒ Boolean
134 135 136 137 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 134 def has_discrepancy? return false unless verification_complete? pickup_verified_quantity != dropoff_verified_quantity end |
#mark_damaged!(quantity) ⇒ Object
120 121 122 123 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 120 def mark_damaged!(quantity) update!(status: :damaged, damaged_quantity: quantity) true end |
#mark_missing!(quantity) ⇒ Object
125 126 127 128 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 125 def mark_missing!(quantity) update!(status: :missing, missing_quantity: quantity) true end |
#missing? ⇒ Boolean
49 50 51 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 49 def missing? status == "missing" end |
#pending? ⇒ Boolean
33 34 35 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 33 def pending? status == "pending" end |
#picked_up? ⇒ Boolean
37 38 39 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 37 def picked_up? status == "picked_up" end |
#pickup! ⇒ Object
61 62 63 64 65 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 61 def pickup! return false unless pending? update!(status: :picked_up, pickup_verified_quantity: quantity) true end |
#product_name ⇒ Object
144 145 146 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 144 def product_name order_item&.product_name end |
#receiver_confirm!(confirmed_quantity, notes = nil, confirmed_by = nil) ⇒ Object
Handoff workflow methods
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 74 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
53 54 55 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 53 def receiver_confirmed? status == "receiver_confirmed" end |
#report_issue!(issue_type, quantity, description, reported_by) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 89 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
169 170 171 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 169 def requires_resolution? has_discrepancy? || damaged? || missing? || disputed? end |
#unit_name ⇒ Object
148 149 150 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 148 def unit_name order_item&.unit_name end |
#verification_complete? ⇒ Boolean
130 131 132 |
# File 'app/models/dscf/marketplace/delivery_order_item.rb', line 130 def verification_complete? pickup_verified_quantity.present? && dropoff_verified_quantity.present? end |