From 316a7c2a954d2b3fa55e1eb945c101f6c9dcf9bf Mon Sep 17 00:00:00 2001 From: GotPPay Date: Wed, 15 Nov 2017 19:26:36 +0100 Subject: [PATCH 1/4] parts fix --- helix/constants/ebom_parts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/helix/constants/ebom_parts.py b/helix/constants/ebom_parts.py index ff608d9..f9f8ae7 100644 --- a/helix/constants/ebom_parts.py +++ b/helix/constants/ebom_parts.py @@ -209,6 +209,8 @@ def dependent_parts(module_type, system_type, is_delta): if system_type == SystemType.singleTilt and (module_type == ModuleType.Cell128 or module_type == ModuleType.PSeries): v1_1_inverter_links = 1 + + if is_delta: monitor_controller_480_v_={ monitor_power_plug: 1, -- 2.47.3 From 1e48903e21691622842dbd9d12b8b2de8ab1f55d Mon Sep 17 00:00:00 2001 From: GotPPay Date: Wed, 15 Nov 2017 19:39:45 +0100 Subject: [PATCH 2/4] . --- helix/constants/ebom_parts.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/helix/constants/ebom_parts.py b/helix/constants/ebom_parts.py index f9f8ae7..ff608d9 100644 --- a/helix/constants/ebom_parts.py +++ b/helix/constants/ebom_parts.py @@ -209,8 +209,6 @@ def dependent_parts(module_type, system_type, is_delta): if system_type == SystemType.singleTilt and (module_type == ModuleType.Cell128 or module_type == ModuleType.PSeries): v1_1_inverter_links = 1 - - if is_delta: monitor_controller_480_v_={ monitor_power_plug: 1, -- 2.47.3 From 662a506a1a0c27934c01df3b1b26e6c123b4a1f9 Mon Sep 17 00:00:00 2001 From: GotPPay Date: Wed, 15 Nov 2017 20:42:33 +0100 Subject: [PATCH 3/4] new tests for parts removal --- test/calculators/ebom_calculator_test.py | 50 ++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/calculators/ebom_calculator_test.py b/test/calculators/ebom_calculator_test.py index 271c3b4..bbbb156 100644 --- a/test/calculators/ebom_calculator_test.py +++ b/test/calculators/ebom_calculator_test.py @@ -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 = [ { -- 2.47.3 From d96ddabd618acf6608a99134b1c101d2e320b9b9 Mon Sep 17 00:00:00 2001 From: GotPPay Date: Tue, 21 Nov 2017 19:19:12 +0100 Subject: [PATCH 4/4] bug fix --- helix/calculators/bom_calculator.py | 6 +++--- helix/calculators/bom_helper.py | 10 ++++++++++ helix/calculators/ebom_calculator.py | 12 +++--------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/helix/calculators/bom_calculator.py b/helix/calculators/bom_calculator.py index 7102180..60a9df9 100644 --- a/helix/calculators/bom_calculator.py +++ b/helix/calculators/bom_calculator.py @@ -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 diff --git a/helix/calculators/bom_helper.py b/helix/calculators/bom_helper.py index e8c9539..fb99bb7 100644 --- a/helix/calculators/bom_helper.py +++ b/helix/calculators/bom_helper.py @@ -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 + diff --git a/helix/calculators/ebom_calculator.py b/helix/calculators/ebom_calculator.py index e9113af..9341c5a 100644 --- a/helix/calculators/ebom_calculator.py +++ b/helix/calculators/ebom_calculator.py @@ -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 -- 2.47.3