Class: Door

Inherits:
ApplicationRecord show all
Includes:
Models::HeatLossable
Defined in:
app/models/door.rb

Overview

== Schema Information

Table name: doors
Database name: primary

id :integer not null, primary key
area :float
user_u_value :float
door_core_type_id :integer
door_frame_type_id :integer
door_insulation_type_id :integer
door_type_id :integer
exterior_wall_id :integer

Indexes

doors_door_core_type_id_idx (door_core_type_id)
doors_door_frame_type_id_idx (door_frame_type_id)
doors_door_insulation_type_id_idx (door_insulation_type_id)
doors_door_type_id_idx (door_type_id)
doors_exterior_wall_id_idx (exterior_wall_id)

Foreign Keys

doors_door_core_type_id_fk (door_core_type_id => door_core_types.id)
doors_door_frame_type_id_fk (door_frame_type_id => door_frame_types.id)
doors_door_insulation_type_id_fk (door_insulation_type_id => door_insulation_types.id)
doors_door_type_id_fk (door_type_id => door_types.id)
doors_exterior_wall_id_fk (exterior_wall_id => exterior_walls.id) ON DELETE => cascade

Constant Summary

Constants included from HeatLossableConstants

HeatLossableConstants::BTU_PER_HOUR_PER_WATT, HeatLossableConstants::HIGH_U_VALUE_THRESHOLD, HeatLossableConstants::HLC_PRIMARY_OK_THRESHOLD, HeatLossableConstants::INFILTRATION_AREA_FACTORS, HeatLossableConstants::INFILTRATION_FIREPLACE_FACTORS, HeatLossableConstants::INFILTRATION_SEALING_FACTORS, HeatLossableConstants::PIE_CHART_FLAG_COLORS, HeatLossableConstants::PIE_CHART_OK_COLORS

Instance Attribute Summary collapse

Belongs to collapse

Delegated Instance Attributes collapse

Instance Method Summary collapse

Methods included from Models::HeatLossable

#children_heat_loss_recursive, #get_children_heat_loss, #get_heat_loss, #get_self_and_children_heat_loss, #get_u_value, #heat_loss_children, #heat_loss_children_recursive, #insulation_type, #reset_room_last_heat_loss, #self_and_children_heat_loss_recursive

Methods inherited from ApplicationRecord

ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation

Methods included from Models::EventPublishable

#publish_event

Instance Attribute Details

#areaObject (readonly)



43
# File 'app/models/door.rb', line 43

validates :area, :numericality => { :less_than_or_equal_to => 9999.9, :greater_than => 0.0 }

Instance Method Details

#check_insulation_or_u_valueObject (protected)



71
72
73
74
75
76
# File 'app/models/door.rb', line 71

def check_insulation_or_u_value
  if self.user_u_value.blank? and (self.door_type.nil? or self.door_core_type.nil? or self.door_frame_type.nil? or self.door_insulation_type.nil?)
    errors.add(:door_type_id, ", core, and frame type required OR")
    errors.add(:user_u_value, "required")
  end
end

#check_sibling_areas_less_than_parentObject (protected)



65
66
67
68
69
# File 'app/models/door.rb', line 65

def check_sibling_areas_less_than_parent
  if self.area and (self.area + self.exterior_wall.windows.to_a.sum{|w| w.area} + self.exterior_wall.doors.to_a.reject{|d| d.id == (self.id || -1)}.sum{|d| d.area}) >= self.exterior_wall.area
    errors.add(:area, "plus areas of other windows and doors can't exceed exterior wall area")
  end
end

#door_core_typeDoorCoreType



37
# File 'app/models/door.rb', line 37

belongs_to :door_core_type, optional: true

#door_frame_typeDoorFrameType



38
# File 'app/models/door.rb', line 38

belongs_to :door_frame_type, optional: true

#door_insulation_typeDoorInsulationType



39
# File 'app/models/door.rb', line 39

belongs_to :door_insulation_type, optional: true

#door_typeDoorType

Returns:

See Also:



36
# File 'app/models/door.rb', line 36

belongs_to :door_type, optional: true

#exterior_wallExteriorWall



35
# File 'app/models/door.rb', line 35

belongs_to :exterior_wall, optional: true

#heat_loss_nameObject



53
54
55
# File 'app/models/door.rb', line 53

def heat_loss_name
  "Door: #{(self.exterior_wall.door_ids.index(self.id) + 1) rescue 'New'} (Wall #{(self.room_configuration.exterior_wall_ids.index(self.exterior_wall.id) + 1)})"
end

#nameObject



49
50
51
# File 'app/models/door.rb', line 49

def name
  "Door: #{(self.exterior_wall.door_ids.index(self.id) + 1) rescue 'New'}"
end

#room_configurationObject

Alias for Exterior_wall#room_configuration

Returns:

  • (Object)

    Exterior_wall#room_configuration

See Also:



47
# File 'app/models/door.rb', line 47

delegate :room_configuration, :to => :exterior_wall

#set_door_insulation_typeObject (protected)



59
60
61
62
63
# File 'app/models/door.rb', line 59

def set_door_insulation_type
  # puts "set_door_insulation_type: self.door_type_id: #{self.door_type_id} self.door_core_type_id: #{self.door_core_type_id} self.door_frame_type_id: #{self.door_frame_type_id}"
  self.door_insulation_type = DoorInsulationType.where(:door_type_id => self.door_type_id).where(:door_core_type_id => self.door_core_type_id).where(:door_frame_type_id => self.door_frame_type_id).first if (self.door_core_type_id.present? and self.door_frame_type_id.present?)
  # puts "set_door_insulation_type: self.door_insulation_type_id: #{self.door_insulation_type_id}"
end