Class: ElementPoleAssignment
Overview
== Schema Information
Table name: element_pole_assignments
Database name: primary
id :bigint not null, primary key
heating_element_number :integer not null
notes :string
pole_number :integer not null
relay_number :integer not null
created_at :datetime not null
updated_at :datetime not null
creator_id :integer
heating_element_item_id :integer not null
relay_item_id :integer not null
room_configuration_id :integer not null
updater_id :integer
Indexes
idx_unique_element_pole_assignment (relay_item_id,heating_element_item_id,relay_number,pole_number,heating_element_number) UNIQUE
index_element_pole_assignments_on_heating_element_item_id (heating_element_item_id)
Foreign Keys
fk_rails_... (heating_element_item_id => items.id)
fk_rails_... (relay_item_id => items.id)
fk_rails_... (room_configuration_id => room_configurations.id)
Constant Summary
Models::Auditable::ALWAYS_IGNORED
Constants included
from Schedulable
Schedulable::SIMPLE_FORM_OPTIONS
Instance Attribute Summary collapse
#creator, #updater
Class Method Summary
collapse
Instance Method Summary
collapse
#all_skipped_columns, #audit_reference_data, #should_not_save_version, #stamp_record
ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation
config
#after_commit
#publish_event
Instance Attribute Details
#heating_element_item_id ⇒ Object
48
|
# File 'app/models/element_pole_assignment.rb', line 48
validates :heating_element_item_id, uniqueness: { scope: %i[room_configuration_id relay_item_id relay_number pole_number heating_element_number], message: "cannot be assigned to the same pole multiple times" }
|
#heating_element_number ⇒ Object
47
|
# File 'app/models/element_pole_assignment.rb', line 47
validates :relay_number, :pole_number, :heating_element_number, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
#pole_number ⇒ Object
47
|
# File 'app/models/element_pole_assignment.rb', line 47
validates :relay_number, :pole_number, :heating_element_number, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
#relay_number ⇒ Object
47
|
# File 'app/models/element_pole_assignment.rb', line 47
validates :relay_number, :pole_number, :heating_element_number, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
Class Method Details
A relation of ElementPoleAssignments that are order default. Active Record Scope
52
|
# File 'app/models/element_pole_assignment.rb', line 52
scope :order_default, -> { order(:room_configuration_id, :heating_element_number, :pole_number, :relay_number) }
|
A relation of ElementPoleAssignments that are ordered. Active Record Scope
53
|
# File 'app/models/element_pole_assignment.rb', line 53
scope :ordered, -> { order_default }
|
Instance Method Details
#heating_element_combo ⇒ Object
81
82
83
|
# File 'app/models/element_pole_assignment.rb', line 81
def heating_element_combo
"#{heating_element_item_id}|#{heating_element_number}"
end
|
#heating_element_combo=(val) ⇒ Object
77
78
79
|
# File 'app/models/element_pole_assignment.rb', line 77
def heating_element_combo=(val)
self.heating_element_item_id, self.heating_element_number = val.presence&.split('|')
end
|
#heating_element_combo_select ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'app/models/element_pole_assignment.rb', line 102
def heating_element_combo_select
options = []
index = 0
heating_elements_grouped.each do |item, line_items|
(1..line_items.sum(&:quantity)).each do |_counter|
index += 1
options << ["#{item.sku} # #{index}", "#{item.id}|#{index}"]
end
end
options
end
|
#heating_element_item ⇒ Item
45
|
# File 'app/models/element_pole_assignment.rb', line 45
belongs_to :heating_element_item, class_name: 'Item'
|
#heating_elements_grouped ⇒ Object
115
116
117
|
# File 'app/models/element_pole_assignment.rb', line 115
def heating_elements_grouped
room_configuration.line_items.heating_elements.sort_for_plan.joins(:item).group_by(&:item)
end
|
#next ⇒ Object
73
74
75
|
# File 'app/models/element_pole_assignment.rb', line 73
def next
room_configuration.element_pole_assignments.order_default_at(self).next
end
|
#previous ⇒ Object
broadcasts_to ->(element_pole_assignment) { [element_pole_assignment.room_configuration_id, "element_pole_assignments"] },
partial: "/crm/room_configurations/element_pole_assignments/element_pole_assignment",
inserts_by: :append
69
70
71
|
# File 'app/models/element_pole_assignment.rb', line 69
def previous
room_configuration.element_pole_assignments.order_default_at(self).previous
end
|
#relay_combo_select ⇒ Object
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
# File 'app/models/element_pole_assignment.rb', line 123
def relay_combo_select
options = []
relay_grouped.each do |item, line_items|
index = 0
(1..line_items.sum(&:quantity)).each do |_counter|
index += 1
(1..item.num_poles).to_a.each do |pole_number|
label = "#{item.sku} # #{index} - Pole #{pole_number}"
if (assignments = room_configuration.element_pole_assignments.select { |epa| epa.relay_item_id == item.id && epa.relay_number == index && epa.pole_number == pole_number }).present?
label += " [Assigned to Element #{assignments.map(&:heating_element_number).join(',')}]"
end
value = "#{item.id}|#{index}|#{pole_number}"
options << [label, value]
end
end
end
options
end
|
#relay_grouped ⇒ Object
119
120
121
|
# File 'app/models/element_pole_assignment.rb', line 119
def relay_grouped
room_configuration.line_items.relay_panels.joins(:item).order(Item[:sku]).group_by(&:item)
end
|
#relay_identifier ⇒ Object
95
96
97
98
99
100
|
# File 'app/models/element_pole_assignment.rb', line 95
def relay_identifier
return unless relay_item_id && relay_number && pole_number
"#{relay_item.num_poles} PL ##{relay_number}"
end
|
#relay_item ⇒ Item
44
|
# File 'app/models/element_pole_assignment.rb', line 44
belongs_to :relay_item, class_name: 'Item'
|
#relay_pole_combo ⇒ Object
89
90
91
92
93
|
# File 'app/models/element_pole_assignment.rb', line 89
def relay_pole_combo
return unless relay_item_id && relay_number && pole_number
"#{relay_item_id}|#{relay_number}|#{pole_number}"
end
|
#relay_pole_combo=(val) ⇒ Object
85
86
87
|
# File 'app/models/element_pole_assignment.rb', line 85
def relay_pole_combo=(val)
self.relay_item_id, self.relay_number, self.pole_number = val.presence&.split('|')
end
|
#room_configuration ⇒ RoomConfiguration
43
|
# File 'app/models/element_pole_assignment.rb', line 43
belongs_to :room_configuration
|
#to_partial_path ⇒ Object
Partial lives under app/views/crm/element_pole_assignments/, not the
conventional app/views/element_pole_assignments/. Override so
render @element_pole_assignments and the turbo_stream broadcasts in
crm/element_pole_assignments/{create,update}.turbo_stream.erb resolve
correctly from any controller, not just Crm::ElementPoleAssignmentsController.
39
40
41
|
# File 'app/models/element_pole_assignment.rb', line 39
def to_partial_path
'crm/element_pole_assignments/element_pole_assignment'
end
|