4 Commits

Author SHA1 Message Date
GotPPay
d96ddabd61 bug fix 2017-11-27 20:49:51 +01:00
GotPPay
662a506a1a new tests for parts removal 2017-11-27 20:48:16 +01:00
GotPPay
1e48903e21 . 2017-11-27 20:48:16 +01:00
GotPPay
316a7c2a95 parts fix 2017-11-27 20:48:15 +01:00
4 changed files with 66 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
from numpy import array, ceil
from helix.calculators.bom_helper import add_parts_to_list, apply_package_size_rounding
from helix.calculators.bom_helper import add_parts_to_list, apply_package_size_rounding, is_inverter_delta
from helix.calculators.ebom_calculator import EbomCalculator
from helix.calculators.mechanical_bom_calculator import MechanicalBomCalculator
from helix.constants.parts import *
@@ -51,8 +51,8 @@ class BomCalculator(object):
column_count = sum(subarray.column_count for subarray in self.subarrays)
parts_list = MechanicalBomCalculator(self.values, self.panels, self.subarrays).mechanical_bom()
ebom_parts_list = EbomCalculator(self.values, ceil(row_count), ceil(column_count), parts_list.get(module)).compute_ebom()
add_parts_to_list(parts_list, ebom_parts_list)
if is_inverter_delta(self.values):
add_parts_to_list(parts_list, {rubber_foot: -1}, parts_list.get(rubber_foot))
apply_package_size_rounding(parts_list, package_sizes)
return parts_list

View File

@@ -2,6 +2,7 @@ from math import ceil
from helix.constants.panel_type import PanelType
from helix.constants.parts import *
from helix.constants.inverter_brand import InverterBrand
# This story askes for this special parts to be showed
# www.pivotaltracker.com/n/projects/1544689/stories/148016595
@@ -41,3 +42,12 @@ def get_panel_type_counts(panels):
panel_type_counts[panel.panel_type] += 1
return panel_type_counts
def is_inverter_delta(values):
try:
return (values.inverter_brands()[0]['inverter_brand_id']==InverterBrand.DELTA.value)
except IndexError :
#Some tests are calculating bom without providing inverter brand so inverter_brands is empty
#for those tests, inverter brand is irrelevant
return False

View File

@@ -1,12 +1,11 @@
from math import ceil
from helix.calculators.bom_helper import add_parts_to_list
from helix.calculators.bom_helper import add_parts_to_list, is_inverter_delta
from helix.constants import ebom_parts
from helix.constants.ebom_parts import *
from helix.constants.parts import wire_clip_large, cable_support, cable_support_lid, channel_nut, sunshade
from helix.constants.system_type import SystemType
from helix.constants.inverter_brand import InverterBrand
from helix.forms.ebom_form import InverterBrandForm
class EbomCalculator(object):
@@ -39,13 +38,8 @@ class EbomCalculator(object):
module_type = self.values.module_type()
system_type = self.values.system_type()
is_delta=None
try:
is_delta=(self.values.inverter_brands()[0]['inverter_brand_id']==InverterBrand.DELTA.value)
except IndexError :
#Some tests are calculating bom without providing inverter brand so inverter_brands is empty
#for those tests, inverter brand is irrelevant
is_delta=False
is_delta=is_inverter_delta(self.values)
print("IS DELTA : ",is_delta)
inverter_count = 0
total_ac_run_length = 0

View File

@@ -666,6 +666,56 @@ class EbomCalculatorTest(unittest.TestCase):
assert_dictionary_equal(self.subject.compute_ebom(), expected_output)
def test_computes_ebom_with_power_monitor_DELTA_brand(self):
self.user_values.inverter_brands.return_value = [{'inverter_brand_id':2}]
self.user_values.power_monitors.return_value = [{
'monitor_id': 'foo',
'power_source': ('Switch Gear/External', None)
}]
self.user_values.system_type.return_value = SystemType.singleTilt
self.user_values.module_type.return_value = ModuleType.Cell96
expected_output = {
monitor_power_plug: 1,
stump: 0,
cable_support: 0,
cable_support_lid: 0,
rear_skirt: 0,
monitor_controller_480_v:1,
}
assert_dictionary_equal(self.subject.compute_ebom(), expected_output)
def test_computes_ebom_with_power_monitor_SMA_brand(self):
self.user_values.inverter_brands.return_value = [{'inverter_brand_id':1}]
self.user_values.power_monitors.return_value = [{
'monitor_id': 'foo',
'power_source': ('Switch Gear/External', None)
}]
self.user_values.system_type.return_value = SystemType.singleTilt
self.user_values.module_type.return_value = ModuleType.Cell96
expected_output = {
monitor_power_plug: 1,
stump: 0,
cable_support: 0,
cable_support_lid: 0,
rear_skirt: 0,
monitor_controller_480_v:1,
flat_washer: 4,
channel_nut: 4,
hex_nut_three_eighths_16: 2,
front_legs: 1,
back_legs: 1,
inverter_link: 2,
inverter_rail: 1,
rubber_foot: 3,
hex_bolt_1_2: 9,
mounting_back_plate: 1,
}
assert_dictionary_equal(self.subject.compute_ebom(), expected_output)
def test_computes_ebom_with_aux_plugs_on_switchgear_on_pseries_single_tilt(self):
self.user_values.power_stations.return_value = [
{