Class: Item::Materials::Checks::Membrane
- Inherits:
-
BaseService
- Object
- BaseService
- Item::Materials::Checks::Membrane
- Defined in:
- app/services/item/materials/checks/membrane.rb
Overview
Service object: membrane.
Defined Under Namespace
Classes: Result
Constant Summary collapse
- MIN_SQFT_DEFICIT =
Minimum sqft deficit.
1.0
Instance Method Summary collapse
-
#process(container:, options: {}) ⇒ Result
Status and any material alerts.
- #qualify?(container) ⇒ Boolean
Instance Method Details
#process(container:, options: {}) ⇒ Result
Returns status and any material alerts.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/services/item/materials/checks/membrane.rb', line 21 def process(container:, options: {}) container_rec_materials = container.get_recommended_materials() rec_mems = container_rec_materials.select { |rm| Item.sku_is_membrane?(rm['sku']) } return Result.new(status: :skipped) unless rec_mems.any? material_alerts = [] actual_mem_lines = container.line_items.select { |l| l.item.is_membrane? } actual_mem_sqft = actual_mem_lines.sum { |l| l.quantity * l.item.sqft } rec_mem_sqft = rec_mems.sum do |rm| (rm['qty'].to_i * Item.find_by(sku: rm['sku']).sqft) rescue StandardError 0.0 end needed_mem_sqft = rec_mem_sqft - actual_mem_sqft Rails.logger.debug { "#{container.class.name}:#{container.id}: get_membrane_material_alerts, needed_mem_sqft: #{needed_mem_sqft}" } if needed_mem_sqft > MIN_SQFT_DEFICIT # Calculate what mems to add based on needed_mem_sqft cable_pl = ProductLine.find_by(slug_ltree: ProductLineUrls::FLOOR_HEATING_TEMPZONE_CABLE) return unless cable_pl m_lines = HeatingElementProductLineOption.get_suggested_underlayments({ sqft: needed_mem_sqft, product_line_id: cable_pl.id, catalog_id: container.catalog.id, add_one_extra: false }) m_lines.each do |sku, line_hash| item = Item.find_by(sku: sku) = {}.merge() [:room] = container [:recommended_qty] = line_hash[:quantity] [:actual_qty] = 0 [:items] = [item] [:unmaskable] = true [:name] = "We recommend an additional #{needed_mem_sqft.round} sq.ft. of Prodeso membrane." material_alerts << Item::Materials::Alert.new() end end Result.new(status: :ok, alerts: material_alerts) end |
#qualify?(container) ⇒ Boolean
12 13 14 |
# File 'app/services/item/materials/checks/membrane.rb', line 12 def qualify?(container) container.get_recommended_materials.any? { |rm| Item.sku_is_membrane?(rm['sku']) } end |