Class: Cats::Core::Dispatch
- Inherits:
 - 
      ApplicationRecord
      
        
- Object
 - ActiveRecord::Base
 - ApplicationRecord
 - Cats::Core::Dispatch
 
 
- Defined in:
 - app/models/cats/core/dispatch.rb
 
Constant Summary collapse
- DRAFT =
 "Draft".freeze
- APPROVED =
 "Approved".freeze
- READY_TO_START =
 "Ready to Start".freeze
- STARTED =
 "Started".freeze
- RECEIVED =
 "Received".freeze
- STACKED =
 "Stacked".freeze
- DISPATCH_STATUSES =
 [DRAFT, APPROVED, READY_TO_START, STARTED, RECEIVED, STACKED].freeze
Class Method Summary collapse
- .ransackable_associations(_auth_object = nil) ⇒ Object
 - .ransackable_attributes(_auth_object = nil) ⇒ Object
 - .search_commodity(batch_no) ⇒ Object
 
Instance Method Summary collapse
- #all_authorizations_confirmed? ⇒ Boolean
 - #approve ⇒ Object
 - #destination ⇒ Object
 - #receive ⇒ Object
 - #revert ⇒ Object
 - #stack ⇒ Object
 - #start ⇒ Object
 - #validate_dispatch_plan_status ⇒ Object
 
Class Method Details
.ransackable_associations(_auth_object = nil) ⇒ Object
      145 146 147 148 149 150 151 152 153 154 155 156  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 145 def self.ransackable_associations(_auth_object = nil) %w[ prepared_by transporter dispatch_plan_item unit dispatch_authorizations receipt_authorizations dispatch_transactions receipt_transactions ] end  | 
  
.ransackable_attributes(_auth_object = nil) ⇒ Object
      130 131 132 133 134 135 136 137 138 139 140 141 142 143  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 130 def self.ransackable_attributes(_auth_object = nil) %w[ commodity_status dispatch_plan_item_id dispatch_status driver_name driver_phone plate_no prepared_by_id quantity transporter_id unit_id ] end  | 
  
.search_commodity(batch_no) ⇒ Object
      110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 110 def self.search_commodity(batch_no) commodity = Commodity.find_by(batch_no: batch_no) dispatches = Dispatch.includes(:dispatch_transactions) .joins(:transporter) .where( dispatch_status: [APPROVED, STARTED] ) dispatches.map do |dispatch| { batch_no: batch_no, commodity_name: commodity.name, quantity: dispatch.quantity, unit: commodity.unit_abbreviation, location: dispatch.transporter.name, location_detail: "Plate No.: #{dispatch.plate_no}, Driver: #{dispatch.driver_name}", stack: "" } end end  | 
  
Instance Method Details
#all_authorizations_confirmed? ⇒ Boolean
      65 66 67 68 69 70  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 65 def statuses = .map(&:status).uniq return true if statuses.length == 1 && statuses[0] == Authorization::CONFIRMED false end  | 
  
#approve ⇒ Object
      45 46 47 48 49 50 51 52 53 54 55  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 45 def approve raise(StandardError, "Dispatch has to be in draft state.") unless dispatch_status == Dispatch::DRAFT # Check if dispatch has authorizations raise(StandardError, "Dispatch has no authorizations.") unless .count.positive? dispatch_total = UnitConversion.harmonized_total(, unit) self.dispatch_status = APPROVED self.quantity = dispatch_total save! end  | 
  
#destination ⇒ Object
      34 35 36  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 34 def destination dispatch_plan_item.destination.name end  | 
  
#receive ⇒ Object
      93 94 95 96 97 98  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 93 def receive raise(StandardError, "Dispatch is not started.") unless dispatch_status == Dispatch::STARTED self.dispatch_status = RECEIVED save! end  | 
  
#revert ⇒ Object
      57 58 59 60 61 62 63  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 57 def revert raise(StandardError, "Dispatch has to be in approved state.") unless dispatch_status == Dispatch::APPROVED self.dispatch_status = DRAFT self.quantity = 0 save! end  | 
  
#stack ⇒ Object
      100 101 102 103 104 105 106 107 108  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 100 def stack # check if all receipt transactions have been committed and change status # of dispatch to stacked. statuses = receipt_transactions.map(&:status).uniq return unless statuses.length == 1 && statuses[0] == Transaction::COMMITTED self.dispatch_status = STACKED save! end  | 
  
#start ⇒ Object
      72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 72 def start self.dispatch_status = STARTED save! # Check if destination is an FDP and create receipt authorization location = dispatch_plan_item.destination = User.find_by(first_name: "SYSTEM-USER") return unless location.location_type == Location::FDP store = location.fdp_store ReceiptAuthorization.create!( dispatch: self, store: store, quantity: quantity, unit: unit, received_quantity: 0, status: Authorization::AUTHORIZED, authorized_by: ) end  | 
  
#validate_dispatch_plan_status ⇒ Object
      38 39 40 41 42 43  | 
    
      # File 'app/models/cats/core/dispatch.rb', line 38 def validate_dispatch_plan_status return unless dispatch_plan_item status = dispatch_plan_item.dispatch_plan.status errors.add(:dispatch_plan, "should be approved first.") unless status == DispatchPlan::APPROVED end  |