\",\r\n// \"TekScrewCode\": \"TS1220N^TS1220NCS\",\r\n// \"TekScrewEndCode\": null,\r\n// \"Spans\": {\r\n// \"MaxInternalSpan\": 3400,\r\n// \"MaxEndSpan\": 2300,\r\n// \"MaxOverhang\": 250\r\n// }\r\n// },\r\n// }\r\n// }\r\n\r\nexport const testState = {\r\n design_types: [\"Flat\", \"Pitched\", \"Portal\"],\r\n Flat: {\r\n length_range: {\r\n min: 300,\r\n max: 20000,\r\n default: 6000,\r\n },\r\n projection_range: {\r\n min: 300,\r\n max: 10000,\r\n default: 3000,\r\n },\r\n height_range: {\r\n min: 2100,\r\n max: 3600,\r\n default: 2400,\r\n },\r\n pitch_range: {\r\n min: 1,\r\n max: 3600,\r\n default: 1,\r\n },\r\n overhang_left_range: {\r\n min: 0,\r\n max: 500,\r\n default: 0,\r\n },\r\n overhang_right_range: {\r\n min: 0,\r\n max: 500,\r\n default: 0,\r\n },\r\n overhang_front_range: {\r\n min: 0,\r\n max: \"MAX_SHEET_OVERHANG\",\r\n default: 0,\r\n },\r\n overhang_back_range: {\r\n min: 0,\r\n max: \"MAX_SHEET_OVERHANG\",\r\n default: 0,\r\n },\r\n overhang_cutout_range: {\r\n min: 0,\r\n max: \"MAX_SHEET_OVERHANG\",\r\n default: 0,\r\n },\r\n roofsheet_groups: [\"Cent 310 Deck\", \"Corrugated\", \"Hi-Rib\", \"TL5\", \"Polycarbonate\", \"Solarspan\"],\r\n roofsheet_default: \"Cent 310 Deck\",\r\n gutter_options: [\r\n \"Fascia Gutter\",\r\n \"D Gutter\",\r\n \"OG Gutter\",\r\n \"Hi Front Quad Gutter\",\r\n \"Quad Gutter\",\r\n \"Hi Ten OG Gutter (QOG)\",\r\n ],\r\n gutter_default: \"Hi Front Quad Gutter\",\r\n downpipe_options: [\r\n \"65mm Square Downpipe\",\r\n \"75mm Round Downpipe (PVC)\",\r\n \"90mm Round Downpipe (PVC)\",\r\n \"100mm x 50mm Square Downpipe\",\r\n \"100mm x 75mm Square Downpipe\",\r\n ],\r\n downpipe_default: \"65mm Square Downpipe\",\r\n post_options: [\"Box\", \"RHS/SHS\"],\r\n post_type_default: \"Box\",\r\n post_section_default: \"656508\",\r\n beam_purlin_options: [\"Box\", \"RHS/SHS\"],\r\n beam_purlin_type_default: \"Box\",\r\n beam_purlin_section_default: \"1586510\",\r\n beam_rafter_options: [\"Rafter Box\", \"RHS/SHS\"],\r\n beam_rafter_type_default: \"Box\",\r\n beam_rafter_section_default: \"1586510\",\r\n beam_fascia_options: [\"Fascia Box\", \"RHS/SHS\"],\r\n beam_fascia_type_default: \"Box\",\r\n beam_fascia_section_default: \"1586510\",\r\n allow_omit_side_beams: 1,\r\n allow_slats: 1,\r\n post_must_be_shs_in_freestanding: 1,\r\n },\r\n Pitched: {\r\n length_range: {\r\n min: 300,\r\n max: 8000,\r\n },\r\n projection_range: {\r\n min: 300,\r\n max: 10000,\r\n },\r\n height_range: {\r\n min: 2100,\r\n max: 3600,\r\n },\r\n overhang_front_range: {\r\n min: 0,\r\n max: 500,\r\n },\r\n overhang_back_range: {\r\n min: 0,\r\n max: 500,\r\n },\r\n roofsheet_groups: [\"Cent 310 Deck\", \"Corrugated\", \"Hi-Rib\", \"TL5\", \"Polycarbonate\", \"Solarspan\"],\r\n gutter_options: [\r\n \"Fascia Gutter\",\r\n \"D Gutter\",\r\n \"OG Gutter\",\r\n \"Hi Front Quad Gutter\",\r\n \"Quad Gutter\",\r\n \"Hi Ten OG Gutter\",\r\n ],\r\n downpipe_options: [\r\n \"65mm Square Downpipe\",\r\n \"75mm Round Downpipe (PVC)\",\r\n \"90mm Round Downpipe (PVC)\",\r\n \"100mm x 50mm Square Downpipe\",\r\n \"100mm x 75mm Square Downpipe\",\r\n ],\r\n post_options: [\"Box\", \"RHS/SHS\"],\r\n beam_purlin_options: [\"Box\", \"RHS/SHS\"],\r\n beam_rafter_options: [\"Rafter Box\", \"RHS/SHS\"],\r\n beam_fascia_options: [\"Fascia Box\", \"RHS/SHS\"],\r\n beam_pitching_options: [\"Fascia Box\", \"RHS/SHS\"],\r\n infill_options: [\r\n \"None\",\r\n \"Lattice Smooth Diamond\",\r\n \"Lattice Smooth Square\",\r\n \"Plain Smooth\",\r\n \"Plain Stucco\",\r\n \"Acylic Flat\",\r\n \"Ampelite Solasafe Polycarbonate Corrugated\",\r\n \"Ampelite Solasafe Polycarbonate Greca\",\r\n \"Ampelite Solasafe Polycarbonate TL5\",\r\n \"Polycarbonate Ampelite Hr1 Corrugated\",\r\n \"Polycarbonate Ampelite Hr1 Greca\",\r\n \"Polycarbonate M-CLAD 0.8mm\",\r\n \"Corrugated - C/Bond\",\r\n \"Corrugated - Galv\",\r\n \"Corrugated - Zinc\",\r\n \"Corrugated - C/Bond D/S Gloss\",\r\n \"Corrugated - C/Bond 0.48\",\r\n \"M-CLAD 0.42\",\r\n \"M-CLAD 0.48\",\r\n \"Twin Wall 1050\",\r\n ],\r\n allow_slats: 1,\r\n },\r\n roofsheet_types: {\r\n \"Cent 310 Deck\": {\r\n name: \"Cent 310 Deck\",\r\n subtypes: {\r\n \"Colorbond 0.42\": {\r\n roofsheet_id: \"Cent 310 Deck\",\r\n colour_array: \"Cent 310 Deck\",\r\n },\r\n },\r\n default_subtype: \"Colorbond 0.42\",\r\n default_colour: \"Classic Cream\",\r\n thumbnail:\r\n \"data:image/png;base64,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\",\r\n texture_filename: \"ZMM_CDECK.PNG\",\r\n texture_normal_filename: \"ZMM_CDECK_NORMAL.PNG\",\r\n min_pitch: 1,\r\n },\r\n \"Hi-Rib\": {\r\n name: \"Hi-Rib\",\r\n subtypes: {\r\n \"Alsynite Ultra 8oz\": {\r\n roofsheet_id: \"Hirib Alsynite Ultra 8oz\",\r\n colour_array_index: 37,\r\n },\r\n \"Colorbond 0.42 (No Foot Traffic)\": {\r\n roofsheet_id: \"Hirib 0.42 G550 - C/Bond (No Foot Traffic)\",\r\n colour_array_index: 37,\r\n },\r\n \"Colorbond 0.42 (Non-Trafficable)\": {\r\n roofsheet_id: \"Hirib 0.42 G550 - C/Bond (Non-Trafficable)\",\r\n colour_array_index: 37,\r\n },\r\n },\r\n default_subtype: \"Colorbond 0.42 (No Foot Traffic)\",\r\n default_colour: \"Classic Cream\",\r\n thumbnail:\r\n \"data:image/png;base64,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\",\r\n texture_filename: \"ZMM_HIDECK.PNG\",\r\n texture_normal_filename: \"ZMM_HIDECK_NORMAL.PNG\",\r\n min_pitch: 1,\r\n },\r\n },\r\n gutter_types: {\r\n \"Fascia Gutter\": {\r\n name: \"Fascia Gutter\",\r\n colour_array: \"Colorbond & Zincalume\",\r\n easy_fix_allowed: 0,\r\n },\r\n \"D Gutter\": {\r\n name: \"D Gutter\",\r\n colour_array: \"Colorbond & Zincalume\",\r\n easy_fix_allowed: 0,\r\n },\r\n \"OG Gutter\": {\r\n name: \"OG Gutter\",\r\n colour_array: \"Colorbond & Zincalume\",\r\n easy_fix_allowed: 1,\r\n easy_fix_preferred: 1,\r\n },\r\n \"Hi Front Quad Gutter\": {\r\n name: \"Hi Front Quad Gutter\",\r\n colour_array: \"Colorbond & Zincalume\",\r\n easy_fix_allowed: 1,\r\n easy_fix_preferred: 1,\r\n },\r\n \"Quad Gutter\": {\r\n name: \"Quad Gutter\",\r\n colour_array: \"Colorbond & Zincalume\",\r\n easy_fix_allowed: 1,\r\n easy_fix_preferred: 1,\r\n },\r\n \"Hi Ten OG Gutter\": {\r\n name: \"Hi Ten OG Gutter\",\r\n colour_array: \"Colorbond & Zincalume\",\r\n easy_fix_allowed: 0,\r\n },\r\n },\r\n colour_arrays: {\r\n \"Cent 310 Deck\": [\r\n \"Classic Cream/Classic Cream\",\r\n \"Classic Cream/Mangrove\",\r\n \"Classic Cream/Monument\",\r\n \"Classic Cream/Woodland Grey\",\r\n \"Paperbark/Gully\",\r\n \"Paperbark/Paperbark\",\r\n \"Paperbark/Woodland Grey\",\r\n \"Surfmist/Monument\",\r\n \"Surfmist/Surfmist\",\r\n ],\r\n Colorbond: [\"Classic Cream\", \"Basalt\", \"...\"],\r\n ColorbondPlusZinc: [\"Classic Cream\", \"Basalt\", \"...\", \"Zincalume\"],\r\n },\r\n validationSchema: validationSchema,\r\n};\r\n\r\nexport const pricing_data_template = {\r\n overall_markup: 1.17432,\r\n area_pricing: {\r\n 0: 1.17432,\r\n },\r\n fielders_material_markup_factor: 2.31,\r\n fielders_material_markup_factor_type: \"Dist 0\",\r\n fielders_material_discount_factor: 0.0,\r\n fielders_material_markup_overall: 2.31,\r\n fielders_pricing_factors: {\r\n FIELDERS: 1.0,\r\n CURVED: 1.0,\r\n DECK: 0.78,\r\n \"CARPORT HIP\": 0.89,\r\n \"PITCHED FREESPAN\": 1.0,\r\n RHS: 0.75,\r\n FLAT: 1.0,\r\n CDECKPOLYCARB: 0.7155,\r\n POLYCARB: 1.06,\r\n SOLARSPAN: 1.0,\r\n SLATS: 1.7,\r\n PITCHED: 1.0,\r\n \"BBQ SHELTER\": 1.06,\r\n \"PITCHED FREESTANDING\": 1.0,\r\n \"FLAT FREESTANDING\": 1.0,\r\n \"CARPORT GAZEBO\": 1.0,\r\n ALL: 1.17432,\r\n \"CARPORT T-JUNCTION\": 1.0,\r\n \"GALV FLAT\": 0.6658,\r\n \"CARPORT JUNCTION\": 1.0,\r\n \"CARPORT FREESTANDING\": 0.99,\r\n \"CARPORT FREESPAN\": 1.09,\r\n \"CARPORT POLYCARBONATE\": 0.96,\r\n INFILLS: 1.0,\r\n \"CARPORT DUTCH GABLE\": 0.89,\r\n \"PITCHED SLIMLINE\": 1.0,\r\n \"FLAT POLYCARBONATE\": 1.0,\r\n FREESTANDING: 1.0,\r\n \"PITCHED POLYCARBONATE\": 1.0,\r\n HARDWARE: 1.09,\r\n SWAGE: 0.85,\r\n BUYINS: 0.5,\r\n \"CANTILEVER ROOF\": 1.03,\r\n },\r\n promotion_Factor: 1.0,\r\n};\r\n\r\nexport const fielders_cust_types = [\r\n { id: \"1\", name: \"Cost\", factor: \"1\", factor_carport: \"1\" },\r\n { id: \"2\", name: \"Dist 0\", factor: \"2.31\", factor_carport: \"2.31\" },\r\n { id: \"3\", name: \"Dist 0.125\", factor: \"2.40\", factor_carport: \"2.40\" },\r\n { id: \"4\", name: \"Dist 0.25\", factor: \"2.47\", factor_carport: \"2.47\" },\r\n { id: \"5\", name: \"Dist 0.5\", factor: \"2.60\", factor_carport: \"2.60\" },\r\n { id: \"6\", name: \"Dist 1\", factor: \"2.68\", factor_carport: \"2.68\" },\r\n { id: \"7\", name: \"Dist 1.5\", factor: \"3.00\", factor_carport: \"3.00\" },\r\n { id: \"8\", name: \"Dist 2\", factor: \"3.16\", factor_carport: \"3.16\" },\r\n { id: \"9\", name: \"Dist 3\", factor: \"3.20\", factor_carport: \"3.20\" },\r\n { id: \"10\", name: \"Trade\", factor: \"3.63\", factor_carport: \"3.44\" },\r\n { id: \"11\", name: \"Retail\", factor: \"4.05\", factor_carport: \"4.05\" },\r\n];\r\n\r\nexport const special_factors_default = [\r\n {\r\n id: \"1\",\r\n name: \"CARPORT FREESTANDING\",\r\n code: \"cPfs\",\r\n factor: \"0.96\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.99\",\r\n VIC_factors: \"0.96\",\r\n NSW_factors: \"0.96\",\r\n QLD_factors: \"0.96\",\r\n WA_factors: \"0.96\",\r\n TAS_factors: \"0.96\",\r\n NT_factors: \"0.97\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"2\",\r\n name: \"CARPORT FREESPAN\",\r\n code: \"cPfr\",\r\n factor: \"1.09\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1.09\",\r\n VIC_factors: \"1.09\",\r\n NSW_factors: \"1.09\",\r\n QLD_factors: \"1.09\",\r\n WA_factors: \"1.09\",\r\n TAS_factors: \"1.09\",\r\n NT_factors: \"1.09\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"3\",\r\n name: \"CARPORT POLYCARBONATE\",\r\n code: \"cPpo\",\r\n factor: \"0.96\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.96\",\r\n VIC_factors: \"0.96\",\r\n NSW_factors: \"0.96\",\r\n QLD_factors: \"0.96\",\r\n WA_factors: \"0.96\",\r\n TAS_factors: \"0.96\",\r\n NT_factors: \"0.96\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"4\",\r\n name: \"CARPORT HIP\",\r\n code: \"cPhi\",\r\n factor: \"0.88\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.89\",\r\n VIC_factors: \"0.88\",\r\n NSW_factors: \"0.88\",\r\n QLD_factors: \"0.88\",\r\n WA_factors: \"0.88\",\r\n TAS_factors: \"0.88\",\r\n NT_factors: \"0.88\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"5\",\r\n name: \"CARPORT DUTCH GABLE\",\r\n code: \"cPdu\",\r\n factor: \"0.88\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.89\",\r\n VIC_factors: \"0.88\",\r\n NSW_factors: \"0.88\",\r\n QLD_factors: \"0.88\",\r\n WA_factors: \"0.88\",\r\n TAS_factors: \"0.88\",\r\n NT_factors: \"0.88\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"6\",\r\n name: \"CARPORT GAZEBO\",\r\n code: \"cPga\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"7\",\r\n name: \"CARPORT JUNCTION\",\r\n code: \"cPju\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"8\",\r\n name: \"CARPORT T-JUNCTION\",\r\n code: \"cPtj\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"9\",\r\n name: \"GALV FLAT\",\r\n code: \"verGal\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"0.6658\",\r\n SA_factors: \"0.6658\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"10\",\r\n name: \"FLAT\",\r\n code: \"verFlt\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"11\",\r\n name: \"PITCHED\",\r\n code: \"verPit\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"12\",\r\n name: \"MATERIALS - FIELDERS\",\r\n code: \"priFIE\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"13\",\r\n name: \"MATERIALS - RHS\",\r\n code: \"priRHS\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.75\",\r\n VIC_factors: \"0.75\",\r\n NSW_factors: \"0.75\",\r\n QLD_factors: \"0.75\",\r\n WA_factors: \"0.75\",\r\n TAS_factors: \"0.75\",\r\n NT_factors: \"0.75\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"14\",\r\n name: \"MATERIALS - SWAGE\",\r\n code: \"priSWA\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.85\",\r\n VIC_factors: \"0.85\",\r\n NSW_factors: \"0.85\",\r\n QLD_factors: \"0.85\",\r\n WA_factors: \"0.85\",\r\n TAS_factors: \"0.85\",\r\n NT_factors: \"0.85\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"15\",\r\n name: \"MATERIALS - SLAT\",\r\n code: \"priSLA\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1.7\",\r\n VIC_factors: \"1.75\",\r\n NSW_factors: \"1.65\",\r\n QLD_factors: \"1.75\",\r\n WA_factors: \"1.75\",\r\n TAS_factors: \"1.75\",\r\n NT_factors: \"1.75\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"16\",\r\n name: \"MATERIALS - POLYCARBONATE\",\r\n code: \"priPOL\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1.06\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"17\",\r\n name: \"MATERIALS - C-Dek 310 POLYCARBONATE\",\r\n code: \"priCPOL\",\r\n factor: \"0.675\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.7155\",\r\n VIC_factors: \"0.675\",\r\n NSW_factors: \"0.675\",\r\n QLD_factors: \"0.675\",\r\n WA_factors: \"0.675\",\r\n TAS_factors: \"0.675\",\r\n NT_factors: \"0.675\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"18\",\r\n name: \"MATERIALS - INFILL\",\r\n code: \"priINF\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"19\",\r\n name: \"MATERIALS - SOLARSPAN\",\r\n code: \"priSSP\",\r\n factor: \"0.65\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"0.65\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"20\",\r\n name: \"MATERIALS - HARDWARE\",\r\n code: \"priHW\",\r\n factor: \"1.09\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1.09\",\r\n VIC_factors: \"1.09\",\r\n NSW_factors: \"1.09\",\r\n QLD_factors: \"1.09\",\r\n WA_factors: \"1.09\",\r\n TAS_factors: \"1.09\",\r\n NT_factors: \"1.09\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"21\",\r\n name: \"MATERIALS - OTHER BUY-INS\",\r\n code: \"priBUY\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.5\",\r\n VIC_factors: \"0.5\",\r\n NSW_factors: \"0.5\",\r\n QLD_factors: \"0.5\",\r\n WA_factors: \"0.5\",\r\n TAS_factors: \"0.5\",\r\n NT_factors: \"0.5\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"22\",\r\n name: \"OVER ALL MARKUP\",\r\n code: \"priAll\",\r\n factor: \"1.054\",\r\n applies_to: \"\",\r\n test_factor: \"1.17432\",\r\n SA_factors: \"1.17432\",\r\n VIC_factors: \"1.17432\",\r\n NSW_factors: \"1.1219\",\r\n QLD_factors: \"1.1219\",\r\n WA_factors: \"1.2897\",\r\n TAS_factors: \"1.17432\",\r\n NT_factors: \"1.17432\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"23\",\r\n name: \"TIMEDROP FEE ($)\",\r\n code: \"priTD\",\r\n factor: \"40\",\r\n applies_to: \"\",\r\n test_factor: \"40\",\r\n SA_factors: \"40\",\r\n VIC_factors: \"40\",\r\n NSW_factors: \"250\",\r\n QLD_factors: \"40\",\r\n WA_factors: \"40\",\r\n TAS_factors: \"40\",\r\n NT_factors: \"40\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"25\",\r\n name: \"CANTILEVER ROOF\",\r\n code: \"cANT\",\r\n factor: \"1.06\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1.03\",\r\n VIC_factors: \"1.06\",\r\n NSW_factors: \"1.05\",\r\n QLD_factors: \"1.06\",\r\n WA_factors: \"1.06\",\r\n TAS_factors: \"1.06\",\r\n NT_factors: \"1.06\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"26\",\r\n name: \"BBQ SHELTER\",\r\n code: \"bBQ\",\r\n factor: \"1.06\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1.06\",\r\n VIC_factors: \"1.06\",\r\n NSW_factors: \"1.06\",\r\n QLD_factors: \"1.06\",\r\n WA_factors: \"1.06\",\r\n TAS_factors: \"1.06\",\r\n NT_factors: \"1.06\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"27\",\r\n name: \"DECK\",\r\n code: \"dEK\",\r\n factor: \"0.8\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"0.78\",\r\n VIC_factors: \"0.8\",\r\n NSW_factors: \"0.79\",\r\n QLD_factors: \"0.8\",\r\n WA_factors: \"0.8\",\r\n TAS_factors: \"0.8\",\r\n NT_factors: \"0.8\",\r\n state_filter: \"\",\r\n },\r\n {\r\n id: \"28\",\r\n name: \"CARPORT FREESPAN - SAQ\",\r\n code: \"cPfr\",\r\n factor: \"1\",\r\n applies_to: \"XAPCAVJU\",\r\n test_factor: \"1.015\",\r\n SA_factors: \"1.015\",\r\n VIC_factors: \"1.005\",\r\n NSW_factors: \"1.015\",\r\n QLD_factors: \"1.015\",\r\n WA_factors: \"1.015\",\r\n TAS_factors: \"1.015\",\r\n NT_factors: \"1.015\",\r\n state_filter: \"SA\",\r\n },\r\n {\r\n id: \"30\",\r\n name: \"CARPORT DUTCH GABLE - SAQ\",\r\n code: \"cPdu\",\r\n factor: \"1\",\r\n applies_to: \"XAPCAVJU\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"SA\",\r\n },\r\n {\r\n id: \"31\",\r\n name: \"CARPORT HIP - SAQ\",\r\n code: \"cPhi\",\r\n factor: \"1\",\r\n applies_to: \"XAPCAVJU\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"SA\",\r\n },\r\n {\r\n id: \"33\",\r\n name: \"CURVED\",\r\n code: \"verCur\",\r\n factor: \"1\",\r\n applies_to: \"\",\r\n test_factor: \"1\",\r\n SA_factors: \"1\",\r\n VIC_factors: \"1\",\r\n NSW_factors: \"1\",\r\n QLD_factors: \"1\",\r\n WA_factors: \"1\",\r\n TAS_factors: \"1\",\r\n NT_factors: \"1\",\r\n state_filter: \"\",\r\n },\r\n];\r\n","/* eslint-disable jsx-a11y/alt-text */\r\nimport React, { useState, useEffect, useRef } from \"react\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport MenuIcon from \"@material-ui/icons/Menu\";\r\nimport Menu from \"@material-ui/core/Menu\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Switch from \"@material-ui/core/Switch\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport { Box, Button } from \"@mui/material\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogContentText from \"@mui/material/DialogContentText\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport { QRCodeSVG } from \"qrcode.react\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n backgroundColor: \"#778899\",\r\n color: \"white\",\r\n padding: \"2px\",\r\n margin: \"5px\",\r\n marginTop: \"9px\",\r\n textAlign: \"center\",\r\n font: '12pt \"Futura\"',\r\n boxShadow: \"0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2)\",\r\n },\r\n business_logo: {\r\n marginTop: \"9px\",\r\n backgroundColor: \"white\",\r\n height: \"14mm\",\r\n objectFit: \"contain\",\r\n },\r\n context_menu_button: {\r\n padding: \"0px\",\r\n marginTop: \"-3px\",\r\n marginBottom: \"-3px\",\r\n color: \"white\",\r\n },\r\n svg_layout: {\r\n height: \"70mm\",\r\n objectFit: \"contain\",\r\n backgroundSize: \"contain\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"50% 50%\",\r\n transformOrigin: \"50% 50%\",\r\n transition: \"all .2s ease-in-out\",\r\n },\r\n svg_layout2: {\r\n height: \"130mm\",\r\n objectFit: \"contain\",\r\n backgroundSize: \"contain\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"50% 50%\",\r\n transformOrigin: \"50% 50%\",\r\n transition: \"all .2s ease-in-out\",\r\n },\r\n business_name: {\r\n marginTop: \"9px\",\r\n width: \"100%\",\r\n font: '19pt \"Futura\"',\r\n fontWeight: \"bolder\",\r\n marginBottom: \"5px\",\r\n },\r\n business_details: {\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexDirection: \"column\",\r\n display: \"flex\",\r\n flex: 1,\r\n backgroundColor: \"#f1f1f1\",\r\n transition: \"background-color 0.3s ease\",\r\n borderRadius: \"7px\",\r\n cursor: \"pointer\",\r\n },\r\n flex: {\r\n display: \"flex\",\r\n },\r\n flex_row: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-evenly\",\r\n },\r\n row_header: {\r\n paddingLeft: \"20px\",\r\n whiteSpace: \"nowrap\",\r\n flex: \"1\",\r\n },\r\n pricing_input: {\r\n backgroundColor: \"transparent\",\r\n border: \"1px dotted #cecece\",\r\n borderRadius: \"0\",\r\n outline: \"none\",\r\n width: \"80px\",\r\n padding: \"0\",\r\n boxSizing: \"content-box\",\r\n transition: \"all 0.3s\",\r\n textAlign: \"right\",\r\n boxShadow: \"none !important\",\r\n lineHeight: \"normal\",\r\n height: \"1rem\",\r\n fontSize: \"10pt\",\r\n marginRight: \"10px\",\r\n },\r\n not_editable: {\r\n border: \"none\",\r\n color: \"darkgrey\",\r\n },\r\n pricing_SUBTOTAL: {\r\n color: \"white\",\r\n fontSize: \"12pt\",\r\n width: \"80px\",\r\n fontWeight: \"600\",\r\n border: \"none\",\r\n },\r\n pricing_TOTAL: {\r\n color: \"white\",\r\n fontSize: \"14pt\",\r\n width: \"100px\",\r\n marginTop: \"2px\",\r\n border: \"none\",\r\n },\r\n extra_item_text: {\r\n border: \"none\",\r\n outline: \"none\",\r\n padding: \"0\",\r\n boxSizing: \"content-box\",\r\n transition: \"all 0.3s\",\r\n borderBottom: \"none !important\",\r\n boxShadow: \"none !important\",\r\n lineHeight: \"normal\",\r\n paddingRight: \"20px\",\r\n flex: \"1\",\r\n font: '8pt \"Futura\"',\r\n fontWeight: \"normal\",\r\n },\r\n pay_input: {\r\n border: \"none\",\r\n outline: \"none\",\r\n padding: \"0\",\r\n boxSizing: \"content-box\",\r\n transition: \"all 0.3s\",\r\n borderBottom: \"none !important\",\r\n boxShadow: \"none !important\",\r\n lineHeight: \"normal\",\r\n flex: \"1\",\r\n font: '8pt \"Futura\"',\r\n fontWeight: \"normal\",\r\n textAlign: \"center\",\r\n width: \"60px\",\r\n },\r\n pay_section: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n },\r\n pay_header: {\r\n font: '8pt \"Futura\"',\r\n fontWeight: \"bolder\",\r\n padding: \"0px\",\r\n textAlign: \"center\",\r\n },\r\n acceptance: {\r\n fontSize: \"10pt\",\r\n padding: \"0px 10px\",\r\n fontWeight: \"500\",\r\n },\r\n sign: {\r\n height: \"60px\",\r\n background: \"#f0f0f0\",\r\n },\r\n layout: {\r\n width: \"100%\",\r\n height: \"70mm\",\r\n minHeight: \"70mm\",\r\n backgroundSize: \"contain\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"50% 50%\",\r\n transition: \"all .2s ease-in-out\",\r\n zIndex: \"-99\",\r\n },\r\n threedlayout: {\r\n width: \"100%\",\r\n backgroundImage: \"url(localhost/)\",\r\n backgroundSize: \"cover\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: \"50% 50%\",\r\n border: \"1px dotted #CCCCCC\",\r\n height: \"40mm\",\r\n },\r\n linky: {\r\n color: \"blue\",\r\n \"&:hover\": {\r\n color: \"#8080ff\",\r\n textDecoration: \"underline\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n pricing_notes: {\r\n fontSize: \"0.6rem\",\r\n textAlign: \"right\",\r\n marginBottom: \"4px\",\r\n },\r\n colour_panel: {\r\n fontSize: \"0.8rem\",\r\n padding: \"3px\",\r\n margin: \"1px\",\r\n textAlign: \"center\",\r\n borderRadius: \"3px\",\r\n fontWeight: \"600\",\r\n },\r\n notes: {\r\n border: \"1px dotted darkgrey\",\r\n padding: \"0px 10px\",\r\n flex: \"1\",\r\n font: '9pt \"Open Sans\"',\r\n resize: \"none\",\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n maxWidth: \"100%\",\r\n maxHeight: \"100%\",\r\n overflow: \"hidden\",\r\n },\r\n notes_display: {\r\n border: \"none\",\r\n margin: \"10px\",\r\n flex: \"1\",\r\n font: '9pt \"Open Sans\"',\r\n whiteSpace: \"pre-wrap\",\r\n },\r\n tAndCsH4Style: {\r\n paddingLeft: \"5px\",\r\n backgroundColor: \"rgb(59, 100, 171)\",\r\n fontSize: \"14px\",\r\n color: \"white\",\r\n textTransform: \"uppercase\",\r\n margin: \"30px 0 20px\",\r\n fontFamily: '\"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif',\r\n fontWeight: 200,\r\n textAlign: \"left\",\r\n width: \"100%\",\r\n },\r\n tAndCsClauseText: {\r\n margin: \"0px 0px 5px 0px\",\r\n fontSize: \"9pt\",\r\n fontFamily: \"'Open Sans', sans-serif\",\r\n },\r\n tAndCsClause: {\r\n marginBottom: \"15px\",\r\n padding: \"0px 5px\",\r\n },\r\n tAndCsSubclause: {\r\n margin: \"0px 0px 5px 15px\",\r\n },\r\n tAndCsH1Style: {\r\n display: \"block\",\r\n margin: \"16px 0px\",\r\n fontFamily: \"sans-serif\",\r\n fontSize: \"24px\",\r\n fontWeight: \"200\",\r\n textAlign: \"center\",\r\n },\r\n tAndCsIntroText: {\r\n padding: \"0px 5px\",\r\n fontSize: \"9pt\",\r\n fontFamily: \"'Open Sans', sans-serif\",\r\n },\r\n tAndCsDate: {\r\n margin: \"20px 0px 5px 0px\",\r\n fontSize: \"9pt\",\r\n fontFamily: \"'Open Sans', sans-serif\",\r\n },\r\n qrContainer: {\r\n display: \"flex\",\r\n paddingTop: \"5px\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n },\r\n qrSVG: {\r\n flexShrink: \"0\",\r\n },\r\n qrURL: {\r\n width: \"160px\",\r\n wordWrap: \"break-word\",\r\n },\r\n}));\r\n\r\nconst headerStyles = makeStyles((theme) => ({\r\n header: {\r\n color: \"white\",\r\n backgroundColor: \"white\",\r\n display: \"flex\",\r\n font: '12pt \"Futura\"',\r\n zIndex: \"10\",\r\n },\r\n header_logo: {\r\n flex: \"4\",\r\n textAlign: \"center\",\r\n backgroundColor: \"white\",\r\n padding: \"0px 0px 0px 10px\",\r\n },\r\n logo: {\r\n height: \"14mm\",\r\n },\r\n header_left: {\r\n fontSize: \"16pt\",\r\n fontWeight: \"bolder\",\r\n padding: \"20px 20px 10px 10px\",\r\n flex: \"16\",\r\n lineHeight: \"1.1rem\",\r\n },\r\n quote_number: {\r\n fontSize: \"12pt\",\r\n },\r\n header_right: {\r\n fontSize: \"8pt\",\r\n textAlign: \"right\",\r\n padding: \"5px 4px 0px 0px\",\r\n flex: \"6\",\r\n },\r\n section_header: {\r\n backgroundColor: \"#778899\",\r\n color: \"white\",\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n marginBottom: \"5px\",\r\n textAlign: \"center\",\r\n font: '12pt \"Futura\"',\r\n },\r\n}));\r\n\r\nfunction Header(props) {\r\n const classes = headerStyles();\r\n const { manufacturer, title } = props;\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {title} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n >\r\n );\r\n}\r\n\r\nconst footerStyles = makeStyles((theme) => ({\r\n text_and_label_item: {\r\n lineHeight: \"1.0rem\",\r\n marginLeft: \"5px\",\r\n marginRight: \"5px\",\r\n },\r\n section_row: {\r\n marginTop: \"5px\",\r\n display: \"flex\",\r\n flex: \"0 0\",\r\n },\r\n footer_text: {\r\n color: \"grey\",\r\n textAlign: \"start\",\r\n font: '10pt \"Futura\"',\r\n },\r\n footer_page_numbers: {\r\n color: \"grey\",\r\n textAlign: \"end\",\r\n font: '10pt \"Futura\"',\r\n },\r\n}));\r\n\r\nfunction Footer(props) {\r\n const classes = footerStyles();\r\n const { footer_text, page_number } = props;\r\n\r\n return (\r\n <>\r\n \r\n {\" \"}\r\n
\r\n
\r\n
Page {page_number}
\r\n
\r\n
\r\n >\r\n );\r\n}\r\n\r\nconst API_BASE = (brandRedirect = \"\", manufacturer = \"\") => {\r\n if (window.location.href.includes(\"GamaReport\")) {\r\n // Report-Generator\r\n if (brandRedirect.includes(\"localhost\")) {\r\n return \"http://localhost:62027/api/\";\r\n } else if (brandRedirect.includes(\"test\")) {\r\n return manufacturer === \"Lysaght\"\r\n ? \"https://test.lysaghtlivingdesigner.lysaght.com/api/\"\r\n : \"https://test.centenarydesignsuite.fielders.com.au/api/\";\r\n } else if (brandRedirect.includes(\"preprod\")) {\r\n return manufacturer === \"Lysaght\"\r\n ? \"https://preprod.lysaghtlivingdesigner.lysaght.com/api/\"\r\n : \"https://preprod.centenarydesignsuite.fielders.com.au/api/\";\r\n } else {\r\n return manufacturer === \"Lysaght\"\r\n ? \"https://lysaghtlivingdesigner.lysaght.com/api/\"\r\n : \"https://centenarydesignsuite.fielders.com.au/api/\";\r\n }\r\n } else {\r\n // Design-Cloud\r\n if (window.location.href.includes(\"localhost\")) window.debug = true;\r\n return window.debug ? \"http://localhost:62027/api/\" : \"/api/\";\r\n }\r\n};\r\n\r\nconst CustomTextField = withStyles({\r\n root: {\r\n flex: 1,\r\n marginRight: \"5px\",\r\n marginLeft: \"5px\",\r\n font: '8pt \"Futura\"',\r\n \"& label\": {\r\n fontSize: \"0.8rem\",\r\n color: \"#778899\",\r\n },\r\n \"& .MuiInput-formControl\": {\r\n font: '11pt \"Futura\"',\r\n fontWeight: \"600\",\r\n marginTop: \"8px\",\r\n },\r\n \"& label.Mui-focused\": {\r\n color: \"#778899\",\r\n },\r\n \"& .MuiInput-underline:after\": {\r\n borderBottomColor: \"#778899\",\r\n },\r\n \"& .MuiOutlinedInput-root\": {\r\n \"& fieldset\": {\r\n borderColor: \"red\",\r\n },\r\n \"&:hover fieldset\": {\r\n borderColor: \"yellow\",\r\n },\r\n \"&.Mui-focused fieldset\": {\r\n borderColor: \"#778899\",\r\n },\r\n },\r\n \"& .MuiInputBase-input.Mui-disabled\": {\r\n color: \"#778899\",\r\n },\r\n \"& .MuiFormLabel-root.Mui-disabled\": {\r\n color: \"#778899\",\r\n },\r\n \"& .MuiInput-underline.Mui-disabled:before\": {\r\n borderBottomStyle: \"solid\",\r\n },\r\n },\r\n})(TextField);\r\n\r\nexport default function QuotePage(props) {\r\n const { manufacturer, job, print, GetHTMLColour, user, footer_text, page_number, brandRedirect } = props;\r\n const pricingParameters = job.QuoteParameters?.PRICING_PARAMETERS;\r\n const documentParameters = job.QuoteParameters?.DOCUMENTS;\r\n const rotate = documentParameters?.rotate;\r\n const promotions = job?.Distributor?.Offer?.Promotions;\r\n const MATERIAL_PROMOTION_DISCOUNT = pricingParameters?.Promotion?.Discount; // eg 15\r\n const MATERIAL_PROMOTION_DISCOUNT_NAME = pricingParameters?.Promotion?.Name; // eg 15\r\n const customer_type = job?.Customer?.Type;\r\n const displayOnlyPrice = job.QuoteParameters?.BOM?.SystemList?.display_only_total_price || 0;\r\n const displayOnlyDiscount = job.QuoteParameters?.BOM?.SystemList?.display_only_total_discount || 0;\r\n const MATERIAL_KIT_PRICE_FROM_EPRICING =\r\n job.QuoteParameters?.BOM?.OrderList?.total_eprice || job.QuoteParameters?.BOM?.SystemList?.total_eprice;\r\n const PRICE_ERROR_SUMMARY = job.QuoteParameters?.BOM?.SystemList?.price_error_summary;\r\n\r\n let markup_structure = job?.Distributor?.MarkupStructure?.Markups?.[customer_type];\r\n\r\n const [notes, setNotes] = React.useState(pricingParameters?.Notes);\r\n const [pricingSummary, setPricingSummary] = React.useState([]);\r\n const [enterValue, setEnterValue] = React.useState(null);\r\n const handleSetEnter = (event) => {\r\n setEnterValue(event.target.value);\r\n event.target.select();\r\n };\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [buisnessDetails, setBuisnessDetails] = React.useState({\r\n name: job?.User?.DisplayName ?? \"\",\r\n address: job?.Distributor?.Address?.FormattedAddress?.replace(\", Australia\", \"\") ?? \"\",\r\n abn: job?.Distributor?.ABN ?? \"\",\r\n email: job?.Distributor?.Email ?? \"\",\r\n phone: job?.Distributor?.Phone ?? \"\",\r\n licence: job?.Distributor?.BuildingLicence ?? \"\",\r\n });\r\n\r\n const [termsAndConditions, setTermsAndConditions] = React.useState([]);\r\n const notesAreaRef = useRef(null);\r\n\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const handleNotesChange = (e) => {\r\n const textarea = notesAreaRef.current;\r\n const currentValue = e.target.value;\r\n\r\n textarea.value = currentValue;\r\n\r\n if (textarea.scrollHeight > textarea.clientHeight) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n setNotes(currentValue);\r\n };\r\n\r\n const [values, setValues] = React.useState({\r\n material: print ? pricingParameters.MaterialFixedPrice : \"\",\r\n installation: pricingParameters?.InstallationFixedPrice ? pricingParameters?.InstallationFixedPrice : 0,\r\n subtotal: displayOnlyPrice ? displayOnlyPrice : MATERIAL_KIT_PRICE_FROM_EPRICING,\r\n discount_percentage: pricingParameters?.OverallDiscountPercentage\r\n ? pricingParameters.OverallDiscountPercentage\r\n : \"0%\",\r\n discount: pricingParameters.OverallDiscount,\r\n promo_discount: MATERIAL_PROMOTION_DISCOUNT,\r\n extra: pricingParameters.ExtraCostsFixedPrice,\r\n packing_and_del: \"\",\r\n gst: \"\",\r\n total: \"\",\r\n });\r\n\r\n const handleChange = (prop) => (event) => {\r\n setValues({ ...values, [prop]: event.target.value });\r\n };\r\n\r\n const [customerValues, setCustomerValues] = React.useState({\r\n FirstName: job.Customer.FirstName,\r\n LastName: job.Customer.LastName,\r\n Phone: job.Customer.Phone,\r\n Email: job.Customer.Email,\r\n JobName: job.Customer.JobName,\r\n DeliveryNotes: job.SiteParameters.DeliveryNotes,\r\n });\r\n const handleCustomerChange = (prop) => (event) => {\r\n setCustomerValues({ ...customerValues, [prop]: event.target.value });\r\n };\r\n\r\n const handleFocus = (event) => event.target.select();\r\n\r\n const [paymentValues, setPaymentValues] = React.useState({\r\n deposit_percent: \"\",\r\n deposit: \"\",\r\n pp1_percent: \"\",\r\n pp1: \"\",\r\n pp2_percent: \"\",\r\n pp2: \"\",\r\n pp3_percent: \"\",\r\n pp3: \"\",\r\n final_percent: \"\",\r\n final: \"\",\r\n });\r\n\r\n let payment_structure_default = job.QuoteParameters?.PRICING_PARAMETERS?.PaymentStructure;\r\n if (!payment_structure_default) payment_structure_default = job?.Distributor?.MarkupStructure?.PaymentStructure;\r\n\r\n const [payment_structure, setPaymentStructure] = React.useState(payment_structure_default);\r\n\r\n useEffect(() => {\r\n if (print) {\r\n setValues({\r\n material: print ? pricingParameters.MaterialFixedPrice : \"\",\r\n installation: pricingParameters.InstallationFixedPrice,\r\n subtotal: displayOnlyPrice ? displayOnlyPrice : MATERIAL_KIT_PRICE_FROM_EPRICING,\r\n discount_percentage: pricingParameters?.OverallDiscountPercentage\r\n ? pricingParameters.OverallDiscountPercentage\r\n : \"0%\",\r\n discount: pricingParameters.OverallDiscount,\r\n promo_discount: MATERIAL_PROMOTION_DISCOUNT,\r\n extra: pricingParameters.ExtraCostsFixedPrice,\r\n packing_and_del: \"\",\r\n gst: \"\",\r\n total: \"\",\r\n });\r\n setCustomerValues({\r\n FirstName: job.Customer.FirstName,\r\n LastName: job.Customer.LastName,\r\n Phone: job.Customer.Phone,\r\n Email: job.Customer.Email,\r\n JobName: job.Customer.JobName,\r\n DeliveryNotes: job.SiteParameters.DeliveryNotes,\r\n });\r\n setPaymentStructure(payment_structure_default);\r\n setNotes(pricingParameters?.Notes);\r\n setPricingSummary([]);\r\n }\r\n }, [job]);\r\n\r\n useEffect(() => {\r\n const fetchTermsAndConditions = async () => {\r\n let API_URL = API_BASE(brandRedirect, manufacturer.Name) + \"document/standard/terms\";\r\n let options = {\r\n method: \"GET\",\r\n mode: \"cors\",\r\n cache: \"no-cache\",\r\n credentials: \"same-origin\",\r\n headers: {\r\n \"Content-Type\": \"text/plain\",\r\n },\r\n redirect: \"follow\",\r\n referrer: \"no-referrer\",\r\n };\r\n\r\n try {\r\n const response = await fetch(API_URL, options);\r\n\r\n if (!response.ok) {\r\n throw new Error();\r\n }\r\n\r\n const data = await response.json();\r\n setTermsAndConditions(data.content.Pages);\r\n } catch (err) {\r\n setTermsAndConditions(\r\n `Failed to fetch terms & conditions document from ${API_URL}. Error: ${err.message}`\r\n );\r\n }\r\n };\r\n\r\n if (documentParameters.appendTermsAndConditions) {\r\n fetchTermsAndConditions();\r\n }\r\n }, [documentParameters.appendTermsAndConditions]);\r\n\r\n const updatePP = (param, value, totalIncGST = null) => {\r\n if (!totalIncGST) totalIncGST = toNumber(values.total);\r\n let new_payment_structure = { ...payment_structure };\r\n if (print) new_payment_structure = { ...payment_structure_default };\r\n\r\n if (!print && param) {\r\n new_payment_structure[param] = value;\r\n\r\n if (param === \"installation\" && toNumber(values.installation) <= 0) {\r\n new_payment_structure.Deposit = job?.Distributor?.MarkupStructure?.PaymentStructure?.SupplyOnlyDeposit\r\n ? job?.Distributor?.MarkupStructure?.PaymentStructure?.SupplyOnlyDeposit\r\n : payment_structure_default.SupplyOnlyDeposit;\r\n new_payment_structure.Progress1 = 0;\r\n new_payment_structure.Progress2 = 0;\r\n new_payment_structure.Progress3 = 0;\r\n } else if (param === \"installation\" && toNumber(values.installation) > 0) {\r\n let payment_structure_def = job?.Distributor?.MarkupStructure?.PaymentStructure;\r\n if (!payment_structure_def) payment_structure_def = payment_structure_default;\r\n new_payment_structure.Deposit = payment_structure_def?.Deposit || 0;\r\n new_payment_structure.Progress1 = payment_structure_def?.Progress1 || 0;\r\n new_payment_structure.Progress2 = payment_structure_def?.Progress2 || 0;\r\n new_payment_structure.Progress3 = payment_structure_def?.Progress3 || 0;\r\n }\r\n\r\n setPaymentStructure({ ...new_payment_structure });\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"PaymentStructure\", new_payment_structure);\r\n }\r\n\r\n let new_values = { ...paymentValues };\r\n\r\n //get payment structure;\r\n let DEPOSIT = new_payment_structure.Deposit;\r\n let PROGRESS1 = new_payment_structure.Progress1;\r\n let PROGRESS2 = new_payment_structure.Progress2;\r\n let PROGRESS3 = new_payment_structure.Progress3;\r\n\r\n if (toNumber(DEPOSIT < 100) || (typeof DEPOSIT === \"string\" && DEPOSIT.includes(\"%\"))) {\r\n new_values.deposit_percent = toNumber(DEPOSIT) + \"%\";\r\n new_values.deposit = toAUD((totalIncGST * toNumber(DEPOSIT)) / 100);\r\n } else {\r\n new_values.deposit_percent = \"-\";\r\n new_values.deposit = toAUD(DEPOSIT);\r\n }\r\n\r\n if (toNumber(PROGRESS1 < 100) || (typeof PROGRESS1 === \"string\" && PROGRESS1.includes(\"%\"))) {\r\n new_values.pp1_percent = toNumber(PROGRESS1) + \"%\";\r\n new_values.pp1 = toAUD((totalIncGST * toNumber(PROGRESS1)) / 100);\r\n } else {\r\n new_values.pp1_percent = \"-\";\r\n new_values.pp1 = toAUD(PROGRESS1);\r\n }\r\n\r\n if (toNumber(PROGRESS2 < 100) || (typeof PROGRESS2 === \"string\" && PROGRESS2.includes(\"%\"))) {\r\n new_values.pp2_percent = toNumber(PROGRESS2) + \"%\";\r\n new_values.pp2 = toAUD((totalIncGST * toNumber(PROGRESS2)) / 100);\r\n } else {\r\n new_values.pp2_percent = \"-\";\r\n new_values.pp2 = toAUD(PROGRESS2);\r\n }\r\n\r\n if (toNumber(PROGRESS3 < 100) || (typeof PROGRESS3 === \"string\" && PROGRESS3.includes(\"%\"))) {\r\n new_values.pp3_percent = toNumber(PROGRESS3) + \"%\";\r\n new_values.pp3 = toAUD((totalIncGST * toNumber(PROGRESS3)) / 100);\r\n } else {\r\n new_values.pp3_percent = \"-\";\r\n new_values.pp3 = toAUD(PROGRESS3);\r\n }\r\n\r\n let FINAL_VALUE =\r\n totalIncGST -\r\n toNumber(new_values.pp3) -\r\n toNumber(new_values.pp2) -\r\n toNumber(new_values.pp1) -\r\n toNumber(new_values.deposit);\r\n new_values.final_percent = ((FINAL_VALUE / totalIncGST) * 100).toFixed(0) + \"%\";\r\n new_values.final = toAUD(FINAL_VALUE);\r\n setPaymentValues(new_values);\r\n };\r\n\r\n const handlePaymentValueChange = (prop) => (event) => {\r\n setPaymentValues({ ...paymentValues, [prop]: event.target.value });\r\n };\r\n\r\n const [loadPrices, setLoadPrices] = useState(print ? true : false);\r\n const classes = useStyles();\r\n\r\n function ColourComponent(props) {\r\n let colour = props.colour;\r\n if (colour && GetHTMLColour(props.colour)[0] == \"\")\r\n colour = colour\r\n .replace(\" TW\", \"\")\r\n .replace(\" AM\", \"\")\r\n .replace(\" LL\", \"\")\r\n .replace(\" ST\", \"\")\r\n .replace(\" HP\", \"\");\r\n var htmlcolours = GetHTMLColour(colour);\r\n var top_bg_colour = htmlcolours[0];\r\n var bottom_bg2_colour = htmlcolours[1];\r\n var bg1 = \"linear-gradient(165deg, \" + top_bg_colour + \" 65%, \" + bottom_bg2_colour + \" 35%)\";\r\n if (top_bg_colour === bottom_bg2_colour) bg1 = top_bg_colour;\r\n var text_colour1 = htmlcolours[2];\r\n\r\n return (\r\n \r\n {props.label}: {colour}\r\n
\r\n );\r\n }\r\n\r\n const threeDmouseClick = (e) => {\r\n if (e.target.style.backgroundSize === \"contain\") e.target.style.backgroundSize = \"cover\";\r\n else e.target.style.backgroundSize = \"contain\";\r\n e.target.style.backgroundPosition = \"50% 50%\";\r\n };\r\n\r\n const toAUD = (val) => {\r\n return toNumber(val).toLocaleString(\"en-AU\", {\r\n style: \"currency\",\r\n currency: \"AUD\",\r\n });\r\n };\r\n\r\n const calculatePrices = (source = \"\") => {\r\n let INSTALLATION_BASE_PRICE = job.QuoteParameters?.BOM?.InstallationList?.total_price;\r\n if (!INSTALLATION_BASE_PRICE) INSTALLATION_BASE_PRICE = 0;\r\n\r\n const PACKING_AND_DELIVERY = job.Distributor?.DeliveryFee + job.Distributor?.PackingFee;\r\n\r\n const MATERIAL_FIXED_PRICE = toNumber(\r\n print ? pricingParameters.MaterialFixedPrice : values.material,\r\n false,\r\n true\r\n );\r\n const INSTALL_FIXED_PRICE = toNumber(\r\n print ? pricingParameters.InstallationFixedPrice : values.installation,\r\n false,\r\n true\r\n );\r\n\r\n const EXTRA_COSTS = toNumber(print ? pricingParameters.ExtraCostsFixedPrice : values.extra, false, true);\r\n\r\n let PRICING_OUTPUT_SUMMARY = {\r\n MaterialBase: displayOnlyPrice ? displayOnlyPrice : MATERIAL_KIT_PRICE_FROM_EPRICING,\r\n InstallationBase: INSTALLATION_BASE_PRICE,\r\n };\r\n\r\n let SUBTOTAL = 0;\r\n let promo_discount = values.promo_discount / 100;\r\n\r\n if (!promo_discount) promo_discount = 0;\r\n\r\n let kitPrice = displayOnlyPrice ? displayOnlyPrice : MATERIAL_KIT_PRICE_FROM_EPRICING;\r\n let DISCOUNTED_KIT_PRICE_FROM_EPRICING = kitPrice - kitPrice * promo_discount;\r\n\r\n PRICING_OUTPUT_SUMMARY[\"MaterialDiscountedPromo\"] = DISCOUNTED_KIT_PRICE_FROM_EPRICING;\r\n\r\n let markup_Material = Number(markup_structure[\"Material\"]) / 100;\r\n if (!markup_Material) markup_Material = 0;\r\n let markup_Installation = Number(markup_structure[\"Installation\"]) / 100;\r\n if (!markup_Installation) markup_Installation = 0;\r\n let markup_Commission = Number(markup_structure[\"Commission\"]) / 100;\r\n if (!markup_Commission) markup_Commission = 0;\r\n\r\n //material price\r\n let material = DISCOUNTED_KIT_PRICE_FROM_EPRICING + DISCOUNTED_KIT_PRICE_FROM_EPRICING * markup_Material;\r\n\r\n PRICING_OUTPUT_SUMMARY[\"MaterialMargin\"] = DISCOUNTED_KIT_PRICE_FROM_EPRICING * markup_Material;\r\n let material_commission = material * markup_Commission;\r\n PRICING_OUTPUT_SUMMARY[\"MaterialCommission\"] = material_commission;\r\n material += material_commission;\r\n\r\n if (MATERIAL_FIXED_PRICE) material = Number(MATERIAL_FIXED_PRICE);\r\n PRICING_OUTPUT_SUMMARY[\"MaterialSubtotal\"] = material;\r\n\r\n //installation price\r\n let installation = INSTALLATION_BASE_PRICE + INSTALLATION_BASE_PRICE * markup_Installation;\r\n PRICING_OUTPUT_SUMMARY[\"InstallationMargin\"] = INSTALLATION_BASE_PRICE * markup_Installation;\r\n let installation_commission = installation * markup_Commission;\r\n PRICING_OUTPUT_SUMMARY[\"InstallationCommission\"] = installation_commission;\r\n installation += installation_commission;\r\n\r\n PRICING_OUTPUT_SUMMARY[\"CommissionTotal\"] = material_commission + installation_commission;\r\n installation = Number(INSTALL_FIXED_PRICE);\r\n PRICING_OUTPUT_SUMMARY[\"InstallationSubtotal\"] = Number(installation);\r\n\r\n SUBTOTAL = material + installation;\r\n PRICING_OUTPUT_SUMMARY[\"InstallationANDMaterialSubtotal\"] = SUBTOTAL;\r\n\r\n //overall discount\r\n let overall_discount = toNumber(print ? pricingParameters.OverallDiscount : values.discount, false, true);\r\n let overall_discount_percentage = toNumber(\r\n print ? pricingParameters.OverallDiscountPercentage : values.discount_percentage,\r\n false,\r\n true\r\n );\r\n if (source === \"discount_percentage\") {\r\n overall_discount = SUBTOTAL * (overall_discount_percentage / 100);\r\n } else {\r\n overall_discount_percentage = (overall_discount / SUBTOTAL) * 100;\r\n }\r\n\r\n PRICING_OUTPUT_SUMMARY[\"OverallDiscount\"] = overall_discount;\r\n SUBTOTAL -= overall_discount;\r\n\r\n //plus extra costs\r\n SUBTOTAL += EXTRA_COSTS;\r\n PRICING_OUTPUT_SUMMARY[\"InstallationANDMaterialANDExtraSubtotal\"] = SUBTOTAL;\r\n\r\n //plus packing and delivery\r\n let markup_PackingAndDel = Number(markup_structure[\"PackingAndDel\"]) / 100;\r\n let PACKING_AND_DEL_MARKED_UP = PACKING_AND_DELIVERY + PACKING_AND_DELIVERY * markup_PackingAndDel;\r\n SUBTOTAL += PACKING_AND_DEL_MARKED_UP;\r\n PRICING_OUTPUT_SUMMARY[\"PackingAndDelBase\"] = PACKING_AND_DELIVERY;\r\n PRICING_OUTPUT_SUMMARY[\"PackingAndDelMarkedUp\"] = PACKING_AND_DEL_MARKED_UP;\r\n\r\n let totalExGST = SUBTOTAL;\r\n\r\n PRICING_OUTPUT_SUMMARY[\"TotalExGST\"] = totalExGST;\r\n\r\n let GST = totalExGST * 0.1;\r\n let totalIncGST = totalExGST + GST;\r\n\r\n PRICING_OUTPUT_SUMMARY[\"TotalIncGST\"] = totalIncGST;\r\n PRICING_OUTPUT_SUMMARY[\"price_error_summary\"] = PRICE_ERROR_SUMMARY;\r\n\r\n if (props.updateJobState) {\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"MaterialFixedPrice\", material);\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"InstallationFixedPrice\", installation);\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"OverallDiscount\", overall_discount);\r\n props.updateJobState(\r\n \"QuoteParameters.PRICING_PARAMETERS\",\r\n \"OverallDiscountPercentage\",\r\n overall_discount_percentage\r\n );\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"ExtraCostsFixedPrice\", EXTRA_COSTS);\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"OutputSummary\", PRICING_OUTPUT_SUMMARY);\r\n }\r\n\r\n setValues({\r\n ...values,\r\n material: toAUD(material),\r\n installation: toAUD(installation),\r\n subtotal: toAUD(PRICING_OUTPUT_SUMMARY[\"InstallationANDMaterialSubtotal\"]),\r\n discount: overall_discount === 0 ? \" \" : toAUD(overall_discount),\r\n discount_percentage:\r\n overall_discount_percentage === 0 ? \"0%\" : overall_discount_percentage.toFixed(1) + \"%\",\r\n extra: toAUD(EXTRA_COSTS),\r\n packing_and_del: toAUD(PACKING_AND_DEL_MARKED_UP),\r\n gst: toAUD(GST),\r\n total: toAUD(totalIncGST),\r\n });\r\n\r\n updatePP(source, null, totalIncGST);\r\n setPricingSummary(PRICING_OUTPUT_SUMMARY);\r\n };\r\n\r\n useEffect(() => {\r\n calculatePrices();\r\n }, [loadPrices]);\r\n\r\n useEffect(() => {\r\n calculatePrices();\r\n }, [values.promo_discount, values.extra]);\r\n\r\n useEffect(() => {\r\n if (toNumber(pricingParameters.ExtraCostsFixedPrice) != toNumber(values.extra)) {\r\n setValues({ ...values, extra: pricingParameters.ExtraCostsFixedPrice });\r\n }\r\n }, [pricingParameters.ExtraCostsFixedPrice]);\r\n\r\n const [svgScreen, setSvgScreen] = React.useState(false);\r\n const [menuOpen, setMenuOpen] = React.useState(null);\r\n const handleMenuClick = (event, name) => {\r\n setMenuOpen({ ...menuOpen, [name]: event.target });\r\n };\r\n const handleMenuClose = (event, name) => {\r\n setMenuOpen({ ...menuOpen, [name]: false });\r\n };\r\n\r\n const handleSavePromotion = (e) => {\r\n for (let promo of promotions) {\r\n if (promo.Name === e.target.value) {\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"Promotion\", promo);\r\n setValues({\r\n ...values,\r\n material: \"\",\r\n promo_discount: promo.Discount,\r\n });\r\n\r\n return;\r\n }\r\n }\r\n props.updateJobState(\"QuoteParameters.PRICING_PARAMETERS\", \"Promotion\", null);\r\n setValues({\r\n ...values,\r\n material: \"\",\r\n promo_discount: 0,\r\n });\r\n };\r\n\r\n if (!loadPrices) setLoadPrices(true);\r\n\r\n let this_area = null;\r\n if (job.AreaSpecifications && job.AreaSpecifications[0]) this_area = job.AreaSpecifications[0];\r\n\r\n const DeckMode = job?.DesignParameters?.DeckMode === 1;\r\n const carportMode = job?.DesignParameters?.CarportMode === 1;\r\n\r\n let beamNameAndColour1 = getBeamDetails(1, this_area);\r\n let beamNameAndColour2 = getBeamDetails(2, this_area);\r\n let beamNameAndColour3 = getBeamDetails(3, this_area);\r\n let beamNameAndColour4 = getBeamDetails(4, this_area);\r\n\r\n let columnColour = isTrue(\r\n this_area.BEAMS_AND_POSTS.PostColourSelectionMade,\r\n this_area.BEAMS_AND_POSTS.PostColourSelected\r\n )\r\n ? this_area.BEAMS_AND_POSTS.PostCol\r\n ? this_area.BEAMS_AND_POSTS.PostCol\r\n : this_area.BEAMS_AND_POSTS.PostColour\r\n : \"TBA\";\r\n\r\n if (\r\n this_area.BEAMS_AND_POSTS.PostColourSelectionMade === undefined &&\r\n this_area.BEAMS_AND_POSTS.PostColourSelected === undefined\r\n )\r\n columnColour = this_area.BEAMS_AND_POSTS.PostCol\r\n ? this_area.BEAMS_AND_POSTS.PostCol\r\n : this_area.BEAMS_AND_POSTS.PostColour;\r\n\r\n let roofColour = isTrue(this_area.ROOF_SHEETING.RoofColourSelectionMade, this_area.ROOF_SHEETING.RoofColourSelected)\r\n ? this_area.ROOF_SHEETING.RoofSheetColour\r\n ? this_area.ROOF_SHEETING.RoofSheetColour\r\n : this_area.ROOF_SHEETING.RoofColour\r\n : \"TBA\";\r\n\r\n let flashingColour = this_area.ROOF_SHEETING.FlashingColour\r\n ? this_area.ROOF_SHEETING.FlashingColour\r\n : this_area.ROOF_SHEETING.FlashingCol;\r\n\r\n let gutterColour = isTrue(\r\n this_area.GUTTERS_AND_DOWNPIPES.GutterColourSelectionMade,\r\n this_area.GUTTERS_AND_DOWNPIPES.GutterColourSelected\r\n )\r\n ? this_area.GUTTERS_AND_DOWNPIPES.GutterColour\r\n ? this_area.GUTTERS_AND_DOWNPIPES.GutterColour\r\n : this_area.GUTTERS_AND_DOWNPIPES.GutterCol\r\n : \"TBA\";\r\n\r\n if (\r\n this_area.GUTTERS_AND_DOWNPIPES.GutterColourSelectionMade === undefined &&\r\n this_area.GUTTERS_AND_DOWNPIPES.GutterColourSelected === undefined\r\n )\r\n gutterColour = this_area.GUTTERS_AND_DOWNPIPES.GutterColour\r\n ? this_area.GUTTERS_AND_DOWNPIPES.GutterColour\r\n : this_area.GUTTERS_AND_DOWNPIPES.GutterCol;\r\n\r\n let downpipeColour = \"TBA\";\r\n let hasDownpipe = this_area?.GUTTERS_AND_DOWNPIPES?.DownpipeIsSelected;\r\n\r\n if (hasDownpipe) {\r\n downpipeColour = this_area?.GUTTERS_AND_DOWNPIPES?.DownpipeCol || \"TBA\";\r\n }\r\n\r\n let windzone = job.SiteParameters?.WindData?.WindZoneAS1170?.calculated?.importance_level_2?.windzone_equiv;\r\n if (!windzone) windzone = job.SiteParameters?.WindData?.WindZone;\r\n if (!windzone) windzone = \"NA\";\r\n let blocking = job.SiteParameters?.WindData?.Blocking;\r\n if (blocking === undefined) blocking = \"NA\";\r\n windzone += \"b\" + blocking;\r\n\r\n let businessLogo;\r\n let twodlayout;\r\n let threedlayout = job?.QuoteParameters?.DOCUMENTS?.[\"3DScreenShots\"]?.[0] ?? \"\";\r\n\r\n if (window.location.href.includes(\"GamaReport\") || print) {\r\n // Report-Generator\r\n businessLogo = props.businessLogo ?? \"\";\r\n twodlayout = props.layout_all ?? \"\";\r\n threedlayout = props.threed_layout ?? \"\";\r\n } else {\r\n // Design-Cloud\r\n businessLogo = API_BASE() + \"document/BUS_\" + job.Distributor.Code + \"/\" + job.Distributor.Logo;\r\n twodlayout = API_BASE() + \"document/\" + job.id + \"/layout_all.svg\";\r\n threedlayout = threedlayout ? API_BASE() + \"document/\" + job.id + \"/\" + threedlayout : \"\";\r\n }\r\n\r\n const showDeposit = parseFloat(paymentValues.deposit_percent) > 0 || !print;\r\n const showPayment1 = parseFloat(paymentValues.pp1_percent) > 0 || !print;\r\n const showPayment2 = parseFloat(paymentValues.pp2_percent) > 0 || !print;\r\n const showPayment3 = parseFloat(paymentValues.pp3_percent) > 0 || !print;\r\n\r\n let payment2DisplayAs = showPayment1 ? \"Payment 2\" : \"Payment 1\";\r\n let payment3DisplayAs;\r\n\r\n if (showPayment1 && showPayment2) {\r\n payment3DisplayAs = \"Payment 3\";\r\n } else if (showPayment1 || showPayment2) {\r\n payment3DisplayAs = \"Payment 2\";\r\n } else {\r\n payment3DisplayAs = \"Payment 1\";\r\n }\r\n\r\n const renderTandCsSubclauses = (subclauses) => {\r\n return subclauses.map((subclause, subclauseIndex) => (\r\n \r\n
\r\n {subclause.id} {subclause.text}\r\n
\r\n {subclause.subclauses && renderTandCsSubclauses(subclause.subclauses)}\r\n
\r\n ));\r\n };\r\n\r\n const renderTandCsClauses = (clauses) => {\r\n return clauses.map((clause, clauseIndex) => (\r\n \r\n
\r\n {clause.id} {clause.text}\r\n
\r\n {clause.subclauses && renderTandCsSubclauses(clause.subclauses)}\r\n
\r\n ));\r\n };\r\n\r\n const renderTandCsSections = (sections) => {\r\n return sections.map((section, sectionIndex) => (\r\n \r\n
{section.title} \r\n {renderTandCsClauses(section.clauses)}\r\n \r\n ));\r\n };\r\n\r\n const termsAndConditionsPages = [];\r\n\r\n if (Array.isArray(termsAndConditions)) {\r\n termsAndConditions.forEach((page, index) => {\r\n let currentPageContent = [];\r\n\r\n if (page?.title && page?.intro) {\r\n currentPageContent.push(\r\n \r\n
{page.title} \r\n
{page.intro}
\r\n
\r\n );\r\n }\r\n\r\n currentPageContent = [...currentPageContent, ...renderTandCsSections(page.sections)];\r\n\r\n if (page?.issue_date) {\r\n currentPageContent.push(\r\n \r\n Issue Date: {page.issue_date}\r\n
\r\n );\r\n }\r\n\r\n if (currentPageContent.length > 0) {\r\n termsAndConditionsPages.push(\r\n \r\n
{currentPageContent}
\r\n
\r\n
\r\n );\r\n }\r\n });\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {job.Distributor.Logo &&
}\r\n {!job.Distributor.Logo && (\r\n
{job.Distributor.Name}
\r\n )}\r\n\r\n
\r\n {buisnessDetails.name ? (\r\n <>\r\n {buisnessDetails.name}\r\n \r\n >\r\n ) : (\r\n \"\"\r\n )}\r\n {buisnessDetails.address}\r\n \r\n {buisnessDetails.abn ? (\r\n <>\r\n ABN: {buisnessDetails.abn}\r\n \r\n >\r\n ) : (\r\n \"\"\r\n )}\r\n {buisnessDetails.email ? (\r\n <>\r\n {buisnessDetails.email}\r\n \r\n >\r\n ) : (\r\n \"\"\r\n )}\r\n {buisnessDetails.phone ? (\r\n <>\r\n {buisnessDetails.phone}\r\n \r\n >\r\n ) : (\r\n \"\"\r\n )}\r\n {buisnessDetails.licence && (\r\n <>\r\n Building Licence: {buisnessDetails.licence} \r\n >\r\n )}\r\n \r\n
\r\n
\r\n
CUSTOMER DETAILS
\r\n
\r\n {\r\n props.updateJobState(\"Customer\", \"FirstName\", e.target.value);\r\n }}\r\n />\r\n props.updateJobState(\"Customer\", \"LastName\", e.target.value)}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n props.updateJobState(\"Customer\", \"Phone\", e.target.value)}\r\n />\r\n
\r\n
\r\n
\r\n
JOB DETAILS
\r\n
\r\n props.updateJobState(\"Customer\", \"Email\", e.target.value)}\r\n />\r\n
\r\n
\r\n props.updateJobState(\"Customer\", \"JobName\", e.target.value)}\r\n />\r\n \r\n
\r\n
\r\n \r\n props.updateJobState(\"SiteParameters\", \"DeliveryNotes\", e.target.value)\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n QUOTATION \r\n {!print && (\r\n handleMenuClick(event, \"Quote\")}\r\n >\r\n \r\n \r\n )}\r\n
\r\n\r\n {promotions && !print && (\r\n \r\n Promotions \r\n \r\n \r\n None \r\n \r\n {promotions.map((promo) => (\r\n {promo.Name} \r\n ))}\r\n \r\n
\r\n )}\r\n \r\n Materials \r\n calculatePrices()}\r\n onKeyPress={(e) => {\r\n if (e.key === \"Enter\") e.target.blur();\r\n }}\r\n />\r\n
\r\n \r\n Installation \r\n calculatePrices(\"installation\")}\r\n onKeyPress={(e) => {\r\n if (e.key === \"Enter\") e.target.blur();\r\n }}\r\n />\r\n
\r\n \r\n
\r\n {toNumber(values.installation) > 0 ? \"SUPPLY AND INSTALL\" : \"SUPPLY ONLY\"}\r\n \r\n
\r\n {values.subtotal}\r\n
\r\n
\r\n \r\n 0 ? {} : { color: \"darkgrey\" }}\r\n >\r\n - Discount\r\n \r\n calculatePrices(\"discount_percentage\")}\r\n onKeyPress={(e) => {\r\n if (e.key === \"Enter\") e.target.blur();\r\n }}\r\n />\r\n calculatePrices()}\r\n onKeyPress={(e) => {\r\n if (e.key === \"Enter\") e.target.blur();\r\n }}\r\n />\r\n
\r\n props.setShowEditExtraItems(true)}\r\n >\r\n
+ Extra Items \r\n
\r\n {pricingParameters.ShowExtraItemsBreakDownOnQuote &&\r\n pricingParameters.ExtraItems &&\r\n Object.keys(pricingParameters.ExtraItems).map((key, index) => {\r\n if (pricingParameters.ExtraItems[key].Subtotal > 0)\r\n return (\r\n
\r\n {pricingParameters.ExtraItems[key].Qty} x{\" \"}\r\n {pricingParameters.ExtraItems[key].Name} ={\" \"}\r\n {toAUD(pricingParameters.ExtraItems[key].Subtotal)}\r\n
\r\n );\r\n })}\r\n
0\r\n ? { borderTop: \"1px dotted #778899 !important\" }\r\n : {}\r\n }\r\n >\r\n {toAUD(values.extra)}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {window.LYSAGHT ? \"+ Delivery\" : \"+ Packing and Delivery\"}\r\n \r\n
\r\n {values.packing_and_del}\r\n
\r\n
\r\n \r\n
+ GST \r\n
\r\n {values.gst}\r\n
\r\n
\r\n \r\n
\r\n TOTAL\r\n \r\n (inc-GST)\r\n \r\n
\r\n {values.total}\r\n
\r\n
\r\n \r\n
GST \r\n
\r\n {values.gst}\r\n
\r\n
\r\n\r\n \r\n *extra fees may apply if specified time drop is required.\r\n
\r\n \r\n 3D VIEW QR CODE \r\n {!print && (\r\n handleMenuClick(event, \"Qr\")}\r\n >\r\n \r\n \r\n )}\r\n
\r\n {twodlayout && (\r\n \r\n
{\" \"}\r\n {documentParameters.showQrLink && (\r\n
\r\n {brandRedirect} \r\n
\r\n )}\r\n
\r\n )}\r\n \r\n PAYMENT STRUCTURE\r\n
\r\n\r\n \r\n {showDeposit && (\r\n
\r\n )}\r\n {showPayment1 && (\r\n
\r\n )}\r\n {showPayment2 && (\r\n
\r\n )}\r\n {showPayment3 && (\r\n
\r\n )}\r\n
\r\n
\r\n\r\n CONTRACT ACCEPTANCE
\r\n \r\n Please print your name, sign and date the box below. By signing this declaration, this\r\n quotation becomes a CONTRACT. You agree to the terms and conditions and the price of{\" \"}\r\n {values.total}.\r\n
\r\n
\r\n\r\n NOTES
\r\n {print && {pricingParameters?.Notes}
}\r\n {!print && (\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {!svgScreen && (\r\n <>\r\n
\r\n \r\n DESIGN SPECIFICATIONS\r\n \r\n {!print && (\r\n handleMenuClick(event, \"Design\")}\r\n >\r\n \r\n \r\n )}\r\n
\r\n\r\n {twodlayout && (\r\n
\r\n )}\r\n >\r\n )}\r\n {threedlayout && (\r\n
\r\n )}\r\n
\r\n COLOUR SUMMARY\r\n {job.AreaSpecifications.length > 1 ? \" (area 1 only)\" : \"\"}\r\n
\r\n
\r\n {DeckMode ? (\r\n <>\r\n
\r\n {beamNameAndColour1 && (\r\n \r\n )}\r\n {beamNameAndColour2 && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n >\r\n ) : (\r\n <>\r\n
\r\n {beamNameAndColour1 && (\r\n \r\n )}\r\n {beamNameAndColour2 && (\r\n \r\n )}\r\n {beamNameAndColour3 && (\r\n \r\n )}\r\n {beamNameAndColour4 && (\r\n \r\n )}\r\n {hasDownpipe && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n >\r\n )}\r\n
\r\n
{GenerateSummary(job)}
\r\n
\r\n \r\n \r\n
\r\n {page_number !== undefined &&
}\r\n
\r\n {svgScreen && (\r\n
\r\n
\r\n {svgScreen && (\r\n <>\r\n
\r\n \r\n DESIGN SPECIFICATIONS\r\n \r\n {!print && (\r\n handleMenuClick(event, \"Design\")}\r\n >\r\n \r\n \r\n )}\r\n
\r\n\r\n {twodlayout && (\r\n
\r\n )}\r\n >\r\n )}\r\n
\r\n {page_number !== undefined &&
}\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n Edit Details \r\n \r\n \r\n Update this quote's buisness details. Note: This will not change your default buisness details.\r\n \r\n {\r\n setBuisnessDetails({ ...buisnessDetails, name: e.target.value });\r\n }}\r\n onBlur={(e) => {\r\n var user = props.job.User;\r\n user.DisplayName = e.target.value;\r\n props.updateUser(user);\r\n }}\r\n type=\"text\"\r\n fullWidth\r\n variant=\"standard\"\r\n />\r\n {\r\n setBuisnessDetails({\r\n ...buisnessDetails,\r\n address: e.target.value,\r\n });\r\n }}\r\n disabled={true}\r\n type=\"text\"\r\n fullWidth\r\n variant=\"standard\"\r\n />\r\n {\r\n setBuisnessDetails({ ...buisnessDetails, abn: e.target.value });\r\n }}\r\n type=\"email\"\r\n fullWidth\r\n variant=\"standard\"\r\n />\r\n {\r\n setBuisnessDetails({ ...buisnessDetails, email: e.target.value });\r\n }}\r\n onBlur={(e) => {\r\n var distributor = props.job.Distributor;\r\n distributor.Email = e.target.value;\r\n props.updateDistributor(distributor);\r\n }}\r\n type=\"text\"\r\n fullWidth\r\n variant=\"standard\"\r\n />\r\n {\r\n setBuisnessDetails({ ...buisnessDetails, phone: e.target.value });\r\n }}\r\n onBlur={(e) => {\r\n var distributor = props.job.Distributor;\r\n distributor.Phone = e.target.value;\r\n props.updateDistributor(distributor);\r\n }}\r\n type=\"text\"\r\n fullWidth\r\n variant=\"standard\"\r\n />\r\n {\r\n setBuisnessDetails({\r\n ...buisnessDetails,\r\n licence: e.target.value,\r\n });\r\n }}\r\n type=\"text\"\r\n fullWidth\r\n variant=\"standard\"\r\n />\r\n \r\n \r\n Close \r\n \r\n \r\n {documentParameters.appendTermsAndConditions ? (\r\n typeof termsAndConditions === \"string\" ? (\r\n
\r\n
{termsAndConditions}
\r\n
\r\n ) : (\r\n
{termsAndConditionsPages}
\r\n )\r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\n// Hardcoded mappings are currently the only way to link these codes with their\r\n// descriptions from the front-end\r\nexport function GetOutputName(name) {\r\n if (!name) return;\r\n\r\n const nameMap = {\r\n SB10865: \"Cen Swage Box Beam 108 X 65 X 0.95BMT\",\r\n SB15865: \"Cen Swage Box Beam 158 X 65 X 0.95BMT\",\r\n SB20865: \"Cen Swage Box Beam 208 X 65 X 0.95BMT\",\r\n 656510: \"Cen Box Beam 65x65x0.95BMT\",\r\n 1086510: \"Cen Box Beam 108x65x0.95BMT\",\r\n 1586510: \"Cen Box Beam 158x65x0.95BMT\",\r\n 2086510: \"Cen Box Beam 208x65x0.95BMT\",\r\n FL15015: \"150mm x 50mm Firmlok\",\r\n FL20020: \"200mm x 50mm Firmlok\",\r\n FL10011: \"100mm x 50mm Firmlok\",\r\n FL10011M225: \"100mm x 50mm Firmlok\",\r\n FL15015M225: \"150mm x 50mm Firmlok\",\r\n FL20020M225: \"200mm x 50mm Firmlok\",\r\n CONCRETE_IN: \"Concrete In\",\r\n BOLT_TO_SLAB: \"Bolt to Slab\",\r\n HEAVY_FOOTING_BRACKET: \"Heavy Footing Bracket\",\r\n };\r\n\r\n // Return mapped name or handle custom replacements if not found\r\n if (nameMap[name]) {\r\n return nameMap[name];\r\n }\r\n\r\n // Handle replacement patterns if in_name isn't directly mapped\r\n return name.replace(\"C/Bond\", \"Colorbond\").replace(\"D/S\", \"Double Sided\");\r\n}\r\n\r\nfunction GetSizeSummary(areas) {\r\n var summary = \"\";\r\n for (let index in areas) {\r\n let area = areas[index];\r\n\r\n let overhangLeftRight =\r\n (area.SHAPE.OH_Left || 0) +\r\n (area.SHAPE.OH_Left_Sheet || 0) +\r\n (area.SHAPE.OH_Right || 0) +\r\n (area.SHAPE.OH_Right_Sheet || 0);\r\n\r\n let overhangFrontBack =\r\n (area.SHAPE.OH_Front || 0) +\r\n (area.SHAPE.OH_Front_Sheet || 0) +\r\n (area.SHAPE.OH_Back || 0) +\r\n (area.SHAPE.OH_Back_Sheet || 0);\r\n\r\n summary +=\r\n (summary == \"\" ? \"\" : \"; \") +\r\n \"Area \" +\r\n (Number(index) + 1) +\r\n \": \" +\r\n (area.SHAPE.ActualStructureLength\r\n ? area.SHAPE.ActualStructureLength + overhangLeftRight\r\n : area.SHAPE.Length + overhangLeftRight) +\r\n \"mm x \" +\r\n (area.SHAPE.ActualStructureWidth\r\n ? area.SHAPE.ActualStructureWidth + overhangFrontBack\r\n : area.SHAPE.Depth + overhangFrontBack) +\r\n \"mm\";\r\n }\r\n return summary;\r\n}\r\n\r\nfunction ConvertListToString(array) {\r\n let outStr = \"\";\r\n for (var i = 0; i < array.length; i++) {\r\n outStr += array[i];\r\n if (i == array.length - 2) {\r\n outStr += \" & \";\r\n } else if (i < array.length - 1) {\r\n outStr += \", \";\r\n }\r\n }\r\n return outStr;\r\n}\r\n\r\nfunction GetHeights(areas) {\r\n let heights = [];\r\n for (let area of areas) {\r\n if (!heights.includes(area.SHAPE.Height)) heights.push(area.SHAPE.Height);\r\n }\r\n return ConvertListToString(heights);\r\n}\r\n\r\nfunction GetRoofingSummary(areas) {\r\n let pitches = {};\r\n if (areas.length === 0) return \"\";\r\n if (areas.length === 1) return GetOutputName(areas[0].ROOF_SHEETING.RoofType);\r\n let types = [];\r\n for (var area of areas) {\r\n let RoofSheetDescClean = GetOutputName(area.ROOF_SHEETING.RoofType);\r\n if (!types.includes(RoofSheetDescClean)) types.push(RoofSheetDescClean);\r\n\r\n if (area.SHAPE.DesignType === \"Flat Roof\") {\r\n if (!pitches[\"Flat\"]) {\r\n pitches[\"Flat\"] = [];\r\n pitches[\"Flat\"].push(RoofSheetDescClean);\r\n } else {\r\n if (!pitches[\"Flat\"].includes(RoofSheetDescClean)) pitches[\"Flat\"].push(RoofSheetDescClean);\r\n }\r\n } else if (area.SHAPE.DesignType === \"Gable\") {\r\n if (pitches[\"Gable\"] == null) {\r\n pitches[\"Gable\"] = [];\r\n pitches[\"Gable\"].push(RoofSheetDescClean);\r\n } else {\r\n if (!pitches[\"Gable\"].includes(RoofSheetDescClean)) pitches[\"Gable\"].push(RoofSheetDescClean);\r\n }\r\n } else if (area.SHAPE.DesignType === \"Gable Hip Roof\") {\r\n if (pitches[\"Portal\"] == null) {\r\n pitches[\"Portal\"] = [];\r\n pitches[\"Portal\"].push(RoofSheetDescClean);\r\n } else {\r\n if (!pitches[\"Portal\"].includes(RoofSheetDescClean)) pitches[\"Portal\"].push(RoofSheetDescClean);\r\n }\r\n }\r\n }\r\n\r\n if (types.length == 1) return types[0];\r\n\r\n let output = [];\r\n if (pitches[\"Flat\"]) {\r\n output.push(ConvertListToString(pitches[\"Flat\"]) + \" Flat\");\r\n }\r\n if (pitches[\"Gable\"]) {\r\n output.push(ConvertListToString(pitches[\"Gable\"]) + \" Pitched\");\r\n }\r\n if (pitches[\"Portal\"]) {\r\n output.push(ConvertListToString(pitches[\"Portal\"]) + \" Gable\");\r\n }\r\n return ConvertListToString(output);\r\n}\r\n\r\nfunction GetPitchSummary(areas) {\r\n let pitches = {};\r\n if (areas.length === 0) return \"\";\r\n if (areas.length === 1) return GetOutputName(areas[0].SHAPE.RoofPitch + \"º\");\r\n for (var area of areas) {\r\n if (area.SHAPE.DesignType === \"Flat Roof\") {\r\n if (!pitches[\"Flat\"]) {\r\n pitches[\"Flat\"] = [];\r\n pitches[\"Flat\"].push(area.SHAPE.RoofPitch + \"º\");\r\n } else {\r\n if (!pitches[\"Flat\"].includes(area.SHAPE.RoofPitch + \"º\"))\r\n pitches[\"Flat\"].push(area.SHAPE.RoofPitch + \"º\");\r\n }\r\n } else if (area.SHAPE.DesignType === \"Gable\") {\r\n if (pitches[\"Gable\"] == null) {\r\n pitches[\"Gable\"] = [];\r\n pitches[\"Gable\"].push(area.SHAPE.RoofPitch + \"º\");\r\n } else {\r\n if (!pitches[\"Gable\"].includes(area.SHAPE.RoofPitch + \"º\"))\r\n pitches[\"Gable\"].push(area.SHAPE.RoofPitch + \"º\");\r\n }\r\n } else if (area.SHAPE.DesignType === \"Gable Hip Roof\") {\r\n if (pitches[\"Portal\"] == null) {\r\n pitches[\"Portal\"] = [];\r\n pitches[\"Portal\"].push(area.SHAPE.RoofPitch + \"º\");\r\n } else {\r\n if (!pitches[\"Portal\"].includes(area.SHAPE.RoofPitch + \"º\"))\r\n pitches[\"Portal\"].push(area.SHAPE.RoofPitch + \"º\");\r\n }\r\n }\r\n }\r\n\r\n let output = [];\r\n if (pitches[\"Flat\"]) {\r\n output.push(ConvertListToString(pitches[\"Flat\"]) + \" Flat\");\r\n }\r\n if (pitches[\"Gable\"]) {\r\n output.push(ConvertListToString(pitches[\"Gable\"]) + \" Pitched\");\r\n }\r\n if (pitches[\"Portal\"]) {\r\n output.push(ConvertListToString(pitches[\"Portal\"]) + \" Gable\");\r\n }\r\n return ConvertListToString(output);\r\n}\r\n\r\nexport function getBeamDetails(beamType, area) {\r\n // Each const requires multiple fallbacks as report gen and design cloud use different variable names\r\n // for the same data\r\n const beamsAndPosts = area?.BEAMS_AND_POSTS;\r\n const designType = area?.SHAPE?.DesignType || area?.DesignType || \"\";\r\n const beamColKeyShort = `BeamCol${beamType}`;\r\n const beamColKeyLong = `BeamColour${beamType}`;\r\n const beamTypeKey = `BeamType${beamType}`;\r\n const roofType1 = area?.SHAPE?.RoofType1 || area?.RoofType1 || \"\";\r\n const roofType2 = area?.SHAPE?.RoofType2 || area?.RoofType2 || \"\";\r\n const colour =\r\n beamsAndPosts?.[beamColKeyShort] ||\r\n beamsAndPosts?.[beamColKeyLong] ||\r\n area?.[beamColKeyShort] ||\r\n area?.[beamColKeyLong] ||\r\n \"TBA\";\r\n const hasPurlin = (beamsAndPosts?.CountsFromEngineering?.EngNumPurlins || area?.EngNumPurlins) > 0;\r\n const hasRafter = (beamsAndPosts?.CountsFromEngineering?.EngNumRafters || area?.EngNumRafters) > 0;\r\n const isGableOnly = designType === \"Gable Hip Roof\" && roofType1 === \"Gable\" && roofType2 === \"Gable\";\r\n const type = GetOutputName(beamsAndPosts?.[beamTypeKey] || area?.[beamTypeKey] || null);\r\n\r\n const beamNames = {\r\n \"Flat Roof\": {\r\n 1: \"Fascia\",\r\n ...(hasPurlin && { 2: \"Purlin\" }),\r\n ...(hasRafter && { 3: \"Rafter\" }),\r\n },\r\n \"Pitched Roof\": {\r\n 1: \"Rafter\",\r\n 3: \"Fascia\",\r\n 4: \"Pitching Beam\",\r\n ...(hasPurlin && { 2: \"Purlin\" }),\r\n },\r\n \"Gable Hip Roof\": {\r\n 1: \"Rafter\",\r\n 3: \"Edge Beam\",\r\n ...(!isGableOnly && { 4: \"Hip Beam\" }),\r\n ...(hasPurlin && { 2: \"Purlin\" }),\r\n },\r\n \"Flat Deck\": {\r\n 1: \"Bearer\",\r\n 2: \"Joist\",\r\n },\r\n };\r\n\r\n const name = beamNames[designType]?.[beamType] || null;\r\n\r\n if (name === null || type === null) {\r\n return null;\r\n }\r\n\r\n return { name, type, colour };\r\n}\r\n\r\nexport function GetNumberofSkylightsSummary(areas) {\r\n let syklights = 0;\r\n let types = [];\r\n for (var area of areas) {\r\n if (area.SKYLIGHTS.length > 0) {\r\n syklights += area.SKYLIGHTS.length;\r\n let type = \"Polycarbonate\";\r\n let skylight_type = area?.ROOF_SHEETING?.SkylightType;\r\n if (skylight_type) {\r\n if (Contains(skylight_type.toUpperCase(), \"SOLARSPAN\", \"VERSICLAD\", \"INSULROOF\")) {\r\n type = \"Insulated Panel\";\r\n } else if (Contains(skylight_type.toUpperCase(), \"ALSYNITE\")) {\r\n type = \"Alsynite\";\r\n }\r\n }\r\n if (!types.includes(type)) types.push(type);\r\n }\r\n }\r\n if (syklights === 0) return null;\r\n return syklights + \" \" + ConvertListToString(types) + \" Skylight sheets.\";\r\n}\r\n\r\nexport function GetNumberofSkylightsSummaryArea(area) {\r\n if (area.SKYLIGHTS.length > 0) return true;\r\n return false;\r\n}\r\n\r\nfunction Contains(value, values_to_check) {\r\n if (typeof values_to_check === \"string\") {\r\n return value.includes(values_to_check);\r\n }\r\n if (Array.isArray(values_to_check)) {\r\n for (let val of values_to_check) {\r\n if (value.includes(val)) return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction GetGutterTypes(areas) {\r\n let types = [];\r\n for (var area of areas) {\r\n let type = area.GUTTERS_AND_DOWNPIPES.GutterType;\r\n let colour =\r\n area.GUTTERS_AND_DOWNPIPES.GutterCol === \"Zincalume\" ? area.GUTTERS_AND_DOWNPIPES.GutterCol : \"Colorbond\";\r\n let combined = colour + \" \" + type;\r\n\r\n if (!types.includes(combined)) {\r\n types.push(combined);\r\n }\r\n }\r\n return ConvertListToString(types);\r\n}\r\n\r\nfunction GetDownpipeTypes(areas) {\r\n let types = [];\r\n for (var area of areas) {\r\n let dp_str = area.GUTTERS_AND_DOWNPIPES.DownpipeType;\r\n if (!dp_str.includes(\"PVC\")) dp_str = dp_str.replace(\"Downpipe\", \"Colorbond Downpipe\");\r\n if (!types.includes(dp_str)) types.push(dp_str);\r\n }\r\n return ConvertListToString(types);\r\n}\r\n\r\nfunction GetGableEndInfills(areas, back_side = false) {\r\n let types = [];\r\n for (var area of areas) {\r\n if (area.SHAPE.DesignType === \"Gable\" || area.SHAPE.DesignType === \"Gable Hip Roof\") {\r\n let infill = back_side ? area.GABLE_PARAMETERS.TrussInfill2 : area.GABLE_PARAMETERS.TrussInfill1;\r\n if (!types.includes(infill)) types.push(infill);\r\n }\r\n }\r\n return ConvertListToString(types);\r\n}\r\n\r\nfunction GetPortalFrames(areas) {\r\n let types = [];\r\n for (var area of areas) {\r\n if (area.SHAPE.DesignType === \"Gable Hip Roof\") {\r\n if (!types.includes(GetOutputName(area.BEAMS_AND_POSTS.PostType)))\r\n types.push(GetOutputName(area.BEAMS_AND_POSTS.PostType));\r\n }\r\n }\r\n return ConvertListToString(types);\r\n}\r\nfunction GetPosts(areas) {\r\n let types = [];\r\n for (var area of areas) {\r\n if (!types.includes(GetOutputName(area.BEAMS_AND_POSTS.PostType)))\r\n types.push(GetOutputName(area.BEAMS_AND_POSTS.PostType));\r\n }\r\n return ConvertListToString(types);\r\n}\r\n\r\nfunction HasBoxGutters(areas) {\r\n for (var area of areas) {\r\n {\r\n if (\r\n area.GUTTERS_AND_DOWNPIPES.GutterF == 2 ||\r\n area.GUTTERS_AND_DOWNPIPES.GutterB == 2 ||\r\n area.GUTTERS_AND_DOWNPIPES.GutterL == 2 ||\r\n area.GUTTERS_AND_DOWNPIPES.GutterR == 2\r\n )\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nfunction GetHasDownlightFlashing(areas) {\r\n for (var area of areas) {\r\n {\r\n if (area.SHAPE.DesignType === \"Gable\" || area.SHAPE.DesignType === \"Gable Hip Roof\") {\r\n if (isTrue(area.GABLE_PARAMETERS.DownlightFlashing)) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nfunction GetFootingSummary(areas) {\r\n const carportMode = areas[0]?.Description === \"National Carport\";\r\n let footingTypes = [];\r\n\r\n for (let area of areas) {\r\n // Get default footing type\r\n let defaultFootingType = area?.BEAMS_AND_POSTS?.FootingType ?? \"\";\r\n\r\n if (!footingTypes.includes(defaultFootingType)) {\r\n footingTypes.push(defaultFootingType);\r\n }\r\n\r\n // Get footing mods\r\n if (area?.Footings?.length > 0) {\r\n footingTypes = area?.Footings.reduce((unique, item) => {\r\n if (!unique.includes(item.Kind)) {\r\n unique.push(item.Kind);\r\n }\r\n return unique;\r\n }, footingTypes);\r\n }\r\n }\r\n\r\n footingTypes = footingTypes.map((item) => item.replace(\"Concrete In\", \"Concrete Piers in Ground\"));\r\n\r\n // Add In Ground & Bolt to Slab counts for carports\r\n if (carportMode) {\r\n const boltToSlabCount = areas[0]?.Footings?.length || 0;\r\n const inGroundCount = 4 - boltToSlabCount;\r\n\r\n if (boltToSlabCount > 0 && inGroundCount > 0) {\r\n return `Concrete Piers in Ground (x${inGroundCount}) & Bolt to Slab (x${boltToSlabCount})`;\r\n } else if (boltToSlabCount > 0) {\r\n return \"Bolt to Slab\";\r\n } else {\r\n return \"Concrete Piers in Ground\";\r\n }\r\n }\r\n\r\n return (footingTypes.length > 1 ? \"Mixed: \" : \"\") + ConvertListToString(footingTypes);\r\n}\r\n\r\nexport function GetAreaDescription(area, withPitch = false) {\r\n let areaDescription = \"\";\r\n const designType = area?.SHAPE?.DesignType;\r\n\r\n if (designType === \"Flat Deck\") {\r\n return \"Deck\";\r\n }\r\n\r\n if (designType === \"Flat Roof\") {\r\n if (area?.SHAPE?.DesignTemplateType === \"National Carport\") {\r\n return \"National Carport\";\r\n }\r\n\r\n if (area.Mode == \"Galv\") {\r\n areaDescription = \"Galvanised Flat Roof\";\r\n } else {\r\n areaDescription = \"Flat Verandah\";\r\n }\r\n } else if (designType === \"Gable Roof\" || designType === \"Pitched Roof\") {\r\n areaDescription = \"Pitched Verandah\";\r\n } else if (designType === \"Gable Hip Roof\") {\r\n const RoofType1 = area.SHAPE.RoofType1;\r\n const RoofType2 = area.SHAPE.RoofType2;\r\n\r\n if (RoofType1 === RoofType2 && RoofType1 === \"Gable\") {\r\n areaDescription = \"Portal Gable\";\r\n } else if (RoofType1 === RoofType2) {\r\n areaDescription = RoofType1 + \" Portal Gable\";\r\n } else if (RoofType2 === \"Gable\") {\r\n areaDescription = \"Single \" + RoofType1 + \" Portal Gable\";\r\n } else if (RoofType1 === \"Gable\") {\r\n areaDescription = \"Single \" + RoofType2 + \" Portal Gable\";\r\n } else {\r\n areaDescription += \"Portal Gable Mixed End Types\";\r\n }\r\n\r\n if (area.BEAMS_AND_POSTS.PortalPostType === 1) {\r\n areaDescription = areaDescription.replace(\"Portal Gable\", \"Gable\");\r\n\r\n if (!isTrue(area.BEAMS_AND_POSTS.HasRidgeBeam)) {\r\n areaDescription += \" (Purlins On Top)\";\r\n }\r\n } else {\r\n if (isTrue(area.BEAMS_AND_POSTS.HasRidgeBeam)) {\r\n areaDescription += \" (Inset Purlins)\";\r\n }\r\n }\r\n }\r\n\r\n if (withPitch) areaDescription += \" (\" + area.SHAPE.RoofPitch + \"º\" + \")\";\r\n\r\n return areaDescription;\r\n}\r\n\r\nexport function GetDesignStringShort(areas) {\r\n if (areas.length === 1) return GetAreaDescription(areas[0]);\r\n let areas_types = [];\r\n for (let area of areas) {\r\n let this_desc = GetAreaDescription(area);\r\n\r\n if (this_desc) {\r\n if (!areas_types.includes(this_desc)) areas_types.push(this_desc);\r\n }\r\n }\r\n if (areas_types.length === 1) {\r\n if (areas.length > 1) return areas_types[0] + \" Combination\";\r\n }\r\n if (areas_types.length > 1) {\r\n let out_str = \"\";\r\n for (var i = 0; i < areas_types.length - 1; i++) {\r\n if (out_str != \"\") out_str += \", \";\r\n out_str += areas_types[i].replace(\" Verandah\", \"\");\r\n }\r\n out_str += \" and \" + areas_types[areas_types.length - 1] + \" Combination\";\r\n return out_str;\r\n }\r\n return \"None\";\r\n}\r\n\r\nexport function GenerateSummaryRaw(job, forOrderForm) {\r\n if (!job) return null;\r\n\r\n // Default params don't work in report gen\r\n if (forOrderForm === undefined) {\r\n forOrderForm = false;\r\n }\r\n\r\n const list_of_supply_and_install_items = {};\r\n const DeckMode = job.DesignParameters.DeckMode === 1;\r\n\r\n list_of_supply_and_install_items[\"Size\"] = GetSizeSummary(job.AreaSpecifications);\r\n list_of_supply_and_install_items[\"Height\"] = GetHeights(job.AreaSpecifications) + \" mm\";\r\n\r\n if (DeckMode) {\r\n const bearer_colour = job.AreaSpecifications[0]?.BEAMS_AND_POSTS.BeamCol1.toUpperCase().includes(\"GALV\")\r\n ? \"Galvanised\"\r\n : \"Colorbond (P/C)\";\r\n list_of_supply_and_install_items[\"Bearers\"] = `${bearer_colour} ${GetOutputName(\r\n job.AreaSpecifications[0]?.BEAMS_AND_POSTS.BeamType1\r\n )}`;\r\n\r\n const joist_colour = job.AreaSpecifications[0]?.BEAMS_AND_POSTS.BeamCol2.toUpperCase().includes(\"GALV\")\r\n ? \"Galvanised\"\r\n : \"Colorbond (P/C)\";\r\n list_of_supply_and_install_items[\"Joists\"] = `${joist_colour} ${GetOutputName(\r\n job.AreaSpecifications[0]?.BEAMS_AND_POSTS.BeamType2\r\n )}`;\r\n\r\n if (forOrderForm) {\r\n const post_colour = job.AreaSpecifications[0]?.BEAMS_AND_POSTS.PostCol.toUpperCase().includes(\"GALV\")\r\n ? \"Galvanised\"\r\n : \"Colorbond (P/C)\";\r\n list_of_supply_and_install_items[\"Posts\"] = `${post_colour} ${GetPosts(job.AreaSpecifications)} posts`;\r\n }\r\n } else {\r\n list_of_supply_and_install_items[\"Roofing Material\"] =\r\n GetRoofingSummary(job.AreaSpecifications) + \" roof sheeting\";\r\n\r\n const skylight_summary = GetNumberofSkylightsSummary(job.AreaSpecifications);\r\n if (skylight_summary) list_of_supply_and_install_items[\"Skylights\"] = skylight_summary;\r\n\r\n list_of_supply_and_install_items[\"Roof Pitch\"] = GetPitchSummary(job.AreaSpecifications);\r\n list_of_supply_and_install_items[\"Gutters\"] = GetGutterTypes(job.AreaSpecifications);\r\n\r\n if (HasBoxGutters(job.AreaSpecifications)) {\r\n list_of_supply_and_install_items[\"Box Gutter\"] = \"Colorbond box gutters where indicated.\";\r\n }\r\n\r\n list_of_supply_and_install_items[\"Downpipes\"] = GetDownpipeTypes(job.AreaSpecifications);\r\n\r\n const infills_front = GetGableEndInfills(job.AreaSpecifications);\r\n const infills_back = GetGableEndInfills(job.AreaSpecifications, true);\r\n\r\n if (infills_front && infills_front === infills_back) {\r\n list_of_supply_and_install_items[\"Infills\"] = `${infills_front} to gable ends`;\r\n } else {\r\n if (infills_front) list_of_supply_and_install_items[\"Front Infills\"] = `${infills_front} gable end`;\r\n if (infills_back) list_of_supply_and_install_items[\"Rear Infills\"] = `${infills_back} gable end`;\r\n }\r\n\r\n if (forOrderForm) {\r\n const portal_frames = GetPortalFrames(job.AreaSpecifications);\r\n list_of_supply_and_install_items[\"Frame\"] = portal_frames\r\n ? `${portal_frames} Colorbond Post and Portal Frames`\r\n : `${GetPosts(job.AreaSpecifications)} Colorbond Posts`;\r\n\r\n const groupedBeamDetails = {};\r\n for (let area of job.AreaSpecifications) {\r\n for (let i = 1; i <= 4; i++) {\r\n let beamDetails = getBeamDetails(i, area);\r\n if (beamDetails) {\r\n const { name, type } = beamDetails;\r\n if (groupedBeamDetails[name]) {\r\n let types = groupedBeamDetails[name].split(\", \");\r\n if (!types.includes(type)) {\r\n groupedBeamDetails[name] += `, ${type}`;\r\n }\r\n } else {\r\n groupedBeamDetails[name] = type;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let name in groupedBeamDetails) {\r\n if (groupedBeamDetails.hasOwnProperty(name)) {\r\n list_of_supply_and_install_items[name] = groupedBeamDetails[name];\r\n }\r\n }\r\n }\r\n\r\n if (GetHasDownlightFlashing(job.AreaSpecifications))\r\n list_of_supply_and_install_items[\"Downlight Flashing\"] = \"Matching Colorbond central down light housing\";\r\n\r\n list_of_supply_and_install_items[\"Footing Type\"] = GetFootingSummary(job.AreaSpecifications);\r\n }\r\n\r\n return list_of_supply_and_install_items;\r\n}\r\n\r\nexport function GenerateSummary(job) {\r\n var list_of_supply_and_install_items = GenerateSummaryRaw(job);\r\n let summary_list = [];\r\n\r\n for (let key in list_of_supply_and_install_items) {\r\n summary_list.push(\r\n \r\n \r\n {key}: \r\n \r\n {list_of_supply_and_install_items[key]}\r\n
\r\n );\r\n }\r\n return summary_list;\r\n}\r\n\r\n// COMMMON FUNCTIONS\r\nexport function isTrue(value, value2 = null, value3 = null) {\r\n let val = isThisTrue(value);\r\n let val2 = isThisTrue(value2);\r\n let val3 = isThisTrue(value3);\r\n return val | val2 | val3;\r\n}\r\nexport function isThisTrue(value) {\r\n if (value === undefined) return false;\r\n if (value === null) return false;\r\n if (typeof value === \"string\") {\r\n if (value === \"1\") return true;\r\n if (value.toUpperCase() === \"TRUE\") return true;\r\n }\r\n if (value === 1) return true;\r\n if (value === true) return true;\r\n return false;\r\n}\r\n\r\nexport function toNumber(value, allow_negative = true, allow_decimal = true) {\r\n if (typeof value === \"number\") return value;\r\n if (!value) return 0;\r\n if (value.replace) {\r\n let neg = false;\r\n if (allow_negative && value.startsWith(\"-\")) neg = true;\r\n let str = value.replace(/[^0-9.]/g, \"\").split(\".\");\r\n let form_str = (neg ? \"-\" : \"\") + str[0] + (allow_decimal && str.length > 1 ? \".\" + str[1] : \"\");\r\n return Number(form_str);\r\n }\r\n return Number(value);\r\n}\r\n","import React from \"react\";\r\nimport { UPDATE_AREA_SPECIFICATION } from \"./jobState\";\r\nimport { BASIC_SPECS_SECTIONS } from \"./jobState_Schemas\";\r\nimport { WarningIcon_Orange } from \"./jobState_Validation\";\r\n\r\n// Returns relative str position in array\r\nfunction searchStringInArray(str, strArray) {\r\n for (var j = 0; j < strArray.length; j++) {\r\n if (strArray[j].includes(str)) return j;\r\n }\r\n return -1;\r\n}\r\n\r\nfunction findObjectKeyByRef2(objects, ref2) {\r\n for (let i = 0; i < objects.length; i++) {\r\n if (objects[i].Ref2 === ref2) {\r\n return i;\r\n }\r\n }\r\n return -1; // If the object with the given Ref2 is not found, return -1\r\n}\r\n\r\nexport function bondorBrickworkWarning() {\r\n return (\r\n \r\n {WarningIcon_Orange}A minimum of 1500mm of brickwork above the attachment point is required for Bondor\r\n Products. Continue at your own risk.\r\n \r\n
\r\n );\r\n}\r\n\r\nexport function insulatedSpanWarning({ job, sheetName, length, areaIndex, this_area, roofsheet, maxSpan }) {\r\n let message = [\r\n <>\r\n {\r\n \"Please change Roofsheet, the structures size, remove the added purlin or contact support before proceeding.\"\r\n }\r\n >,\r\n ];\r\n if (length > maxSpan * 2)\r\n message = [<>{\"Please change Roofsheet, the structures size or contact support before proceeding.\"}>];\r\n\r\n return {\r\n error: true,\r\n title: `Roofsheet '${sheetName}' cannot have multiple Purlins in a single Area.`,\r\n message,\r\n primaryActionText: \"Cancel\",\r\n secondaryActionText: `Change Depth to '${maxSpan * 2}mm'`,\r\n secondaryAction: () => {\r\n this_area[\"SHAPE\"][\"Depth\"] = maxSpan * 2;\r\n return {\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: null,\r\n value: this_area,\r\n error: null,\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport function singleSpanWarning({ job, sheetName, length, areaIndex, this_area, roofsheet, maxSpan }) {\r\n let message = [\r\n <>\r\n {WarningIcon_Orange}Roofsheet for Area {areaIndex + 1} appears over span. Max sheet span=\r\n {maxSpan}mm. Please confirm.\r\n >,\r\n ];\r\n\r\n return {\r\n error: true,\r\n title: `Roofsheet '${sheetName}' cannot have Purlins in a single Area.`,\r\n message,\r\n primaryActionText: \"Cancel\",\r\n secondaryActionText: `Change Depth to '${maxSpan}mm'`,\r\n secondaryAction: () => {\r\n this_area[\"SHAPE\"][\"Depth\"] = maxSpan;\r\n return {\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: null,\r\n value: this_area,\r\n error: null,\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport function masonryBondorWarning({}) {\r\n return {\r\n error: true,\r\n title: `BONDOR ATTACHMENT REQUIREMENTS`,\r\n message: [\r\n <>\r\n {`You have selected to attach bondor to a masonry wall. \r\n A minimum of 1500mm of brickwork (either concrete filled or tied down with anchor rods) \r\n above the attachment point is required for Bondor Products.`}\r\n \r\n \r\n {`By clicking 'I Agree' you indemnify ${window.brand} against all liability for the decision to\r\n continue. If you have any doubts, select ‘Decline’ and seek the advice of a suitably\r\n qualified professional prior to continuing.`}\r\n >,\r\n ],\r\n primaryActionText: \"I Agree\",\r\n secondaryActionText: \"Decline\",\r\n primaryAction: () => {\r\n // this_area[\"Footings\"][findObjectKeyByRef2(this_area[\"Footings\"], post)].Kind = \"Concrete In\";\r\n // return {\r\n // type: UPDATE_AREA_SPECIFICATION,\r\n // index: areaIndex,\r\n // section: null,\r\n // subsection: null,\r\n // parameter: null,\r\n // value: this_area,\r\n // error: null,\r\n // };\r\n },\r\n };\r\n}\r\n\r\nexport function postFootingWarning({ postName, footingType, areaIndex, this_area, post }) {\r\n return {\r\n error: true,\r\n title: `Post '${postName}' is not available in '${footingType}'.`,\r\n message: [<>{\"Please change post, the structures footing type or contact support before proceeding.\"}>],\r\n primaryActionText: \"Cancel\",\r\n secondaryActionText: \"Change to 'Concrete In Ground'\",\r\n secondaryAction: () => {\r\n this_area[\"Footings\"][findObjectKeyByRef2(this_area[\"Footings\"], post)].Kind = \"Concrete In\";\r\n return {\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: null,\r\n value: this_area,\r\n error: null,\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport function postNotchedWarning({ postName, areaIndex, this_area }) {\r\n return {\r\n error: true,\r\n title: `Post '${postName}' is not available in Notched.`,\r\n message: [<>{\"Please change post, the structures post position or contact support before proceeding.\"}>],\r\n primaryActionText: \"Cancel\",\r\n secondaryActionText: \"Change to 'Post Behind Beam'\",\r\n secondaryAction: () => {\r\n this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CornerPostsFullHeight = 3;\r\n this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].IntermediatePostsFullHeight = 3;\r\n return {\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: null,\r\n value: this_area,\r\n error: null,\r\n };\r\n },\r\n };\r\n}\r\n\r\nexport function postHeightWarning({\r\n job,\r\n pos,\r\n maxPostHeight,\r\n confirmEngineeringAction,\r\n user,\r\n overrideEngineeringAction,\r\n postName,\r\n height,\r\n engValid,\r\n}) {\r\n if (pos) {\r\n let postHeight = 0;\r\n const parsedHeight = parseInt(height, 10);\r\n const isHeightValid = !isNaN(parsedHeight);\r\n\r\n if (isHeightValid) {\r\n postHeight = parsedHeight;\r\n } else {\r\n // No {height} provided so search engineering results for the longest post of type {postName}\r\n const postsFromEngineering = job?.QuoteParameters?.ENGINEERING?.EngineeringResults?.ProcessedLoadData?.Cols;\r\n const postsArray = Object.values(postsFromEngineering || {});\r\n const postsFilteredByName = postsArray.filter((item) => item.ColumnType === postName);\r\n const postHeights = postsFilteredByName.map((item) => item.Height);\r\n const longestPost = postHeights.length > 0 ? Math.max(...postHeights) : null;\r\n\r\n // Fall back to building height if longest post can't be determined from engineering\r\n postHeight = longestPost !== null ? longestPost : job?.AreaSpecifications[0]?.SHAPE?.Height;\r\n }\r\n\r\n if (postHeight > maxPostHeight && !engValid) {\r\n return {\r\n error: true,\r\n title: `Post '${postName}' height exceeds maximum of ${maxPostHeight}mm.`,\r\n message: [<>{\"Please modify the design or contact support before proceeding.\"}>],\r\n primaryActionText: \"Cancel\",\r\n secondaryActionText: \"Check Engineering\",\r\n secondaryAction: confirmEngineeringAction,\r\n tertiaryActionText: user.Role >= 91 ? \"Authorise Override?\" : \"\",\r\n tertiaryAction: user.Role >= 91 ? overrideEngineeringAction : {},\r\n };\r\n }\r\n }\r\n}\r\n\r\n// Gets relative position of SL in the promptTextCode\r\nexport function getPos({ currentPOA, findPostProduct }) {\r\n let pos = searchStringInArray(currentPOA, findPostProduct[0]?.PromptTextCodes?.split(\" \"));\r\n if (pos === -1) pos = searchStringInArray(\"SL=\", findPostProduct[0]?.PromptTextCodes?.split(\" \"));\r\n\r\n return pos;\r\n}\r\n\r\n// Gets the max height from POA and factors in extraCut (Concrete in -600 or Bolt to slab 100.)\r\nexport function getMaxPostHeight({ findPostProduct, pos, currentPOA, extraCut }) {\r\n let maxPostHeight = findPostProduct[0]?.PromptTextCodes?.split(\" \")[pos].split(\"|\").at(-1).split(\"(\")[0];\r\n\r\n // Check if control code contains the region (i.e. SL_EMU=4000)\r\n if (maxPostHeight.includes(currentPOA)) {\r\n maxPostHeight = maxPostHeight.split(currentPOA + \"=\")[1];\r\n }\r\n\r\n maxPostHeight = parseInt(maxPostHeight, 10);\r\n\r\n if (isNaN(maxPostHeight)) {\r\n maxPostHeight = 0;\r\n }\r\n\r\n maxPostHeight -= extraCut;\r\n\r\n // Ensure this function doesn't return a negative number\r\n maxPostHeight = Math.max(0, maxPostHeight);\r\n\r\n return maxPostHeight;\r\n}\r\n\r\n// Helper to convert string to function\r\nexport function createConditionFunction(conditionStrings) {\r\n // Combine all condition strings into one using logical AND\r\n const combinedCondition = conditionStrings.join(\" && \");\r\n\r\n // Return a function that evaluates the combined condition\r\n return (props) => {\r\n // Extract props keys for local evaluation\r\n const keys = Object.keys(props);\r\n\r\n // Create variables for each prop key in the condition\r\n const variables = keys.map((key) => `const ${key} = props['${key}'];`).join(\" \");\r\n\r\n // Use new Function to create a function that accepts props and evaluates combinedCondition\r\n return new Function(\r\n \"props\",\r\n `\r\n ${variables}\r\n return (${combinedCondition});\r\n `\r\n )(props);\r\n };\r\n}\r\n\r\nexport function interpolate(template, data) {\r\n return template.replace(/{([^{}]*)}/g, (a, b) => {\r\n return Function(\"data\", \"with(data) { return \" + b + \"}\")(data);\r\n });\r\n}\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport * as COMMON from \"../components/Common\";\r\nimport * as CONFIG from \"./configState\";\r\nimport {\r\n createConditionFunction,\r\n getMaxPostHeight,\r\n getPos,\r\n insulatedSpanWarning,\r\n interpolate,\r\n postFootingWarning,\r\n postHeightWarning,\r\n postNotchedWarning,\r\n singleSpanWarning,\r\n singpleSpanWarning,\r\n} from \"./warningHelper\";\r\nimport { SHOW_DESIGNER_MESSAGE, validateFullJob } from \"./jobState_Validation\";\r\nimport { toggleDesigner } from \"./appState\";\r\n\r\n// Callback function\r\nfunction allAreaSpecifications(job, callback) {\r\n for (let index in job.AreaSpecifications) {\r\n let areaIndex = Number(index);\r\n const this_area = job.AreaSpecifications[Number(areaIndex)];\r\n\r\n // Call the callback function and pass the necessary values\r\n callback(this_area, areaIndex);\r\n }\r\n}\r\n\r\nfunction insulatedMultispanWarning({ job, engValid, this_area, areaIndex }) {\r\n let is_flat = false;\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) is_flat = true;\r\n // let AreaMaxResults = job.QuoteParameters?.ENGINEERING?.EngineeringResults?.AreaMaxResults?.[areaIndex];\r\n if (\r\n is_flat &&\r\n this_area?.ROOF_SHEETING?.RoofSheetData?.[\"InsulatedOverspan\"] &&\r\n this_area?.ROOF_SHEETING?.RoofSheetData?.PressureTableMaxSpanSingle &&\r\n !engValid\r\n ) {\r\n let sheetName, length, maxSpan, roofsheet;\r\n maxSpan = this_area?.ROOF_SHEETING?.RoofSheetData?.PressureTableMaxSpanDouble;\r\n sheetName = this_area?.ROOF_SHEETING?.RoofSubType;\r\n length = this_area.SHAPE.Depth;\r\n return insulatedSpanWarning({ job, sheetName, length, areaIndex, this_area, roofsheet, maxSpan });\r\n }\r\n}\r\n\r\nfunction insulatedSinglespanWarning({ job, engValid, this_area, areaIndex }) {\r\n const roofsheet_data = this_area?.ROOF_SHEETING;\r\n if (roofsheet_data?.RoofSheetData?.single_span_only && window.brand === \"Lysaght\") {\r\n //secondary check for potential roof sheet overspan on single span sheets\r\n let width = this_area?.META?.RoofSheetSpan;\r\n\r\n if (this_area.SHAPE.SheetDirection === \"Left\" || this_area.SHAPE.SheetDirection === \"Right\")\r\n width = width - this_area.SHAPE.OH_Left - this_area.SHAPE.OH_Right;\r\n else width = width - this_area.SHAPE.OH_Front - this_area.SHAPE.OH_Back;\r\n width = width / Math.cos(COMMON.DegreesToRadians(this_area.SHAPE.RoofPitch));\r\n if (width && width > 1000) {\r\n let max_span = roofsheet_data?.RoofSheetData?.max_internal_span;\r\n\r\n if (max_span && width - 65 > max_span) {\r\n let sheetName, length, maxSpan, roofsheet;\r\n maxSpan = max_span;\r\n sheetName = this_area?.ROOF_SHEETING?.RoofSubType;\r\n length = this_area.SHAPE.Depth;\r\n return singleSpanWarning({ job, sheetName, length, areaIndex, this_area, roofsheet, maxSpan });\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction maxPostHeightWarning({\r\n job,\r\n engValid,\r\n this_area,\r\n areaIndex,\r\n config,\r\n app,\r\n user,\r\n confirmEngineeringAction,\r\n overrideEngineeringAction,\r\n}) {\r\n // Check max height for posts\r\n const isFlanged =\r\n job?.AreaSpecifications[areaIndex].BEAMS_AND_POSTS.CornerPostsFullHeight === 2 ||\r\n job?.AreaSpecifications[areaIndex].BEAMS_AND_POSTS.IntermediatePostsFullHeight === 2;\r\n\r\n let product = config.post_types[job?.AreaSpecifications[areaIndex]?.BEAMS_AND_POSTS?.PostType]?.[\"Product Code\"];\r\n\r\n if (!product) return;\r\n\r\n // Check if the post if flanged.\r\n if (isFlanged) {\r\n product += \"F\";\r\n }\r\n\r\n // Initialize findPostProduct as an empty array\r\n let findPostProduct = [];\r\n\r\n if (app && app.pricefile && Array.isArray(app.pricefile.data)) {\r\n findPostProduct = app.pricefile.data.filter((e) => product === e.ProductIndex);\r\n }\r\n\r\n // get POA\r\n let currentPOA = \"SL_\" + job?.POA;\r\n\r\n let postChanges = job?.AreaSpecifications[areaIndex]?.POSTMODIFICATIONS;\r\n let footingChanges = job?.AreaSpecifications[areaIndex]?.Footings;\r\n let currentPosts = {};\r\n\r\n // extra cut as 500 for post all in concrete no post changes.\r\n let extraCut = 0;\r\n\r\n if (\r\n (footingChanges?.length === 0 || footingChanges === undefined) &&\r\n (postChanges?.length === 0 || postChanges === undefined)\r\n ) {\r\n extraCut = 0;\r\n } else {\r\n // Loop through footings and posts\r\n\r\n if (footingChanges)\r\n for (var foot of footingChanges) {\r\n const ref = foot?.Ref2 ? foot.Ref2 : foot.Ref;\r\n currentPosts[ref] = { Ref: ref, footing: foot.Kind };\r\n }\r\n\r\n if (postChanges)\r\n for (var post of postChanges) {\r\n const ref = post?.Ref2 ? post?.Ref2 : post?.Ref;\r\n if (currentPosts[ref]) {\r\n currentPosts[ref][\"post\"] =\r\n post.Section === \"\"\r\n ? job?.AreaSpecifications[areaIndex].BEAMS_AND_POSTS.PostType\r\n : post.Section;\r\n currentPosts[ref][\"Length\"] = post?.Length;\r\n } else {\r\n currentPosts[ref] = {\r\n Ref: ref,\r\n post:\r\n post.Section === \"\"\r\n ? job?.AreaSpecifications[areaIndex].BEAMS_AND_POSTS.PostType\r\n : post.Section,\r\n Length: post.Length,\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Check default posts\r\n if (findPostProduct[0]?.PromptTextCodes) {\r\n const pos = getPos({ currentPOA, findPostProduct });\r\n\r\n if (pos > -1) {\r\n let productName;\r\n for (var post_type of Object.values(config.post_types)) {\r\n if (post_type[\"Product Code\"] === findPostProduct[0]?.ProductIndex) {\r\n productName = job?.AreaSpecifications[areaIndex].BEAMS_AND_POSTS.PostType;\r\n break;\r\n }\r\n }\r\n\r\n const maxPostHeight = getMaxPostHeight({ findPostProduct, pos, currentPOA, extraCut });\r\n\r\n let warning = postHeightWarning({\r\n job,\r\n pos,\r\n maxPostHeight,\r\n confirmEngineeringAction,\r\n user,\r\n overrideEngineeringAction,\r\n postName: productName,\r\n engValid,\r\n });\r\n\r\n if (warning) {\r\n return warning;\r\n }\r\n }\r\n }\r\n\r\n // Check Changed Posts\r\n if (window.LYSAGHT)\r\n for (var _post of Object.keys(currentPosts)) {\r\n if (currentPosts[_post]?.post) {\r\n // Find changed post\r\n let productCode = config.post_types[currentPosts[_post]?.post][\"Product Code\"];\r\n\r\n // Check if the post if flanged.\r\n if (isFlanged) {\r\n productCode += \"F\";\r\n }\r\n\r\n let findChangedPostProduct = app.pricefile.data.filter((e) => productCode === e.ProductIndex);\r\n\r\n let productName = currentPosts[_post]?.post;\r\n\r\n // Check if allowed notched and notched selected\r\n if (!config.post_types[currentPosts[_post]?.post].allow_notched && isFlanged) {\r\n let warning = postNotchedWarning({\r\n postName: productName,\r\n areaIndex,\r\n this_area,\r\n });\r\n\r\n if (warning) {\r\n return warning;\r\n }\r\n }\r\n\r\n // Check if footing change allowed to be flanged (\"Bolt to slab\") with current post\r\n if (\r\n currentPosts[_post]?.footing &&\r\n currentPosts[_post]?.footing !== \"Concrete In\" &&\r\n !config.post_types[currentPosts[_post]?.post].allow_notched &&\r\n !config.post_types[currentPosts[_post]?.post]?.Base_Plate_Code_Flat_Internal\r\n ) {\r\n let warning = postFootingWarning({\r\n areaIndex,\r\n this_area,\r\n footingType: currentPosts[_post]?.footing,\r\n postName: productName,\r\n post: _post,\r\n });\r\n\r\n if (warning) {\r\n return warning;\r\n }\r\n }\r\n\r\n // Only check if there are promptcodes\r\n if (findChangedPostProduct[0]?.PromptTextCodes) {\r\n const pos = getPos({ currentPOA, findPostProduct: findChangedPostProduct });\r\n\r\n if (pos > -1) {\r\n console.log(\r\n \"findChangedPostProduct\",\r\n findChangedPostProduct,\r\n findChangedPostProduct[0]?.PromptTextCodes\r\n );\r\n\r\n if (currentPosts[_post]?.footing) {\r\n if (currentPosts[_post].footing !== \"Concrete In\") {\r\n extraCut = 0;\r\n } else extraCut = 500; // Change to default footing\r\n }\r\n\r\n const maxPostHeight = getMaxPostHeight({\r\n findPostProduct: findChangedPostProduct,\r\n pos,\r\n currentPOA,\r\n extraCut,\r\n });\r\n\r\n let warning = postHeightWarning({\r\n job,\r\n pos,\r\n maxPostHeight,\r\n confirmEngineeringAction,\r\n user,\r\n overrideEngineeringAction,\r\n postName: productName,\r\n height: currentPosts[_post].Length,\r\n engValid,\r\n });\r\n\r\n if (warning) {\r\n return warning;\r\n }\r\n }\r\n }\r\n } else {\r\n // Only a footing change.\r\n // Check if footing change allowed to be flanged (\"Bolt to slab\") with default post\r\n if (\r\n currentPosts[_post]?.footing &&\r\n currentPosts[_post]?.footing !== \"Concrete In\" &&\r\n !config.post_types[currentPosts[_post]?.post]?.allow_notched &&\r\n !config.post_types[job?.AreaSpecifications[areaIndex]?.BEAMS_AND_POSTS?.PostType]\r\n ?.Base_Plate_Code_Flat_Internal\r\n ) {\r\n let warning = postFootingWarning({\r\n areaIndex,\r\n this_area,\r\n footingType: currentPosts[_post]?.footing,\r\n postName: job?.AreaSpecifications[areaIndex]?.BEAMS_AND_POSTS?.PostType,\r\n post: _post,\r\n });\r\n\r\n if (warning) {\r\n return warning;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n// When set, the software will ignore these warnings in the future for that AreaIndex.\r\nfunction setIgnoreAreaWarning({ areaIndex, dispatch, warning, job, config, app }) {\r\n let new_job = COMMON.deepCopy(job);\r\n\r\n if (!new_job.AreaSpecifications[areaIndex].IGNORED_WARNINGS) {\r\n new_job.AreaSpecifications[areaIndex].IGNORED_WARNINGS = [];\r\n }\r\n\r\n // Find the index of the warning with the same title\r\n const warningIndex = new_job.AreaSpecifications[areaIndex].IGNORED_WARNINGS.findIndex(\r\n (ignoredWarning) => ignoredWarning.title === warning.title\r\n );\r\n\r\n if (warningIndex !== -1) {\r\n // Replace the existing warning with the new one\r\n new_job.AreaSpecifications[areaIndex].IGNORED_WARNINGS[warningIndex] = warning;\r\n } else {\r\n // Add the new warning if it doesn't already exist\r\n new_job.AreaSpecifications[areaIndex].IGNORED_WARNINGS.push(warning);\r\n }\r\n\r\n // Forced compliance/mass settings, updates\r\n new_job = validateFullJob(config, new_job, -1, app);\r\n\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n}\r\n\r\n// Remove ignored warning from AreaSpecifications[areaIndex].IGNORED_WARNINGS\r\nfunction removeIgnoreAreaWarning({ areaIndex, dispatch, warning, job, config, app }) {\r\n let new_job = COMMON.deepCopy(job);\r\n\r\n if (new_job.AreaSpecifications[areaIndex].IGNORED_WARNINGS) {\r\n new_job.AreaSpecifications[areaIndex].IGNORED_WARNINGS = new_job.AreaSpecifications[\r\n areaIndex\r\n ].IGNORED_WARNINGS.filter((ignoredWarning) => ignoredWarning.title !== warning.title);\r\n\r\n // forced compliance/ mass settings, updates\r\n new_job = validateFullJob(config, new_job, -1, app);\r\n\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n }\r\n}\r\n\r\nfunction checkIgnoreWarning({ job, areaIndex, warning }) {\r\n const ignoredWarnings = job?.AreaSpecifications[areaIndex].IGNORED_WARNINGS;\r\n\r\n if (ignoredWarnings) {\r\n const foundWarning = ignoredWarnings.find((ignoredWarning) => ignoredWarning.title === warning.title);\r\n\r\n if (foundWarning) {\r\n return { ...foundWarning };\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction sidesBlockedToAttached({ job, areaIndex, config, app, dispatch }) {\r\n const blockingCount = job?.SiteParameters?.WindData?.Blocking || 0;\r\n\r\n const attachmentCount = job.AreaSpecifications.reduce((count, area, index) => {\r\n const attachments = job?.AreaSpecifications?.[areaIndex]?.ATTACHMENTS || {};\r\n return (\r\n count +\r\n (attachments.AttachmentLeft || 0) +\r\n (attachments.AttachmentRight || 0) +\r\n (attachments.AttachmentBottom || 0) +\r\n (attachments.AttachmentTop || 0)\r\n );\r\n }, 0);\r\n\r\n const blockingVsAttachment = `${blockingCount},${attachmentCount}`;\r\n\r\n const warning = {\r\n title: \"Blocked to Attached Warning\",\r\n detail: blockingVsAttachment,\r\n };\r\n\r\n const ignoreWarning = checkIgnoreWarning({ job, areaIndex, warning });\r\n\r\n if (ignoreWarning && ignoreWarning?.detail === blockingVsAttachment) {\r\n return;\r\n }\r\n\r\n if (blockingCount < attachmentCount) {\r\n return {\r\n error: true,\r\n title: \"Blocked to Attached Warning\",\r\n message: (\r\n <>\r\n The number of sides blocked ({blockingCount}) is less than the number of sides attached (\r\n {attachmentCount}). This may affect the structural integrity of your design.\r\n \r\n Please adjust your design's blocking, or choose to acknowledge and ignore this warning.\r\n >\r\n ),\r\n button1Id: \"Continue-Ignore\",\r\n primaryActionText: \"Edit Blocking\",\r\n primaryAction: () => {\r\n dispatch(toggleDesigner(\"showCustomerJobPanel\"));\r\n },\r\n secondaryActionText: \"Ignore warning\",\r\n secondaryAction: () => setIgnoreAreaWarning({ areaIndex, dispatch, warning, job, config, app }),\r\n };\r\n }\r\n\r\n // Current blocking is valid. Remove existing warning\r\n if (ignoreWarning) {\r\n removeIgnoreAreaWarning({ areaIndex, dispatch, warning, job, config, app });\r\n }\r\n}\r\n\r\nfunction overhangPVCdownpipe({ job, areaIndex, config, app, dispatch }) {\r\n const shape = job?.AreaSpecifications[areaIndex]?.SHAPE;\r\n\r\n const standardOverhangs = {\r\n OH_Back: 0,\r\n OH_Back_Sheet: 0,\r\n OH_Front: 0,\r\n OH_Front_Sheet: 0,\r\n OH_Left: 0,\r\n OH_Left_Sheet: 0,\r\n OH_Right: 0,\r\n OH_Right_Sheet: 0,\r\n };\r\n\r\n let overhangCount = 0;\r\n for (const key in standardOverhangs) {\r\n if (shape && shape.hasOwnProperty(key)) {\r\n overhangCount += shape[key];\r\n }\r\n }\r\n\r\n const recommended_downpipe = window.LYSAGHT ? \"Lysaght 90mm Round PVC Downpipe\" : \"90mm Round PVC Downpipe\";\r\n const warning = {\r\n title: \"Roofsheets with Overhang should have PVC downpipes\",\r\n recommendedValue: recommended_downpipe,\r\n };\r\n\r\n let ignoreWarning = checkIgnoreWarning({ job, areaIndex, warning });\r\n\r\n // Overhangs were changed and not PVC selected\r\n if (\r\n overhangCount !== 0 &&\r\n !job?.AreaSpecifications[areaIndex]?.GUTTERS_AND_DOWNPIPES?.DownpipeType.includes(\"PVC\")\r\n ) {\r\n // Check if warning is already ignored\r\n if (ignoreWarning) return;\r\n return {\r\n error: true,\r\n title: \"Roofsheets with Overhang should have PVC downpipes\",\r\n message: [<>'{recommended_downpipe}' is recommended with sheet overhang.>],\r\n primaryActionText: `Set to '${recommended_downpipe}'`,\r\n primaryAction: () => {\r\n let new_job = COMMON.deepCopy(job);\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.DownpipeType = recommended_downpipe;\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = validateFullJob(config, new_job, -1, app);\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n },\r\n secondaryActionText: \"Add Ignore\",\r\n secondaryAction: setIgnoreAreaWarning({ areaIndex, dispatch, warning, job, config, app }),\r\n };\r\n }\r\n\r\n // Current selection is valid. Remove existing warning\r\n if (ignoreWarning) {\r\n removeIgnoreAreaWarning({ areaIndex, dispatch, warning, job, config, app });\r\n }\r\n}\r\n\r\n/// Dialog POPUPS\r\n\r\n// These are warnings that are checked at the end of the system.\r\n// Can be bypassed with engineering override, Can continue.\r\nexport function jobWarningPopups(props) {\r\n let warnings;\r\n allAreaSpecifications(props.job, (this_area, areaIndex) => {\r\n // Add warnings here...\r\n // warnings = brickworkBondorHeightCondition(props) ? bondorBrickworkWarning({ ...props }) : warnings;\r\n });\r\n\r\n return warnings; // Return the error, note this will work top down of all warnings\r\n}\r\n\r\n// These are Errors that are checked at the end of the system.\r\n// Can be bypassed with engineering override, but default is to block from continuing.\r\nexport function jobReadyStateErrorPopups(props) {\r\n let errors;\r\n let template_primaryAction = ({ primaryActionString, props, this_area, areaIndex }) => {\r\n let new_job = COMMON.deepCopy(props.job);\r\n\r\n const primaryConditions = createConditionFunction(primaryActionString);\r\n\r\n primaryConditions({ ...props, this_area, areaIndex, new_job }); // Updates new_job\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = validateFullJob(props.config, new_job, -1, props.app);\r\n props.dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n };\r\n let error_template = {\r\n error: true,\r\n title: \"\",\r\n message: [<>>],\r\n primaryActionText: \"Set to\",\r\n secondaryActionText: \"Cancel\",\r\n tertiaryActionText: props.user.Role >= 91 ? \"Authorise Override?\" : \"\",\r\n tertiaryAction: props.user.Role >= 91 ? props.overrideEngineeringAction : {},\r\n primaryAction: null,\r\n };\r\n\r\n allAreaSpecifications(props.job, (this_area, areaIndex) => {\r\n // Add Errors here...\r\n errors = maxPostHeightWarning({ ...props, this_area, areaIndex }) || errors;\r\n errors = insulatedMultispanWarning({ ...props, this_area, areaIndex }) || errors;\r\n errors = insulatedSinglespanWarning({ ...props, this_area, areaIndex }) || errors;\r\n // errors = brickworkBondorHeightCondition(props) ? bondorBrickworkWarning({ ...props }) : errors;\r\n\r\n const allWarnings = props?.config?.all_warnings;\r\n if (allWarnings?.jobStateError) {\r\n const warning = allWarnings?.jobStateError;\r\n\r\n for (const type in warning) {\r\n if (warning.hasOwnProperty(type) && type !== \"info\") {\r\n const conditionStrings = warning[type]?.conditions;\r\n const condition = createConditionFunction(conditionStrings);\r\n const message = warning[type]?.message;\r\n const title = warning[type]?.title;\r\n const primaryActionString = warning[type]?.primaryAction;\r\n const primaryActionText = warning[type]?.primaryText;\r\n\r\n if (condition({ ...props, this_area, areaIndex })) {\r\n error_template[\"title\"] = title;\r\n error_template[\"message\"] = (\r\n <>{interpolate(message, { props: { ...props, this_area, areaIndex } })}>\r\n );\r\n error_template[\"primaryActionText\"] = interpolate(primaryActionText, {\r\n props: { ...props, this_area, areaIndex },\r\n });\r\n error_template[\"primaryAction\"] = () =>\r\n template_primaryAction({\r\n props,\r\n primaryActionString,\r\n this_area,\r\n areaIndex,\r\n });\r\n errors = error_template;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n return errors; // Return the error, note this will work top down of all Errors\r\n}\r\n\r\n// These are Errors that are checked with any change in the system.\r\n// Can not be bypassed with engineering override.\r\nexport function jobStateErrorPopups(props) {\r\n let errors;\r\n\r\n allAreaSpecifications(props.job, (this_area, areaIndex) => {\r\n // Add Errors here...\r\n errors = overhangPVCdownpipe({ ...props, this_area, areaIndex }) || errors;\r\n errors = sidesBlockedToAttached({ ...props, this_area, areaIndex }) || errors;\r\n });\r\n\r\n return errors; // Return the error, note this will work top down of all Errors\r\n}\r\n\r\n/// Message POPUPS\r\n// These are checked before job validation\r\nexport function jobStateMessagePopups(props) {\r\n allAreaSpecifications(props.job, (this_area, areaIndex) => {\r\n // roofPitchChangedSkylight({ ...props, this_area, areaIndex });\r\n // Add Warnings here...\r\n\r\n const allWarnings = props?.config?.all_warnings;\r\n if (allWarnings?.jobStateMessagePopups) {\r\n const warning = allWarnings?.jobStateMessagePopups;\r\n\r\n for (const type in warning) {\r\n if (warning.hasOwnProperty(type) && type !== \"info\") {\r\n const conditionStrings = warning[type]?.conditions;\r\n const condition = createConditionFunction(conditionStrings);\r\n const message = warning[type]?.message;\r\n\r\n if (condition({ ...props, this_area, areaIndex })) {\r\n props.dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: message,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\njobWarningPopups.propTypes = {\r\n job: PropTypes.object.isRequired,\r\n config: PropTypes.object.isRequired,\r\n app: PropTypes.object.isRequired,\r\n};\r\n\r\njobStateMessagePopups.propTypes = {\r\n job: PropTypes.object.isRequired,\r\n config: PropTypes.object.isRequired,\r\n dispatch: PropTypes.object.isRequired,\r\n section: PropTypes.string.isRequired,\r\n value: PropTypes.object.isRequired,\r\n};\r\n\r\njobReadyStateErrorPopups.propTypes = {\r\n job: PropTypes.object.isRequired,\r\n engValid: PropTypes.bool.isRequired,\r\n dispatch: PropTypes.object.isRequired,\r\n config: PropTypes.object.isRequired,\r\n app: PropTypes.object.isRequired,\r\n user: PropTypes.object.isRequired,\r\n confirmEngineeringAction: PropTypes.func.isRequired,\r\n overrideEngineeringAction: PropTypes.func.isRequired,\r\n};\r\n\r\njobStateErrorPopups.propTypes = {\r\n job: PropTypes.object.isRequired,\r\n config: PropTypes.object.isRequired,\r\n app: PropTypes.object.isRequired,\r\n dispatch: PropTypes.object.isRequired,\r\n};\r\n","import { hashCode } from \"../../components/Common\";\r\nimport { BASIC_SPECS_SECTIONS } from \"../../redux_store/jobState_Schemas\";\r\n\r\nexport const GetColourUpdateString = (threeDMode, job = null) => {\r\n let out_string = \"\";\r\n let skylights = GetSpecAllAreas(BASIC_SPECS_SECTIONS.SKYLIGHTS, null, 0);\r\n out_string += JSON.stringify(skylights);\r\n let roofsheet_colour_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.ROOF_SHEETING,\r\n \"RoofSheetColour\",\r\n \"Classic Cream/Grey\"\r\n );\r\n for (var val of roofsheet_colour_in_areas) out_string += val;\r\n let skylight_colour_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"SkylightColour\", \"Clear\");\r\n for (var val of skylight_colour_in_areas) out_string += val;\r\n let ReverseRoll_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"ReverseRoll\", \"false\");\r\n for (var val of ReverseRoll_in_areas) out_string += val;\r\n let RidgeColour_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"RidgeColour\", \"false\");\r\n for (var val of RidgeColour_in_areas) out_string += val;\r\n let FlashingColour_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"FlashingColour\", \"false\");\r\n for (var val of FlashingColour_in_areas) out_string += val;\r\n\r\n let BeamCol_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol1\", \"Classic Cream\");\r\n for (var val of BeamCol_in_areas) out_string += val;\r\n let BeamCol2_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol2\", \"Classic Cream\");\r\n for (var val of BeamCol2_in_areas) out_string += val;\r\n let BeamCol3_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol3\", \"Classic Cream\");\r\n for (var val of BeamCol3_in_areas) out_string += val;\r\n let BeamCol4_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol4\", \"Classic Cream\");\r\n for (var val of BeamCol4_in_areas) out_string += val;\r\n let PostCol_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"PostCol\", \"Classic Cream\");\r\n for (var val of PostCol_in_areas) out_string += val;\r\n\r\n let gutter_colour_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"GutterCol\",\r\n \"Classic Cream\"\r\n );\r\n for (var val of gutter_colour_in_areas) out_string += val;\r\n\r\n let gutter_type_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"GutterType\",\r\n \"Classic Cream\"\r\n );\r\n out_string += JSON.stringify(gutter_type_in_areas);\r\n\r\n let downpipe_colour_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"DownpipeCol\",\r\n \"Classic Cream\"\r\n );\r\n out_string += JSON.stringify(downpipe_colour_in_areas);\r\n // out_string += JSON.stringify(GetSpecAllAreas(\"OPTIONS\", \"SlatColour\", \"\"));\r\n\r\n out_string += window?.app?.designer?.designer3D[\"ATTACHMENT_MESH_MODE\"];\r\n out_string += window?.app?.designer?.designer3D[\"ROOFSHEET__MESH_MODE\"];\r\n out_string += window?.app?.designer?.designer3D[\"BEAM_AND_POST_MESH_MODE\"];\r\n out_string += window?.app?.designer?.designer3D[\"GUTTERS_AND_FLASHING_MESH_MODE\"];\r\n out_string += window?.app?.designer?.designer3D[\"FOOTINGS_MESH_MODE\"];\r\n\r\n out_string += window?.app?.designer?.designer2D[\"SHOW_BEAM_LENGTHS\"];\r\n out_string += window?.app?.designer?.designer2D[\"SHOW_POST_DIMENSIONS\"];\r\n\r\n if (!threeDMode) {\r\n // out_string += JSON.stringify(job?job.QuoteParameters.ENGINEERING:window.job.QuoteParameters.ENGINEERING);\r\n }\r\n\r\n if (threeDMode) {\r\n let wall_type = window.job?.SiteParameters?.ExistingStructure?.WallType;\r\n let house_roof_col = window.job?.SiteParameters?.ExistingStructure?.RoofColour;\r\n let house_roof_type = window.job?.SiteParameters?.ExistingStructure?.RoofType;\r\n let FloorType = window.job?.SiteParameters?.ExistingStructure?.FloorType;\r\n\r\n out_string += wall_type + house_roof_col + house_roof_type + FloorType;\r\n\r\n //3d Display modes\r\n\r\n const VERANDAH_MESH_MODE = window?.app?.designer?.designer3D[\"VERANDAH_MESH_MODE\"];\r\n const VERANDAH_EDGE_LINE_MODE = window?.app?.designer?.designer3D[\"VERANDAH_EDGE_LINE_MODE\"];\r\n\r\n out_string += VERANDAH_MESH_MODE + VERANDAH_EDGE_LINE_MODE;\r\n\r\n let infill_front = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"TrussInfill1\", \"Plain\");\r\n let infill_colour_front = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"TrussInfillColour1\", \"Plain\");\r\n let infill_display_colour_front = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GABLE_PARAMETERS,\r\n \"TrussInfillDisplayColour1\",\r\n \"Plain\"\r\n );\r\n out_string +=\r\n JSON.stringify(infill_colour_front) +\r\n JSON.stringify(infill_front) +\r\n JSON.stringify(infill_display_colour_front);\r\n let infill_back = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"TrussInfill2\", \"Plain\");\r\n let infill_colour_back = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"TrussInfillColour2\", \"Plain\");\r\n let infill_display_colour_back = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GABLE_PARAMETERS,\r\n \"TrussInfillDisplayColour2\",\r\n \"Plain\"\r\n );\r\n out_string +=\r\n JSON.stringify(infill_colour_back) +\r\n JSON.stringify(infill_back) +\r\n JSON.stringify(infill_display_colour_back);\r\n }\r\n return hashCode(out_string);\r\n};\r\n\r\nexport const GetBOMUpdateString = () => {\r\n let out_string = \"\";\r\n let shape = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, null, 0);\r\n out_string += JSON.stringify(shape);\r\n return hashCode(out_string);\r\n};\r\n\r\nexport function GetSpecAllAreas(Section, Parameter, default_value = \"\") {\r\n let subsection = null;\r\n if (Parameter && Parameter.includes(\".\")) {\r\n let parameter_split = Parameter.split(\".\");\r\n subsection = parameter_split[0];\r\n Parameter = parameter_split[1];\r\n } else if (Section && Section.includes(\".\")) {\r\n let section_split = Section.split(\".\");\r\n Section = section_split[0];\r\n subsection = section_split[1];\r\n }\r\n\r\n var values = [];\r\n if (!window.job) return values;\r\n if (window?.job?.AreaSpecifications) {\r\n for (var area of window.job.AreaSpecifications) {\r\n if (area[Section] && (Parameter === null || Parameter === undefined)) {\r\n if (subsection) values.push(area[Section][subsection]);\r\n else values.push(area[Section]);\r\n } else if (area[Section] && area[Section][Parameter]) {\r\n values.push(area[Section][Parameter]);\r\n } else {\r\n values.push(default_value);\r\n }\r\n }\r\n }\r\n return values;\r\n}\r\n\r\nexport const GetShapeUpdateString = (threeDMode = false, engineering = false) => {\r\n let out_string = \"\";\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.SHAPE, null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.ATTACHMENTS, null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"BEAMSPECMODIFICATIONS\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"BEAMMODIFICATIONS\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"BeamWallExtends\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"POSTMODIFICATIONS\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"BEAMADJUSTMENTS\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"POSTADJUSTMENTS\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"PORTALPOSTS\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"LabelAdjustments\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"DECK_PARAMETERS\", null, 0));\r\n\r\n out_string += JSON.stringify(GetSpecAllAreas(\"DrawingNotes\", null, 0));\r\n if (!engineering) out_string += JSON.stringify(GetSpecAllAreas(\"SlatPanels\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(\"NewBeams\", null, 0));\r\n\r\n out_string += JSON.stringify(GetSpecAllAreas(\"Footings\", null, 0));\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"DownlightData\")); // \r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"RoofGroupType\")); // \r\n let roofSubType = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"RoofSubType\");\r\n out_string += JSON.stringify(roofSubType); // \r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"RoofSpan\"));\r\n\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"SheetLaying\"));\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"SheetLayingOffset\"));\r\n\r\n if (window?.job?.AreaSpecifications) {\r\n for (var area of window.job.AreaSpecifications) {\r\n let roofsheet_data = area[BASIC_SPECS_SECTIONS.ROOF_SHEETING][\"RoofSheetData\"];\r\n if (\r\n area?.SKYLIGHTS &&\r\n roofsheet_data.skylight_coverage &&\r\n roofsheet_data.skylight_coverage != roofsheet_data.coverage\r\n ) {\r\n out_string += JSON.stringify(area?.SKYLIGHTS);\r\n }\r\n }\r\n }\r\n\r\n if (!engineering) {\r\n let GutterF_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterF\", \"\");\r\n out_string += JSON.stringify(GutterF_in_areas);\r\n let GutterL_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterL\", \"\");\r\n out_string += JSON.stringify(GutterL_in_areas);\r\n let GutterR_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterR\", \"\");\r\n out_string += JSON.stringify(GutterR_in_areas);\r\n let GutterB_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterB\", \"\");\r\n out_string += JSON.stringify(GutterB_in_areas);\r\n let GutterType_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterType\", \"\");\r\n out_string += JSON.stringify(GutterType_in_areas);\r\n\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"BoxGutterWidth\", \"\"));\r\n\r\n out_string += JSON.stringify(\r\n GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"AttachmentGutterF\", \"\")\r\n );\r\n out_string += JSON.stringify(\r\n GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"AttachmentGutterL\", \"\")\r\n );\r\n out_string += JSON.stringify(\r\n GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"AttachmentGutterR\", \"\")\r\n );\r\n out_string += JSON.stringify(\r\n GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"AttachmentGutterB\", \"\")\r\n );\r\n\r\n let AddAutomaticDownpipes = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"AddAutomaticDownpipes\"\r\n );\r\n out_string += JSON.stringify(AddAutomaticDownpipes);\r\n let downpipes = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"Downpipes\", 0);\r\n out_string += JSON.stringify(downpipes);\r\n }\r\n\r\n let beamandpostdata = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, null, 0);\r\n for (var area_beam_data of beamandpostdata) {\r\n let area = [\r\n area_beam_data.BeamType1,\r\n area_beam_data.BeamType2,\r\n area_beam_data.BeamType3,\r\n area_beam_data.BeamType4,\r\n area_beam_data.PostType,\r\n area_beam_data.BeamSpacing,\r\n area_beam_data.PostSpacing,\r\n area_beam_data.OmitLeftBeam,\r\n area_beam_data.OmitRightBeam,\r\n area_beam_data.MatchSideBeams,\r\n area_beam_data.NumMiddlePosts,\r\n area_beam_data.PurlinSpacing,\r\n area_beam_data.NumPurlins,\r\n area_beam_data.NumPortals,\r\n area_beam_data.NumExtraPortals,\r\n area_beam_data.NumInternalRafters,\r\n area_beam_data.RemoveInternalRaftersWithNoPurlins,\r\n area_beam_data.NumExtraPurlins,\r\n area_beam_data.HasRidgeBeam,\r\n area_beam_data.SlimlineGable,\r\n area_beam_data.PostExternalConnectors,\r\n area_beam_data.FootingType,\r\n area_beam_data.NumExtraPostsFront1,\r\n area_beam_data.NumExtraPostsBack1,\r\n area_beam_data.NumExtraPostsCFLX,\r\n area_beam_data.NumExtraPostsCFRX,\r\n area_beam_data.NumExtraPostsCBLX,\r\n area_beam_data.NumExtraPostsCBRX,\r\n area_beam_data.CornerPostsFullHeight,\r\n area_beam_data.IntermediatePostsFullHeight,\r\n area_beam_data.CornerPostsFullHeightOffset,\r\n area_beam_data.CollarTie,\r\n area_beam_data.CollarTieBeam,\r\n area_beam_data.PortalPostType,\r\n area_beam_data.DoubleIntermediateRafters,\r\n area_beam_data.CollarTieEnd1,\r\n area_beam_data.CollarTieEnd2,\r\n area_beam_data.GableTopPurlinOffset,\r\n area_beam_data.AutoAddBeamBreakPost,\r\n area_beam_data.JackRafters,\r\n area_beam_data.BearerLocations,\r\n area_beam_data.FootingShape,\r\n ];\r\n\r\n out_string += JSON.stringify(area); // \r\n }\r\n\r\n out_string += window.job?.DesignParameters?.UseAreaJoinExtensions;\r\n out_string += window.job?.SiteParameters?.RiserBracketSpacing;\r\n out_string += window.job?.SiteParameters?.RafterBracketSpacing;\r\n out_string += JSON.stringify(window.job?.SiteParameters?.ExistingStructure);\r\n out_string += window.job?.SiteParameters?.WindData?.WindZone;\r\n out_string += window.job?.SiteParameters?.WindData?.Blocking;\r\n out_string += window.job?.SiteParameters?.WindData?.importance_level;\r\n\r\n let downligh_flashing = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"DownlightFlashing\", \"1\");\r\n out_string += JSON.stringify(downligh_flashing);\r\n\r\n let InfillBeamType = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"InfillBeamType\", \"1\");\r\n out_string += JSON.stringify(InfillBeamType);\r\n let HasInfillBeam1 = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"HasInfillBeam1\", \"1\");\r\n out_string += JSON.stringify(HasInfillBeam1);\r\n let HasInfillBeam2 = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"HasInfillBeam2\", \"1\");\r\n out_string += JSON.stringify(HasInfillBeam2);\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"InfillEndAlign1\", \"1\"));\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"InfillEndAlign2\", \"1\"));\r\n\r\n if (threeDMode && !engineering) {\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"HasInfillStrut1\", \"1\"));\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"HasInfillStrut2\", \"1\"));\r\n\r\n let InfillInset1 = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"InfillInset1\", \"1\");\r\n out_string += JSON.stringify(InfillInset1);\r\n let InfillInset2 = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"InfillInset2\", \"1\");\r\n out_string += JSON.stringify(InfillInset2);\r\n\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"TrussInfill1\", \"\"));\r\n out_string += JSON.stringify(GetSpecAllAreas(BASIC_SPECS_SECTIONS.GABLE_PARAMETERS, \"TrussInfill2\", \"\"));\r\n\r\n let DownpipeType_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"DownpipeType\", \"\");\r\n out_string += JSON.stringify(DownpipeType_in_areas);\r\n\r\n let DECORATIONS = GetSpecAllAreas(\"DECORATIONS\", null, 0);\r\n out_string += JSON.stringify(DECORATIONS);\r\n let existingStructure = window.job?.SiteParameters?.ExistingStructure;\r\n let existing_check = [];\r\n if (existingStructure) {\r\n existing_check = [\r\n existingStructure.RoofPitch,\r\n existingStructure.FasciaHeight,\r\n existingStructure.WallHeight,\r\n existingStructure.EaveDepth,\r\n existingStructure.GutterWidth,\r\n existingStructure.RoofType,\r\n ];\r\n }\r\n out_string += JSON.stringify(existing_check);\r\n // out_string += JSON.stringify(GetSpecAllAreas(\"OPTIONS\", \"SlatType\", \"\"));\r\n // out_string += JSON.stringify(GetSpecAllAreas(\"OPTIONS\", \"SlatRetainerSpacing\", \"\"));\r\n }\r\n\r\n return hashCode(out_string);\r\n};\r\n","export const GetBeamHeight = (in_beamType) => {\r\n let height = 65;\r\n if (in_beamType === \"1086510\") height = 108;\r\n if (in_beamType === \"1586510\") height = 158;\r\n if (in_beamType === \"2086510\") height = 208;\r\n if (in_beamType.includes(\"FL10011\")) height = 100;\r\n if (in_beamType.includes(\"FL15015\")) height = 150;\r\n if (in_beamType.includes(\"FL20020\")) height = 200;\r\n if (in_beamType.startsWith(\"100mm x\")) height = 108;\r\n if (in_beamType.startsWith(\"150mm x\")) height = 108;\r\n return height;\r\n};\r\n","import { evaluate } from \"mathjs\";\r\nimport { toNumber, Sin, Tan } from \"../../components/Common\";\r\n\r\nimport { DESIGN_TYPES } from \"../../redux_store/configState\";\r\n\r\nexport const getRoofAlignmentFromRef = (ref, areaData) => {\r\n let roof_alignment_default = \"Back\";\r\n if (ref.includes(\"Right\")) roof_alignment_default = \"RightSide\";\r\n else if (ref.includes(\"Left\")) roof_alignment_default = \"Side\";\r\n else if (ref.includes(\"Front\")) roof_alignment_default = \"Front\";\r\n\r\n if (ref.startsWith(\"C\")) {\r\n let cutout_side = \"BackRight\";\r\n if (ref.startsWith(\"CBR\")) cutout_side = \"BackRight\";\r\n if (ref.startsWith(\"CBL\")) cutout_side = \"BackLeft\";\r\n if (ref.startsWith(\"CFL\")) cutout_side = \"FrontLeft\";\r\n if (ref.startsWith(\"CFR\")) cutout_side = \"FrontRight\";\r\n let cutout_type = areaData.SHAPE.CUTOUTS?.[cutout_side + \"-CutoutType\"];\r\n\r\n if (cutout_type === \"Angle\") {\r\n let cutout_angle_r = Math.atan(\r\n areaData.SHAPE.CUTOUTS?.[cutout_side + \"-WidthY\"] / areaData.SHAPE.CUTOUTS?.[cutout_side + \"-WidthX\"]\r\n );\r\n if (Math.abs(cutout_angle_r) < 0.2) {\r\n if (cutout_side.includes(\"Front\")) roof_alignment_default = \"Front\";\r\n else roof_alignment_default = \"Back\";\r\n } else {\r\n if (cutout_side.includes(\"Right\")) roof_alignment_default = \"RightSide\";\r\n if (cutout_side.includes(\"Left\")) roof_alignment_default = \"Side\";\r\n }\r\n } else if (ref.includes(\" Y\")) {\r\n if (cutout_side.includes(\"Right\")) roof_alignment_default = \"RightSide\";\r\n roof_alignment_default = \"Side\";\r\n } else {\r\n if (cutout_side.includes(\"Front\")) roof_alignment_default = \"Front\";\r\n else roof_alignment_default = \"Back\";\r\n }\r\n }\r\n return roof_alignment_default;\r\n};\r\n\r\nexport const adjustOffsetForSide = (ref, offsets, roofAlignment, areaData) => {\r\n let local_pitching_height_adjustment = 0;\r\n if (areaData.SHAPE.DesignType === DESIGN_TYPES.FLAT && roofAlignment.includes(\"Front\"))\r\n local_pitching_height_adjustment = Sin(areaData?.SHAPE?.RoofPitch) * areaData?.SHAPE?.Depth;\r\n offsets.v += local_pitching_height_adjustment;\r\n\r\n if (ref === \"CBM\") {\r\n let roof_pitch = areaData.SHAPE.RoofPitch;\r\n let cutout_depth = areaData.SHAPE.CUTOUTS[\"BackMid-WidthY\"];\r\n let offset = cutout_depth * Tan(roof_pitch);\r\n offsets.v += offset;\r\n offsets.v_display = offset;\r\n }\r\n if (ref === \"CBR X\") {\r\n if (areaData.SHAPE.CUTOUTS[\"BackRight-CutoutType\"] === \"Step\") {\r\n let roof_pitch = areaData.SHAPE.RoofPitch;\r\n let cutout_depth = areaData.SHAPE.CUTOUTS[\"BackRight-WidthY\"];\r\n let offset = cutout_depth * Tan(roof_pitch);\r\n offsets.v += offset;\r\n offsets.v_display = offset;\r\n }\r\n }\r\n if (ref === \"CBL X\") {\r\n if (areaData.SHAPE.CUTOUTS[\"BackLeft-CutoutType\"] === \"Step\") {\r\n let roof_pitch = areaData.SHAPE.RoofPitch;\r\n let cutout_depth = areaData.SHAPE.CUTOUTS[\"BackLeft-WidthY\"];\r\n let offset = cutout_depth * Tan(roof_pitch);\r\n offsets.v += offset;\r\n offsets.v_display = offset;\r\n }\r\n }\r\n return offsets;\r\n};\r\n\r\nexport const getOffsets = (\r\n schema,\r\n beam_height,\r\n roof_sheet_height,\r\n eaveValue,\r\n roofAlignment = false,\r\n vOffset = null, // set to null if want to reset to defaults only\r\n hOffset = null // set to null if want to reset to defaults only\r\n) => {\r\n let offsets = { v: vOffset ? vOffset : 0, h: hOffset ? hOffset : 0 };\r\n // if (ATTACHMENT_TYPES[attachmentTypeValue]) {\r\n // schema = ATTACHMENT_TYPES[attachmentTypeValue];\r\n // if (schema?.variations && schema.variations[attachmentTypeVariation]) {\r\n // schema = { ...schema, ...schema.variations[attachmentTypeVariation] };\r\n // }\r\n // }\r\n\r\n let is_side = roofAlignment.includes(\"Side\");\r\n\r\n if (schema) {\r\n const beam_width = window.LYSAGHT ? 50 : 65;\r\n\r\n if (!schema?.depth_offset_editable) {\r\n //change defaults is initialised, otherwise don't!\r\n if (schema?.display_name.includes(\"Flyover\")) {\r\n offsets.h = -(eaveValue + 110 + 50 + 90);\r\n } else if (schema?.depth_offset_default !== undefined) {\r\n if (schema?.depth_offset_default === \"150-Beam_Width\") {\r\n offsets.h = 150 - beam_width;\r\n } else offsets.h = schema?.depth_offset_default;\r\n }\r\n }\r\n\r\n if (is_side && schema?.height_offset_editable_side) {\r\n } else if (!schema?.height_offset_editable) {\r\n if (schema?.height_offset_default !== undefined) {\r\n if (typeof schema?.height_offset_default === \"string\") {\r\n let expression = schema?.height_offset_default;\r\n let scope = {\r\n Beam_Height: beam_height,\r\n Sheet_Height: roof_sheet_height,\r\n };\r\n \r\n offsets.v = evaluate(expression, scope);\r\n } else {\r\n offsets.v = toNumber(schema?.height_offset_default);\r\n }\r\n }\r\n }\r\n\r\n let variation = schema;\r\n if (variation) {\r\n let new_h_offset = offsets.h;\r\n let new_v_offset = offsets.v;\r\n\r\n if (variation?.depth_offset_default !== undefined) {\r\n if (typeof variation?.depth_offset_default === \"string\") {\r\n if (variation?.depth_offset_default.includes(\"150-Beam_Width\")) {\r\n new_h_offset = 150 - beam_width;\r\n }\r\n } else {\r\n new_h_offset = toNumber(variation?.depth_offset_default);\r\n }\r\n }\r\n\r\n if (variation?.height_offset_default === \"Beam_Height\") new_v_offset = beam_height ? beam_height : 0;\r\n else if (variation?.height_offset_default === \"Beam_Height-50\")\r\n new_v_offset = beam_height ? beam_height - 50 : 0;\r\n else if (variation?.height_offset_default === \"-Sheet_Height\")\r\n new_v_offset = roof_sheet_height ? -roof_sheet_height : 0;\r\n else if (variation?.height_offset_default)\r\n new_v_offset = toNumber(variation?.height_offset_default ? variation?.height_offset_default : 0);\r\n\r\n offsets.h = new_h_offset;\r\n offsets.v = new_v_offset;\r\n }\r\n\r\n if (vOffset !== null) {\r\n if (is_side && schema?.height_offset_editable_side) {\r\n offsets.v = vOffset;\r\n } else if (schema?.height_offset_editable) {\r\n offsets.v = vOffset;\r\n }\r\n }\r\n\r\n if (schema?.height_offset_max) {\r\n let max_height = toNumber(schema?.height_offset_max);\r\n if (max_height > 0 && offsets.v > max_height) offsets.v = max_height;\r\n }\r\n if (schema?.height_offset_min) {\r\n let min_height = toNumber(schema?.height_offset_min);\r\n if (offsets.v < min_height) offsets.v = min_height;\r\n }\r\n\r\n if (hOffset !== null) {\r\n if (schema?.depth_offset_editable) {\r\n offsets.h = hOffset;\r\n }\r\n }\r\n\r\n if (schema?.depth_offset_max) {\r\n let max_depth = toNumber(schema?.depth_offset_max);\r\n if (max_depth > 0 && offsets.h > max_depth) offsets.h = max_depth;\r\n }\r\n if (schema?.depth_offset_min) {\r\n let min_depth = toNumber(schema?.depth_offset_min);\r\n if (offsets.h < min_depth) offsets.h = min_depth;\r\n }\r\n\r\n return offsets;\r\n }\r\n return offsets;\r\n};\r\n","const section_Ix = {\r\n 656508: 265900,\r\n 656510: 265900,\r\n 1086510: 956100,\r\n 1586510: 2302000,\r\n 2086510: 4138000,\r\n SB6565: 265900,\r\n SB10865: 956100,\r\n SB15865: 2302000,\r\n SB20865: 4138000,\r\n FL10011: 347000,\r\n FL15015: 1256000,\r\n FL20020: 3374000,\r\n};\r\n\r\nexport const calculateDeckBeamCapacity = (\r\n type, // \"JOIST\", \"BEARER\"\r\n section,\r\n span_mm,\r\n load_width_mm\r\n) => {\r\n let Ix = section_Ix?.[section] ? section_Ix[section] : 0;\r\n if (Ix === 0) return false;\r\n\r\n let G = (0.6 * load_width_mm) / 1000;\r\n let Q_UDL = (2 * load_width_mm) / 1000;\r\n let Q_P = 1.8;\r\n // let M1_UDL = (1.2 * G * (span_mm / 1000)) ^ (2 / 8 + 1.5 * Q_UDL * (span_mm / 1000)) ^ (2 / 8);\r\n // let M2_P = (1.2 * G * (span_mm / 1000)) ^ (2 / 8 + (1.5 * Q_P * span_mm) / 1000 / 4);\r\n\r\n let Delta_G_mm = (5 * G * Math.pow(span_mm, 4)) / 384 / 200000 / Ix;\r\n\r\n let ratio_G = span_mm / Delta_G_mm;\r\n let capacity_G = (type == \"Bearer\" ? 600 : 500) / ratio_G;\r\n\r\n let Delta_Q_UDL_mm = (5 * Q_UDL * Math.pow(span_mm, 4)) / 384 / 200000 / Ix;\r\n let ratio_Q_UDL = span_mm / Delta_Q_UDL_mm;\r\n let capacity_Q_UDL = 400 / ratio_Q_UDL;\r\n\r\n let Delta_Q_P_mm = (Q_P * 1000 * Math.pow(span_mm, 3)) / 48 / 200000 / Ix;\r\n let ratio_Q_P = span_mm / Delta_Q_P_mm;\r\n let capacity_Q_P = 400 / ratio_Q_P;\r\n\r\n let Delta_G_04Q_mm = Delta_G_mm + 0.4 * Delta_Q_UDL_mm;\r\n let ratio_G_04Q = span_mm / Delta_G_04Q_mm;\r\n let capacity_G_04Q_mm = 400 / ratio_G_04Q;\r\n\r\n // if (window.debug) deckEngineering_test();\r\n\r\n return {\r\n ratio_G: ratio_G,\r\n capacity_G: capacity_G,\r\n ratio_Q_UDL: ratio_Q_UDL,\r\n capacity_Q_UDL: capacity_Q_UDL,\r\n ratio_Q_P: ratio_Q_P,\r\n capacity_Q_P: capacity_Q_P,\r\n ratio_G_04Q: ratio_G_04Q,\r\n capacity_G_04Q_mm: capacity_G_04Q_mm,\r\n capacity_max: Math.max(capacity_G, capacity_Q_UDL, capacity_Q_P, capacity_G_04Q_mm),\r\n };\r\n};\r\n\r\nexport const calculateDeckLoadFromM2 = (floor_area_m2, roof_area_m2 = 0) => {\r\n let floor_weight_G_floormin = 0.3;\r\n let floor_weight_G_floormax = 0.6;\r\n let roof_weight_G_roof = 0.15;\r\n let live_load_Q_floor = 2.0;\r\n let live_load_Q_roof = 0.25;\r\n let load0point9G = 0.9 * floor_weight_G_floormin * floor_area_m2 + 0.9 * roof_weight_G_roof * roof_area_m2;\r\n\r\n let load1point2Gplus1point5Q =\r\n 1.2 * (roof_area_m2 * roof_weight_G_roof + floor_weight_G_floormax * floor_area_m2) +\r\n 1.5 * (live_load_Q_roof * roof_area_m2 + live_load_Q_floor * floor_area_m2);\r\n\r\n return load1point2Gplus1point5Q;\r\n};\r\n\r\nconst column_sections = {\r\n \"65mm x 65mm x 3mm P/C\": {\r\n Grade: 450,\r\n A: 721,\r\n Ix: 4.54e5,\r\n Zex: 16600,\r\n Kf: 1,\r\n },\r\n \"75mm x 75mm x 3mm P/C\": {\r\n Grade: 450,\r\n A: 841,\r\n Ix: 7.16e5,\r\n Zex: 22200,\r\n Kf: 1,\r\n },\r\n \"100mm x 100mm x 3mm P/C\": {\r\n Grade: 450,\r\n A: 1140,\r\n Ix: 1.77e6,\r\n Zex: 34400,\r\n Kf: 0.952,\r\n },\r\n};\r\n\r\nexport const calculate_ColCapacity = (section, height, floor_area_m2, roof_area_m2 = 0) => {\r\n let E23_load_case_1_kN = calculateDeckLoadFromM2(floor_area_m2, roof_area_m2);\r\n\r\n let G23_Eccentricity_ex = 110;\r\n\r\n let column_section_properties = column_sections[section];\r\n if (column_section_properties === null) return 99999;\r\n //section properties\r\n let E6_steel_grade = column_section_properties.Grade;\r\n let B11_A = column_section_properties.A;\r\n let B12_Ix = column_section_properties.Ix;\r\n let B13_Zex = column_section_properties.Zex;\r\n let B14_r = Math.pow(B12_Ix / B11_A, 0.5);\r\n let B15_kf = column_section_properties.Kf;\r\n let B16_Lx = height;\r\n let B17_Ly = height;\r\n\r\n let F16_Ix = 1 * B16_Lx;\r\n let F17_Iy = 1 * B17_Ly;\r\n\r\n //\r\n // console.log(\r\n // \"deck calculate_ColCapacity2\",\r\n // Math.max(F16_Ix, F17_Iy) / B14_r,\r\n // Math.pow(B15_kf, 0.5),\r\n // Math.pow(E6_steel_grade / 250, 0.5)\r\n // );\r\n\r\n let C32_Nstar = E23_load_case_1_kN;\r\n let C33_lambda_n = (Math.max(F16_Ix, F17_Iy) / B14_r) * Math.pow(B15_kf, 0.5) * Math.pow(E6_steel_grade / 250, 0.5);\r\n let C34_alpha_a = (2100 * (C33_lambda_n - 13.5)) / (Math.pow(C33_lambda_n, 2) - 15.3 * C33_lambda_n + 2050);\r\n let C35_alpha_b = -0.5;\r\n let C36_lambda = C33_lambda_n + C34_alpha_a * C35_alpha_b;\r\n let C37_n = Math.max(0, 0.00326 * (C36_lambda - 13.5));\r\n let C38_beta = (Math.pow(C36_lambda / 90, 2) + 1 + C37_n) / (2 * Math.pow(C36_lambda / 90, 2));\r\n let C39_alpha_c = Math.min(1, C38_beta * (1 - Math.pow(1 - Math.pow(90 / (C38_beta * C36_lambda), 2), 0.5)));\r\n let C40_phi_compression = 0.9;\r\n let C42_phi_nc = (C40_phi_compression * C39_alpha_c * B15_kf * B11_A * E6_steel_grade) / 1000;\r\n let C46_Mstarm = (E23_load_case_1_kN * G23_Eccentricity_ex) / 1000;\r\n let C47_cm = 1;\r\n let C48_Nomb = (Math.pow(Math.PI, 2) * 200000 * B12_Ix) / Math.pow(F16_Ix, 2) / 1000;\r\n let C49_delta_b = Math.max(1, C47_cm / (1 - C32_Nstar / C48_Nomb));\r\n let C50_M_star = C46_Mstarm * C49_delta_b;\r\n let C51_phi_bending = 0.9;\r\n let C52_phi_Msx = (C51_phi_bending * B13_Zex * E6_steel_grade) / Math.pow(10, 6);\r\n let C56_phi_Mix = Math.max(0, C52_phi_Msx * (1 - C32_Nstar / C42_phi_nc));\r\n\r\n console.log(\r\n \"deck calculate_ColCapacity\",\r\n C32_Nstar,\r\n C33_lambda_n,\r\n C34_alpha_a,\r\n C35_alpha_b,\r\n C36_lambda,\r\n C37_n,\r\n C38_beta,\r\n C39_alpha_c,\r\n C40_phi_compression,\r\n C42_phi_nc,\r\n C46_Mstarm,\r\n C47_cm,\r\n C48_Nomb,\r\n C49_delta_b,\r\n C50_M_star,\r\n C51_phi_bending,\r\n C52_phi_Msx,\r\n C56_phi_Mix\r\n );\r\n\r\n let capacity_ratio = C50_M_star / C56_phi_Mix;\r\n\r\n return capacity_ratio;\r\n};\r\n\r\nconst PI = () => {\r\n return Math.PI;\r\n};\r\nconst TAN = (radians) => {\r\n return Math.tan(radians);\r\n};\r\nconst ABS = (double) => {\r\n return Math.abs(double);\r\n};\r\n\r\nconst soil_types = {\r\n A: \"A\",\r\n B: \"B\",\r\n C: \"C\",\r\n};\r\n\r\nconst soil_data = {\r\n A: {\r\n angle: 35,\r\n cohesion_kPa: 0,\r\n ultimate_bearing_capacity_kPa: 80,\r\n },\r\n B: {\r\n angle: 25,\r\n cohesion_kPa: 5,\r\n ultimate_bearing_capacity_kPa: 150,\r\n },\r\n C: {\r\n angle: 15,\r\n cohesion_kPa: 10,\r\n ultimate_bearing_capacity_kPa: 200,\r\n },\r\n};\r\n\r\nexport const calculate_FootingCapacity = (\r\n load_at_base_of_col_kN,\r\n circular, //if true, otherwise square\r\n F19_width, // diameter if circular\r\n F22_depth,\r\n soil_type, // A coarse/sand, B silt/fine sand/granular soil with some clay, C stiff clay\r\n load_case_type = \"1.2G+1.5Q\" // \"0.9G+Wu\" or \"1.2G+1.5Q\" (default)\r\n) => {\r\n let concrete_grade_mPa = 20,\r\n Fc = concrete_grade_mPa;\r\n let Adhesion = 0;\r\n let y_kn_m3 = 19,\r\n γ = y_kn_m3;\r\n let depth_of_ineffective_soil_mm = 100,\r\n Dineff = depth_of_ineffective_soil_mm,\r\n B6 = depth_of_ineffective_soil_mm;\r\n let ø = soil_data[soil_type].angle;\r\n let ultimate_bearing_capacity_kPa = soil_data[soil_type].ultimate_bearing_capacity_kPa;\r\n let Cohesion = soil_data[soil_type].cohesion_kPa,\r\n cohesion_kpa = Cohesion;\r\n let Kp = Math.pow(Math.tan((Math.PI * (45 + ø / 2)) / 180), 2);\r\n let Ka = Math.pow(Math.tan(((45 - ø / 2) * Math.PI) / 180), 2);\r\n let Tanø = TAN((PI() * ø) / 180);\r\n\r\n let F24_underream = 0;\r\n\r\n // calculated_params\r\n let F31_actual_base_diameter = F19_width,\r\n F31 = F31_actual_base_diameter,\r\n actual_base_diameter = F31_actual_base_diameter;\r\n let effective_depth = F22_depth - depth_of_ineffective_soil_mm,\r\n De = effective_depth;\r\n let area = circular ? (Math.PI * Math.pow(actual_base_diameter, 2)) / 4 : Math.pow(actual_base_diameter, 2),\r\n A = area;\r\n let z = circular ? (Math.PI * Math.pow(actual_base_diameter, 2)) / 4 : Math.pow(100, 3) / 6,\r\n F34 = z,\r\n Z = z;\r\n\r\n // ULTIMATE LOAD CASES AT BASE OF COLUMN - 1.2G+1.5Q is default case load\r\n let Fx_kN = 0,\r\n Fx = Fx_kN;\r\n let Fy_kN = load_at_base_of_col_kN,\r\n Fy = Fy_kN;\r\n let Mz_kN = 0,\r\n Mz = Mz_kN;\r\n let Tortion_kNm = 0;\r\n let F37_ground_slab_thickness_mm = 0.1,\r\n F37 = F37_ground_slab_thickness_mm;\r\n let F39_ground_slab_effective_area_m2 = 0,\r\n F39 = F39_ground_slab_effective_area_m2;\r\n\r\n if (load_case_type == \"0.9G+Wu\") {\r\n }\r\n\r\n // TANSLATE_PARAMS_TO_EXCEL\r\n let F22 = F22_depth;\r\n let D = F22;\r\n let F19 = F19_width,\r\n L = F19_width,\r\n B = F19_width;\r\n let F46 = Fy_kN;\r\n\r\n // UPLIFT CHECK\r\n let F57_pad_vol_m3 = circular\r\n ? (((((1 / 3) * PI()) / 4) * (Math.pow(F31_actual_base_diameter, 3) - Math.pow(F19_width, 3))) / 2 +\r\n (PI() / 4) * Math.pow(F19_width, 2) * (F22_depth - (F31_actual_base_diameter - F19_width) / 2)) /\r\n Math.pow(10, 9)\r\n : (Math.pow(F19_width, 2) * F22_depth * 1) / Math.pow(10, 9) +\r\n ((F19_width + (F31_actual_base_diameter - F19_width) / 2) *\r\n 2 *\r\n Math.pow(F31_actual_base_diameter - F19_width, 2)) /\r\n Math.pow(10, 9),\r\n F57 = F57_pad_vol_m3;\r\n let F58_g_pad_kN = F57_pad_vol_m3 * 24,\r\n F58 = F58_g_pad_kN;\r\n let F59_soil_vol_m3 = circular\r\n ? (Math.pow(2 * (F22 + F31 / (2 * Tanø)) * Tanø, 2) * PI() * (F22 + F31 / (2 * Tanø))) /\r\n Math.pow(10, 9) /\r\n 12 -\r\n (Math.pow(F31, 2) * PI() * (F31 / (2 * Tanø))) / 12 / Math.pow(10, 9) -\r\n F57\r\n : (F31 * Tanø * Math.pow(F22, 2) * 2 + (PI() * Math.pow(F22 * Tanø, 2) * F22) / 3) / Math.pow(10, 9),\r\n F59 = F59_soil_vol_m3;\r\n let F60_g_soil_wedge_kN = F59 * γ,\r\n F60 = F60_g_soil_wedge_kN;\r\n\r\n let F61_cp_kN = (PI() * F19 * F22 * 10) ^ ((-6 * Cohesion) / 2),\r\n F61 = F61_cp_kN;\r\n let F62_g_slb_kN = F37 * F39 * 0.024,\r\n F62 = F62_g_slb_kN;\r\n\r\n let F63_øG_max_kN = 0.9 * Math.max(F58 + F60 + F62, F58 + F61 + F62),\r\n F63 = F63_øG_max_kN;\r\n\r\n // OVERTURNING CHECK\r\n let F66_Mo_about_pier_base = ABS((Fx * D) / 1000 + Mz),\r\n F66 = F66_Mo_about_pier_base;\r\n\r\n // Moment resistance from passive earth pressure\r\n let F68_PPs_kpa = 4 * Cohesion + (Kp * γ * Dineff) / 1000,\r\n F68 = F68_PPs_kpa;\r\n let F69_PPb_kpa = (Kp * γ * De) / Math.pow(10, 3) + F68,\r\n F69 = F69_PPb_kpa;\r\n let F70_DZ_mm =\r\n F37_ground_slab_thickness_mm == 0\r\n ? ((((F68 + F69) / 2) * De * L) / Math.pow(10, 6) - Math.abs(Fx)) / ((F69 * L) / Math.pow(10, 6))\r\n : 0,\r\n F70 = F70_DZ_mm;\r\n let F71_Z = De - F70,\r\n F71 = F71_Z;\r\n let F72_PPz = (Kp * γ * F71) / Math.pow(10, 3) + F68,\r\n F72 = F72_PPz;\r\n let F73_x = (F70 * F69) / (F69 + F72),\r\n F73 = F73_x;\r\n let F75_F2 = (F69 * F73 * L) / 2 / Math.pow(10, 6),\r\n F75 = F75_F2;\r\n let F76_D_D = ((2 * F75) / F69) * 1000,\r\n F76 = F76_D_D;\r\n let F77_Depth_to_contraflex = De - F76,\r\n F77 = F77_Depth_to_contraflex;\r\n let F78_Mr_passive_earth_pressure = Math.max(\r\n 0,\r\n ((((((F68 + F69) / 2) * De * (2 * F68 + F69)) / (3 * (F68 + F69))) * De - (F69 * Math.pow(F70, 2)) / 3) *\r\n L) /\r\n Math.pow(10, 9)\r\n ),\r\n F78 = F78_Mr_passive_earth_pressure;\r\n\r\n // Moment resistance from cohesion on sides of soil wedge\r\n // Above point of contraflexure\r\n let F81_Psc = (F77 * L * Cohesion) / Math.pow(10, 6),\r\n F81 = F81_Psc;\r\n let F82_e = De - F77 / 2,\r\n F82 = F82_e;\r\n let F84_Psc = (F76 * L * Cohesion) / Math.pow(10, 6),\r\n F84 = F84_Psc;\r\n let F85_e = F76 / 2,\r\n F85 = F85_e;\r\n let F86_Psc = (Math.pow(De, 2) * Cohesion) / Math.pow(10, 6),\r\n F86 = F86_Psc;\r\n let F87_Mr = Math.max(0, (F81 * F82 - F84 * F85) / Math.pow(10, 3)),\r\n F87 = F87_Mr;\r\n\r\n // Moment resistance from friction on sides of soil wedge\r\n let F90_wedge_face_area = (Math.pow(F77, 2) * Tanø) / 2 / Math.pow(10, 6),\r\n F90 = F90_wedge_face_area;\r\n let F91_Psf = Ka * γ * F90 * Tanø,\r\n F91 = F91_Psf;\r\n let F92_e = De - F77 / 3,\r\n F92 = F92_e;\r\n let F94_wedge_face_area = (Math.pow(F76, 2) * Tanø) / 2 / Math.pow(10, 6),\r\n F94 = F94_wedge_face_area;\r\n let F95_Psf = Ka * γ * F94 * Tanø,\r\n F95 = F95_Psf;\r\n let F96_e = F76 / 3,\r\n F96 = F96_e;\r\n let F97_Mr = Math.max(0, (F91 * F92 - F95 * F96) / Math.pow(10, 3)),\r\n F97 = F97_Mr;\r\n\r\n let F99_Nett_load = Fy + F63 / 0.9,\r\n F99 = F99_Nett_load;\r\n let F100_eccy = L / 2,\r\n F100 = F100_eccy;\r\n let F101_Mr = (F99 * F100) / Math.pow(10, 3),\r\n F101 = F101_Mr;\r\n\r\n let F103_øMr_about_pier_base = 0.9 * (F78 + F87 + F97 + F101); // < --- RESULT OUTPUT OVERTURNING CHECK\r\n\r\n //BEARING CAPACITY CHECK\r\n let F110_fy_at_base = Fy + F58,\r\n F110 = F110_fy_at_base;\r\n let F111_Eccentricity_about_cl =\r\n F110_fy_at_base == 0 ? 0 : Math.max(0, ((Mz - (F78 + F87 + F97)) / F110_fy_at_base) * 1000),\r\n F111 = F111_Eccentricity_about_cl,\r\n e = F111_Eccentricity_about_cl;\r\n let F112_bearing_pressure_act = 0;\r\n if (F110_fy_at_base < 0) {\r\n F112_bearing_pressure_act = 0;\r\n } else if (e >= F31 / 2) {\r\n F112_bearing_pressure_act = 10 * ultimate_bearing_capacity_kPa;\r\n } else if (e < F31 / 6) {\r\n F112_bearing_pressure_act = (F110_fy_at_base / A + (F110_fy_at_base * e) / Z) * Math.pow(10, 6);\r\n } else {\r\n F112_bearing_pressure_act = ((2 * F110_fy_at_base) / (3 * F31 * (F31 / 2 - e))) * Math.pow(10, 6);\r\n }\r\n let F112 = F112_bearing_pressure_act;\r\n\r\n let F113_fs = Adhesion + ((Ka * γ * D) / 2 / 1000) * Tanø,\r\n F113 = F113_fs,\r\n fs = F113_fs;\r\n let F114_Bearing_pressure_allow = ultimate_bearing_capacity_kPa + (fs * D) / 1000,\r\n F114 = F114_Bearing_pressure_allow;\r\n\r\n let F115_bearing_capacity_check = L * D == 0 ? 0 : F112 > F114 ? 1 : 0;\r\n\r\n // TORSION RESISTANCE CHECK\r\n\r\n let F117_perimeter = (circular ? PI() * F19 : 4 * F19) * (F22 - depth_of_ineffective_soil_mm),\r\n F117 = F117_perimeter;\r\n let F118_shear_resistance = 0.5 * Cohesion,\r\n F118 = F118_shear_resistance;\r\n let F119_friction_resistance = (Ka * γ * Tanø * (F22 + B6)) / 2 / 1000,\r\n F119 = F119_friction_resistance;\r\n let F120_torsion_lever = circular ? F19 / 2 : F19 / 2,\r\n F120 = F120_torsion_lever; //=IF(F12=Square,F19/2,IF(F12=Circular,F19/2,(F17+F19)/4))\r\n let F121_total_torsional_resistance =\r\n (Math.max(F118_shear_resistance, F119_friction_resistance) * F117 * F120) / Math.pow(10, 9),\r\n F121 = F121_total_torsional_resistance;\r\n\r\n // PIER STRENGTH\r\n\r\n let F124_Z = Z / Math.pow(10, 6),\r\n F124 = F124_Z;\r\n let F125_fcf = Math.pow(Fc, 0.5) * 0.6,\r\n F125 = F125_fcf;\r\n let F126_øMcr = (0.6 * Z * F125) / Math.pow(10, 6),\r\n F126 = F126_øMcr;\r\n let F127_ast_required = 0;\r\n if (F126 > Math.abs(Mz)) {\r\n F127_ast_required = 0;\r\n } else if (circular) {\r\n F127_ast_required = (Math.abs(Mz) * Math.pow(10, 6)) / (0.72 * 0.7 * L * 400);\r\n } else {\r\n F127_ast_required = (Math.abs(Mz) * Math.pow(10, 6)) / (0.72 * 0.7 * B * 400);\r\n }\r\n\r\n let result = {\r\n \"uplift_check_øG_(max)\": F63_øG_max_kN,\r\n \"uplift_check_øG_(max)_capacity\": F46,\r\n \"uplift_check_øG_(max)_ratio\": -F46 / F63_øG_max_kN,\r\n overturning_check_øMr_about_pier_base: F103_øMr_about_pier_base,\r\n overturning_check_øMr_about_pier_base_capacity: F66_Mo_about_pier_base,\r\n overturning_check_øMr_about_pier_base_ratio: F66_Mo_about_pier_base / F103_øMr_about_pier_base,\r\n bearing_capacity_check_pressure_actual: F112_bearing_pressure_act,\r\n bearing_capacity_check_pressure_capacity: F114_Bearing_pressure_allow,\r\n bearing_capacity_check_pressure_ratio: F112_bearing_pressure_act / F114_Bearing_pressure_allow,\r\n torsion_resistance_check: F121_total_torsional_resistance,\r\n torsion_resistance_check_capacity: F115_bearing_capacity_check,\r\n torsion_resistance_check_ratio: F115_bearing_capacity_check / F121_total_torsional_resistance,\r\n pier_strength: F127_ast_required, // not seeming to be used in spreadsheet\r\n };\r\n\r\n result[\"valid\"] =\r\n result[\"uplift_check_øG_(max)_ratio\"] < 1 &&\r\n result[\"overturning_check_øMr_about_pier_base_ratio\"] < 1 &&\r\n result[\"bearing_capacity_check_pressure_ratio\"] < 1 &&\r\n result[\"torsion_resistance_check_ratio\"] < 1;\r\n return result;\r\n};\r\n\r\nexport const deckEngineering_test = () => {\r\n if (window.calculateDeckBeamCapacity_tested) return;\r\n window.calculateDeckBeamCapacity_tested = true;\r\n\r\n let expected_result = {\r\n ratio_G: 384,\r\n capacity_G: 1.56,\r\n ratio_Q_UDL: 115,\r\n capacity_Q_UDL: 3.46,\r\n ratio_Q_P: 195,\r\n capacity_Q_P: 2.05,\r\n ratio_G_04Q: 165,\r\n capacity_G_04Q_mm: 2.42,\r\n };\r\n\r\n let test_result = calculateDeckBeamCapacity(\"Bearer\", \"656510\", 2700, 900);\r\n\r\n for (let key in expected_result) {\r\n if (\r\n (key.includes(\"ratio\") && Math.abs(expected_result[key] - test_result[key]) > 1) ||\r\n (key.includes(\"capacity\") && Math.abs(expected_result[key] - test_result[key]) > 0.01)\r\n ) {\r\n alert(\r\n \"test failed at calculateDeckBeamCapacity_test:\" +\r\n key +\r\n \" .. \" +\r\n expected_result[key] +\r\n \" vs \" +\r\n test_result[key]\r\n );\r\n //\r\n //\r\n return;\r\n }\r\n }\r\n\r\n expected_result = {\r\n ratio_G: 317,\r\n capacity_G: 1.57,\r\n ratio_Q_UDL: 95,\r\n capacity_Q_UDL: 4.2,\r\n ratio_Q_P: 489,\r\n capacity_Q_P: 0.81,\r\n ratio_G_04Q: 136,\r\n capacity_G_04Q_mm: 2.94,\r\n };\r\n test_result = calculateDeckBeamCapacity(\"Joist\", \"FL15015\", 3700, 2000);\r\n\r\n for (let key in expected_result) {\r\n if (\r\n (key.includes(\"ratio\") && Math.abs(expected_result[key] - test_result[key]) > 1) ||\r\n (key.includes(\"capacity\") && Math.abs(expected_result[key] - test_result[key]) > 0.01)\r\n ) {\r\n alert(\r\n \"test failed at calculateDeckBeamCapacity_test:\" +\r\n key +\r\n \" .. \" +\r\n expected_result[key] +\r\n \" vs \" +\r\n test_result[key]\r\n );\r\n return;\r\n }\r\n }\r\n\r\n let expected_load = 37.2;\r\n if (Math.abs(expected_load - calculateDeckLoadFromM2(10)) > 1)\r\n alert(\"test failed at calculateDeckLoadFromM2:\" + expected_load + \" vs \" + calculateDeckLoadFromM2(10));\r\n\r\n expected_load = 41.13;\r\n if (Math.abs(expected_load - calculateDeckLoadFromM2(10, 7.08)) > 1)\r\n alert(\"test failed at calculateDeckLoadFromM2:\" + expected_load + \" vs \" + calculateDeckLoadFromM2(10));\r\n\r\n expected_load = 2.3106;\r\n if (Math.abs(expected_load - calculate_ColCapacity(\"65mm x 65mm x 3mm P/C\", 3000, 10, 7.08)) > 0.01)\r\n alert(\r\n \"test failed at calculate_ColCapacity:\" +\r\n expected_load +\r\n \" vs \" +\r\n calculate_ColCapacity(\"65mm x 65mm x 3mm P/C\", 3000, 10, 7.08)\r\n );\r\n\r\n expected_result = {\r\n \"uplift_check_øG_(max)\": 4.47,\r\n \"uplift_check_øG_(max)_capacity\": 26.04,\r\n overturning_check_øMr_about_pier_base: 7.47,\r\n overturning_check_øMr_about_pier_base_capacity: 0,\r\n bearing_capacity_check_pressure_actual: 141,\r\n bearing_capacity_check_pressure_capacity: 150,\r\n torsion_resistance_check: 0.41,\r\n torsion_resistance_check_capacity: 0,\r\n pier_strength: 0,\r\n };\r\n test_result = calculate_FootingCapacity(26.04, false, 450, 500, soil_types.B);\r\n\r\n for (let key in expected_result) {\r\n if (\r\n (expected_result[key] > 5 && Math.abs(expected_result[key] - test_result[key]) > 1) ||\r\n (expected_result[key] < 5 && Math.abs(expected_result[key] - test_result[key]) > 0.01)\r\n ) {\r\n alert(\r\n \"deck test failed at calculate_FootingCapacity:\" +\r\n key +\r\n \" .. \" +\r\n expected_result[key] +\r\n \" vs \" +\r\n test_result[key]\r\n );\r\n return;\r\n }\r\n }\r\n};\r\n","import React from \"react\";\r\nimport { setNull, toNumber, ConvertListToString, DegreesToRadians, GetColourArray, Cos } from \"../components/Common\";\r\nimport { BASIC_SPECS_SECTIONS, SITE_PARAMETER_SECTIONS } from \"./jobState_Schemas\";\r\nimport { UPDATE_AREA_SPECIFICATION } from \"./jobState\";\r\nimport * as CONFIG from \"./configState\";\r\nimport * as COMMON from \"../components/Common\";\r\nimport {\r\n GetAreaDescription,\r\n GetDesignStringShort,\r\n GetNumberofSkylightsSummary,\r\n GetNumberofSkylightsSummaryArea,\r\n} from \"../components_designer/main_drawer/QuotePage\";\r\nimport { jobReadyStateErrorPopups, jobStateErrorPopups, jobWarningPopups } from \"./jobStateWarningPopups\";\r\n\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\nimport { GetShapeUpdateString } from \"../components_designer/layout/PaperFunctionHelper\";\r\n\r\nimport { GetBeamHeight } from \"../components_designer/main_drawer/BracketDesignerHelper\";\r\nimport {\r\n getOffsets,\r\n getRoofAlignmentFromRef,\r\n adjustOffsetForSide,\r\n} from \"../components_designer/context_options/SpecModifyAttachmentHelper\";\r\nimport { calculateDeckBeamCapacity } from \"../components_designer/specification_drawer/decks/DeckEngineering\";\r\n// import { GetItems } from \"../components_designer/layout/PaperFunctions\";\r\n\r\nconst { find_join_angle_extension } = require(\"../components/Common_Conversions\");\r\n\r\n// 2D Designer Actions\r\nexport const SHOW_DESIGNER_MESSAGE = \"SHOW_DESIGNER_MESSAGE\";\r\nexport const CLEAR_DESIGNER_MESSAGE = \"CLEAR_DESIGNER_MESSAGE\";\r\nexport const APPEND_DESIGNER_MESSAGE = \"APPEND_DESIGNER_MESSAGE\";\r\n\r\nconst USE_ATTACHMENT_SYSTEM_2 = false;\r\n\r\nexport const GetItems = (parameters) => {\r\n if (window.svg && window.paper) {\r\n return window.paper.project.getItems(parameters);\r\n }\r\n return null;\r\n};\r\n\r\nexport const validateJob = (job, config, dispatch) => {\r\n job = COMMON.deepCopy(job);\r\n // dispatch({\r\n // type: CLEAR_DESIGNER_MESSAGE,\r\n // });\r\n if (config) {\r\n // VALIDATEA AREAS\r\n job.ErrorMap.AreaSpecifications = [];\r\n job.AreaSpecifications.forEach(function (area, index) {\r\n let area_design_options = config?.design_options?.[area.SHAPE.DesignType];\r\n let result = validateAreaSpecification(job, area, index, setNull(area), area_design_options, dispatch);\r\n area = result.area;\r\n job.ErrorMap.AreaSpecifications.push(result.errorMap);\r\n });\r\n }\r\n\r\n job = validateCustomerDistributorData(job);\r\n\r\n return job;\r\n};\r\n\r\nconst validateAreaSpecification = (job, area, index, errorMap, area_design_options, dispatch) => {\r\n // VALIDATE SHAPE SETUP\r\n errorMap.SHAPE.Height = { name: \"Height\", range: COMMON.replaceVariables(area, area_design_options.height_range) };\r\n\r\n //check values\r\n errorMap.SHAPE.Height = validateNumberRange(area.SHAPE.Height, errorMap.SHAPE.Height);\r\n area.SHAPE.Height = errorMap.SHAPE.Height.value;\r\n\r\n if (errorMap.SHAPE.Height.message) {\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: errorMap.SHAPE.Height.message,\r\n });\r\n }\r\n\r\n return {\r\n area: area,\r\n errorMap: errorMap,\r\n };\r\n};\r\n\r\nexport const validateFullJob = (config, job, areaIndex = -1, app = null) => {\r\n let region = job?.Distributor?.Offer?.Regions?.[0];\r\n\r\n if (job?.App?.temp_POA) region = job?.App?.temp_POA;\r\n if (region && config?.region?.id !== region) {\r\n let poa_region_key = config?.region?.id + \",\" + region;\r\n if (window.debug && window.POAMismatchWarning !== poa_region_key) {\r\n window.POAMismatchWarning = poa_region_key;\r\n alert(\"cannot validate as config is not matching...\" + config?.region?.id + \" vs \" + region);\r\n }\r\n return job;\r\n }\r\n\r\n job = validateCustomerDistributorData(job, app);\r\n job = AddMetaDataDesignParameters(job);\r\n job = validateSiteData(job, config);\r\n\r\n if (job?.UNDO_ACTION?.config) {\r\n job.UNDO_ACTION.config = null;\r\n }\r\n\r\n job.QuoteParameters.ShowFlatPostDimensions = 1;\r\n if (job?.AreaSpecifications?.[0]?.SHAPE?.DesignType === \"Flat Deck\") {\r\n job.DesignParameters.DeckMode = 1;\r\n }\r\n\r\n if (areaIndex < 0) {\r\n for (let index in job.AreaSpecifications) {\r\n let areaIndex = Number(index);\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n job.AreaSpecifications[areaIndex].AreaIndex = areaIndex;\r\n job = setAreaMeta(config, job, areaIndex);\r\n\r\n job = validateAreaShape(config, job, areaIndex, false);\r\n\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.ROOF_SHEETING] = validateRoofSheetData(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n job = validateAreaShape_Overhangs(config, job, areaIndex, false);\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.ATTACHMENTS] = validateAreaAttachmentData(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS] = validateBeamPostData(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES] = validateGutterDownpipeData(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n if (\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n ) {\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.GABLE_PARAMETERS] = validateGableParameters(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n }\r\n job = validateOptions(config, job, areaIndex);\r\n job = validateEngineeringAndDesign(config, job, areaIndex);\r\n job = validateDecks(config, job, areaIndex);\r\n job = setAreaMeta(config, job, areaIndex);\r\n job = validateAreaShape(config, job, areaIndex, true); // done twice in case of changed to materials affect the shape\r\n\r\n // other settings\r\n if (\r\n (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) &&\r\n job.DesignParameters.Freestanding\r\n ) {\r\n if (job?.Distributor?.Brand === \"Lysaght\") {\r\n } else {\r\n job.AreaSpecifications[areaIndex][\"Footings\"] = [];\r\n }\r\n }\r\n }\r\n } else {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n\r\n job = validateAreaShape(config, job, areaIndex, false);\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.ROOF_SHEETING] = validateRoofSheetData(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n job = validateAreaShape_Overhangs(config, job, areaIndex);\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS] = validateBeamPostData(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES] = validateGutterDownpipeData(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n if (\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n ) {\r\n job.AreaSpecifications[areaIndex][BASIC_SPECS_SECTIONS.GABLE_PARAMETERS] = validateGableParameters(\r\n config,\r\n job,\r\n areaIndex\r\n );\r\n }\r\n job = validateOptions(config, job, areaIndex);\r\n }\r\n\r\n job.SupplementaryEngineering = checkSupplementaryEngineering(config, job, areaIndex);\r\n\r\n if (app?.user && !job.App.Locked) {\r\n const user_data = app?.user;\r\n if (job?.LastEditor?.id) {\r\n if (job?.LastEditor?.id !== user_data.id) {\r\n if (!job?.LastEditorHistory) job.LastEditorHistory = [];\r\n job.LastEditorHistory.push(job.LastEditor);\r\n }\r\n }\r\n job.LastEditor = {\r\n id: user_data.id,\r\n DisplayName: user_data.DisplayName,\r\n UserCode: user_data.UserCode,\r\n _session_id: window?.session_id,\r\n _ts: Date.now(),\r\n };\r\n }\r\n\r\n return job;\r\n};\r\n\r\nexport const AddMetaDataDesignParameters = (job) => {\r\n job.DesignParameters.Freestanding = true;\r\n job.DesignParameters.NumAreas = job?.AreaSpecifications?.length;\r\n job.DesignParameters.NumFlat = 0;\r\n job.DesignParameters.HasFlat = false;\r\n job.DesignParameters.NumGable = 0;\r\n job.DesignParameters.HasGable = false;\r\n job.DesignParameters.NumDeck = 0;\r\n job.DesignParameters.HasBondor = false;\r\n job.DesignParameters.HasVersiclad = false;\r\n job.DesignParameters.USE_BOM_SPLICING = true;\r\n // if (job?.CreationDate > 1694740764000) job.DesignParameters.USE_ATTACHMENTS_2 = true;\r\n\r\n job.DesignParameters.TotalLength = 0;\r\n\r\n for (let area of job.AreaSpecifications) {\r\n let area_freestanding = true;\r\n if (area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentLeft === 1) {\r\n area_freestanding = false;\r\n } else if (area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentRight === 1) {\r\n area_freestanding = false;\r\n } else if (area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentTop === 1) {\r\n area_freestanding = false;\r\n } else if (area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentBottom === 1) {\r\n area_freestanding = false;\r\n } else if (\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-CutoutType\"] !== \"None\" &&\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-Attachment\"] === 1\r\n ) {\r\n area_freestanding = false;\r\n } else if (\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-CutoutType\"] !== \"None\" &&\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-Attachment\"] === 1\r\n ) {\r\n area_freestanding = false;\r\n } else if (\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-CutoutType\"] !== \"None\" &&\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-Attachment\"] === 1\r\n ) {\r\n area_freestanding = false;\r\n } else if (\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-CutoutType\"] !== \"None\" &&\r\n area[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-Attachment\"] === 1\r\n ) {\r\n area_freestanding = false;\r\n }\r\n if (!area_freestanding) job.DesignParameters.Freestanding = false;\r\n area[BASIC_SPECS_SECTIONS.ATTACHMENTS].Freestanding = area_freestanding;\r\n\r\n area.HasDutchGable =\r\n area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL &&\r\n (area[BASIC_SPECS_SECTIONS.SHAPE].RoofType1 == \"Dutch Gable\" ||\r\n area[BASIC_SPECS_SECTIONS.SHAPE].RoofType2 == \"Dutch Gable\");\r\n\r\n if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n job.DesignParameters.HasGable = true;\r\n job.DesignParameters.NumGable++;\r\n } else if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) {\r\n job.DesignParameters.HasGable = true;\r\n job.DesignParameters.NumGable++;\r\n } else if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) {\r\n job.DesignParameters.HasFlat = true;\r\n job.DesignParameters.NumFlat++;\r\n } else if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) {\r\n job.DesignParameters.HasFlat = true;\r\n job.DesignParameters.NumDeck++;\r\n }\r\n if (area?.ROOF_SHEETING?.RoofGroupType) {\r\n if (area.ROOF_SHEETING.RoofGroupType.toUpperCase().includes(\"BONDOR\"))\r\n job.DesignParameters.HasBondor = true;\r\n if (area.ROOF_SHEETING.RoofGroupType.toUpperCase().includes(\"VERSICLAD\"))\r\n job.DesignParameters.HasVersiclad = true;\r\n }\r\n\r\n job.DesignParameters.TotalLength += area.SHAPE.Length;\r\n }\r\n\r\n for (let area of job.AreaSpecifications) {\r\n area.Description = GetAreaDescription(area);\r\n }\r\n job.DesignSummary = job.DesignParameters?.DesignTemplateName\r\n ? job.DesignParameters?.DesignTemplateName\r\n : GetDesignStringShort(job.AreaSpecifications);\r\n if (job?.OrderStatus) job.OrderStatus = job.OrderStatus.toUpperCase();\r\n\r\n job.QuoteParameters.FreeStanding = job.DesignParameters.Freestanding;\r\n\r\n if (job.DesignParameters.USE_BOM_SPLICING) {\r\n job.SiteParameters.CONST_GUTTER_MAX_LENGTH = 99999;\r\n job.SiteParameters.CONST_MAX_FLASHING_LENGTH = 99999;\r\n } else {\r\n job.SiteParameters.CONST_GUTTER_MAX_LENGTH = 8000;\r\n job.SiteParameters.CONST_MAX_FLASHING_LENGTH = 6100;\r\n }\r\n\r\n return job;\r\n};\r\n\r\nexport const setAreaMeta = (config, job, areaIndex, secondCheck = false) => {\r\n let last_area_data = job.AreaSpecifications?.[areaIndex - 1];\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n let next_area_data = job.AreaSpecifications?.[areaIndex + 1];\r\n let design_option = config?.design_options?.[this_area_data.SHAPE.DesignType];\r\n\r\n const GetAreaMeta = (job, this_area_data, side) => {\r\n let meta_state = {\r\n HasGutter: false,\r\n HasBoxGutter: false,\r\n IsWaterShed: false,\r\n HasAttachment: false,\r\n AttachmentType: \"None\",\r\n AttachmentVariation: \"None\",\r\n IsPartiallyAttached: false,\r\n PartiallyAttachedHasGutter: false,\r\n IsAttachedToBeamOrFascia: function () {\r\n return (\r\n this?.HasAttachment &&\r\n this?.AttachmentType &&\r\n (this?.AttachmentType.includes(\"Fascia\") || this?.AttachmentType.includes(\"Beam\"))\r\n );\r\n },\r\n IsOnlyHouseGutter: function () {\r\n return this.IsWaterShed && !this.HasGutter && this.IsAttachedToBeamOrFascia();\r\n },\r\n HasBoxGutterToFascia: function () {\r\n return this.HasBoxGutter && this.IsAttachedToBeamOrFascia();\r\n },\r\n HasBeam: function () {\r\n if (!this?.AttachmentType) return true;\r\n if (this.AttachmentType === \"None\") return true;\r\n if (this.IsPartiallyAttached) return true;\r\n if (this?.AttachmentType?.includes(\"Riser\")) return true;\r\n if (this?.AttachmentType?.includes(\"Beam\")) return true;\r\n if (this?.AttachmentType?.includes(\"Wall\")) {\r\n if (this?.AttachmentVariation?.includes(\"Beam\")) return true;\r\n return false;\r\n }\r\n if (this?.AttachmentType?.includes(\"Flyover\")) return true;\r\n if (this?.AttachmentType?.includes(\"Fascia\")) return false;\r\n return true;\r\n },\r\n };\r\n\r\n let is_flat = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT;\r\n\r\n let attachmentKey = \"Attachment\" + side;\r\n if (side === \"Front\") attachmentKey = \"AttachmentBottom\";\r\n if (side === \"Back\") attachmentKey = \"AttachmentTop\";\r\n\r\n if (this_area_data.ATTACHMENTS[attachmentKey] == 1) {\r\n meta_state.HasAttachment = true;\r\n meta_state.AttachmentType = job.SiteParameters.ExistingStructure.AttachmentType;\r\n }\r\n\r\n let gutterKey = \"GutterB\";\r\n if (attachmentKey === \"AttachmentBottom\") gutterKey = \"GutterF\";\r\n if (attachmentKey === \"AttachmentLeft\") gutterKey = \"GutterL\";\r\n if (attachmentKey === \"AttachmentRight\") gutterKey = \"GutterR\";\r\n\r\n if (this_area_data.GUTTERS_AND_DOWNPIPES[gutterKey] >= 1) {\r\n meta_state.HasGutter = true;\r\n if (this_area_data.GUTTERS_AND_DOWNPIPES[gutterKey] === 2) {\r\n meta_state.HasBoxGutter = true;\r\n }\r\n }\r\n\r\n let paats = this_area_data?.ATTACHMENTS?.PARTIAL_ATTACHMENTS;\r\n if (paats && paats.length === 0) {\r\n let paat = this_area_data?.ATTACHMENTS?.PARTIAL_ATTACHMENTS.filter((obj) => {\r\n return obj.Name.includes(side);\r\n });\r\n if (paat && paat.length > 0) {\r\n meta_state.IsPartiallyAttached = true;\r\n meta_state.PartiallyAttachedHasGutter = paat.HasGutter;\r\n }\r\n }\r\n\r\n let mod_items = [];\r\n if (this_area_data?.ATTACHMENTS?.AttachmentModifications?.filter)\r\n mod_items = this_area_data?.ATTACHMENTS?.AttachmentModifications?.filter((obj) => {\r\n return obj?.Name ? obj?.Name?.includes(side) : false;\r\n });\r\n if (mod_items && mod_items.length > 0) {\r\n if (mod_items[0]?.FasciaType && meta_state.HasAttachment) {\r\n meta_state.AttachmentType = mod_items[0]?.AttachmentType;\r\n meta_state.AttachmentVariation = mod_items[0]?.AttachmentVariation;\r\n }\r\n }\r\n\r\n if (is_flat) {\r\n if (side === \"Front\") {\r\n if (this_area_data.SHAPE.SheetDirection === \"Front\") meta_state.IsWaterShed = true;\r\n } else if (side === \"Back\") {\r\n if (this_area_data.SHAPE.SheetDirection === \"Back\") meta_state.IsWaterShed = true;\r\n } else if (side === \"Left\") {\r\n if (this_area_data.SHAPE.SheetDirection === \"Left\") meta_state.IsWaterShed = true;\r\n } else if (side === \"Right\") {\r\n if (this_area_data.SHAPE.SheetDirection === \"Right\") meta_state.IsWaterShed = true;\r\n }\r\n } else if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n if (side === \"Front\") {\r\n meta_state.IsWaterShed = true;\r\n } else if (side === \"Back\") {\r\n meta_state.IsWaterShed = true;\r\n } else if (side === \"Left\") {\r\n if (this_area_data.SHAPE.RoofType1 === \"Hip\" || this_area_data.SHAPE.RoofType1 === \"Dutch Gable\")\r\n meta_state.IsWaterShed = true;\r\n } else if (side === \"Right\") {\r\n if (this_area_data.SHAPE.RoofType2 === \"Hip\" || this_area_data.SHAPE.RoofType2 === \"Dutch Gable\")\r\n meta_state.IsWaterShed = true;\r\n }\r\n }\r\n\r\n if (is_flat) {\r\n if (side === \"Front\") {\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-WidthX\"]) >=\r\n this_area_data.SHAPE.Length - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n meta_state.HasAttachment = false;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-WidthX\"]) >=\r\n this_area_data.SHAPE.Length - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n }\r\n }\r\n if (side === \"Back\") {\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-WidthX\"]) >=\r\n this_area_data.SHAPE.Length - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-WidthX\"]) >=\r\n this_area_data.SHAPE.Length - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n }\r\n }\r\n if (side === \"Left\") {\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-WidthY\"]) >=\r\n this_area_data.SHAPE.Depth - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-WidthY\"]) >=\r\n this_area_data.SHAPE.Depth - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n }\r\n }\r\n if (side === \"Right\") {\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-WidthY\"]) >=\r\n this_area_data.SHAPE.Depth - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-CutoutType\"] === \"Angle\") {\r\n if (\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-WidthY\"]) >=\r\n this_area_data.SHAPE.Depth - 50\r\n ) {\r\n meta_state.IsFullTaper = true;\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-Attachment\"] === 1) {\r\n if (meta_state.IsFullTaper) meta_state.HasAttachment = true;\r\n else meta_state.IsPartiallyAttached = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return meta_state;\r\n };\r\n\r\n let meta = {\r\n HasBoxGutterToFascia: function () {\r\n return (\r\n meta.FrontState.HasBoxGutterToFascia() ||\r\n meta.BackState.HasBoxGutterToFascia() ||\r\n meta.LeftState.HasBoxGutterToFascia() ||\r\n meta.RightState.HasBoxGutterToFascia()\r\n );\r\n },\r\n HasIsOnlyHouseGutter: function () {\r\n return (\r\n meta.FrontState.IsOnlyHouseGutter() ||\r\n meta.BackState.IsOnlyHouseGutter() ||\r\n meta.LeftState.IsOnlyHouseGutter() ||\r\n meta.RightState.IsOnlyHouseGutter()\r\n );\r\n },\r\n HasFullTaperWaterShed: function () {\r\n return (\r\n ((meta.FrontState.IsWaterShed || meta.BackState.IsWaterShed) && meta.FrontState.IsFullTaper) ||\r\n ((meta.FrontState.IsWaterShed || meta.BackState.IsWaterShed) && meta.BackState.IsFullTaper) ||\r\n ((meta.LeftState.IsWaterShed || meta.RightState.IsWaterShed) && meta.LeftState.IsFullTaper) ||\r\n ((meta.LeftState.IsWaterShed || meta.RightState.IsWaterShed) && meta.RightState.IsFullTaper)\r\n );\r\n },\r\n };\r\n\r\n meta.FrontState = GetAreaMeta(job, this_area_data, \"Front\");\r\n meta.BackState = GetAreaMeta(job, this_area_data, \"Back\");\r\n meta.LeftState = GetAreaMeta(job, this_area_data, \"Left\");\r\n meta.RightState = GetAreaMeta(job, this_area_data, \"Right\");\r\n\r\n if (this_area_data?.ROOF_SHEETING?.RoofGroupType) {\r\n if (this_area_data.ROOF_SHEETING.RoofGroupType.toUpperCase().includes(\"BONDOR\")) meta.HasBondor = true;\r\n if (this_area_data.ROOF_SHEETING.RoofGroupType.toUpperCase().includes(\"VERSICLAD\")) meta.HasVersiclad = true;\r\n if (meta.HasBondor || meta.HasVersiclad) {\r\n meta.HasInsulatedPanel = true;\r\n }\r\n }\r\n\r\n let is_flat = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT;\r\n let is_Gable = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL;\r\n\r\n let flat2DRoofArea = this_area_data.SHAPE.Length * this_area_data.SHAPE.Depth;\r\n meta.AreaBoundarySize = (flat2DRoofArea / Cos(this_area_data.SHAPE.RoofPitch) / 1000000).toFixed(2);\r\n if (is_flat) {\r\n let cutout2DArea = CutoutArea(this_area_data);\r\n meta.CutoutArea = (cutout2DArea / Cos(this_area_data.SHAPE.RoofPitch) / 1000000).toFixed(2);\r\n flat2DRoofArea = flat2DRoofArea - cutout2DArea;\r\n }\r\n\r\n meta.RoofArea = (flat2DRoofArea / Cos(this_area_data.SHAPE.RoofPitch) / 1000000).toFixed(2);\r\n\r\n meta.HasHips = false;\r\n meta.HasDutchGables = false;\r\n\r\n meta.IsFreestanding = this_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].Freestanding;\r\n\r\n if (is_Gable) {\r\n if (this_area_data.SHAPE.RoofType1 === \"Dutch Gable\" || this_area_data.SHAPE.RoofType2 === \"Dutch Gable\")\r\n meta.HasDutchGables = true;\r\n if (this_area_data.SHAPE.RoofType1 === \"Hip\" || this_area_data.SHAPE.RoofType2 === \"Hip\") meta.HasHips = true;\r\n }\r\n\r\n let half_beam_width = (window.LYSAGHT ? 50 : 65) * 0.5;\r\n let roof_sheet_span = this_area_data.SHAPE.Depth - half_beam_width;\r\n if (is_flat) {\r\n if (this_area_data.SHAPE.SheetDirection === \"Left\" || this_area_data.SHAPE.SheetDirection === \"Right\") {\r\n roof_sheet_span = this_area_data.SHAPE.Length;\r\n if (meta.LeftState.HasBeam()) roof_sheet_span -= half_beam_width;\r\n if (meta.RightState.HasBeam()) roof_sheet_span -= half_beam_width;\r\n } else {\r\n roof_sheet_span = this_area_data.SHAPE.Depth;\r\n if (meta.FrontState.HasBeam()) roof_sheet_span -= half_beam_width;\r\n if (meta.BackState.HasBeam()) roof_sheet_span -= half_beam_width;\r\n }\r\n } else if (is_Gable) {\r\n roof_sheet_span =\r\n this_area_data.SHAPE.Depth / 2 - half_beam_width * 2 - this_area_data.BEAMS_AND_POSTS.GableTopPurlinOffset;\r\n }\r\n roof_sheet_span = roof_sheet_span / Cos(this_area_data.SHAPE.RoofPitch);\r\n meta.RoofSheetSpan = roof_sheet_span;\r\n\r\n this_area_data.META = meta;\r\n\r\n // if (window.debug && this_area_data.Acknowledgements)\r\n // this_area_data.Acknowledgements.BoxHouseGutterAcknowledgement = false;\r\n // if (window.debug && this_area_data.Acknowledgements)\r\n // this_area_data.Acknowledgements.DoubleGutterAcknowledgement = false;\r\n return job;\r\n};\r\n\r\nconst CUTOUT_BACK_LEFT = \"BackLeft\";\r\nconst CUTOUT_BACK_MID = \"BackMid\";\r\nconst CUTOUT_BACK_RIGHT = \"BackRight\";\r\nconst CUTOUT_FRONT_LEFT = \"FrontLeft\";\r\nconst CUTOUT_FRONT_RIGHT = \"FrontRight\";\r\n\r\nconst CutoutArea = (this_area_data) => {\r\n let area_roof = 0;\r\n area_roof += CutoutAreaSide(this_area_data, CUTOUT_BACK_LEFT);\r\n area_roof += CutoutAreaSide(this_area_data, CUTOUT_BACK_MID);\r\n area_roof += CutoutAreaSide(this_area_data, CUTOUT_BACK_RIGHT);\r\n area_roof += CutoutAreaSide(this_area_data, CUTOUT_FRONT_LEFT);\r\n area_roof += CutoutAreaSide(this_area_data, CUTOUT_FRONT_RIGHT);\r\n return area_roof;\r\n};\r\nconst CutoutAreaSide = (this_area_data, side) => {\r\n let area_roof = 0;\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-CutoutType\"] !== \"None\") {\r\n area_roof =\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-WidthX\"] *\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-WidthY\"];\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-CutoutType\"] === \"Angle\") {\r\n area_roof = area_roof / 2;\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-CutoutType\"] === \"CornerBay\") {\r\n area_roof =\r\n area_roof -\r\n (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-WidthD\"] *\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-WidthD\"]) /\r\n 2;\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-CutoutType\"] === \"Bay\") {\r\n area_roof =\r\n area_roof -\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-WidthD\"] *\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[side + \"-WidthD\"];\r\n }\r\n }\r\n return area_roof;\r\n};\r\n\r\nexport const validateAreaShape = (config, job, areaIndex, secondCheck = false) => {\r\n let last_area_data = job.AreaSpecifications?.[areaIndex - 1];\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n let next_area_data = job.AreaSpecifications?.[areaIndex + 1];\r\n let design_option = config?.design_options?.[this_area_data.SHAPE.DesignType];\r\n\r\n let this_area_data_SHAPE = this_area_data[BASIC_SPECS_SECTIONS.SHAPE];\r\n\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) {\r\n if ([\"Parallel\", \"Projection\"].includes(this_area_data_SHAPE.DesignSubType)) {\r\n this_area_data_SHAPE.DesignSubType = \"Type 4\";\r\n this_area_data_SHAPE.SheetDirection = \"Front\";\r\n }\r\n if (this_area_data_SHAPE.DesignSubType === \"Type 4\") {\r\n if (this_area_data_SHAPE.RoofPitch < 0) this_area_data_SHAPE.SheetDirection = \"Back\";\r\n else this_area_data_SHAPE.SheetDirection = \"Front\";\r\n }\r\n if (this_area_data_SHAPE.DesignSubType === \"Type 3\") {\r\n this_area_data_SHAPE.OH_Front = 0;\r\n this_area_data_SHAPE.OH_Back = 0;\r\n if (this_area_data_SHAPE.RoofPitch < 0)\r\n this_area_data_SHAPE.RoofPitch = Math.abs(this_area_data_SHAPE.RoofPitch);\r\n }\r\n\r\n this_area_data_SHAPE.RotateArea = 0;\r\n }\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) {\r\n this_area_data_SHAPE.DesignSubType = \"Type 4\";\r\n this_area_data_SHAPE.SheetDirection = \"Front\";\r\n this_area_data_SHAPE.RotateArea = 0;\r\n }\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n if (![\"Projection\", \"Parallel\"].includes(this_area_data_SHAPE.DesignSubType)) {\r\n this_area_data_SHAPE.DesignSubType = \"Parallel\";\r\n }\r\n this_area_data_SHAPE.SheetDirection = \"Front\";\r\n }\r\n\r\n if (job.DesignParameters.DeckMode === 1) {\r\n this_area_data_SHAPE.RotateArea = 1;\r\n // let maxPostHeight = MaxDeckPostHeights(\r\n // this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostType,\r\n // design_option?.post?.span_table\r\n // );\r\n let maxPostHeight = 3000;\r\n if (maxPostHeight && this_area_data_SHAPE.Height > maxPostHeight) this_area_data_SHAPE.Height = maxPostHeight;\r\n }\r\n\r\n //PARTIAL ATTACHMENTS\r\n if (this_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].PARTIAL_ATTACHMENTS) {\r\n for (let paat of this_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].PARTIAL_ATTACHMENTS) {\r\n if (paat.HasBeam === undefined) paat.HasBeam = 1;\r\n }\r\n }\r\n\r\n // set 'shearing' fall\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) {\r\n let set_to_flat = false;\r\n if (\r\n last_area_data &&\r\n last_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT &&\r\n last_area_data.SHAPE.DesignSubType === \"Type 3\"\r\n ) {\r\n set_to_flat = true;\r\n } else if (\r\n next_area_data &&\r\n next_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT &&\r\n next_area_data.SHAPE.DesignSubType === \"Type 3\"\r\n ) {\r\n set_to_flat = true;\r\n }\r\n\r\n if (set_to_flat) this_area_data.SHAPE.PitchedRoofShear = 0;\r\n else this_area_data.SHAPE.PitchedRoofShear = \"\";\r\n }\r\n\r\n // validate JOIN\r\n\r\n if (last_area_data) {\r\n let has_flat = false;\r\n let has_pitched = false;\r\n let has_portal = false;\r\n\r\n if (\r\n last_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT\r\n )\r\n has_flat = true;\r\n if (\r\n last_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n )\r\n has_pitched = true;\r\n if (\r\n last_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL\r\n )\r\n has_portal = true;\r\n\r\n let join_type = \"flat_to_flat\";\r\n if (has_flat && has_pitched) join_type = \"flat_to_gable\";\r\n if (has_flat && has_portal) join_type = \"flat_to_portal\";\r\n if (!has_flat && !has_pitched && has_portal) join_type = \"portal_to_portal\";\r\n if (!has_flat) join_type = \"portal_to_portal\";\r\n\r\n let last_join_type = CONFIG?.JOIN_TYPES?.[last_area_data.SHAPE.AREAJOIN.JoinType];\r\n if (last_join_type && last_join_type[join_type] === true) {\r\n } else {\r\n last_area_data.SHAPE.AREAJOIN.JoinType = \"Offset\";\r\n }\r\n }\r\n\r\n if (next_area_data) {\r\n let has_flat = false;\r\n let has_pitched = false;\r\n let has_portal = false;\r\n\r\n if (\r\n next_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT\r\n )\r\n has_flat = true;\r\n if (\r\n next_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n )\r\n has_pitched = true;\r\n if (\r\n next_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL\r\n )\r\n has_portal = true;\r\n\r\n let join_type = \"flat_to_flat\";\r\n if (has_flat && has_pitched) join_type = \"flat_to_gable\";\r\n if (has_flat && has_portal) join_type = \"flat_to_portal\";\r\n if (!has_flat && !has_pitched && has_portal) join_type = \"portal_to_portal\";\r\n\r\n let this_join_type = CONFIG?.JOIN_TYPES?.[this_area_data.SHAPE.AREAJOIN.JoinType];\r\n if (this_join_type && this_join_type[join_type] === true) {\r\n } else {\r\n this_area_data.SHAPE.AREAJOIN.JoinType = \"Offset\";\r\n }\r\n\r\n this_area_data.SHAPE.AREAJOIN.JoinDoubleHipBeam = false;\r\n if (\r\n this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RoofSheetData.double_beam_hip_required ||\r\n next_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RoofSheetData.double_beam_hip_required\r\n ) {\r\n this_area_data.SHAPE.AREAJOIN.JoinDoubleHipBeam = true;\r\n }\r\n }\r\n\r\n this_area_data.SHAPE.AREAJOIN.OmitJoinPost = 1;\r\n this_area_data.SHAPE.AREAJOIN.JoinOffsetGlobal = this_area_data.SHAPE.AREAJOIN.JoinType === \"None\" ? 1 : 0;\r\n\r\n if (next_area_data && this_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinType === \"Gable\") {\r\n let diff = Math.abs(\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth - next_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth\r\n );\r\n\r\n if (diff > 1 && diff <= 120) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinType = \"Offset\";\r\n } else if (diff < 1 || diff >= 120) {\r\n if (diff >= 120) {\r\n if (\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth > next_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.HipJunctionDir = 0;\r\n } else {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.HipJunctionDir = 1;\r\n }\r\n }\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType2 = \"Gable\";\r\n next_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType1 = \"Gable\";\r\n next_area_data.SHAPE.Height = this_area_data.SHAPE.Height;\r\n next_area_data.SHAPE.RoofPitch = this_area_data.SHAPE.RoofPitch;\r\n }\r\n }\r\n if (last_area_data && last_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinType === \"Gable\") {\r\n let diff = Math.abs(\r\n last_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth - this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth\r\n );\r\n\r\n if (diff > 1 && diff <= 120) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinType = \"Offset\";\r\n } else if (diff < 1 || diff >= 120) {\r\n if (diff >= 120) {\r\n if (\r\n last_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth > this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth\r\n ) {\r\n last_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.HipJunctionDir = 0;\r\n } else {\r\n last_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.HipJunctionDir = 1;\r\n }\r\n }\r\n last_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType2 = \"Gable\";\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType1 = \"Gable\";\r\n last_area_data.SHAPE.Height = this_area_data.SHAPE.Height;\r\n last_area_data.SHAPE.RoofPitch = this_area_data.SHAPE.RoofPitch;\r\n }\r\n }\r\n\r\n if (next_area_data && this_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinType === \"Hip\") {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType2 = \"Gable\";\r\n next_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType1 = \"Gable\";\r\n next_area_data.SHAPE.Height = this_area_data.SHAPE.Height;\r\n next_area_data.SHAPE.Depth = this_area_data.SHAPE.Depth;\r\n next_area_data.SHAPE.RoofPitch = this_area_data.SHAPE.RoofPitch;\r\n }\r\n\r\n if (last_area_data && last_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinType === \"Hip\") {\r\n last_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType2 = \"Gable\";\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType1 = \"Gable\";\r\n last_area_data.SHAPE.Height = this_area_data.SHAPE.Height;\r\n last_area_data.SHAPE.Depth = this_area_data.SHAPE.Depth;\r\n last_area_data.SHAPE.RoofPitch = this_area_data.SHAPE.RoofPitch;\r\n }\r\n\r\n if (design_option?.length_range)\r\n this_area_data_SHAPE.Length = validateNumberRange_old(\r\n this_area_data_SHAPE.Length,\r\n COMMON.replaceVariables(this_area_data, design_option.length_range)\r\n );\r\n if (design_option?.depth_range)\r\n this_area_data_SHAPE.Depth = validateNumberRange_old(\r\n this_area_data_SHAPE.Depth,\r\n COMMON.replaceVariables(this_area_data, design_option.depth_range)\r\n );\r\n if (design_option?.height_range)\r\n this_area_data_SHAPE.Height = validateNumberRange_old(\r\n this_area_data_SHAPE.Height,\r\n COMMON.replaceVariables(this_area_data, design_option.height_range)\r\n );\r\n if (design_option?.pitch_range) {\r\n // Min pitch with Skylights updated to 3 instead of 2.\r\n let min_pitch = Number(this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.min_pitch);\r\n if (\r\n (this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofType.includes(\"TL5\") ||\r\n this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofType.includes(\"TRIMDEK\")) &&\r\n this_area_data[BASIC_SPECS_SECTIONS.SKYLIGHTS].length > 0\r\n ) {\r\n min_pitch = 3;\r\n }\r\n\r\n const is_neg = this_area_data_SHAPE.RoofPitch < 0;\r\n let designPitch = COMMON.replaceVariables(this_area_data, design_option.pitch_range);\r\n\r\n // validateNumberRange_old expects a object\r\n if (typeof design_option.pitch_range === \"string\")\r\n designPitch = { [design_option.pitch_range.split(\": \")[0]]: design_option.pitch_range.split(\": \")[1] };\r\n\r\n this_area_data_SHAPE.RoofPitch = validateNumberRange_old(Math.abs(this_area_data_SHAPE.RoofPitch), designPitch);\r\n\r\n if (min_pitch && Math.abs(this_area_data_SHAPE.RoofPitch) < min_pitch)\r\n this_area_data_SHAPE.RoofPitch = Number(min_pitch);\r\n if (is_neg) this_area_data_SHAPE.RoofPitch = -this_area_data_SHAPE.RoofPitch;\r\n }\r\n\r\n //validate Cutouts\r\n\r\n if (this_area_data_SHAPE.CUTOUTS[\"BackMid-CutoutType\"] === \"Box\") {\r\n this_area_data_SHAPE.CUTOUTS[\"BackMid-WidthD\"] = 0;\r\n } else if (\r\n this_area_data_SHAPE.CUTOUTS[\"BackMid-CutoutType\"] === \"Bay\" &&\r\n this_area_data_SHAPE.CUTOUTS[\"BackMid-WidthD\"] === 0\r\n ) {\r\n this_area_data_SHAPE.CUTOUTS[\"BackMid-WidthD\"] = this_area_data_SHAPE.CUTOUTS[\"BackMid-WidthY\"] / 2;\r\n }\r\n\r\n const areas = [\"BackLeft\", \"BackMid\", \"BackRight\", \"FrontLeft\", \"FrontRight\"];\r\n for (let area of areas) {\r\n let this_cutout = this_area_data_SHAPE.CUTOUTS[area + \"-CutoutType\"];\r\n if (this_cutout && this_cutout === \"Custom\") {\r\n if (!this_area_data_SHAPE?.CUTOUTS?.[area + \"-CustomNumSegments\"])\r\n this_area_data_SHAPE.CUTOUTS[area + \"-CustomNumSegments\"] = 3;\r\n let num_segments = toNumber(this_area_data_SHAPE.CUTOUTS[area + \"-CustomNumSegments\"]);\r\n for (var i = 1; i < num_segments + 1; i++) {\r\n let section = area + \"-\" + i;\r\n if (this_area_data_SHAPE?.CUTOUTS?.[section + \"-CustomPoint\"] === undefined) {\r\n let default_x = 300;\r\n let default_y = 100 * i;\r\n\r\n if (area === \"FrontLeft\") default_y = -default_y;\r\n if (area === \"BackRight\") default_y = -default_y;\r\n\r\n this_area_data_SHAPE.CUTOUTS[section + \"-CustomPoint\"] = \"(\" + default_x + \",\" + default_y + \")\";\r\n }\r\n if (this_area_data_SHAPE?.CUTOUTS?.[section + \"-CustomHasBeam\"] === undefined)\r\n this_area_data_SHAPE.CUTOUTS[section + \"-CustomHasBeam\"] = 1;\r\n if (this_area_data_SHAPE?.CUTOUTS?.[section + \"-CustomHasGutter\"] === undefined)\r\n this_area_data_SHAPE.CUTOUTS[section + \"-CustomHasGutter\"] = 1;\r\n if (this_area_data_SHAPE?.CUTOUTS?.[section + \"-CustomHasPosts\"] === undefined)\r\n this_area_data_SHAPE.CUTOUTS[section + \"-CustomHasPosts\"] = 1;\r\n }\r\n }\r\n if (this_cutout && this_cutout !== \"None\") {\r\n //validate cutout overhangs\r\n let this_cutout_oh = this_area_data_SHAPE.CUTOUTS[area + \"-Overhang\"];\r\n\r\n //overhang_front_range is now used for BACK and FRONT\r\n if (design_option?.overhang_front_range)\r\n this_area_data_SHAPE.CUTOUTS[area + \"-Overhang\"] = validateNumberRange_old(\r\n this_cutout_oh,\r\n COMMON.replaceVariables(this_area_data, design_option.overhang_front_range)\r\n );\r\n\r\n let min_front_overhang =\r\n this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.min_front_overhang;\r\n\r\n if (min_front_overhang !== undefined && this_cutout_oh < min_front_overhang)\r\n this_area_data_SHAPE.CUTOUTS[area + \"-Overhang\"] = min_front_overhang;\r\n\r\n if (this_area_data_SHAPE.CUTOUTS[area + \"-WidthX\"] < 0)\r\n this_area_data_SHAPE.CUTOUTS[area + \"-WidthX\"] = 500;\r\n if (this_area_data_SHAPE.CUTOUTS[area + \"-WidthY\"] < 0)\r\n this_area_data_SHAPE.CUTOUTS[area + \"-WidthY\"] = 500;\r\n if (this_area_data_SHAPE.CUTOUTS[area + \"-WidthD\"] < 0)\r\n this_area_data_SHAPE.CUTOUTS[area + \"-WidthD\"] = 500;\r\n\r\n let min_side_overhang =\r\n this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.min_side_overhang;\r\n\r\n let this_cutout_side_oh = this_area_data_SHAPE.CUTOUTS[area + \"-OverhangY\"];\r\n if (min_side_overhang !== undefined && this_cutout_side_oh < min_side_overhang)\r\n this_area_data_SHAPE.CUTOUTS[area + \"-OverhangY\"] = min_side_overhang;\r\n\r\n let this_cutout_side2_oh = this_area_data_SHAPE.CUTOUTS[area + \"-OverhangY2\"];\r\n if (min_side_overhang !== undefined && this_cutout_side2_oh < min_side_overhang)\r\n this_area_data_SHAPE.CUTOUTS[area + \"-OverhangY2\"] = min_side_overhang;\r\n }\r\n }\r\n\r\n if (secondCheck) {\r\n // this area depth\r\n\r\n let roofsheet_data = this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING];\r\n }\r\n\r\n this_area_data_SHAPE.HasFullTaperWaterShed = this_area_data?.META?.HasFullTaperWaterShed\r\n ? this_area_data?.META?.HasFullTaperWaterShed()\r\n : false;\r\n\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE] = this_area_data_SHAPE;\r\n\r\n return job;\r\n};\r\n\r\nexport const validateAreaShape_Overhangs = (config, job, areaIndex) => {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n let this_area_data_SHAPE = this_area_data[BASIC_SPECS_SECTIONS.SHAPE];\r\n let next_area_data = job.AreaSpecifications?.[areaIndex + 1];\r\n let design_option = config?.design_options?.[this_area_data.SHAPE.DesignType];\r\n\r\n let site = job?.SiteParameters;\r\n let ExistingStructure = site?.ExistingStructure;\r\n\r\n let is_flat = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT;\r\n let is_pitched = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED;\r\n let is_portal = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL;\r\n\r\n // VALIDATE FOR DESIGN TYPE LEGACY ADJUSTMENTS\r\n\r\n if (is_flat) {\r\n if (this_area_data_SHAPE.OH_Front > 0 && this_area_data_SHAPE.OH_Front_Sheet === 0) {\r\n this_area_data_SHAPE.OH_Front_Sheet = this_area_data_SHAPE.OH_Front;\r\n }\r\n this_area_data_SHAPE.OH_Front = 0;\r\n\r\n if (this_area_data_SHAPE.OH_Back > 0 && this_area_data_SHAPE.OH_Back_Sheet === 0) {\r\n this_area_data_SHAPE.OH_Back_Sheet = this_area_data_SHAPE.OH_Back;\r\n }\r\n this_area_data_SHAPE.OH_Back = 0;\r\n\r\n if (this_area_data_SHAPE.OH_Left > 0 && this_area_data_SHAPE.OH_Left_Sheet === 0) {\r\n this_area_data_SHAPE.OH_Left_Sheet = this_area_data_SHAPE.OH_Left;\r\n }\r\n this_area_data_SHAPE.OH_Left = 0;\r\n\r\n if (this_area_data_SHAPE.OH_Right > 0 && this_area_data_SHAPE.OH_Right_Sheet === 0) {\r\n this_area_data_SHAPE.OH_Right_Sheet = this_area_data_SHAPE.OH_Right;\r\n }\r\n this_area_data_SHAPE.OH_Right = 0;\r\n }\r\n\r\n //MAX OFFERING BASE OVERHANG RANGE\r\n\r\n if (design_option?.overhang_left_range)\r\n this_area_data_SHAPE.OH_Left_Sheet = validateNumberRange_old(\r\n this_area_data_SHAPE.OH_Left_Sheet,\r\n COMMON.replaceVariables(this_area_data, design_option.overhang_left_range)\r\n );\r\n if (design_option?.overhang_right_range)\r\n this_area_data_SHAPE.OH_Right_Sheet = validateNumberRange_old(\r\n this_area_data_SHAPE.OH_Right_Sheet,\r\n COMMON.replaceVariables(this_area_data, design_option.overhang_right_range)\r\n );\r\n if (design_option?.overhang_front_range)\r\n this_area_data_SHAPE.OH_Front_Sheet = validateNumberRange_old(\r\n this_area_data_SHAPE.OH_Front_Sheet,\r\n COMMON.replaceVariables(this_area_data, design_option.overhang_front_range)\r\n );\r\n if (design_option?.overhang_back_range)\r\n this_area_data_SHAPE.OH_Back_Sheet = validateNumberRange_old(\r\n this_area_data_SHAPE.OH_Back_Sheet,\r\n COMMON.replaceVariables(this_area_data, design_option.overhang_back_range)\r\n );\r\n\r\n //MAX OFFERING ROOFSHEET OVERHANG\r\n\r\n let max_overhang_roofsheet = this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.max_overhang;\r\n if (max_overhang_roofsheet !== undefined) {\r\n if (this_area_data.SHAPE.SheetDirection === \"Left\" || this_area_data.SHAPE.SheetDirection === \"Right\") {\r\n if (this_area_data_SHAPE.OH_Left_Sheet > max_overhang_roofsheet)\r\n this_area_data_SHAPE.OH_Left_Sheet = max_overhang_roofsheet;\r\n if (this_area_data_SHAPE.OH_Right_Sheet > max_overhang_roofsheet)\r\n this_area_data_SHAPE.OH_Right_Sheet = max_overhang_roofsheet;\r\n } else {\r\n if (this_area_data_SHAPE.OH_Front_Sheet > max_overhang_roofsheet)\r\n this_area_data_SHAPE.OH_Front_Sheet = max_overhang_roofsheet;\r\n if (this_area_data_SHAPE.OH_Back_Sheet > max_overhang_roofsheet)\r\n this_area_data_SHAPE.OH_Back_Sheet = max_overhang_roofsheet;\r\n }\r\n }\r\n\r\n //MIN FRONT OVERHANG\r\n\r\n let min_front_overhang = this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.min_front_overhang;\r\n let maxFrontBackEndSpan =\r\n this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.max_frontback_end_span;\r\n\r\n if (min_front_overhang !== undefined) {\r\n if (\r\n this_area_data.SHAPE.SheetDirection === \"Front\" ||\r\n this_area_data.SHAPE.SheetDirection === \"Back\" ||\r\n is_portal\r\n ) {\r\n if (this_area_data_SHAPE.OH_Front_Sheet < min_front_overhang)\r\n this_area_data_SHAPE.OH_Front_Sheet =\r\n maxFrontBackEndSpan < min_front_overhang ? maxFrontBackEndSpan : min_front_overhang;\r\n if (this_area_data_SHAPE.OH_Back_Sheet < min_front_overhang)\r\n this_area_data_SHAPE.OH_Back_Sheet =\r\n maxFrontBackEndSpan < min_front_overhang ? maxFrontBackEndSpan : min_front_overhang;\r\n } else if (this_area_data.SHAPE.SheetDirection === \"Left\" || this_area_data.SHAPE.SheetDirection === \"Right\") {\r\n if (this_area_data_SHAPE.OH_Left_Sheet < min_front_overhang)\r\n this_area_data_SHAPE.OH_Left_Sheet = min_front_overhang;\r\n\r\n if (this_area_data_SHAPE.OH_Right_Sheet < min_front_overhang)\r\n this_area_data_SHAPE.OH_Right_Sheet = min_front_overhang;\r\n }\r\n }\r\n\r\n // MIN SIDE OVERHANG\r\n let min_side_overhang = this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.min_side_overhang;\r\n\r\n if (min_side_overhang !== undefined) {\r\n if (\r\n this_area_data.SHAPE.SheetDirection === \"Front\" ||\r\n this_area_data.SHAPE.SheetDirection === \"Back\" ||\r\n is_portal\r\n ) {\r\n if (this_area_data_SHAPE.OH_Left_Sheet < min_side_overhang)\r\n this_area_data_SHAPE.OH_Left_Sheet = min_side_overhang;\r\n if (this_area_data_SHAPE.OH_Right_Sheet < min_side_overhang)\r\n this_area_data_SHAPE.OH_Right_Sheet = min_side_overhang;\r\n } else {\r\n if (this_area_data_SHAPE.OH_Front_Sheet < min_side_overhang)\r\n this_area_data_SHAPE.OH_Front_Sheet = min_side_overhang;\r\n if (this_area_data_SHAPE.OH_Back_Sheet < min_side_overhang)\r\n this_area_data_SHAPE.OH_Back_Sheet = min_side_overhang;\r\n }\r\n }\r\n\r\n // MAX SIDE OVERHANG\r\n let max_side_overhang = this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.max_side_overhang;\r\n let max_portal_gable_side_OH = design_option?.max_frame_overhang ? design_option?.max_frame_overhang : 1200;\r\n\r\n if (max_side_overhang !== undefined) {\r\n if (\r\n this_area_data.SHAPE.SheetDirection === \"Front\" ||\r\n this_area_data.SHAPE.SheetDirection === \"Back\" ||\r\n is_portal\r\n ) {\r\n if (is_portal) {\r\n if (this_area_data_SHAPE.OH_Left > max_portal_gable_side_OH)\r\n this_area_data_SHAPE.OH_Left = max_portal_gable_side_OH;\r\n if (this_area_data_SHAPE.OH_Right > max_portal_gable_side_OH)\r\n this_area_data_SHAPE.OH_Right = max_portal_gable_side_OH;\r\n }\r\n\r\n if (this_area_data_SHAPE.OH_Left_Sheet > max_side_overhang)\r\n this_area_data_SHAPE.OH_Left_Sheet = max_side_overhang;\r\n if (this_area_data_SHAPE.OH_Right_Sheet > max_side_overhang)\r\n this_area_data_SHAPE.OH_Right_Sheet = max_side_overhang;\r\n } else {\r\n if (this_area_data_SHAPE.OH_Front_Sheet > max_side_overhang)\r\n this_area_data_SHAPE.OH_Front_Sheet = max_side_overhang;\r\n if (this_area_data_SHAPE.OH_Back_Sheet > max_side_overhang)\r\n this_area_data_SHAPE.OH_Back_Sheet = max_side_overhang;\r\n }\r\n }\r\n\r\n //CUTOUT OVERHANGS - TAPERS\r\n\r\n if (this_area_data.META.FrontState.IsFullTaper) {\r\n this_area_data_SHAPE.OH_Front = 0;\r\n this_area_data_SHAPE.OH_Front_Sheet = 0;\r\n }\r\n if (this_area_data.META.BackState.IsFullTaper) {\r\n this_area_data_SHAPE.OH_Back = 0;\r\n this_area_data_SHAPE.OH_Back_Sheet = 0;\r\n }\r\n\r\n //CUTOUT OVERHANGS\r\n\r\n let cutout_min_front_overhang = min_front_overhang;\r\n let cutout_min_side_overhang = min_side_overhang;\r\n let cutout_max_overhang_roofsheet = max_overhang_roofsheet;\r\n let cutout_max_side_overhang = max_side_overhang;\r\n\r\n if (\r\n is_flat &&\r\n (this_area_data.SHAPE.SheetDirection === \"Left\" || this_area_data.SHAPE.SheetDirection === \"Right\")\r\n ) {\r\n cutout_min_front_overhang = min_side_overhang;\r\n cutout_min_side_overhang = min_front_overhang;\r\n cutout_max_overhang_roofsheet = max_side_overhang;\r\n cutout_max_side_overhang = max_overhang_roofsheet;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-Overhang\"]) < cutout_min_front_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-Overhang\"] = cutout_min_front_overhang;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-Overhang\"]) < cutout_min_front_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-Overhang\"] = cutout_min_front_overhang;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-Overhang\"]) < cutout_min_front_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-Overhang\"] = cutout_min_front_overhang;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-Overhang\"]) < cutout_min_front_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-Overhang\"] = cutout_min_front_overhang;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-OverhangY\"]) < cutout_min_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-OverhangY\"] = cutout_min_side_overhang;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-OverhangY\"]) < cutout_min_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-OverhangY\"] = cutout_min_side_overhang;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-OverhangY\"]) < cutout_min_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-OverhangY\"] = cutout_min_side_overhang;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-OverhangY\"]) < cutout_min_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-OverhangY\"] = cutout_min_side_overhang;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-Overhang\"]) >\r\n cutout_max_overhang_roofsheet\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-Overhang\"] = cutout_max_overhang_roofsheet;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-Overhang\"]) >\r\n cutout_max_overhang_roofsheet\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-Overhang\"] = cutout_max_overhang_roofsheet;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-Overhang\"]) >\r\n cutout_max_overhang_roofsheet\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-Overhang\"] = cutout_max_overhang_roofsheet;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-Overhang\"]) >\r\n cutout_max_overhang_roofsheet\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-Overhang\"] = cutout_max_overhang_roofsheet;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-OverhangY\"]) > cutout_max_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontLeft-OverhangY\"] = cutout_max_side_overhang;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"FrontRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-OverhangY\"]) > cutout_max_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"FrontRight-OverhangY\"] = cutout_max_side_overhang;\r\n }\r\n\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackLeft-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-OverhangY\"]) > cutout_max_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackLeft-OverhangY\"] = cutout_max_side_overhang;\r\n }\r\n if (\r\n this_area_data.SHAPE.CUTOUTS[\"BackRight-CutoutType\"] !== \"None\" &&\r\n toNumber(this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-OverhangY\"]) > cutout_max_side_overhang\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].CUTOUTS[\"BackRight-OverhangY\"] = cutout_max_side_overhang;\r\n }\r\n\r\n // validate overhangs vs attachments\r\n\r\n if (Number(this_area_data_SHAPE.OH_Back) > 0) {\r\n let back_attached = this_area_data?.ATTACHMENTS?.AttachmentTop === 1;\r\n let rear_paat = [];\r\n if (next_area_data && this_area_data?.SHAPE?.AREAJOIN?.JoinType === \"Offset\") {\r\n if (is_portal && this_area_data?.SHAPE?.RotateArea === 1) {\r\n if (this_area_data?.SHAPE?.AREAJOIN?.JoinOffset < 0) {\r\n if (\r\n this_area_data?.ATTACHMENTS?.AttachmentLeft === 1 &&\r\n next_area_data?.ATTACHMENTS?.AttachmentTop === 1\r\n )\r\n back_attached = true;\r\n rear_paat = [\"PAAT\"];\r\n }\r\n if (this_area_data?.SHAPE?.AREAJOIN?.JoinOffset >= 0) back_attached = false;\r\n }\r\n }\r\n\r\n if (back_attached) {\r\n let rear_attachment = ExistingStructure?.AttachmentType;\r\n if (this_area_data?.ATTACHMENTS?.AttachmentModifications) {\r\n let items = this_area_data?.ATTACHMENTS?.AttachmentModifications.filter((obj) => {\r\n return obj.Name.includes(\"Back\");\r\n });\r\n if (items.length > 0 && items[0]?.FasciaType) rear_attachment = items[0]?.FasciaType;\r\n }\r\n\r\n if (rear_attachment.includes(\"Fascia\") && (is_pitched || is_portal)) rear_attachment = \"Beam\";\r\n\r\n if (this_area_data?.ATTACHMENTS?.PARTIAL_ATTACHMENTS && rear_paat.length === 0) {\r\n rear_paat = this_area_data?.ATTACHMENTS?.PARTIAL_ATTACHMENTS.filter((obj) => {\r\n return obj.Name.includes(\"Back\");\r\n });\r\n }\r\n\r\n if (\r\n is_flat &&\r\n (rear_attachment.includes(\"Fascia\") ||\r\n rear_attachment.includes(\"Wall\") ||\r\n rear_attachment.includes(\"Beam\"))\r\n ) {\r\n this_area_data_SHAPE.OH_Back = 0;\r\n }\r\n }\r\n }\r\n\r\n // END VALIDATE FOR DESIGN TYPE\r\n if (is_portal) {\r\n if (this_area_data_SHAPE.OH_Front > 0) {\r\n this_area_data_SHAPE.OH_Front_Sheet = this_area_data_SHAPE.OH_Front;\r\n this_area_data_SHAPE.OH_Front = 0;\r\n } else {\r\n this_area_data_SHAPE.OH_Front = 0;\r\n }\r\n\r\n if (this_area_data_SHAPE.OH_Back > 0) {\r\n this_area_data_SHAPE.OH_Back_Sheet = this_area_data_SHAPE.OH_Back;\r\n this_area_data_SHAPE.OH_Back = 0;\r\n } else {\r\n this_area_data_SHAPE.OH_Back = 0;\r\n }\r\n }\r\n\r\n return job;\r\n};\r\n\r\nexport const validateGableParameters = (config, job, areaIndex) => {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n let GABLE_PARAMETERS = this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS];\r\n\r\n let is_flat = false;\r\n let is_pitched = false;\r\n let is_portal = false;\r\n\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) is_flat = true;\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) is_pitched = true;\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) is_portal = true;\r\n\r\n const infill_types = config.infill_types;\r\n const colour_arrays = config.colour_arrays;\r\n\r\n let design_option = config?.design_options?.[this_area_data.SHAPE.DesignType];\r\n\r\n if (\r\n GABLE_PARAMETERS.TrussInfill1 !== \"None\" &&\r\n GABLE_PARAMETERS.TrussInfill1 !== \"No Beams\" &&\r\n !design_option?.infill_options.includes(GABLE_PARAMETERS.TrussInfill1)\r\n ) {\r\n if (design_option?.infill_default) GABLE_PARAMETERS.TrussInfill1 = design_option.infill_default;\r\n if (!design_option?.infill_options.includes(GABLE_PARAMETERS.TrussInfill1))\r\n GABLE_PARAMETERS.TrussInfill1 = \"None\";\r\n }\r\n\r\n if (\r\n GABLE_PARAMETERS.TrussInfill2 !== \"None\" &&\r\n GABLE_PARAMETERS.TrussInfill2 !== \"No Beams\" &&\r\n !design_option?.infill_options.includes(GABLE_PARAMETERS.TrussInfill2)\r\n ) {\r\n if (design_option?.infill_default) GABLE_PARAMETERS.TrussInfill2 = design_option.infill_default;\r\n if (!design_option?.infill_options.includes(GABLE_PARAMETERS.TrussInfill2))\r\n GABLE_PARAMETERS.TrussInfill2 = \"None\";\r\n }\r\n\r\n let selectedInfillFront = infill_types?.[GABLE_PARAMETERS.TrussInfill1];\r\n let selectedInfillBack = infill_types?.[GABLE_PARAMETERS.TrussInfill2];\r\n\r\n if (GABLE_PARAMETERS.InfillBeamType === \"656508\") GABLE_PARAMETERS.InfillBeamType = \"656510\";\r\n\r\n if (!selectedInfillFront) {\r\n for (let key in infill_types) {\r\n if (infill_types[key]?.alt_names)\r\n for (let alt_name of infill_types[key].alt_names) {\r\n if (GABLE_PARAMETERS.TrussInfill1 === alt_name) {\r\n GABLE_PARAMETERS.TrussInfill1 = key;\r\n selectedInfillFront = infill_types[key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!selectedInfillBack) {\r\n for (let key in infill_types) {\r\n if (infill_types[key]?.alt_names)\r\n for (let alt_name of infill_types[key].alt_names) {\r\n if (GABLE_PARAMETERS.TrussInfill2 === alt_name) {\r\n GABLE_PARAMETERS.TrussInfill2 = key;\r\n selectedInfillBack = infill_types[key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // TrussInfillColour1\r\n let valid_colours = COMMON.GetColourArray(selectedInfillFront?.colours, colour_arrays);\r\n if (\r\n valid_colours &&\r\n (!GABLE_PARAMETERS.TrussInfillColour1 || !valid_colours.includes(GABLE_PARAMETERS.TrussInfillColour1))\r\n ) {\r\n if (selectedInfillFront?.default_colour) {\r\n GABLE_PARAMETERS.TrussInfillColour1 = selectedInfillFront.default_colour;\r\n } else if (valid_colours.length === 1) {\r\n GABLE_PARAMETERS.TrussInfillColour1 = valid_colours[0];\r\n }\r\n if (!valid_colours.includes(GABLE_PARAMETERS.TrussInfillColour1))\r\n GABLE_PARAMETERS.TrussInfillColour1 = valid_colours[0];\r\n }\r\n\r\n if (!selectedInfillFront?.allow_display_colour) GABLE_PARAMETERS.TrussInfillDisplayColour1 = null;\r\n else if (GABLE_PARAMETERS.TrussInfillDisplayColour1 === null)\r\n GABLE_PARAMETERS.TrussInfillDisplayColour1 = \"#ffffff\";\r\n GABLE_PARAMETERS.TrussInfillTexture1 = selectedInfillFront?.texture ? selectedInfillFront?.texture : null;\r\n\r\n if (GABLE_PARAMETERS.TrussInfill1 === \"No Beams\") {\r\n GABLE_PARAMETERS.HasInfillBeam1 = 0;\r\n if (\r\n is_portal &&\r\n this_area_data.META?.LeftState?.HasAttachment &&\r\n this_area_data.META?.LeftState?.AttachmentType === \"Wall\"\r\n ) {\r\n if (this_area_data.META?.LeftState?.AttachmentVariation.includes(\"Timber\")) {\r\n GABLE_PARAMETERS.HasInfillBeam1 = 1;\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth >= 5000) {\r\n GABLE_PARAMETERS.HasInfillBeam1 = 1;\r\n }\r\n }\r\n } else {\r\n GABLE_PARAMETERS.HasInfillBeam1 = 1;\r\n }\r\n\r\n // TrussInfillColour2\r\n valid_colours = COMMON.GetColourArray(selectedInfillBack?.colours, colour_arrays);\r\n if (\r\n valid_colours &&\r\n (!GABLE_PARAMETERS.TrussInfillColour2 || !valid_colours.includes(GABLE_PARAMETERS.TrussInfillColour2))\r\n ) {\r\n if (selectedInfillBack?.default_colour) {\r\n GABLE_PARAMETERS.TrussInfillColour2 = selectedInfillBack.default_colour;\r\n } else if (valid_colours.length === 1) {\r\n GABLE_PARAMETERS.TrussInfillColour2 = valid_colours[0];\r\n }\r\n if (!valid_colours.includes(GABLE_PARAMETERS.TrussInfillColour2))\r\n GABLE_PARAMETERS.TrussInfillColour2 = valid_colours[0];\r\n }\r\n if (!selectedInfillBack?.allow_display_colour) GABLE_PARAMETERS.TrussInfillDisplayColour2 = null;\r\n else if (GABLE_PARAMETERS.TrussInfillDisplayColour2 === null)\r\n GABLE_PARAMETERS.TrussInfillDisplayColour2 = \"#ffffff\";\r\n GABLE_PARAMETERS.TrussInfillTexture2 = selectedInfillBack?.texture ? selectedInfillBack?.texture : null;\r\n\r\n if (GABLE_PARAMETERS.TrussInfill2 === \"No Beams\") {\r\n GABLE_PARAMETERS.HasInfillBeam2 = 0;\r\n if (\r\n is_portal &&\r\n this_area_data.META?.RightState?.HasAttachment &&\r\n this_area_data.META?.RightState?.AttachmentType === \"Wall\"\r\n ) {\r\n if (this_area_data.META?.RightState?.AttachmentVariation.includes(\"Timber\")) {\r\n GABLE_PARAMETERS.HasInfillBeam2 = 1;\r\n } else if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth >= 5000) {\r\n GABLE_PARAMETERS.HasInfillBeam2 = 1;\r\n }\r\n }\r\n } else {\r\n GABLE_PARAMETERS.HasInfillBeam2 = 1;\r\n }\r\n\r\n let colourMatch = {\r\n \"Match Rafter\": this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.BeamCol1,\r\n };\r\n\r\n if (!GABLE_PARAMETERS.InfillFlashingColourMatch1)\r\n GABLE_PARAMETERS.InfillFlashingColourMatch1 = GABLE_PARAMETERS.InfillFlashingColour1;\r\n if (colourMatch && GABLE_PARAMETERS.InfillFlashingColourMatch1 in colourMatch) {\r\n GABLE_PARAMETERS.InfillFlashingColour1 = colourMatch[GABLE_PARAMETERS.InfillFlashingColourMatch1];\r\n } else {\r\n GABLE_PARAMETERS.InfillFlashingColour1 = GABLE_PARAMETERS.InfillFlashingColourMatch1;\r\n }\r\n\r\n if (!GABLE_PARAMETERS.InfillFlashingColourMatch2)\r\n GABLE_PARAMETERS.InfillFlashingColourMatch2 = GABLE_PARAMETERS.InfillFlashingColour2;\r\n if (colourMatch && GABLE_PARAMETERS.InfillFlashingColourMatch2 in colourMatch) {\r\n GABLE_PARAMETERS.InfillFlashingColour2 = colourMatch[GABLE_PARAMETERS.InfillFlashingColourMatch2];\r\n } else {\r\n GABLE_PARAMETERS.InfillFlashingColour2 = GABLE_PARAMETERS.InfillFlashingColourMatch2;\r\n }\r\n\r\n let infill_beam_options = [\"656510\", \"1086510\", \"1586510\"];\r\n if (design_option?.infill_beam?.options) {\r\n infill_beam_options = design_option?.infill_beam?.options;\r\n }\r\n if (\r\n design_option?.infill_beam?.section_default &&\r\n !infill_beam_options.includes(this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType)\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType =\r\n design_option?.infill_beam?.section_default;\r\n }\r\n\r\n if (this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType === \"656510\") {\r\n if (this_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterL > 0)\r\n this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType = \"1086510\";\r\n if (this_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterR > 0)\r\n this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType = \"1086510\";\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth >= 4500)\r\n this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType = \"1086510\";\r\n }\r\n\r\n if (window.LYSAGHT) {\r\n if (this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTie === 1)\r\n GABLE_PARAMETERS.DownlightFlashing = 0;\r\n\r\n this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType =\r\n this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType3;\r\n\r\n // GABLE_PARAMETERS.InfillEndAlign1 = 1;\r\n // GABLE_PARAMETERS.InfillEndAlign2 = 1;\r\n GABLE_PARAMETERS.InfillOnTopBeam1 = \"\";\r\n GABLE_PARAMETERS.InfillOnTopBeam2 = \"\";\r\n GABLE_PARAMETERS.DutchGableBeamInset = 1;\r\n GABLE_PARAMETERS.DutchGablePosition = 0.2;\r\n GABLE_PARAMETERS.DutchGableBeamInsetPosition = 0.6;\r\n GABLE_PARAMETERS.DutchGableCollarTieBeam = \"FL15015\";\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.CollarTie === 1) {\r\n GABLE_PARAMETERS.DutchGableCollarTieBeam =\r\n this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.CollarTieBeam;\r\n }\r\n\r\n GABLE_PARAMETERS.GableRidgeBackChannel = false;\r\n } else {\r\n if (this_area_data.BEAMS_AND_POSTS.HasRidgeBeam === 0) {\r\n // GABLE_PARAMETERS.InfillEndAlign1 = 0;\r\n // GABLE_PARAMETERS.InfillEndAlign2 = 0;\r\n } else {\r\n GABLE_PARAMETERS.InfillEndAlign1 = 1;\r\n GABLE_PARAMETERS.InfillEndAlign2 = 1;\r\n }\r\n\r\n let job_attachment = job?.SiteParameters?.ExistingStructure?.AttachmentType;\r\n\r\n GABLE_PARAMETERS.InfillOnTopBeam1 = \"\";\r\n GABLE_PARAMETERS.InfillOnTopBeam2 = \"\";\r\n\r\n if (is_portal) {\r\n if (\r\n this_area_data.META?.LeftState?.HasAttachment &&\r\n this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].TrussInfill1 != \"None\" &&\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType1 == \"Gable\" &&\r\n (this_area_data.META?.LeftState?.AttachmentType.toUpperCase().includes(\"FASCIA\") ||\r\n this_area_data.META?.LeftState?.AttachmentType.toUpperCase().includes(\"BEAM\"))\r\n ) {\r\n GABLE_PARAMETERS.InfillOnTopBeam1 = \"656510\";\r\n }\r\n if (\r\n this_area_data.META?.RightState?.HasAttachment &&\r\n this_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].TrussInfill2 != \"None\" &&\r\n this_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofType2 == \"Gable\" &&\r\n (this_area_data.META?.RightState?.AttachmentType.toUpperCase().includes(\"FASCIA\") ||\r\n this_area_data.META?.RightState?.AttachmentType.toUpperCase().includes(\"BEAM\"))\r\n ) {\r\n GABLE_PARAMETERS.InfillOnTopBeam2 = \"656510\";\r\n }\r\n }\r\n\r\n GABLE_PARAMETERS.DutchGableBeamInset = 0;\r\n GABLE_PARAMETERS.DutchGablePosition = 0.25;\r\n GABLE_PARAMETERS.GableRidgeBackChannel = true;\r\n }\r\n\r\n return GABLE_PARAMETERS;\r\n};\r\n\r\nexport const validateCustomerDistributorData = (job, app = null) => {\r\n if (app !== null) {\r\n const user_data = app.user;\r\n if (job?.User.id === app.user.id) {\r\n job.User = {\r\n ...job.User,\r\n id: user_data?.id ? user_data.id : \"\",\r\n BusinessCode: user_data?.BusinessCode ? user_data.BusinessCode : \"\",\r\n Email: user_data?.Email ? user_data.Email : \"\",\r\n Phone: user_data?.Phone ? user_data.Phone : \"\",\r\n FirstName: user_data?.FirstName ? user_data.FirstName : \"\",\r\n LastName: user_data?.LastName ? user_data.LastName : \"\",\r\n DisplayName: user_data?.DisplayName ? user_data.DisplayName : \"\",\r\n };\r\n }\r\n if (job?.Distributor.id === app.user.BusinessDetails.id) {\r\n job.Distributor = COMMON.deepCopy(app.user.BusinessDetails);\r\n } else if (app.user.BusinessDetails.Children) {\r\n for (var child of app.user.BusinessDetails.Children) {\r\n if (job.Distributor.id === child.id) {\r\n job.Distributor = COMMON.deepCopy(child);\r\n }\r\n }\r\n }\r\n }\r\n if (job?.Distributor?.SalesForceData) job.Distributor.SalesForceData = null;\r\n if (job?.Distributor?.Children) job.Distributor.Children = null;\r\n if (job?.Distributor?.Offer?.offerings) job.Distributor.Offer.offerings = null;\r\n\r\n if (job?.Distributor?.Offer?.Regions?.[0]) job.POA = job?.Distributor?.Offer?.Regions?.[0];\r\n\r\n let markup_structure = job?.Distributor?.MarkupStructure;\r\n if (\r\n markup_structure &&\r\n (!job.Customer.Type || !Object.keys(markup_structure.Markups).includes(job.Customer.Type))\r\n ) {\r\n if (markup_structure?.MarkupDefault) job.Customer.Type = markup_structure.MarkupDefault;\r\n else job.Customer.Type = Object.keys(markup_structure.Markups)[0];\r\n }\r\n return job;\r\n};\r\n\r\nfunction GetKPA(wind_data, annual_exceedance_prob) {\r\n let ms = wind_data[\"critical_result\"][\"values\"][0][\"ms\"];\r\n let md = wind_data[\"critical_result\"][\"values\"][0][\"md\"];\r\n let mzcat = wind_data[\"critical_result\"][\"values\"][0][\"mzcat\"];\r\n let mt = wind_data[\"critical_result\"][\"values\"][0][\"mt\"];\r\n\r\n let vr_adjustment_factor = 1;\r\n let annual_exceedance_prob_vr = \"vr_\" + annual_exceedance_prob;\r\n if (wind_data[annual_exceedance_prob_vr] == null && annual_exceedance_prob === 50) {\r\n // if 50 not found use 100\r\n annual_exceedance_prob_vr = \"vr_100\";\r\n }\r\n if (wind_data[annual_exceedance_prob_vr] == null && annual_exceedance_prob === 200) {\r\n //simulated as per DY instructions email to KC Fri, Jul 26, 2019,\r\n vr_adjustment_factor = 0.956;\r\n annual_exceedance_prob_vr = \"vr_500\";\r\n }\r\n if (wind_data[annual_exceedance_prob_vr] == null && annual_exceedance_prob === 250) {\r\n vr_adjustment_factor = 0.956; // need to eventually get a new adjustment factor\r\n annual_exceedance_prob_vr = \"vr_500\";\r\n }\r\n\r\n return {\r\n kPa:\r\n ((0.6 * Math.pow(toNumber(wind_data[annual_exceedance_prob_vr]) * vr_adjustment_factor, 2)) / 1000) *\r\n ms *\r\n md *\r\n mzcat *\r\n mt,\r\n vr: toNumber(wind_data[annual_exceedance_prob_vr]) * vr_adjustment_factor,\r\n };\r\n\r\n //decoupled kPA from importance level and made it just a facotr of annual_exceedance_prob\r\n\r\n // if (importance === 1) {\r\n // return ((0.6 * Math.pow(toNumber(wind_data[\"vr_100\"]), 2)) / 1000) * ms * md * mzcat * mt;\r\n // } else if (importance === 2) {\r\n // return ((0.6 * Math.pow(toNumber(wind_data[\"vr_500\"]) * 0.956, 2)) / 1000) * ms * md * mzcat * mt;\r\n // } else {\r\n // return ((0.6 * Math.pow(toNumber(wind_data[\"vr_1000\"]) * 0.956, 2)) / 1000) * ms * md * mzcat * mt;\r\n // }\r\n}\r\n\r\nfunction GetWindZoneEquiv(Kpa, region, round_down = false) {\r\n let estimatedWZ = \"N/A\";\r\n let wz = \"N/A\";\r\n\r\n let upper = 999;\r\n let lower = 0;\r\n estimatedWZ = \"N/A\";\r\n\r\n if (Kpa > 4.44) {\r\n wz = \"N/A\";\r\n } else if (Kpa > 3.29) {\r\n // N6\r\n upper = 4.44;\r\n lower = 3.29;\r\n wz = 6;\r\n } else if (Kpa > 2.23) {\r\n // N5\r\n upper = 3.29;\r\n lower = 2.23;\r\n wz = 5;\r\n } else if (Kpa > 1.5) {\r\n // N4\r\n upper = 2.23;\r\n lower = 1.5;\r\n wz = 4;\r\n } else if (Kpa > 0.96) {\r\n // N3\r\n upper = 1.5;\r\n lower = 0.96;\r\n wz = 3;\r\n } else if (Kpa > 0.69) {\r\n // N2\r\n upper = 0.96;\r\n lower = 0.69;\r\n wz = 2;\r\n } else {\r\n // N1\r\n upper = 0.69;\r\n lower = 0.0;\r\n wz = 1;\r\n }\r\n\r\n if (upper >= 999) estimatedWZ = \"N/A\";\r\n else if (wz === \"N1\") estimatedWZ = \"N1\";\r\n else if (wz != \"N/A\") {\r\n let dec = ((Kpa - lower) * 10) / (upper - lower);\r\n if (dec > 9) dec = 9;\r\n if (dec < 1) dec = 1;\r\n\r\n if (region === \"C\" || region === \"D\") {\r\n wz -= 2;\r\n if (wz < 1) wz = 1;\r\n estimatedWZ = \"C\" + (wz - 1) + \".\" + dec.toFixed(0);\r\n if (wz === 1) estimatedWZ = \"C1.0\";\r\n // DES-1739 - allowance for rounding so that eg N2.5 = N2, N2.6 = N3\r\n if (round_down && wz > 1 && dec <= 5) {\r\n wz -= 1;\r\n }\r\n } else {\r\n estimatedWZ = \"N\" + (wz - 1) + \".\" + dec.toFixed(0);\r\n if (wz === 1) estimatedWZ = \"N1.0\";\r\n // DES-1739 - allowance for rounding so that eg N2.5 = N2, N2.6 = N3\r\n if (round_down && wz > 1 && dec <= 5) {\r\n wz -= 1;\r\n } else {\r\n //allowance for N2.0935 scenarios 1.01 kPa sencarios to be equiv N2 - DY 18/5/2021\r\n if (wz === 3 && dec <= 1) {\r\n wz = 2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return [(region === \"C\" || region === \"D\" ? \"C\" : \"N\") + wz, estimatedWZ];\r\n}\r\n\r\nexport function calculate_wind_data(wind_data, vr_mode = 0, round_down = false) {\r\n let impl1_annual_exceedance_prob = vr_mode ? vr_mode : 50;\r\n let impl1_calculation = GetKPA(wind_data, impl1_annual_exceedance_prob);\r\n let impl1_wz_equiv = GetWindZoneEquiv(impl1_calculation.kPa, wind_data?.region, round_down);\r\n let impl2_annual_exceedance_prob = vr_mode ? vr_mode : 250;\r\n let impl2_calculation = GetKPA(wind_data, impl2_annual_exceedance_prob);\r\n let impl2_wz_equiv = GetWindZoneEquiv(impl2_calculation.kPa, wind_data?.region, round_down);\r\n let impl3_annual_exceedance_prob = vr_mode ? vr_mode : 500;\r\n let impl3_calculation = GetKPA(wind_data, impl3_annual_exceedance_prob);\r\n let impl3_wz_equiv = GetWindZoneEquiv(impl3_calculation.kPa, wind_data?.region, round_down);\r\n\r\n return {\r\n importance_level_1: {\r\n base_pressure: impl1_calculation.kPa,\r\n windzone_equiv: impl1_wz_equiv[0],\r\n windzone_estimate: impl1_wz_equiv[1],\r\n annual_exceedance_prob: impl1_annual_exceedance_prob,\r\n vr: impl1_calculation.vr,\r\n },\r\n importance_level_2: {\r\n base_pressure: impl2_calculation.kPa,\r\n windzone_equiv: impl2_wz_equiv[0],\r\n windzone_estimate: impl2_wz_equiv[1],\r\n annual_exceedance_prob: impl2_annual_exceedance_prob,\r\n vr: impl2_calculation.vr,\r\n },\r\n importance_level_3: {\r\n base_pressure: impl3_calculation.kPa,\r\n windzone_equiv: impl3_wz_equiv[0],\r\n windzone_estimate: impl3_wz_equiv[1],\r\n annual_exceedance_prob: impl3_annual_exceedance_prob,\r\n vr: impl3_calculation.vr,\r\n },\r\n };\r\n}\r\n\r\nconst states = [\"ACT\", \"NSW\", \"NT\", \"QLD\", \"SA\", \"TAS\", \"VIC\", \"WA\"];\r\n\r\nexport const validateSiteData = (job, config) => {\r\n if (!job?.SiteParameters?.WindData?.WindZoneAS1170?.critical) {\r\n job.SiteParameters.WindData.WindZone_UseAS1170 = false;\r\n } else {\r\n if (!job?.SiteParameters?.Address?.State) {\r\n //if state is not set, try set it from formatted string, mosy likely beacuse AddressAutoComplete PlacesService failed\r\n if (job?.SiteParameters?.Address?.FormattedAddress) {\r\n let address = job?.SiteParameters?.Address?.FormattedAddress;\r\n for (let state of states) {\r\n if (address.toUpperCase().includes(\" \" + state + \",\")) job.SiteParameters.Address.State = state;\r\n }\r\n let split = address.split(\",\");\r\n if (split[0]) {\r\n //assume first bit is street and street num\r\n job.SiteParameters.Address.Street = split[0].trim();\r\n }\r\n if (split[1]) {\r\n //assume second bit is suburb / town and state\r\n job.SiteParameters.Address.Suburb = split[1].replace(job.SiteParameters.Address.State, \"\").trim();\r\n }\r\n }\r\n }\r\n\r\n job.SiteParameters.WindData.WindZone_UseAS1170 = true;\r\n let vr_mode = job?.DesignParameters?.vr_mode ? job?.DesignParameters?.vr_mode : 0;\r\n\r\n job.SiteParameters.RoundDownWZ = config?.job_settings?.round_down_wz;\r\n\r\n job.SiteParameters.WindData.WindZoneAS1170.calculated = calculate_wind_data(\r\n job.SiteParameters.WindData.WindZoneAS1170,\r\n vr_mode,\r\n job.SiteParameters.RoundDownWZ\r\n );\r\n\r\n let importance_level = 2;\r\n if (!job?.SiteParameters?.ImportanceLevel || job?.SiteParameters?.ImportanceLevel === \"\") {\r\n if (\r\n job.DesignParameters.Freestanding &&\r\n job.SiteParameters.UseType === \"Domestic\" &&\r\n job?.SiteParameters?.WindData?.Blocking === 0\r\n )\r\n importance_level = 1;\r\n if (job.SiteParameters.UseType === \"Major Structure\") importance_level = 3;\r\n job.SiteParameters.WindData.importance_level = importance_level;\r\n job.SiteParameters.ImportanceLevel = importance_level;\r\n } else {\r\n importance_level = job.SiteParameters.ImportanceLevel;\r\n }\r\n\r\n if (job?.SiteParameters?.WindData?.Blocking > 0 && importance_level === 1) {\r\n importance_level = 2;\r\n job.SiteParameters.ImportanceLevel = 2;\r\n }\r\n\r\n let importance_level_data = job.SiteParameters?.WindData?.WindZoneAS1170?.calculated?.importance_level_2;\r\n if (importance_level === 1)\r\n importance_level_data = job.SiteParameters?.WindData?.WindZoneAS1170?.calculated?.importance_level_1;\r\n if (importance_level === 3)\r\n importance_level_data = job.SiteParameters?.WindData?.WindZoneAS1170?.calculated?.importance_level_3;\r\n\r\n if (importance_level_data) {\r\n job.SiteParameters.WindData.WindZone = importance_level_data?.windzone_equiv;\r\n }\r\n\r\n job.SiteParameters.WindData.importance_level = importance_level;\r\n\r\n if (job.SiteParameters?.WindData?.WindZoneAS1170) {\r\n if (job.SiteParameters.WindData.Blocking === 4) job.SiteParameters.WindData.Blocking = 3;\r\n\r\n job.SiteParameters.WindData.WindZoneAS1170.importance_level = importance_level;\r\n job.SiteParameters.WindData.WindZoneAS1170.blocking_factor = job.SiteParameters.WindData.Blocking;\r\n\r\n if (importance_level_data) {\r\n job.SiteParameters.WindData.WindZoneAS1170.base_pressure =\r\n importance_level_data.base_pressure.toFixed(2);\r\n job.SiteParameters.WindData.WindZoneAS1170.annual_exceedance_prob =\r\n importance_level_data.annual_exceedance_prob;\r\n job.SiteParameters.WindData.WindZoneAS1170.vr = importance_level_data.vr;\r\n }\r\n }\r\n }\r\n\r\n if (job.DesignParameters.DeckMode === 1) {\r\n job.SiteParameters.ExistingStructure.AttachmentType = \"Wall\";\r\n job.SiteParameters.ExistingStructure.JobSummaryAttachmentText = \"Directly To Wall\";\r\n job.SiteParameters.ExistingStructure.EaveDepth = 0;\r\n } else if (job.DesignParameters.USE_ATTACHMENTS_2) {\r\n job.SiteParameters.ExistingStructure.AttachmentType = \"Timber Fascia Drop\";\r\n // For Job Summary only (report-gen)\r\n let existingStructureAttachments = new Set();\r\n\r\n if (job?.AreaSpecifications)\r\n for (let area of job?.AreaSpecifications) {\r\n if (area?.ATTACHMENTS?.AttachmentModifications) {\r\n for (let mod of area?.ATTACHMENTS?.AttachmentModifications) {\r\n if (\r\n (mod.Ref.startsWith(\"Front\") && area.ATTACHMENTS.AttachmentBottom === 1) ||\r\n (mod.Ref.startsWith(\"Back\") && area.ATTACHMENTS.AttachmentTop === 1) ||\r\n (mod.Ref.startsWith(\"Left\") && area.ATTACHMENTS.AttachmentLeft === 1) ||\r\n (mod.Ref.startsWith(\"Right\") && area.ATTACHMENTS.AttachmentRight === 1)\r\n ) {\r\n existingStructureAttachments.add({\r\n AttachmentType: mod?.AttachmentType || \"\",\r\n AttachmentVariation: mod?.AttachmentVariation || \"\",\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n let attachmentText;\r\n let attachmentVariationText;\r\n\r\n if (existingStructureAttachments.size > 0) {\r\n if (existingStructureAttachments.size === 1) {\r\n attachmentText = existingStructureAttachments.values().next().value.AttachmentType;\r\n attachmentVariationText = existingStructureAttachments.values().next().value.AttachmentVariation;\r\n } else {\r\n attachmentText = \"Mixed\";\r\n attachmentVariationText = \"\";\r\n }\r\n } else {\r\n attachmentText = \"Not Attached (freestanding)\";\r\n attachmentVariationText = \"\";\r\n }\r\n\r\n job.SiteParameters.ExistingStructure.JobSummaryAttachmentText = attachmentText;\r\n job.SiteParameters.ExistingStructure.JobSummaryAttachmentVariationText = attachmentVariationText;\r\n }\r\n\r\n job.SiteParameters.ExistingStructure.FasciaType = job?.SiteParameters?.ExistingStructure?.AttachmentType;\r\n\r\n let spacing = job.SiteParameters?.ExistingStructure?.RoofType === \"Tile\" ? 1200 : 900;\r\n if (job.SiteParameters?.ExistingStructure?.RoofType === \"Tile\") {\r\n if (config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.bracket_spacing_tile)\r\n spacing = config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.bracket_spacing_tile;\r\n } else {\r\n if (config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.bracket_spacing_sheet)\r\n spacing = config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.bracket_spacing_sheet;\r\n }\r\n job.SiteParameters.RafterBracketSpacing = spacing;\r\n job.SiteParameters.RiserBracketSpacing = spacing;\r\n job.SiteParameters.CarportRiserBracketSpacing = spacing;\r\n\r\n let job_attachment = job?.SiteParameters?.[SITE_PARAMETER_SECTIONS?.ExistingStructure]?.AttachmentType;\r\n if (\r\n job_attachment &&\r\n (job_attachment.toUpperCase().includes(\"WALL\") || job_attachment.toUpperCase().includes(\"FASCIA\")) &&\r\n job.SiteParameters?.ExistingStructure?.RoofType === \"Tile\"\r\n ) {\r\n job.SiteParameters.RafterBracketSpacing = \"600\";\r\n if (config?.attachment_types?.[\"Fascia with Receiver Channel\"]?.bracket_spacing_tile)\r\n job.SiteParameters.RafterBracketSpacing =\r\n config?.attachment_types?.[\"Fascia with Receiver Channel\"]?.bracket_spacing_tile;\r\n }\r\n\r\n if (\r\n job.SiteParameters.ExistingStructure.FrameType === \"Timber - Trussed\" ||\r\n job.SiteParameters.ExistingStructure.FrameType === \"Timber - Conventional\"\r\n )\r\n job.SiteParameters.ExistingStructure.FrameType = \"Timber Frame - Brick Veneer\";\r\n\r\n job.SiteParameters.AutoExtendBeamsToWall = 1;\r\n\r\n // LYSAGHT SPECIFIC VALIDATIONS\r\n if (job?.Distributor?.Brand === \"Lysaght\") {\r\n job.SiteParameters.FasciaBracketDefault = \"CON110\";\r\n job.SiteParameters.RafterBracketDefault = \"UCEG\";\r\n job.SiteParameters.RiserBracketDefault = \"UCB\";\r\n job.SiteParameters.FlyoverBracketDefault = \"JMBP1\";\r\n job.SiteParameters.WallMountBracketDefault = \"UCF\";\r\n job.SiteParameters.RiserFullHeight = 1;\r\n job.SiteParameters.FlyoverFullHeight = 0;\r\n job.SiteParameters.SpliceOffset = 150;\r\n job.SiteParameters.CONST_STRUT_BEAM = \"FL10011\";\r\n job.SiteParameters.CONST_BEAM_CUT_EXTRA = 0;\r\n job.SiteParameters.CONST_FREESPAN_BEAM_CUT_EXTRA = 0;\r\n job.SiteParameters.CONST_POST_EXTRA = 0;\r\n job.SiteParameters.MergeBeamBefore = 1;\r\n } else {\r\n job.SiteParameters.FasciaBracketDefault = \"BK26DEG\";\r\n job.SiteParameters.RafterBracketDefault = \"BK38\";\r\n let region = job?.Distributor?.Offer?.Regions?.[0];\r\n if (job?.App?.temp_POA) region = job?.App?.temp_POA;\r\n job.SiteParameters.RiserBracketDefault = \"BK39\";\r\n job.SiteParameters.FlyoverBracketDefault = \"BK50\";\r\n job.SiteParameters.WallMountBracketDefault = \"BK25\";\r\n job.SiteParameters.RiserFullHeight = 1;\r\n job.SiteParameters.FlyoverFullHeight = 1;\r\n job.SiteParameters.SpliceOffset = 0;\r\n job.SiteParameters.CONST_STRUT_BEAM = \"656510\";\r\n job.SiteParameters.CONST_BEAM_CUT_EXTRA = 30;\r\n job.SiteParameters.CONST_FREESPAN_BEAM_CUT_EXTRA = 30;\r\n job.SiteParameters.CONST_POST_EXTRA = 100;\r\n job.SiteParameters.MergeBeamBefore = 1;\r\n }\r\n\r\n let is_cyclonic = false;\r\n let region = job?.SiteParameters?.WindData?.WindZoneAS1170?.region;\r\n if (region === \"C\" || region === \"D\") {\r\n is_cyclonic = true;\r\n }\r\n\r\n //use attachment data\r\n if (config?.attachment_types?.[\"Fascia with Receiver Channel\"]?.bracket_type_code?.default) {\r\n job.SiteParameters.FasciaBracketDefault =\r\n config?.attachment_types?.[\"Fascia with Receiver Channel\"]?.bracket_type_code?.default;\r\n }\r\n if (is_cyclonic) {\r\n job.SiteParameters.FasciaBracketDefault = \"BK26DEG\";\r\n if (config?.attachment_types?.[\"Fascia with Receiver Channel\"]?.bracket_type_code?.cyclonic) {\r\n job.SiteParameters.FasciaBracketDefault =\r\n config?.attachment_types?.[\"Fascia with Receiver Channel\"]?.bracket_type_code?.cyclonic;\r\n }\r\n }\r\n if (config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.bracket_type_code?.default) {\r\n job.SiteParameters.RafterBracketDefault =\r\n config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.bracket_type_code?.default;\r\n }\r\n if (\r\n config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.variations?.[\"On Riser\"]?.bracket_type_code\r\n ?.default\r\n ) {\r\n job.SiteParameters.RiserBracketDefault =\r\n config?.attachment_types?.[\"Rafter Brackets supporting Beam\"]?.variations?.[\r\n \"On Riser\"\r\n ]?.bracket_type_code?.default;\r\n }\r\n\r\n job.SiteParameters.DefaultFasciaBracket = job.SiteParameters.FasciaBracketDefault;\r\n job.SiteParameters.DefaultRafterBracket = job.SiteParameters.RafterBracketDefault;\r\n\r\n job.SiteParameters.SizeAdjustment = 0;\r\n\r\n if (job.DesignParameters.SplicingLength === 8000) {\r\n job.DesignParameters.SplicingLength = 9000;\r\n }\r\n\r\n job.DesignParameters.MinRoofLoadArea = 250;\r\n\r\n //get flyover spacing\r\n if (job?.SiteParameters?.WindData?.WindZoneAS1170?.base_pressure) {\r\n let max_area_length = 0;\r\n let max_area_depth = 0;\r\n let max_area_pitch = 0;\r\n let max_area = 0;\r\n\r\n let total_height = 0;\r\n\r\n for (let area of job.AreaSpecifications) {\r\n let m2 = area.SHAPE.Length * area.SHAPE.Depth;\r\n if (m2 > max_area) {\r\n max_area = m2;\r\n max_area_length = area.SHAPE.Length;\r\n max_area_depth = area.SHAPE.Depth;\r\n max_area_pitch = area.SHAPE.RoofPitch;\r\n }\r\n let height = area.SHAPE.Height;\r\n if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL)\r\n height = height + area.SHAPE.Depth * 0.5 * COMMON.Sin(area.SHAPE.RoofPitch);\r\n total_height += height;\r\n }\r\n\r\n let average_height = total_height / job.AreaSpecifications.length;\r\n let wall_height = job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].WallHeight;\r\n let attachment_height = Math.max(wall_height, average_height) / 0.825;\r\n if (job.DesignParameters.Freestanding || attachment_height < 1000) {\r\n attachment_height = average_height;\r\n }\r\n\r\n if (max_area > 0) {\r\n let wu = getWuUpDown(\r\n attachment_height,\r\n job.SiteParameters.WindData.WindZoneAS1170.base_pressure,\r\n job.DesignParameters.TotalLength,\r\n average_height,\r\n job.SiteParameters.WindData.WindZoneAS1170.blocking_factor\r\n );\r\n\r\n job.SiteParameters.FlyoverBracketSpacing = GetFlyoverSpacing(\r\n max_area_length,\r\n max_area_depth,\r\n max_area_pitch,\r\n Math.max(Math.abs(wu.UP), Math.abs(wu.DOWN)),\r\n is_cyclonic\r\n );\r\n }\r\n }\r\n\r\n // set standrd site data....\r\n for (let this_area_data of job.AreaSpecifications) {\r\n // this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight = this_area_data.SHAPE.Height;\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_FasciaType = \"\";\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight = \"\";\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_EaveWidth = \"\";\r\n //this area attachment\r\n if (job_attachment.toUpperCase().includes(\"FLYOVER\")) {\r\n // this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight = this_area_data.SHAPE.Height - 900;\r\n }\r\n\r\n if (job.DesignParameters.USE_ATTACHMENTS_2) {\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.DECK) {\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_FasciaType = \"Wall\";\r\n } else if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_FasciaType = \"Beam\";\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight = this_area_data.SHAPE.Height;\r\n } else {\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_FasciaType = \"Timber Fascia Drop\";\r\n\r\n let up_fascia = job.SiteParameters?.ExistingStructure?.FasciaHeight\r\n ? job.SiteParameters?.ExistingStructure?.FasciaHeight - 110\r\n : 75;\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight =\r\n this_area_data.SHAPE.Height - up_fascia;\r\n }\r\n\r\n if (this_area_data.areaIndex === 0)\r\n job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].WallHeight =\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight;\r\n }\r\n }\r\n\r\n return job;\r\n};\r\n\r\nfunction getWuUpDown(existing_height, base_pressure, total_length, average_height, SIDES_ENCLOSED) {\r\n let h = existing_height;\r\n\r\n if (!base_pressure) return 0;\r\n let hc = average_height;\r\n let Hc_H = hc / h;\r\n let hc_total_length = hc / total_length;\r\n let CPN_UP_INTERPOLATION_ADJ = 0;\r\n if (Hc_H >= 1) {\r\n CPN_UP_INTERPOLATION_ADJ = 0;\r\n } else if (Hc_H >= 0.75) {\r\n CPN_UP_INTERPOLATION_ADJ =\r\n ((Hc_H - 0.75) / 0.25) *\r\n (Math.min(1.5, 0.3 + 0.6 * hc_total_length) - Math.min(1.5, 0.3 + 0.2 * hc_total_length));\r\n } else if (Hc_H >= 0.5) {\r\n CPN_UP_INTERPOLATION_ADJ = ((Hc_H - 0.5) / 0.25) * (Math.min(1.5, 0.3 + 0.2 * hc_total_length) - 0.3);\r\n } else if (Hc_H >= 0.2) {\r\n CPN_UP_INTERPOLATION_ADJ = ((Hc_H - 0.2) / 0.3) * 0.1;\r\n }\r\n\r\n let CPN_UP = -0.2;\r\n if (Hc_H >= 1) {\r\n CPN_UP = -Math.min(1.5, 0.3 + 0.6 * hc_total_length);\r\n } else if (Hc_H >= 0.75) {\r\n CPN_UP = -Math.min(1.5, 0.3 + 0.2 * hc_total_length);\r\n } else if (Hc_H >= 0.5) {\r\n CPN_UP = -0.3;\r\n } else if (Hc_H >= 0.2) {\r\n CPN_UP = -0.2;\r\n }\r\n\r\n CPN_UP = CPN_UP - CPN_UP_INTERPOLATION_ADJ;\r\n\r\n let CPN_UP_WU = -1.2;\r\n if (SIDES_ENCLOSED >= 3 && hc_total_length <= 0.5 && Hc_H < 0.8) {\r\n CPN_UP_WU = -1.2;\r\n } else if (SIDES_ENCLOSED === 2 && hc_total_length <= 0.5 && Hc_H < 0.8) {\r\n CPN_UP_WU = -1;\r\n } else {\r\n CPN_UP_WU = Math.min(CPN_UP, -0.4);\r\n }\r\n\r\n let qz_p = base_pressure;\r\n let Non_directional_wind_factor = 0.95;\r\n let Wu_UP = Non_directional_wind_factor * CPN_UP_WU * qz_p; // noo self weight of roof sheet weight\r\n\r\n let CPN_DOWN_INTERPOLATION_ADJ = 0;\r\n if (Hc_H >= 1) {\r\n CPN_DOWN_INTERPOLATION_ADJ = 0;\r\n } else if (Hc_H >= 0.75) {\r\n CPN_DOWN_INTERPOLATION_ADJ = ((Hc_H - 0.75) / 0.25) * 0.2;\r\n } else if (Hc_H >= 0.5) {\r\n CPN_DOWN_INTERPOLATION_ADJ = ((Hc_H - 0.5) / 0.25) * 0.1;\r\n } else if (Hc_H >= 0.2) {\r\n CPN_DOWN_INTERPOLATION_ADJ = ((Hc_H - 0.2) / 0.3) * 0.2;\r\n } else if (Hc_H >= 0.1) {\r\n CPN_DOWN_INTERPOLATION_ADJ = ((Hc_H - 0.1) / 0.1) * 0.5;\r\n }\r\n\r\n let CPN_DOWN = 1.2;\r\n if (Hc_H >= 1) {\r\n CPN_DOWN = 0.2;\r\n } else if (Hc_H >= 0.75) {\r\n CPN_DOWN = 0.4;\r\n } else if (Hc_H >= 0.5) {\r\n CPN_DOWN = 0.5;\r\n } else if (Hc_H >= 0.2) {\r\n CPN_DOWN = 0.7;\r\n }\r\n\r\n CPN_DOWN = CPN_DOWN - CPN_DOWN_INTERPOLATION_ADJ;\r\n\r\n let CPN_DOWN_WU = Math.max(CPN_DOWN, 0.4);\r\n // let CPN_DOWN_WU = -1.2;\r\n // if (SIDES_ENCLOSED >= 3) {\r\n // CPN_DOWN_WU = -1.2;\r\n // } else if (SIDES_ENCLOSED === 2) {\r\n // CPN_DOWN_WU = -1;\r\n // } else {\r\n // CPN_DOWN_WU = Math.max(CPN_DOWN, 0.4);\r\n // }\r\n\r\n let Wu_DOWN = Non_directional_wind_factor * CPN_DOWN_WU * qz_p; // noo self weight of roof sheet weight\r\n\r\n return { UP: Wu_UP, DOWN: Wu_DOWN };\r\n}\r\n\r\nfunction GetFlyoverSpacing(length, depth, pitch, wu, is_cyclonic) {\r\n let area = ((length / 1000) * depth) / 1000 / Cos(pitch);\r\n let area_estimate = area * 0.55;\r\n\r\n let area_pressure = wu * area_estimate;\r\n\r\n let bracket_capacity = 6.7;\r\n if (window.LYSAGHT) {\r\n bracket_capacity = 9.3;\r\n if (is_cyclonic) bracket_capacity = 10.3;\r\n }\r\n\r\n let est_num_brackets = Math.trunc(Math.abs(area_pressure) / bracket_capacity) + 1;\r\n let spacing = (length + 200) / (est_num_brackets - 1);\r\n if (est_num_brackets == 2) {\r\n spacing = length + 200;\r\n }\r\n\r\n // 6000mm\r\n // 4000 in cyclonic maxHeight: // house rafter spacing for the min.\r\n if (window.LYSAGHT) {\r\n if (spacing > 6100) spacing = 6100;\r\n } else {\r\n if (spacing > 3100) spacing = 3100;\r\n }\r\n\r\n if (is_cyclonic && spacing > 4000) spacing = 4000;\r\n return spacing;\r\n}\r\n\r\nfunction similarity(s1, s2) {\r\n if (s1?.length > 0 && s2?.length > 0) {\r\n var longer = s1;\r\n var shorter = s2;\r\n if (s1.length < s2.length) {\r\n longer = s2;\r\n shorter = s1;\r\n }\r\n var longerLength = longer.length;\r\n if (longerLength === 0) {\r\n return 1.0;\r\n }\r\n return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength);\r\n } else return 0;\r\n}\r\n\r\nfunction editDistance(s1, s2) {\r\n s1 = s1.toLowerCase();\r\n s2 = s2.toLowerCase();\r\n\r\n // eslint-disable-next-line no-array-constructor\r\n var costs = new Array();\r\n for (var i = 0; i <= s1.length; i++) {\r\n var lastValue = i;\r\n for (var j = 0; j <= s2.length; j++) {\r\n if (i === 0) costs[j] = j;\r\n else {\r\n if (j > 0) {\r\n var newValue = costs[j - 1];\r\n if (s1.charAt(i - 1) !== s2.charAt(j - 1))\r\n newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\r\n costs[j - 1] = lastValue;\r\n lastValue = newValue;\r\n }\r\n }\r\n }\r\n if (i > 0) costs[s2.length] = lastValue;\r\n }\r\n return costs[s2.length];\r\n}\r\n\r\nexport const validateRoofSheetData = (config, job, areaIndex) => {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n let this_area = this_area_data;\r\n let roof_sheet_data = { ...this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING] };\r\n let roofsheet_types = config.roofsheet_types;\r\n let design_option = config?.design_options?.[this_area_data.SHAPE.DesignType];\r\n\r\n // Hard coding\r\n\r\n // assuming group is right, chcking rest for validity.\r\n\r\n let is_cyclonic = false;\r\n let region = job?.SiteParameters?.WindData?.WindZoneAS1170?.region;\r\n if (region === \"C\" || region === \"D\") {\r\n is_cyclonic = true;\r\n }\r\n\r\n if (!roof_sheet_data[\"RoofGroupType\"] && roof_sheet_data.RoofType) {\r\n // reverse setup, mainly from imported job\r\n\r\n let roof_sheet_modified = roof_sheet_data.RoofType.replace(\"M-CLAD\", \"TL5\").replace(\"(TL5) \", \"\");\r\n\r\n for (let group in roofsheet_types) {\r\n let subtypes = roofsheet_types[group].subtypes;\r\n for (let sub_type in subtypes) {\r\n if (\r\n subtypes[sub_type].roofsheet_id === roof_sheet_data.RoofType ||\r\n subtypes[sub_type].roofsheet_id === roof_sheet_modified\r\n ) {\r\n roof_sheet_data[\"RoofGroupType\"] = group;\r\n roof_sheet_data[\"RoofSubType\"] = sub_type;\r\n roof_sheet_data[\"RoofSpan\"] = \"No Foot Traffic\";\r\n } else if (\r\n subtypes[sub_type]?.roofsheet_id_non_trafficable === roof_sheet_data.RoofType ||\r\n subtypes[sub_type].roofsheet_id_non_trafficable === roof_sheet_modified\r\n ) {\r\n roof_sheet_data[\"RoofGroupType\"] = group;\r\n roof_sheet_data[\"RoofSubType\"] = sub_type;\r\n roof_sheet_data[\"RoofSpan\"] = \"Non-Trafficable\";\r\n } else if (\r\n subtypes[sub_type]?.roofsheet_id + \" - CYCLONIC SPANS\" === roof_sheet_data.RoofType ||\r\n subtypes[sub_type].roofsheet_id + \" - CYCLONIC SPANS\" === roof_sheet_modified\r\n ) {\r\n roof_sheet_data[\"RoofGroupType\"] = group;\r\n roof_sheet_data[\"RoofSubType\"] = sub_type;\r\n roof_sheet_data[\"RoofSpan\"] = \"Cyclonic\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Roof grouptype doesn't exist and not null\r\n if (!roofsheet_types[roof_sheet_data[\"RoofGroupType\"]] && roof_sheet_data[\"RoofGroupType\"] !== (\"\" || null)) {\r\n let possible_rooftype = [];\r\n // Find likely match based on Levenshtein distance and roofsheet_id\r\n Object.keys(roofsheet_types).forEach(function (key, index) {\r\n Object.keys(roofsheet_types[key].subtypes).forEach(function (key2, index) {\r\n possible_rooftype.push({\r\n group: key,\r\n subtype: key2,\r\n sheet: roofsheet_types[key].subtypes[key2].roofsheet_id,\r\n value: similarity(roofsheet_types[key].subtypes[key2].roofsheet_id, roof_sheet_data[\"RoofType\"]),\r\n });\r\n });\r\n });\r\n\r\n // If there is a greater than 38% string match to the top result\r\n // then use that roofsheet\r\n if (\r\n possible_rooftype.sort(function (a, b) {\r\n return b.value - a.value;\r\n })[0].value >= 0.38\r\n ) {\r\n roof_sheet_data[\"RoofGroupType\"] = possible_rooftype[0].group;\r\n roof_sheet_data[\"RoofSubType\"] = possible_rooftype[0].subtype;\r\n roof_sheet_data[\"RoofType\"] = possible_rooftype[0].sheet;\r\n } else {\r\n // Hard coded for Versalink (id's are very unsimilar)\r\n if (roof_sheet_data[\"RoofType\"] === \"Versiclad Versalink 1000 Smooth 50mm\") {\r\n roof_sheet_data[\"RoofGroupType\"] = \"Versiclad Versalink\";\r\n roof_sheet_data[\"RoofSubType\"] = \"Versalink Smooth 50mm\";\r\n roof_sheet_data[\"RoofType\"] = \"Versalink 1000 50mm (Non-trafficable)\";\r\n } else if (roof_sheet_data[\"RoofType\"] === \"Versiclad Versalink 1000 Smooth 75mm\") {\r\n roof_sheet_data[\"RoofGroupType\"] = \"Versiclad Versalink\";\r\n roof_sheet_data[\"RoofSubType\"] = \"Versalink Smooth 75mm\";\r\n roof_sheet_data[\"RoofType\"] = \"Versalink 1000 75mm (Non-trafficable)\";\r\n } else if (roof_sheet_data[\"RoofType\"] === \"Versiclad Versalink 1000 Smooth 100mm\") {\r\n roof_sheet_data[\"RoofGroupType\"] = \"Versiclad Versalink\";\r\n roof_sheet_data[\"RoofSubType\"] = \"Versalink Smooth 100mm\";\r\n roof_sheet_data[\"RoofType\"] = \"Versalink 1000 100mm (Non-trafficable)\";\r\n }\r\n }\r\n }\r\n\r\n if (\r\n (!design_option?.roofsheet_groups?.includes(roof_sheet_data[\"RoofGroupType\"]) ||\r\n !roofsheet_types[roof_sheet_data[\"RoofGroupType\"]]) &&\r\n design_option?.roofsheet_default?.grouptype\r\n ) {\r\n roof_sheet_data[\"RoofGroupType\"] = design_option?.roofsheet_default?.grouptype;\r\n roof_sheet_data[\"RoofSubType\"] = design_option?.roofsheet_default?.subtype;\r\n }\r\n\r\n let roofsheetgroup = roofsheet_types[roof_sheet_data[\"RoofGroupType\"]];\r\n\r\n if (is_cyclonic && !roofsheetgroup.allow_cyclonic) {\r\n for (let group_key of design_option?.roofsheet_groups) {\r\n let group = roofsheet_types[group_key];\r\n if (group.allow_cyclonic) {\r\n roof_sheet_data[\"RoofGroupType\"] = group_key;\r\n roof_sheet_data[\"RoofSubType\"] = group.default_subtype;\r\n roofsheetgroup = group;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // roof subtype\r\n if (roofsheetgroup?.subtypes[roof_sheet_data[\"RoofSubType\"]] === undefined)\r\n roof_sheet_data.RoofSubType = roofsheetgroup.default_subtype;\r\n let subType = roofsheetgroup.subtypes[roof_sheet_data.RoofSubType];\r\n\r\n if (is_cyclonic && !subType.allow_cyclonic) {\r\n roof_sheet_data.RoofSubType = roofsheetgroup.default_subtype;\r\n subType = roofsheetgroup.subtypes[roof_sheet_data.RoofSubType];\r\n if (!subType.allow_cyclonic) {\r\n for (let sub_key in roofsheetgroup.subtypes) {\r\n let sub = roofsheetgroup.subtypes[sub_key];\r\n if (sub.allow_cyclonic) {\r\n roof_sheet_data.RoofSubType = sub_key;\r\n subType = roofsheetgroup.subtypes[roof_sheet_data.RoofSubType];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (roof_sheet_data) {\r\n if (roof_sheet_data[\"RoofSpan\"].includes(\"Cyclonic\") && !is_cyclonic) {\r\n roof_sheet_data[\"RoofSpan\"] = \"No Foot Traffic\";\r\n }\r\n if (roof_sheet_data[\"RoofSpan\"].includes(\"Non-Trafficable\") && !subType?.allow_non_trafficable) {\r\n roof_sheet_data[\"RoofSpan\"] = \"No Foot Traffic\";\r\n }\r\n if (roof_sheet_data[\"RoofSpan\"].includes(\"No Foot Traffic\") && subType?.allow_nofoot_traffic === false) {\r\n roof_sheet_data[\"RoofSpan\"] = \"Non-Trafficable\";\r\n }\r\n\r\n if (!roof_sheet_data[\"RoofSpan\"].includes(\"Cyclonic\") && is_cyclonic) {\r\n roof_sheet_data[\"RoofSpan\"] = roof_sheet_data[\"RoofSpan\"] + \" - Cyclonic\";\r\n }\r\n }\r\n\r\n // roof sheet id\r\n let roofsheet_double_sided = false;\r\n if (roof_sheet_data[\"RoofSheetColour\"].includes(\"/\") && !roof_sheet_data[\"RoofSheetColour\"].includes(\"/Grey\")) {\r\n roofsheet_double_sided = true;\r\n }\r\n\r\n roof_sheet_data.RoofType = subType.roofsheet_id;\r\n if (roofsheet_double_sided && subType.roofsheet_id_ds) {\r\n roof_sheet_data.RoofType = subType.roofsheet_id_ds;\r\n }\r\n if (\r\n subType.allow_non_trafficable &&\r\n subType.roofsheet_id_non_trafficable &&\r\n roof_sheet_data.RoofSpan.includes(\"Non-Trafficable\")\r\n ) {\r\n roof_sheet_data.RoofType = subType.roofsheet_id_non_trafficable;\r\n if (roofsheet_double_sided && subType.roofsheet_id_non_trafficable_ds) {\r\n roof_sheet_data.RoofType = subType.roofsheet_id_non_trafficable_ds;\r\n }\r\n }\r\n if (subType.allow_cyclonic && roof_sheet_data.RoofSpan.includes(\"Cyclonic\")) {\r\n roof_sheet_data.RoofType += \" - CYCLONIC SPANS\";\r\n }\r\n\r\n // roof sheet colour\r\n let colourList = subType[CONFIG.ROOFSHEET_TYPE.COLOURS];\r\n\r\n if (typeof colourList === \"object\") {\r\n let region = job?.Distributor?.Offer?.Regions?.[0];\r\n if (job?.App?.temp_POA) region = job?.App?.temp_POA;\r\n\r\n let colours_list_to_use = colourList?.[\"DEFAULT\"];\r\n if (colourList?.[region]) colours_list_to_use = colourList?.[region];\r\n colourList = colours_list_to_use ? colours_list_to_use : colourList;\r\n }\r\n\r\n // const defaultColour = subType[CONFIG.ROOFSHEET_TYPE.DEFAULT_COLOUR];\r\n const defaultColour = \"TBA\";\r\n\r\n // let colours = colourList ? colourList.split(',') : COMMON.ColorbondArray;\r\n let colours = COMMON.GetColourArray(colourList, config.colour_arrays);\r\n\r\n if (\r\n roof_sheet_data[\"RoofSheetColour\"] &&\r\n !colours.includes(roof_sheet_data[\"RoofSheetColour\"]) &&\r\n roof_sheet_data[\"RoofSheetColour\"].includes(\"/\")\r\n ) {\r\n let reversed_colour =\r\n roof_sheet_data[\"RoofSheetColour\"].split(\"/\")[1].trim() +\r\n \"/\" +\r\n roof_sheet_data[\"RoofSheetColour\"].split(\"/\")[0].trim();\r\n if (colours.includes(reversed_colour)) roof_sheet_data[\"RoofSheetColour\"] = reversed_colour;\r\n }\r\n\r\n roof_sheet_data[\"RoofColourSelectionMade\"] = true;\r\n if (colours.length === 1) {\r\n roof_sheet_data[\"RoofColourSelectionMade\"] = true;\r\n roof_sheet_data[\"RoofSheetColour\"] = colours[0];\r\n } else if (roof_sheet_data[\"RoofSheetColour\"] === \"TBA\") {\r\n roof_sheet_data[\"RoofColourSelectionMade\"] = false;\r\n } else if (!roof_sheet_data[\"RoofSheetColour\"] || !colours.includes(roof_sheet_data[\"RoofSheetColour\"])) {\r\n roof_sheet_data[\"RoofColourSelectionMade\"] = false;\r\n if (colours.length === 1) {\r\n roof_sheet_data[\"RoofColourSelectionMade\"] = true;\r\n roof_sheet_data[\"RoofSheetColour\"] = colours[0];\r\n } else if (!roof_sheet_data[\"RoofSheetColour\"]) roof_sheet_data[\"RoofSheetColour\"] = defaultColour;\r\n if (!colours.includes(roof_sheet_data[\"RoofSheetColour\"])) roof_sheet_data[\"RoofSheetColour\"] = defaultColour;\r\n // if (!colours.includes(roof_sheet_data[\"RoofSheetColour\"]) && colours) roof_sheet_data[\"RoofSheetColour\"] = colours[0];\r\n }\r\n\r\n if (roof_sheet_data[\"RoofSheetColour\"].includes(\"/Grey\") || !roof_sheet_data[\"RoofSheetColour\"].includes(\"/\")) {\r\n roof_sheet_data[\"RoofRolling\"] = \"Top Side\";\r\n if (roof_sheet_data.ReverseRoll) roof_sheet_data[\"RoofRolling\"] = \"Under Side\";\r\n } else if (roof_sheet_data[\"RoofSheetColour\"].includes(\"/\")) {\r\n roof_sheet_data.ReverseRoll = false;\r\n roof_sheet_data[\"RoofRolling\"] = \"Under Side\";\r\n }\r\n\r\n // is skylight sheet valid?\r\n let skylight_list = subType.skylights\r\n ? subType.skylights\r\n : roofsheetgroup.skylights\r\n ? roofsheetgroup.skylights\r\n : {};\r\n\r\n if (!roof_sheet_data[\"SkylightSubType\"] && roof_sheet_data.SkylightType) {\r\n // reverse setup, mainly from imported job\r\n\r\n for (let skylight_key in roofsheetgroup.skylights) {\r\n let skylight = roofsheetgroup.skylights[skylight_key];\r\n if (skylight.roofsheet_id === roof_sheet_data.SkylightType) {\r\n roof_sheet_data[\"SkylightSubType\"] = skylight_key;\r\n }\r\n }\r\n }\r\n\r\n const defaultSkylight = subType[CONFIG.ROOFSHEET_TYPE.DEFAULT_SKYLIGHT]\r\n ? subType[CONFIG.ROOFSHEET_TYPE.DEFAULT_SKYLIGHT]\r\n : roofsheetgroup[CONFIG.ROOFSHEET_TYPE.DEFAULT_SKYLIGHT]\r\n ? roofsheetgroup[CONFIG.ROOFSHEET_TYPE.DEFAULT_SKYLIGHT]\r\n : \"\";\r\n\r\n if (skylight_list) {\r\n if (Array.isArray(skylight_list)) {\r\n if (!skylight_list.includes(roof_sheet_data[\"SkylightSubType\"]))\r\n roof_sheet_data[\"SkylightSubType\"] = defaultSkylight;\r\n if (skylight_list.length === 1) {\r\n roof_sheet_data[\"SkylightSubType\"] = skylight_list[0];\r\n }\r\n } else {\r\n if (!(roof_sheet_data[\"SkylightSubType\"] in skylight_list)) {\r\n roof_sheet_data[\"SkylightSubType\"] = defaultSkylight;\r\n }\r\n if (Object.keys(skylight_list).length === 1) {\r\n roof_sheet_data[\"SkylightSubType\"] = Object.keys(skylight_list)[0];\r\n }\r\n }\r\n }\r\n const skylight_sheet = roofsheetgroup?.skylights?.[roof_sheet_data.SkylightSubType]\r\n ? roofsheetgroup.skylights[roof_sheet_data.SkylightSubType]\r\n : {};\r\n\r\n if (skylight_sheet) roof_sheet_data.SkylightType = skylight_sheet.roofsheet_id;\r\n else roof_sheet_data.SkylightType = roof_sheet_data.RoofType;\r\n\r\n //skylight colours\r\n const skylightColourList = skylight_sheet[CONFIG.ROOFSHEET_TYPE.COLOURS]\r\n ? skylight_sheet[CONFIG.ROOFSHEET_TYPE.COLOURS]\r\n : \"Clear\";\r\n const defaultSkylightColour = skylight_sheet?.[CONFIG.ROOFSHEET_TYPE.DEFAULT_COLOUR]\r\n ? skylight_sheet?.[CONFIG.ROOFSHEET_TYPE.DEFAULT_COLOUR]\r\n : \"Opal\";\r\n\r\n // Update job state with skylight selection\r\n roof_sheet_data[\"SkylightIsSelected\"] = GetNumberofSkylightsSummaryArea(this_area_data);\r\n roof_sheet_data[\"SkylightColourSelectionMade\"] = true;\r\n\r\n let skylight_colours = COMMON.GetColourArray(skylightColourList, config.colour_arrays);\r\n if (skylight_colours.length === 1) {\r\n roof_sheet_data[\"SkylightColour\"] = skylight_colours[0];\r\n } else if (skylight_colours && !skylight_colours.includes(roof_sheet_data[\"SkylightColour\"])) {\r\n if (skylight_colours.length === 1) {\r\n roof_sheet_data[\"SkylightColour\"] = skylight_colours[0];\r\n } else if (!skylight_colours.includes(roof_sheet_data[\"SkylightColour\"])) {\r\n if (skylight_colours.includes(defaultSkylightColour))\r\n roof_sheet_data[\"SkylightColour\"] = defaultSkylightColour;\r\n else roof_sheet_data[\"SkylightColour\"] = skylight_colours[0];\r\n }\r\n }\r\n\r\n let colourMatch = {\r\n \"Match Roofsheet\": roof_sheet_data[\"RoofSheetColour\"],\r\n \"Match Barge\": roof_sheet_data.FlashingColour,\r\n };\r\n\r\n // VALIDATE FLASHING / BARGE COLOUR\r\n\r\n let valid_barge_colours = config.colour_arrays?.[\"Colorbond Single & Double Sided\"];\r\n if (design_option?.flashing_colours)\r\n valid_barge_colours = GetColourArray(design_option?.flashing_colours, config.colour_arrays);\r\n\r\n if (!valid_barge_colours.includes([roof_sheet_data.FlashingColour])) {\r\n if (valid_barge_colours.includes(roof_sheet_data.FlashingColour + \"/Grey\"))\r\n roof_sheet_data.FlashingColour = roof_sheet_data.FlashingColour + \"/Grey\";\r\n else if (roof_sheet_data[\"FlashingColour\"].includes(\"/\")) {\r\n let reversed_colour =\r\n roof_sheet_data[\"FlashingColour\"].split(\"/\")[1].trim() +\r\n \"/\" +\r\n roof_sheet_data[\"FlashingColour\"].split(\"/\")[0].trim();\r\n if (valid_barge_colours.includes(reversed_colour)) roof_sheet_data[\"FlashingColour\"] = reversed_colour;\r\n }\r\n }\r\n\r\n if (!roof_sheet_data.FlashingColourMatchString)\r\n roof_sheet_data.FlashingColourMatchString = roof_sheet_data.FlashingColour;\r\n roof_sheet_data.FlashingColour = roof_sheet_data.FlashingColourMatchString;\r\n\r\n if (roof_sheet_data.FlashingColourMatchString in colourMatch) {\r\n if (valid_barge_colours.includes(colourMatch[roof_sheet_data.FlashingColourMatchString])) {\r\n roof_sheet_data.FlashingColour = colourMatch[roof_sheet_data.FlashingColourMatchString];\r\n } else if (colourMatch[roof_sheet_data.FlashingColourMatchString].includes(\"/\")) {\r\n let single_colour = colourMatch[roof_sheet_data.FlashingColourMatchString].split(\"/\")[0];\r\n\r\n if (valid_barge_colours.includes(single_colour)) {\r\n roof_sheet_data.FlashingColour = single_colour;\r\n } else {\r\n single_colour = colourMatch[roof_sheet_data.FlashingColourMatchString].split(\"/\")[1];\r\n if (valid_barge_colours.includes(single_colour)) {\r\n roof_sheet_data.FlashingColour = single_colour;\r\n } else {\r\n roof_sheet_data.FlashingColour = \"TBA\";\r\n }\r\n }\r\n } else {\r\n roof_sheet_data.FlashingColour = \"TBA\";\r\n }\r\n }\r\n\r\n colourMatch[\"Match Barge\"] = roof_sheet_data.FlashingColour;\r\n\r\n // VALIDATE RIDGE COLOUR\r\n let valid_ridge_colours = config.colour_arrays?.[\"Colorbond Single & Double Sided\"];\r\n if (design_option.ridge_colours)\r\n valid_ridge_colours = GetColourArray(design_option?.ridge_colours, config.colour_arrays);\r\n\r\n if (!valid_ridge_colours.includes(roof_sheet_data.RidgeColour)) {\r\n if (valid_ridge_colours.includes(roof_sheet_data.RidgeColour + \"/Grey\"))\r\n roof_sheet_data.RidgeColour = roof_sheet_data.RidgeColour + \"/Grey\";\r\n else if (roof_sheet_data[\"RidgeColour\"].includes(\"/\")) {\r\n let reversed_colour =\r\n roof_sheet_data[\"RidgeColour\"].split(\"/\")[1].trim() +\r\n \"/\" +\r\n roof_sheet_data[\"RidgeColour\"].split(\"/\")[0].trim();\r\n if (valid_ridge_colours.includes(reversed_colour)) roof_sheet_data[\"RidgeColour\"] = reversed_colour;\r\n }\r\n }\r\n\r\n if (!roof_sheet_data.RidgeColourMatchString) roof_sheet_data.RidgeColourMatchString = roof_sheet_data.RidgeColour;\r\n roof_sheet_data.RidgeColour = roof_sheet_data.RidgeColourMatchString;\r\n\r\n if (roof_sheet_data.RidgeColourMatchString in colourMatch) {\r\n if (valid_ridge_colours.includes(colourMatch[roof_sheet_data.RidgeColourMatchString])) {\r\n roof_sheet_data.RidgeColour = colourMatch[roof_sheet_data.RidgeColourMatchString];\r\n } else if (colourMatch[roof_sheet_data.RidgeColourMatchString].includes(\"/\")) {\r\n let single_colour = colourMatch[roof_sheet_data.RidgeColourMatchString].split(\"/\")[0];\r\n if (valid_ridge_colours.includes(single_colour)) {\r\n roof_sheet_data.RidgeColour = single_colour;\r\n } else {\r\n single_colour = colourMatch[roof_sheet_data.RidgeColourMatchString].split(\"/\")[1];\r\n if (valid_ridge_colours.includes(single_colour)) {\r\n roof_sheet_data.RidgeColour = single_colour;\r\n } else {\r\n roof_sheet_data.RidgeColour = \"TBA\";\r\n }\r\n }\r\n } else {\r\n roof_sheet_data.RidgeColour = \"TBA\";\r\n }\r\n }\r\n\r\n // ridges\r\n if (roof_sheet_data?.RoofGroupType !== \"CUSTOM ORB\") roof_sheet_data.RollTopRidge = false;\r\n if (\r\n roof_sheet_data.RollTopRidge &&\r\n design_option?.allow_roll_top_ridge &&\r\n design_option?.flashing_codes?.[\"Ridge Roll Top Flashing\"]\r\n ) {\r\n roof_sheet_data.RidgeCappingCode = design_option?.flashing_codes?.[\"Ridge Roll Top Flashing\"];\r\n } else if (\r\n this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.CollarTie &&\r\n design_option?.flashing_codes?.[\"Ridge with Collar Tie\"]\r\n ) {\r\n roof_sheet_data.RidgeCappingCode = design_option?.flashing_codes?.[\"Ridge with Collar Tie\"];\r\n } else {\r\n roof_sheet_data.RidgeCappingCode = \"\";\r\n }\r\n\r\n //valley code:\r\n if (window.LYSAGHT) {\r\n roof_sheet_data.ValleyFlashingCode = \"\";\r\n } else {\r\n roof_sheet_data.ValleyFlashingCode = \"CFL19\";\r\n }\r\n\r\n //Wall Flashing\r\n roof_sheet_data.WallFlashingCode = design_option?.flashing_codes?.[\"Wall Flashing\"];\r\n\r\n // Gutter Kissing cap code\r\n // roof_sheet_data.GutterCapCode = design_option?.flashing_codes?.[\"Gutter Cap for Kissing Gutters\"];\r\n roof_sheet_data.GutterCapCode = design_option?.flashing_codes?.[\"Gutter Cap for Kissing Gutters\"];\r\n\r\n //append roofsheet basic data\r\n if (!roof_sheet_data.RoofSheetData) roof_sheet_data.RoofSheetData = {};\r\n\r\n roof_sheet_data.RoofSheetData.texture_filename = subType.texture_filename\r\n ? subType.texture_filename\r\n : roofsheetgroup.texture_filename;\r\n roof_sheet_data.RoofSheetData.bottomside_texture_filename = subType.bottomside_texture_filename\r\n ? subType.bottomside_texture_filename\r\n : roofsheetgroup.bottomside_texture_filename;\r\n\r\n roof_sheet_data.RoofSheetData.skylight_texture_filename = skylight_sheet.texture_filename\r\n ? skylight_sheet.texture_filename\r\n : roofsheetgroup.skylight_texture_filename;\r\n if (!roof_sheet_data.RoofSheetData.skylight_texture_filename)\r\n roof_sheet_data.RoofSheetData.skylight_texture_filename = roof_sheet_data.RoofSheetData.texture_filename;\r\n roof_sheet_data.RoofSheetData.min_pitch = Number(subType.min_pitch ? subType.min_pitch : roofsheetgroup.min_pitch);\r\n let max_overhang = roofsheetgroup.max_overhang;\r\n\r\n // Get max span based on span table and pressure table\r\n\r\n roof_sheet_data.MaxEndSheetSpan = 0;\r\n roof_sheet_data.MaxInternalSheetSpan = 0;\r\n\r\n // Start with adding max spans from span tables\r\n let max_internal_span = roofsheetgroup?.max_internal_span;\r\n let max_end_span = roofsheetgroup?.max_end_span;\r\n let backspan_ratio = 0.33;\r\n\r\n if (roofsheetgroup?.overhang_backspan_ratio) backspan_ratio = roofsheetgroup?.overhang_backspan_ratio;\r\n\r\n if (subType.max_overhang !== undefined) max_overhang = subType.max_overhang;\r\n if (subType.max_internal_span !== undefined) max_internal_span = subType.max_internal_span;\r\n if (subType.max_end_span !== undefined) max_end_span = subType.max_end_span;\r\n if (subType.spans) {\r\n if (subType.spans.MaxOverhang !== undefined) max_overhang = subType.spans.MaxOverhang;\r\n if (subType.spans.MaxInternalSpan !== undefined) max_internal_span = subType.spans.MaxInternalSpan;\r\n if (subType.spans.MaxEndSpan !== undefined) max_end_span = subType.spans.MaxEndSpan;\r\n\r\n let n_t_spans = subType.spans.non_trafficable;\r\n let wz_spans = subType.spans?.[job.SiteParameters.WindData.WindZone];\r\n\r\n if (n_t_spans && roof_sheet_data[\"RoofSpan\"].includes(\"Non-Trafficable\")) {\r\n if (n_t_spans.MaxOverhang !== undefined) max_overhang = n_t_spans.MaxOverhang;\r\n if (n_t_spans.MaxInternalSpan !== undefined) max_internal_span = n_t_spans.MaxInternalSpan;\r\n if (n_t_spans.MaxEndSpan !== undefined) max_end_span = n_t_spans.MaxEndSpan;\r\n wz_spans = n_t_spans?.[job.SiteParameters.WindData.WindZone];\r\n }\r\n\r\n if (wz_spans) {\r\n if (wz_spans?.MaxOverhang !== undefined) max_overhang = wz_spans?.MaxOverhang;\r\n if (wz_spans?.MaxInternalSpan !== undefined) max_internal_span = wz_spans?.MaxInternalSpan;\r\n if (wz_spans?.MaxEndSpan !== undefined) max_end_span = wz_spans?.MaxEndSpan;\r\n if (wz_spans?.[\"MaxOverhang_\" + job.SiteParameters.WindData.Blocking + \"Sides\"] !== undefined)\r\n max_overhang = wz_spans?.[\"MaxOverhang_\" + job.SiteParameters.WindData.Blocking + \"Sides\"];\r\n if (wz_spans?.[\"MaxInternalSpan_\" + job.SiteParameters.WindData.Blocking + \"Sides\"] !== undefined)\r\n max_internal_span = wz_spans?.[\"MaxInternalSpan_\" + job.SiteParameters.WindData.Blocking + \"Sides\"];\r\n if (wz_spans?.[\"MaxEndSpan_\" + job.SiteParameters.WindData.Blocking + \"Sides\"] !== undefined)\r\n max_end_span = wz_spans?.[\"MaxEndSpan_\" + job.SiteParameters.WindData.Blocking + \"Sides\"];\r\n }\r\n\r\n function processSpanTable(pressure_spans, pressure_spans_values, spanType, w) {\r\n // Check if spanType is valid and pressure_spans[spanType] exists\r\n const spanTable = pressure_spans?.[spanType];\r\n if (!spanTable || !Array.isArray(spanTable)) {\r\n return { pressureValue: 0, spanMm: 0 };\r\n }\r\n\r\n // Ensure that subType is defined and has pressure_spans with SpanValues\r\n const SpanValues = pressure_spans_values;\r\n if (!SpanValues || !Array.isArray(SpanValues)) {\r\n return { pressureValue: 0, spanMm: 0 };\r\n }\r\n\r\n let pressureValue = 99.99;\r\n let spanMm = 0;\r\n\r\n // Iterate over spanTable to find the appropriate pressureValue and spanMm\r\n for (let i = spanTable.length - 1; i >= 0; i--) {\r\n if (spanTable[i] >= Math.abs(w)) {\r\n pressureValue = spanTable[i];\r\n spanMm = SpanValues[i] * 1000;\r\n break; // Exit the loop after finding the first matching value\r\n }\r\n }\r\n\r\n return { pressureValue, spanMm };\r\n }\r\n\r\n // If there are pressure spans for product, modify the max spans || Note: Only impacting Insulated Products for now.\r\n if (\r\n subType?.pressure_spans &&\r\n job?.SiteParameters?.WindData?.WindZoneAS1170?.region &&\r\n job?.SiteParameters?.WindData?.WindZoneAS1170?.base_pressure\r\n ) {\r\n let windRegion = job?.SiteParameters?.WindData?.WindZoneAS1170?.region;\r\n if (windRegion.length > 1) windRegion = windRegion[0]; // Just get the first letter. i.e A1 = A.\r\n\r\n let AreaMaxResults = job.QuoteParameters?.ENGINEERING?.EngineeringResults?.AreaMaxResults?.[areaIndex];\r\n let is_multispan = AreaMaxResults?.NumPurlins > 0;\r\n\r\n let total_height = 0;\r\n for (let area of job.AreaSpecifications) {\r\n let height = area.SHAPE.Height;\r\n if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL)\r\n height = height + area.SHAPE.Depth * 0.5 * COMMON.Sin(area.SHAPE.RoofPitch);\r\n total_height += height;\r\n }\r\n\r\n let average_height = total_height / job.AreaSpecifications.length;\r\n let wall_height = job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].WallHeight;\r\n let attachment_height = Math.max(wall_height, average_height) / 0.825;\r\n if (job.DesignParameters.Freestanding || attachment_height < 1000) {\r\n attachment_height = average_height;\r\n }\r\n\r\n wall_height = job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].WallHeight;\r\n attachment_height = Math.max(wall_height, average_height) / 0.825;\r\n if (job.DesignParameters.Freestanding || attachment_height < 1000) {\r\n attachment_height = average_height;\r\n }\r\n\r\n let wu_data = getWuUpDown(\r\n attachment_height,\r\n job.SiteParameters.WindData.WindZoneAS1170.base_pressure,\r\n job.DesignParameters.TotalLength,\r\n average_height,\r\n job.SiteParameters.WindData.WindZoneAS1170.blocking_factor\r\n );\r\n\r\n let wu = wu_data.UP; // TODO: Wind Down\r\n let wd = wu_data.DOWN; // TODO: Wind Down\r\n\r\n // Get pressure span table\r\n const pressure_spans = subType?.pressure_spans[\"Region \" + windRegion];\r\n const pressure_spans_values = subType?.pressure_spans[\"SpanValues\"];\r\n\r\n const { pressureValue: pressure_value_up, spanMm: up_span_mm } = processSpanTable(\r\n pressure_spans,\r\n pressure_spans_values,\r\n \"Single Span Out\",\r\n wu\r\n );\r\n const { pressureValue: pressure_value_up_double, spanMm: up_span_mm_double } = processSpanTable(\r\n pressure_spans,\r\n pressure_spans_values,\r\n \"Double Span Out\",\r\n wu\r\n );\r\n const { pressureValue: pressure_value_down, spanMm: down_span_mm } = processSpanTable(\r\n pressure_spans,\r\n pressure_spans_values,\r\n \"Single Span In\",\r\n wd\r\n );\r\n const { pressureValue: pressure_value_down_double, spanMm: down_span_mm_double } = processSpanTable(\r\n pressure_spans,\r\n pressure_spans_values,\r\n \"Double Span In\",\r\n wd\r\n );\r\n\r\n let max_span_pressure_table_result = 0;\r\n if (up_span_mm > 0 && down_span_mm > 0) {\r\n max_span_pressure_table_result = Math.min(up_span_mm, down_span_mm);\r\n }\r\n let max_span_pressure_table_double_result = 0;\r\n if (up_span_mm_double > 0 && down_span_mm_double > 0) {\r\n max_span_pressure_table_double_result = Math.min(up_span_mm_double, down_span_mm_double);\r\n }\r\n\r\n // Add Designed Boolean\r\n roof_sheet_data.RoofSheetData[\"PressureTableMaxSpanSingle\"] = max_span_pressure_table_result;\r\n roof_sheet_data.RoofSheetData[\"PressureTableMaxSpanDouble\"] = max_span_pressure_table_double_result;\r\n\r\n let pt_max_end_span = max_end_span;\r\n if (max_span_pressure_table_result > pt_max_end_span) pt_max_end_span = max_span_pressure_table_result;\r\n\r\n if (this_area.META.RoofSheetSpan > pt_max_end_span) {\r\n // is multi span;\r\n this_area.BEAMS_AND_POSTS.NumPurlins = 1;\r\n roof_sheet_data.RoofSheetData[\"InsulatedMultispan\"] = true;\r\n roof_sheet_data.MaxEndSheetSpan = max_span_pressure_table_double_result;\r\n roof_sheet_data.MaxInternalSheetSpan = max_span_pressure_table_double_result;\r\n if (this_area.META.RoofSheetSpan > max_span_pressure_table_double_result * 2)\r\n roof_sheet_data.RoofSheetData[\"InsulatedOverspan\"] = true;\r\n else roof_sheet_data.RoofSheetData[\"InsulatedOverspan\"] = false;\r\n } else {\r\n roof_sheet_data.RoofSheetData[\"InsulatedOverspan\"] = false;\r\n roof_sheet_data.RoofSheetData[\"InsulatedMultispan\"] = false;\r\n this_area.BEAMS_AND_POSTS.NumPurlins = 0;\r\n roof_sheet_data.MaxEndSheetSpan = pt_max_end_span;\r\n roof_sheet_data.MaxInternalSheetSpan = pt_max_end_span;\r\n }\r\n } else {\r\n this_area.BEAMS_AND_POSTS.NumPurlins = -1;\r\n roof_sheet_data.RoofSheetData[\"PressureTableMaxSpanSingle\"] = 0;\r\n roof_sheet_data.RoofSheetData[\"PressureTableMaxSpanDouble\"] = 0;\r\n }\r\n }\r\n\r\n if (this_area.SKYLIGHTS.length > 0 && this_area.ROOF_SHEETING.RoofType.includes(\"TL5\") && window.FIELDERS) {\r\n let pLength =\r\n this_area.SHAPE.SheetDirection === \"Front\" || this_area.SHAPE.SheetDirection === \"Back\"\r\n ? this_area.SHAPE.Depth\r\n : this_area.SHAPE.Length;\r\n\r\n let min = parseInt(pLength / 950) - 1;\r\n this_area.BEAMS_AND_POSTS.NumPurlins = min + this_area.BEAMS_AND_POSTS.NumExtraPurlins;\r\n }\r\n\r\n if (this_area.SKYLIGHTS.length > 0 && this_area.ROOF_SHEETING.RoofType.includes(\"Corrugated\") && window.FIELDERS) {\r\n // roof_sheet_data.RoofSpan = \"Non-Trafficable\";\r\n }\r\n\r\n let overhang_ratio = backspan_ratio / (1 + backspan_ratio);\r\n\r\n let is_flat = false;\r\n let is_pitched = false;\r\n let is_portal = false;\r\n\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) is_flat = true;\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) is_pitched = true;\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) is_portal = true;\r\n\r\n let max_overhang_based_on_width = 999999;\r\n let roof_span_width = this_area_data.SHAPE.Depth;\r\n\r\n if (is_flat) {\r\n if (this_area.SHAPE.SheetDirection === \"Left\" || this_area.SHAPE.SheetDirection === \"Right\") {\r\n roof_span_width = this_area_data.SHAPE.Length;\r\n if (\r\n this_area.SHAPE.OH_Front > 50 &&\r\n (this_area.SHAPE.OH_Back > 50) & !roof_sheet_data.RoofGroupType.toUpperCase().includes(\"BONDOR\")\r\n )\r\n roof_span_width -= Math.max(this_area.SHAPE.OH_Front, this_area.SHAPE.OH_Back);\r\n } else {\r\n roof_span_width = this_area_data.SHAPE.Depth;\r\n if (\r\n this_area.SHAPE.OH_Front > 50 &&\r\n (this_area.SHAPE.OH_Back > 50) & !roof_sheet_data.RoofGroupType.toUpperCase().includes(\"BONDOR\")\r\n )\r\n roof_span_width -= Math.max(this_area.SHAPE.OH_Front, this_area.SHAPE.OH_Back);\r\n }\r\n } else if (is_pitched) {\r\n roof_span_width = this_area_data.SHAPE.Length / 2;\r\n } else if (is_portal) {\r\n roof_span_width = this_area_data.SHAPE.Depth / 2;\r\n }\r\n\r\n if (is_pitched || is_portal) {\r\n let this_max_span = max_end_span;\r\n if (roof_sheet_data.MaxEndSheetSpan !== 0) this_max_span = roof_sheet_data.MaxEndSheetSpan;\r\n\r\n if (roofsheetgroup.gable_end_span_override && this_max_span > roofsheetgroup.gable_end_span_override) {\r\n max_end_span = roofsheetgroup.gable_end_span_override;\r\n roof_sheet_data.MaxEndSheetSpan = max_end_span; // override the sheet span in cad system\r\n roof_sheet_data.MaxEndSheetSpanOverride = max_end_span; // override the sheet span in cad system\r\n } else {\r\n roof_sheet_data.MaxEndSheetSpanOverride = null; // override the sheet span in cad system\r\n }\r\n\r\n this_max_span = max_internal_span;\r\n if (roof_sheet_data.MaxInternalSheetSpan !== 0) this_max_span = roof_sheet_data.MaxInternalSheetSpan;\r\n if (\r\n roofsheetgroup.gable_internal_span_override &&\r\n this_max_span > roofsheetgroup.gable_internal_span_override\r\n ) {\r\n max_internal_span = roofsheetgroup.gable_internal_span_override;\r\n roof_sheet_data.MaxInternalSheetSpan = max_internal_span; // override the sheet span in cad system\r\n roof_sheet_data.MaxInternalSheetSpanOverride = max_internal_span;\r\n } else {\r\n roof_sheet_data.MaxInternalSheetSpanOverride = 0;\r\n }\r\n } else if (!roof_sheet_data?.RoofSheetData?.PressureTableMaxSpanSingle) {\r\n roof_sheet_data.MaxEndSheetSpan = 0;\r\n roof_sheet_data.MaxInternalSheetSpan = 0;\r\n }\r\n\r\n max_overhang_based_on_width =\r\n (roof_span_width / Math.cos(DegreesToRadians(this_area_data.SHAPE.RoofPitch))) * overhang_ratio;\r\n\r\n roof_sheet_data.RoofSheetData.max_overhang = Math.trunc(Math.min(max_overhang, max_overhang_based_on_width));\r\n roof_sheet_data.RoofSheetData.min_front_overhang =\r\n roofsheetgroup?.min_front_overhang !== undefined ? toNumber(roofsheetgroup?.min_front_overhang) : 0;\r\n roof_sheet_data.RoofSheetData.min_side_overhang =\r\n roofsheetgroup?.min_side_overhang !== undefined\r\n ? toNumber(roofsheetgroup?.min_side_overhang)\r\n : design_option?.overhang_right_range?.min\r\n ? design_option.overhang_right_range.min\r\n : 0;\r\n roof_sheet_data.RoofSheetData.max_side_overhang =\r\n roofsheetgroup?.max_side_overhang !== undefined\r\n ? toNumber(roofsheetgroup?.max_side_overhang)\r\n : design_option?.overhang_right_range?.max\r\n ? design_option.overhang_right_range.max\r\n : 0;\r\n\r\n roof_sheet_data.RoofSheetData.max_internal_span = max_internal_span;\r\n roof_sheet_data.RoofSheetData.max_end_span = max_end_span;\r\n roof_sheet_data.RoofSheetData.max_frontback_end_span = is_flat\r\n ? roof_sheet_data.RoofSheetData.max_overhang\r\n : roof_sheet_data.RoofGroupType.includes(\"Bondor\")\r\n ? roof_sheet_data.RoofSheetData.max_overhang\r\n : 0; // Gable no overhang front or back\r\n\r\n // Enforce max\r\n const maxSpan = roof_sheet_data.RoofSheetData.max_frontback_end_span;\r\n if (this_area_data.SHAPE.OH_Front_Sheet > maxSpan) {\r\n this_area_data.SHAPE.OH_Front_Sheet = maxSpan;\r\n }\r\n if (this_area_data.SHAPE.OH_Back_Sheet > maxSpan) {\r\n this_area_data.SHAPE.OH_Back_Sheet = maxSpan;\r\n }\r\n\r\n roof_sheet_data.RoofSheetData.double_beam_hip_required = roofsheetgroup?.double_beam_hip_required ? true : false;\r\n\r\n roof_sheet_data.RoofSheetData.coverage = subType?.coverage\r\n ? Number(subType?.coverage)\r\n : roofsheetgroup?.coverage\r\n ? Number(roofsheetgroup?.coverage)\r\n : 760;\r\n roof_sheet_data.RoofSheetData.sheet_height = subType?.sheet_height\r\n ? Number(subType?.sheet_height)\r\n : roofsheetgroup?.sheet_height\r\n ? Number(roofsheetgroup?.sheet_height)\r\n : 45;\r\n\r\n roof_sheet_data.RoofSheetData.skylight_spacing = subType?.skylight_spacing\r\n ? subType?.skylight_spacing\r\n : roofsheetgroup?.skylight_spacing\r\n ? roofsheetgroup?.skylight_spacing\r\n : 0;\r\n roof_sheet_data.RoofSheetData.gutter_return_not_required =\r\n roofsheetgroup?.gutter_return_not_required !== undefined ? roofsheetgroup?.gutter_return_not_required : false;\r\n roof_sheet_data.RoofSheetData.single_span_only = subType?.single_span_only\r\n ? subType?.single_span_only\r\n : roofsheetgroup?.single_span_only\r\n ? roofsheetgroup?.single_span_only\r\n : false;\r\n roof_sheet_data.RoofSheetData.allow_cyclonic = subType?.allow_cyclonic\r\n ? subType?.allow_cyclonic\r\n : roofsheetgroup?.allow_cyclonic\r\n ? roofsheetgroup?.allow_cyclonic\r\n : false;\r\n roof_sheet_data.RoofSheetData.skylight_coverage = skylight_sheet?.coverage\r\n ? Number(skylight_sheet?.coverage)\r\n : roofsheetgroup?.skylight_coverage\r\n ? Number(roofsheetgroup?.skylight_coverage)\r\n : 0;\r\n\r\n // Set the skylight coverage to the cyclonic coverage if exists\r\n if (is_cyclonic && roofsheetgroup?.skylight_cyclonic_coverage != null) {\r\n roof_sheet_data.RoofSheetData.skylight_coverage = roofsheetgroup?.skylight_cyclonic_coverage;\r\n }\r\n\r\n roof_sheet_data.RoofSheetData.wall_fixing_spacing =\r\n roofsheetgroup?.wall_fixing_spacing != undefined ? roofsheetgroup?.wall_fixing_spacing : 600;\r\n\r\n if (!roofsheetgroup.skylights) {\r\n }\r\n\r\n if (roof_sheet_data.RoofSheetData.single_span_only && job.QuoteParameters?.ENGINEERING?.EngineeringResults) {\r\n let AreaMaxResults = job.QuoteParameters?.ENGINEERING?.EngineeringResults?.AreaMaxResults?.[areaIndex];\r\n\r\n if (is_flat && AreaMaxResults?.NumPurlins > 0) {\r\n AreaMaxResults.PurlinMax = 9.99;\r\n AreaMaxResults.MaxResult = 9.99;\r\n }\r\n }\r\n\r\n /// type 3 side purlin numbe force\r\n if (is_flat) {\r\n if (this_area.SHAPE.SheetDirection === \"Left\" || this_area.SHAPE.SheetDirection === \"Right\") {\r\n let max_end_span = roof_sheet_data.RoofSheetData.max_end_span;\r\n let max_span = roof_sheet_data.RoofSheetData.max_internal_span;\r\n let num_purlins = 2;\r\n if (this_area.META.RoofSheetSpan <= max_end_span) num_purlins = 2;\r\n else if (this_area.META.RoofSheetSpan <= 2 * max_end_span) num_purlins = 3;\r\n else\r\n num_purlins =\r\n Math.trunc((this_area.META.RoofSheetSpan - 2 * max_end_span) / max_span + 0.999999) + 1 + 2;\r\n num_purlins = num_purlins + this_area.BEAMS_AND_POSTS.NumExtraPurlins;\r\n this_area.BEAMS_AND_POSTS.NumPurlins = num_purlins - 2;\r\n }\r\n }\r\n\r\n // downlights & fan brackets\r\n let allow_downlights = false;\r\n if (\r\n roof_sheet_data.RoofGroupType.toUpperCase().includes(\"BONDOR\") ||\r\n roof_sheet_data.RoofGroupType.toUpperCase().includes(\"VERSICLAD\") ||\r\n roof_sheet_data.RoofGroupType.toUpperCase().includes(\"APOLLO\")\r\n ) {\r\n allow_downlights = true;\r\n }\r\n\r\n // Add fan bracket\r\n if (roofsheetgroup?.fan_bracket && roofsheetgroup?.fan_bracket !== \"\") {\r\n roof_sheet_data.FanBracketSelection = roofsheetgroup.fan_bracket;\r\n if (!roof_sheet_data?.FanBrackets) roof_sheet_data.FanBrackets = roofsheetgroup.fan_bracket_default ?? 1; // Default or 1\r\n }\r\n\r\n if (!allow_downlights || !design_option?.downlight_options) {\r\n roof_sheet_data.DownlightData = null;\r\n } else {\r\n let downlight_data = roof_sheet_data?.DownlightData;\r\n if (!downlight_data) downlight_data = {};\r\n\r\n // Update default downlight\r\n if (!downlight_data?.DownlightSelection) downlight_data.DownlightSelection = design_option?.downlight_default;\r\n\r\n // Set default downlight to next available downlight from downlight menu if default doesn't exist\r\n if (!design_option?.downlight_options.includes(downlight_data.DownlightSelection)) {\r\n downlight_data.DownlightSelection = \"None\";\r\n }\r\n\r\n // Update control type to automatic if not set\r\n if (!downlight_data?.ControlType) downlight_data.ControlType = \"Automatic\";\r\n\r\n if (downlight_data.DownlightSelection === \"None\") {\r\n downlight_data.Amount = 0;\r\n } else if (downlight_data?.ControlType === \"Automatic\" || !downlight_data.Amount) {\r\n // Update amount for design\r\n let width = this_area_data.SHAPE.Depth;\r\n let length = this_area_data.SHAPE.Length;\r\n\r\n width = width - 200;\r\n length = length - 200;\r\n\r\n let totalDownlights = length / 2000;\r\n\r\n if (totalDownlights < 1) totalDownlights = 1;\r\n if (width > 3000) totalDownlights *= 2;\r\n\r\n downlight_data.Amount = Math.floor(totalDownlights);\r\n }\r\n\r\n if (downlight_data.DownlightSelection !== \"None\") {\r\n if (roof_sheet_data.RoofGroupType.toUpperCase().includes(\"VERSICLAD\")) {\r\n downlight_data.DownlightSelection = \"DLKITV\";\r\n downlight_data.DownlightColour = \"Tri-Colour (Cool/Neutral/Warm)\";\r\n } else if (roof_sheet_data.RoofGroupType.toUpperCase().includes(\"BONDOR\")) {\r\n downlight_data.DownlightSelection = \"DLKIT9W\";\r\n let dl_bondor_colours = [\"Cool White\", \"Warm White\"];\r\n if (!dl_bondor_colours.includes(downlight_data.DownlightColour))\r\n downlight_data.DownlightColour = dl_bondor_colours[0];\r\n }\r\n }\r\n\r\n roof_sheet_data.DownlightData = downlight_data;\r\n }\r\n\r\n return roof_sheet_data;\r\n};\r\n\r\nexport const validateGutterDownpipeData = (config, job, areaIndex) => {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n let this_area_data_META = this_area_data?.META;\r\n let gutter_downpipe_data = { ...this_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES] };\r\n let gutter_types = config.gutter_types;\r\n let downpipe_types = config.downpipe_types;\r\n let design_option = config?.design_options?.[this_area_data.SHAPE.DesignType];\r\n\r\n let fascia_colour = this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.BeamCol1;\r\n let edge_beam_colour = this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.BeamCol3;\r\n\r\n // Update job state with gutter and downpipe selections\r\n gutter_downpipe_data.GutterIsSelected =\r\n gutter_downpipe_data.GutterB === 1 ||\r\n gutter_downpipe_data.GutterF === 1 ||\r\n gutter_downpipe_data.GutterL === 1 ||\r\n gutter_downpipe_data.GutterR === 1;\r\n\r\n gutter_downpipe_data.DownpipeIsSelected =\r\n !!gutter_downpipe_data.Downpipes?.length || gutter_downpipe_data.AddAutomaticDownpipes === 1;\r\n\r\n // Update Obsolete References\r\n\r\n if (gutter_downpipe_data?.DownpipeType === \"65mm Round Downpipe\")\r\n gutter_downpipe_data.DownpipeType = \"65mm Round PVC Downpipe\";\r\n if (gutter_downpipe_data?.DownpipeType === \"75mm Round Downpipe\")\r\n gutter_downpipe_data.DownpipeType = \"75mm Round PVC Downpipe\";\r\n if (gutter_downpipe_data?.DownpipeType === \"80mm Round Downpipe\")\r\n gutter_downpipe_data.DownpipeType = \"80mm Round PVC Downpipe\";\r\n if (gutter_downpipe_data?.DownpipeType === \"90mm Round Downpipe\")\r\n gutter_downpipe_data.DownpipeType = \"90mm Round PVC Downpipe\";\r\n if (gutter_downpipe_data?.DownpipeType === \"65mm Square Downpipe\")\r\n gutter_downpipe_data.DownpipeType = \"65mm x 65mm Square Downpipe\";\r\n\r\n let this_downpipe = downpipe_types?.[gutter_downpipe_data.DownpipeType];\r\n if (!this_downpipe && design_option?.downpipe_default) {\r\n gutter_downpipe_data.DownpipeType = design_option?.downpipe_default;\r\n this_downpipe = downpipe_types?.[gutter_downpipe_data.DownpipeType];\r\n }\r\n\r\n if (design_option?.gutter_options && !design_option?.gutter_options.includes(gutter_downpipe_data.GutterType)) {\r\n gutter_downpipe_data.GutterType = design_option?.gutter_default;\r\n }\r\n\r\n let this_gutter = gutter_types[gutter_downpipe_data.GutterType];\r\n if (!this_gutter && design_option?.gutter_default) {\r\n gutter_downpipe_data.GutterType = design_option?.gutter_default;\r\n this_gutter = gutter_types?.[gutter_downpipe_data.GutterType];\r\n }\r\n\r\n // if (this_gutter.easy_fix_allowed === false) {\r\n // gutter_downpipe_data.EasyFixMitres = 0;\r\n // }\r\n // if (this_gutter.easy_fix_required === true) {\r\n gutter_downpipe_data.EasyFixMitres = 0;\r\n // }\r\n // if (this_gutter.hand_made_mitres_required === true) {\r\n gutter_downpipe_data.HandmadeMitres = 0; // coopted for special corners\r\n // }\r\n // if (this_gutter.return_allowed === false) {\r\n gutter_downpipe_data.GutterWithReturn = 0;\r\n // }\r\n // if (this_gutter.slotted_allowed === false) {\r\n gutter_downpipe_data.SlottedGutter = 0;\r\n // }\r\n\r\n let GutterReturnNotRequired =\r\n this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.gutter_return_not_required;\r\n\r\n if (gutter_downpipe_data.GutterType.includes(\"Return\")) GutterReturnNotRequired = true;\r\n\r\n if (GutterReturnNotRequired) {\r\n gutter_downpipe_data.GutterReturnNotRequired = 1;\r\n } else {\r\n gutter_downpipe_data.GutterReturnNotRequired = \"\";\r\n }\r\n\r\n // gutter colours\r\n\r\n let gutter_colours = COMMON.GetColourArray(this_gutter?.colours, config.colour_arrays);\r\n if (!gutter_colours.includes(gutter_downpipe_data.GutterCol)) {\r\n gutter_downpipe_data[\"GutterColourSelectionMade\"] = false;\r\n if (gutter_colours.length === 1) {\r\n gutter_downpipe_data[\"GutterColourSelectionMade\"] = true;\r\n gutter_downpipe_data.GutterCol = gutter_colours[0];\r\n } else if (!gutter_colours.includes(gutter_downpipe_data.DownpipeCol)) gutter_downpipe_data.GutterCol = \"TBA\";\r\n // if (!gutter_colours.includes(gutter_downpipe_data.DownpipeCol)) gutter_downpipe_data.GutterCol = gutter_colours[0];\r\n } else if (gutter_downpipe_data.GutterCol !== \"TBA\") {\r\n gutter_downpipe_data.GutterColourSelectionMade = true;\r\n }\r\n\r\n let gutter_colour = gutter_downpipe_data.GutterCol;\r\n let colourMatch = {\r\n \"Match Fascia\": fascia_colour,\r\n \"Match Gutter\": gutter_colour,\r\n \"Match Edge Beam\": edge_beam_colour,\r\n };\r\n\r\n if (!gutter_downpipe_data.BoxGutterColourMatchBeam)\r\n gutter_downpipe_data.BoxGutterColourMatchBeam = gutter_downpipe_data.BoxGutterColour;\r\n\r\n gutter_downpipe_data.BoxGutterColour = gutter_downpipe_data.BoxGutterColourMatchBeam;\r\n if (gutter_downpipe_data.BoxGutterColourMatchBeam in colourMatch) {\r\n gutter_downpipe_data.BoxGutterColour = colourMatch[gutter_downpipe_data.BoxGutterColourMatchBeam];\r\n }\r\n\r\n // downpipe colours\r\n\r\n if (\r\n design_option?.downpipe_options &&\r\n !design_option?.downpipe_options.includes(gutter_downpipe_data.DownpipeType)\r\n ) {\r\n gutter_downpipe_data.DownpipeType = design_option?.downpipe_default;\r\n }\r\n\r\n let downpipe_colours = COMMON.GetColourArray(this_downpipe?.colours, config?.colour_arrays);\r\n if (!downpipe_colours.includes(gutter_downpipe_data.DownpipeCol)) {\r\n gutter_downpipe_data[\"DownpipeColourSelectionMade\"] = false;\r\n if (downpipe_colours.length === 1) {\r\n gutter_downpipe_data[\"DownpipeColourSelectionMade\"] = true;\r\n gutter_downpipe_data.DownpipeCol = downpipe_colours[0];\r\n } else if (!downpipe_colours.includes(gutter_downpipe_data.DownpipeCol))\r\n gutter_downpipe_data.DownpipeCol = \"TBA\";\r\n // if (!downpipe_colours.includes(gutter_downpipe_data.DownpipeCol)) gutter_downpipe_data.DownpipeCol = downpipe_colours[0];\r\n } else if (gutter_downpipe_data.DownpipeCol !== \"TBA\") {\r\n gutter_downpipe_data.DownpipeColourSelectionMade = true;\r\n }\r\n\r\n if (this_area_data_META) {\r\n if (this_area_data_META?.HasInsulatedPanel) gutter_downpipe_data.GutterVerticalAlign = 1;\r\n else gutter_downpipe_data.GutterVerticalAlign = 0;\r\n\r\n if (\r\n this_area_data_META.FrontState.AttachmentType?.includes(\"Fascia\") &&\r\n this_area_data_META.FrontState.HasGutter &&\r\n !this_area_data_META.FrontState.IsWaterShed\r\n )\r\n gutter_downpipe_data.GutterF = 0;\r\n if (\r\n this_area_data_META.BackState.AttachmentType?.includes(\"Fascia\") &&\r\n this_area_data_META.BackState.HasGutter &&\r\n !this_area_data_META.BackState.IsWaterShed\r\n )\r\n gutter_downpipe_data.GutterB = 0;\r\n if (\r\n this_area_data_META.LeftState.AttachmentType?.includes(\"Fascia\") &&\r\n this_area_data_META.LeftState.HasGutter &&\r\n !this_area_data_META.LeftState.IsWaterShed\r\n )\r\n gutter_downpipe_data.GutterL = 0;\r\n if (\r\n this_area_data_META.RightState.AttachmentType?.includes(\"Fascia\") &&\r\n this_area_data_META.RightState.HasGutter &&\r\n !this_area_data_META.RightState.IsWaterShed\r\n )\r\n gutter_downpipe_data.GutterR = 0;\r\n }\r\n\r\n if (gutter_downpipe_data.BoxGutterWidth > 230) gutter_downpipe_data.BoxGutterWidth = 260;\r\n else if (gutter_downpipe_data.BoxGutterWidth > 200 && gutter_downpipe_data.BoxGutterWidth < 230)\r\n gutter_downpipe_data.BoxGutterWidth = 230;\r\n else if (gutter_downpipe_data.BoxGutterWidth < 200) gutter_downpipe_data.BoxGutterWidth = 200;\r\n\r\n return gutter_downpipe_data;\r\n};\r\n\r\nexport const validateAreaAttachmentData = (config, job, areaIndex, in_adjusted_length = null) => {\r\n let last_area_data = job.AreaSpecifications?.[areaIndex - 1];\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n let next_area_data = job.AreaSpecifications?.[areaIndex + 1];\r\n\r\n let ATTACHMENT_TYPES = config.attachment_types;\r\n\r\n let rafter_bracket_codes = ATTACHMENT_TYPES[\"Rafter Brackets supporting Beam\"].bracket_type_code;\r\n let wall_bracket_codes = ATTACHMENT_TYPES[\"Wall with Offset Brackets Supporting Gutter and Beam\"].bracket_type_code;\r\n\r\n let region = job?.SiteParameters?.WindData?.WindZoneAS1170?.region;\r\n let attachment_data = { ...this_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS] };\r\n\r\n let is_flat = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT;\r\n let is_deck = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.DECK;\r\n let is_gable = this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL;\r\n\r\n if (attachment_data?.AttachmentModifications && attachment_data?.AttachmentModifications.constructor == Array) {\r\n for (let data_mods of attachment_data?.AttachmentModifications) {\r\n if (window.LYSAGHT && !job.DesignParameters.USE_ATTACHMENTS_2) {\r\n data_mods.HasBracketType = 0;\r\n data_mods.BracketType = \"\";\r\n data_mods.BracketSpacing = 0;\r\n if (data_mods.AttachmentType === \"Wall\") {\r\n if (data_mods.AttachmentSubType === \"Timber Wall\") {\r\n data_mods.HasBracketType = 1;\r\n data_mods.HasBracketSpacing = 1;\r\n data_mods.BracketType = \"R/C w/ Coach Screws\";\r\n data_mods.BracketTypeCode = \"CS7510G\";\r\n data_mods.BracketSpacing = 600;\r\n } else if (data_mods.AttachmentSubType === \"Timber Wall On Beam\") {\r\n data_mods.HasBracketType = 1;\r\n data_mods.HasBracketSpacing = 1;\r\n data_mods.BracketType = \"R/C on Beam w/ Coach Screws\";\r\n data_mods.BracketTypeCode = \"CS7510G\";\r\n data_mods.BracketSpacing = 600;\r\n } else if (data_mods.AttachmentSubType === \"Masonry Wall\") {\r\n data_mods.HasBracketType = 1;\r\n data_mods.HasBracketSpacing = 1;\r\n data_mods.BracketType = \"R/C w/ Masonry Anchors\";\r\n data_mods.BracketTypeCode = \"SA7510G\";\r\n data_mods.BracketSpacing = 600;\r\n } else if (data_mods.AttachmentSubType === \"Masonry Wall On Beam\") {\r\n data_mods.HasBracketType = 1;\r\n data_mods.HasBracketSpacing = 1;\r\n data_mods.BracketType = \"R/C on Beam w/ Masonry Anchors\";\r\n data_mods.BracketTypeCode = \"SA7510G\";\r\n data_mods.BracketSpacing = 600;\r\n }\r\n // data_mods.WallHeight = this_area_data.SHAPE.Height;\r\n // data_mods.HasWallHeight = 1;\r\n data_mods.WallOnly = 1;\r\n }\r\n if (data_mods.AttachmentType === \"Timber Fascia Drop\") {\r\n data_mods.HasBracketType = 1;\r\n data_mods.HasBracketSpacing = 1;\r\n data_mods.BracketType = \"CON110\";\r\n data_mods.BracketTypeCode = \"CON110\";\r\n data_mods.BracketSpacing = job?.SiteParameters?.ExistingStructure?.RoofType === \"Tile\" ? 600 : 900;\r\n }\r\n if (data_mods.AttachmentType === \"Metal Fascia Drop\") {\r\n data_mods.HasBracketType = 1;\r\n data_mods.HasBracketSpacing = 1;\r\n data_mods.BracketType = \"CON110\";\r\n data_mods.BracketTypeCode = \"CON110\";\r\n data_mods.BracketSpacing = job?.SiteParameters?.ExistingStructure?.RoofType === \"Tile\" ? 600 : 900;\r\n }\r\n } else {\r\n data_mods.HasBracketType = 0;\r\n data_mods.BracketType = \"\";\r\n data_mods.BracketSpacing = 0;\r\n }\r\n\r\n if (job.DesignParameters.USE_ATTACHMENTS_2) {\r\n let schema = null;\r\n\r\n let attachment_beam = this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1;\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n attachment_beam = this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType3;\r\n } else if (data_mods?.RoofAlignment && data_mods?.RoofAlignment.includes(\"Side\")) {\r\n attachment_beam = this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType3;\r\n }\r\n\r\n let is_active_atttachment = false;\r\n if (data_mods.Ref.includes(\"Back\") && this_area_data.META.BackState.HasAttachment) {\r\n is_active_atttachment = true;\r\n }\r\n if (data_mods.Ref.includes(\"Left\") && this_area_data.META.LeftState.HasAttachment) {\r\n is_active_atttachment = true;\r\n }\r\n if (data_mods.Ref.includes(\"Right\") && this_area_data.META.RightState.HasAttachment) {\r\n is_active_atttachment = true;\r\n }\r\n if (data_mods.Ref.includes(\"Front\") && this_area_data.META.FrontState.HasAttachment) {\r\n is_active_atttachment = true;\r\n }\r\n\r\n if (\r\n is_flat &&\r\n data_mods.Ref.includes(this_area_data.SHAPE.SheetDirection + \" \") &&\r\n data_mods.FasciaType.includes(\"Fascia\")\r\n ) {\r\n data_mods.AttachmentType = \"Rafter Brackets supporting Beam\";\r\n data_mods.FasciaType = \"Beam\";\r\n data_mods.HasBeam = 1;\r\n }\r\n\r\n if (is_deck) {\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_FasciaType = \"Wall\";\r\n data_mods.AttachmentType = \"Wall\";\r\n data_mods.FasciaType = \"Wall\";\r\n schema = ATTACHMENT_TYPES[data_mods.AttachmentType];\r\n if (data_mods?.AttachmentVariation && schema?.variations?.[data_mods.AttachmentVariation]) {\r\n schema = { ...schema, ...schema.variations[data_mods.AttachmentVariation] };\r\n } else {\r\n data_mods.AttachmentVariation = \"Masonry Wall With Beam\";\r\n if (data_mods?.AttachmentVariation && schema?.variations?.[data_mods.AttachmentVariation]) {\r\n schema = { ...schema, ...schema.variations[data_mods.AttachmentVariation] };\r\n }\r\n }\r\n data_mods.HasBeam = schema?.has_beam ? 1 : 0;\r\n data_mods.WallType = schema?.wall_type ? schema.wall_type : \"\";\r\n data_mods.WallOnly = schema?.wall_only ? 1 : 0;\r\n\r\n data_mods.BracketType = schema?.bracket_type_desc ? schema.bracket_type_desc : \"\";\r\n data_mods.HasBracketType = 0;\r\n\r\n data_mods.RafterBracketTypeCode = \"\";\r\n data_mods.WallBracketTypeCode = \"\";\r\n data_mods.AttachmentBeamType = attachment_beam;\r\n data_mods.WallType = schema?.wall_type ? schema?.wall_type : \"Brick\";\r\n } else {\r\n if (ATTACHMENT_TYPES[data_mods.AttachmentType]) {\r\n schema = ATTACHMENT_TYPES[data_mods.AttachmentType];\r\n if (data_mods?.AttachmentVariation && schema?.variations?.[data_mods.AttachmentVariation]) {\r\n schema = { ...schema, ...schema.variations[data_mods.AttachmentVariation] };\r\n if (is_gable && data_mods.AttachmentVariation === \"Gutter\") {\r\n schema.height_offset_max = \"Beam_Height-50\";\r\n schema.height_offset_min = \"Beam_Height-50\";\r\n schema.height_offset_editable_side = false;\r\n }\r\n }\r\n data_mods.HasBeam = schema.has_beam ? 1 : 0;\r\n data_mods.WallType = schema.wall_type ? schema.wall_type : \"\";\r\n data_mods.WallOnly = schema.wall_only ? 1 : 0;\r\n if (schema?.old_key) data_mods.FasciaType = schema.old_key;\r\n\r\n if (schema?.old_key == \"Wall\" && schema.has_beam)\r\n attachment_beam = this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1; // in this case the added beam is the same a fascia beam, not rafter;\r\n\r\n if (schema.has_gutter) {\r\n if (is_active_atttachment) {\r\n if (\r\n data_mods.Ref.includes(\"Back\") &&\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterB === 0\r\n )\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterB = 1;\r\n if (\r\n data_mods.Ref.includes(\"Left\") &&\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterL === 0\r\n )\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterL = 1;\r\n if (\r\n data_mods.Ref.includes(\"Right\") &&\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterR === 0\r\n )\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterR = 1;\r\n if (\r\n data_mods.Ref.includes(\"Front\") &&\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterF === 0\r\n )\r\n this_area_data.GUTTERS_AND_DOWNPIPES.GutterF = 1;\r\n }\r\n data_mods.gutter = 1;\r\n } else if (schema.has_gutter === false) {\r\n if (is_active_atttachment) {\r\n if (data_mods.Ref.includes(\"Back\")) this_area_data.GUTTERS_AND_DOWNPIPES.GutterB = 0;\r\n if (data_mods.Ref.includes(\"Left\")) this_area_data.GUTTERS_AND_DOWNPIPES.GutterL = 0;\r\n if (data_mods.Ref.includes(\"Right\")) this_area_data.GUTTERS_AND_DOWNPIPES.GutterR = 0;\r\n if (data_mods.Ref.includes(\"Front\")) this_area_data.GUTTERS_AND_DOWNPIPES.GutterF = 0;\r\n }\r\n data_mods.gutter = 0;\r\n } else {\r\n data_mods.gutter = 0;\r\n }\r\n\r\n if (schema.has_beam && data_mods.AttachmentType.includes(\"Offset\") && is_active_atttachment) {\r\n if (data_mods.Ref.includes(\"Left\")) this_area_data.BEAMS_AND_POSTS.OmitLeftBeam = 0;\r\n if (data_mods.Ref.includes(\"Right\")) this_area_data.BEAMS_AND_POSTS.OmitRightBeam = 0;\r\n }\r\n\r\n if (schema.bracket_type_code) {\r\n let bracket = schema.bracket_type_code?.default;\r\n // let this_fascia_beam = this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1;\r\n if (schema.bracket_type_code?.[attachment_beam])\r\n bracket = schema.bracket_type_code?.[attachment_beam];\r\n\r\n if (region === \"C\" || region === \"D\") {\r\n if (schema.bracket_type_code?.cyclonic) bracket = schema.bracket_type_code?.cyclonic;\r\n if (schema.bracket_type_code?.[attachment_beam + \"_cyclonic\"])\r\n bracket = schema.bracket_type_code?.[attachment_beam + \"_cyclonic\"];\r\n }\r\n\r\n if (bracket) {\r\n data_mods.BracketType = schema.bracket_type_desc ? schema.bracket_type_desc : \"\";\r\n data_mods.BracketTypeCode = bracket;\r\n data_mods.BracketSpacing =\r\n job?.SiteParameters?.ExistingStructure?.RoofType === \"Tile\"\r\n ? schema.bracket_spacing_tile\r\n : schema.bracket_spacing_sheet;\r\n if (data_mods.BracketSpacing === \"FlyoverBracketSpacing\")\r\n data_mods.BracketSpacing = job.SiteParameters.FlyoverBracketSpacing;\r\n data_mods.HasBracketType = 1;\r\n data_mods.HasBracketSpacing = 1;\r\n } else {\r\n data_mods.HasBracketType = 0;\r\n data_mods.HasBracketSpacing = 0;\r\n data_mods.BracketTypeCode = \"\";\r\n }\r\n } else {\r\n data_mods.HasBracketSpacing = 0;\r\n data_mods.BracketTypeCode = \"\";\r\n }\r\n\r\n data_mods.BracketType = schema.bracket_type_desc ? schema.bracket_type_desc : \"\";\r\n data_mods.HasBracketType = data_mods.BracketType ? 1 : 0;\r\n\r\n let rafter_bracket_code = rafter_bracket_codes?.default;\r\n if (rafter_bracket_codes[attachment_beam])\r\n rafter_bracket_code = rafter_bracket_codes[attachment_beam];\r\n data_mods.RafterBracketTypeCode = rafter_bracket_code;\r\n\r\n let wall_bracket_code = wall_bracket_codes?.default;\r\n if (wall_bracket_codes[attachment_beam])\r\n wall_bracket_code = wall_bracket_codes[attachment_beam];\r\n data_mods.WallBracketTypeCode = wall_bracket_code;\r\n data_mods.AttachmentBeamType = attachment_beam;\r\n data_mods.WallType = schema?.wall_type ? schema?.wall_type : \"Brick\";\r\n\r\n if (schema?.old_key && !schema?.old_key.includes(\"Beam\")) {\r\n data_mods.RafterBracketTypeCode = data_mods.BracketTypeCode;\r\n data_mods.WallBracketTypeCode = data_mods.BracketTypeCode;\r\n }\r\n\r\n if (schema.wall_thickness)\r\n data_mods.CladdingWidth =\r\n job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].CladdingWidth;\r\n }\r\n\r\n if (\r\n data_mods?.FasciaType === \"Wall\" &&\r\n this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.wall_fixing_spacing\r\n ) {\r\n data_mods.BracketType = data_mods.BracketType.replaceAll(\r\n \"600 cts\",\r\n this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData?.wall_fixing_spacing +\r\n \"cts\"\r\n );\r\n }\r\n\r\n // let is_side = data_mods.Ref.includes(\"Right\") || data_mods.Ref.includes(\"Left\");\r\n if (data_mods.WallOnly) {\r\n // if (!schema?.depth_offset_editable && schema?.depth_offset_default !== undefined) {\r\n // data_mods.EaveWidth = schema.depth_offset_default;\r\n // data_mods.HasEaveWidth = 1;\r\n // } else {\r\n data_mods.EaveWidth = 0;\r\n data_mods.HasEaveWidth = 1;\r\n // }\r\n } else {\r\n data_mods.EaveWidth = toNumber(data_mods.EaveWidth);\r\n data_mods.HasEaveWidth = 1;\r\n }\r\n if (data_mods.vOffset !== undefined) {\r\n let area_height = this_area_data.SHAPE.Height;\r\n let roof_sheet_data = this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RoofSheetData;\r\n let roof_sheet_height = roof_sheet_data.sheet_height;\r\n let eaveWidth = data_mods.HasEaveWidth\r\n ? data_mods.EaveWidth\r\n : job.SiteParameters.ExistingStructure.EaveDepth;\r\n\r\n let beam_height = GetBeamHeight(attachment_beam);\r\n\r\n let roof_alignment = getRoofAlignmentFromRef(data_mods.Ref, this_area_data);\r\n\r\n let offsets = getOffsets(\r\n schema,\r\n beam_height,\r\n roof_sheet_height,\r\n eaveWidth,\r\n roof_alignment,\r\n data_mods.vOffset,\r\n data_mods.hOffset\r\n );\r\n offsets = adjustOffsetForSide(data_mods.Ref, offsets, roof_alignment, this_area_data);\r\n\r\n let wall_height = area_height;\r\n\r\n if (\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n ) {\r\n wall_height = area_height + 100 - offsets.v;\r\n } else {\r\n let up_fascia = job.SiteParameters?.ExistingStructure?.FasciaHeight\r\n ? job.SiteParameters?.ExistingStructure?.FasciaHeight - 110\r\n : 75;\r\n // wall_height = area_height - up_fascia - roof_sheet_height - offsets.v;\r\n\r\n wall_height = area_height - offsets.v - up_fascia - roof_sheet_height;\r\n\r\n if (data_mods.WallOnly) {\r\n wall_height = area_height - offsets.v - roof_sheet_height;\r\n }\r\n }\r\n\r\n // wall_height = area_height;\r\n data_mods.WallHeight = isNaN(wall_height) ? \"\" : Number(wall_height);\r\n // data_mods.WallHeight = 500;\r\n data_mods.HasWallHeight = isNaN(wall_height) ? 0 : 1;\r\n\r\n if (is_active_atttachment) {\r\n if (data_mods.FasciaType.includes(\"Flyover\")) {\r\n // if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_FasciaType = \"Flyover\";\r\n // }\r\n\r\n if (\r\n wall_height <\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight =\r\n wall_height;\r\n // if (this_area_data.areaIndex === 0)\r\n // job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].WallHeight =\r\n // this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight;\r\n }\r\n } else {\r\n if (\r\n wall_height <\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.EXISTING_STRUCTURE].SITE_WallHeight =\r\n wall_height;\r\n }\r\n }\r\n }\r\n if (data_mods.FasciaType.includes(\"Not Attached\")) {\r\n data_mods.AttachmentHOffset = data_mods.hOffset;\r\n } else {\r\n data_mods.AttachmentHOffset = 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return attachment_data;\r\n};\r\n\r\nexport const ReplaceObsoleteReferences = (value_to_validate) => {\r\n if (value_to_validate === \"656508\") return \"656510\";\r\n if (value_to_validate === \"F10015\") return \"FL10015\";\r\n if (value_to_validate === \"F15015\") return \"FL15015\";\r\n if (value_to_validate === \"F20015\") return \"FL20015\";\r\n return value_to_validate;\r\n};\r\n\r\nexport const validateRHSPostFooting = (config, job, areaIndex) => {\r\n const jobColumns = job?.QuoteParameters?.ENGINEERING?.EngineeringResults?.ProcessedLoadData?.Cols;\r\n const jobAreaData = job?.AreaSpecifications[areaIndex];\r\n const configPostTypes = config?.post_types;\r\n const defaultFooting = jobAreaData[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.FootingType;\r\n\r\n // Get all RHS posts available for selection from the config object\r\n let configRHSPosts = [];\r\n for (const post in configPostTypes) {\r\n if (configPostTypes.hasOwnProperty(post)) {\r\n const element = configPostTypes[post];\r\n if (element[\"Product Code\"] && element[\"Product Code\"].includes(\"RHS\")) {\r\n configRHSPosts.push(post);\r\n }\r\n }\r\n }\r\n\r\n // Search engineering for RHS columns with anything other than a 'concrete in slab' footing. These are invalid\r\n let invalidFootings = [];\r\n if (jobColumns != null) {\r\n for (const [key, value] of Object.entries(jobColumns)) {\r\n if (configRHSPosts.includes(value.ColumnType) && value.GroundConnection !== \"Concrete In\") {\r\n invalidFootings.push({\r\n ...value,\r\n isDefault: value.GroundConnection === defaultFooting,\r\n });\r\n }\r\n }\r\n }\r\n\r\n return invalidFootings;\r\n};\r\n\r\nexport const validateRHSBeamLength = (config, job, areaIndex, newBeamSelection = null) => {\r\n const jobAreaData = job?.AreaSpecifications[areaIndex];\r\n const designType = jobAreaData?.SHAPE?.DesignType;\r\n const hasRidgeBeam = jobAreaData?.BEAMS_AND_POSTS?.HasRidgeBeam === 1;\r\n const jobBeams = job?.QuoteParameters?.ENGINEERING?.EngineeringResults?.ProcessedLoadData?.Beams;\r\n const areaConfig = config?.design_options[designType];\r\n\r\n const maxLengthRHS = 8000;\r\n const rhs = \"Box with RHS Insert\";\r\n\r\n const configRHSBeamType1 = areaConfig?.beam_1?.options[rhs];\r\n const configRHSBeamType2 = hasRidgeBeam ? areaConfig?.beam_2_inset?.options[rhs] : areaConfig?.beam_2?.options[rhs];\r\n const configRHSBeamType3 = areaConfig?.beam_3?.options[rhs];\r\n const configRHSBeamType4 = areaConfig?.beam_4?.options[rhs];\r\n\r\n let resultSet = new Set();\r\n\r\n if (!jobBeams) return resultSet;\r\n\r\n // Search engineering results for beams over the RHS limit\r\n const longBeams = Object.values(jobBeams).reduce((acc, { Name, BeamType, Length }) => {\r\n if (Length > maxLengthRHS) {\r\n const cleanedName = Name.replace(/[0-9]/g, \"\");\r\n const entry = { Name: cleanedName, BeamType, BeamTypeID: 0 };\r\n acc.push(entry);\r\n }\r\n return acc;\r\n }, []);\r\n\r\n for (let i = longBeams.length - 1; i >= 0; i--) {\r\n // Determine the beam type ID (1, 2, 3 or 4)\r\n switch (designType) {\r\n case CONFIG.DESIGN_TYPES.FLAT:\r\n if (longBeams[i].Name === \"FB\") {\r\n longBeams[i].BeamTypeID = 1;\r\n } else if (longBeams[i].Name === \"P\") {\r\n longBeams[i].BeamTypeID = 2;\r\n } else if (longBeams[i].Name === \"R\") {\r\n longBeams[i].BeamTypeID = 3;\r\n }\r\n break;\r\n case CONFIG.DESIGN_TYPES.PITCHED:\r\n if (longBeams[i].Name === \"PR\" || longBeams[i].Name === \"FP\") {\r\n longBeams[i].BeamTypeID = 1;\r\n } else if (longBeams[i].Name === \"P\") {\r\n longBeams[i].BeamTypeID = 2;\r\n } else if (longBeams[i].Name === \"CB\" || longBeams[i].Name === \"FB\") {\r\n longBeams[i].BeamTypeID = 3;\r\n } else if (longBeams[i].Name === \"PB\") {\r\n longBeams[i].BeamTypeID = 4;\r\n }\r\n break;\r\n case CONFIG.DESIGN_TYPES.GABLE_PORTAL:\r\n if (longBeams[i].Name === \"PR\" || longBeams[i].Name === \"HB\" || longBeams[i].Name === \"PO\") {\r\n longBeams[i].BeamTypeID = 1;\r\n } else if (longBeams[i].Name === \"P\" || longBeams[i].Name === \"DG\" || longBeams[i].Name === \"JR\") {\r\n longBeams[i].BeamTypeID = 2;\r\n } else if (longBeams[i].Name === \"EB\") {\r\n longBeams[i].BeamTypeID = 3;\r\n } else if (longBeams[i].Name === \"HR\") {\r\n longBeams[i].BeamTypeID = 4;\r\n }\r\n break;\r\n }\r\n\r\n const beam = newBeamSelection ? newBeamSelection : longBeams[i].BeamType;\r\n\r\n // Add to set if long beam is also RHS\r\n if (longBeams[i].BeamTypeID != 0) {\r\n if (longBeams[i].BeamTypeID === 1 && configRHSBeamType1?.includes(beam)) {\r\n resultSet.add(\"BeamType1\");\r\n } else if (longBeams[i].BeamTypeID === 2 && configRHSBeamType2?.includes(beam)) {\r\n resultSet.add(\"BeamType2\");\r\n } else if (longBeams[i].BeamTypeID === 3 && configRHSBeamType3?.includes(beam)) {\r\n resultSet.add(\"BeamType3\");\r\n } else if (longBeams[i].BeamTypeID === 4 && configRHSBeamType4?.includes(beam)) {\r\n resultSet.add(\"BeamType4\");\r\n }\r\n }\r\n }\r\n\r\n return resultSet;\r\n};\r\n\r\nexport const validateBeamPostData = (config, job, areaIndex, in_adjusted_length = null) => {\r\n let last_area_data = job?.AreaSpecifications?.[areaIndex - 1];\r\n let this_area_data = job?.AreaSpecifications?.[areaIndex];\r\n let next_area_data = job?.AreaSpecifications?.[areaIndex + 1];\r\n\r\n let area1_post_colour = job.AreaSpecifications[0][BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostCol;\r\n let beam_and_post_data = { ...this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS] };\r\n\r\n const post_types = config.post_types;\r\n const BeamPostParameters = this_area_data?.[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS];\r\n const designTemplate = this_area_data?.SHAPE?.DesignTemplateType; // e.g. National Carport\r\n\r\n // Obsolete Name REferences\r\n beam_and_post_data.BeamType1 = ReplaceObsoleteReferences(beam_and_post_data.BeamType1);\r\n beam_and_post_data.BeamType2 = ReplaceObsoleteReferences(beam_and_post_data.BeamType2);\r\n beam_and_post_data.BeamType3 = ReplaceObsoleteReferences(beam_and_post_data.BeamType3);\r\n beam_and_post_data.BeamType4 = ReplaceObsoleteReferences(beam_and_post_data.BeamType4);\r\n beam_and_post_data.PostType = ReplaceObsoleteReferences(beam_and_post_data.PostType);\r\n\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n const length = job?.QuoteParameters?.AREA_DATA?.[areaIndex]?.ActualStructureLength;\r\n if (length && length > 1000) beam_and_post_data.AdjustedLength = length;\r\n }\r\n\r\n if (\r\n (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) &&\r\n job.DesignParameters.Freestanding\r\n ) {\r\n if (\r\n !this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostType.includes(\"P/C\") &&\r\n !this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostType.includes(\"SHS\")\r\n ) {\r\n beam_and_post_data.PostType = \"65mm x 65mm x 3mm P/C\";\r\n }\r\n beam_and_post_data.FootingType = \"Concrete In\";\r\n }\r\n\r\n in_adjusted_length = in_adjusted_length ? in_adjusted_length : AdjustedLengthForMultipleAreas(job, areaIndex);\r\n\r\n let colourMatch = {\r\n \"Match Area 1 Post\": area1_post_colour,\r\n };\r\n\r\n if (!beam_and_post_data.PostColMatchBeam) beam_and_post_data.PostColMatchBeam = beam_and_post_data.PostCol;\r\n beam_and_post_data.PostCol = beam_and_post_data.PostColMatchBeam;\r\n if (beam_and_post_data.PostColMatchBeam in colourMatch) {\r\n beam_and_post_data.PostCol = colourMatch[beam_and_post_data.PostColMatchBeam];\r\n }\r\n\r\n beam_and_post_data.HipJackRafter1 = beam_and_post_data?.JackRafters ? 1 : 0;\r\n beam_and_post_data.HipJackRafter2 = beam_and_post_data?.JackRafters ? 1 : 0;\r\n\r\n if (beam_and_post_data.PostCol === \"TBA\") beam_and_post_data.PostColourSelectionMade = false;\r\n else beam_and_post_data.PostColourSelectionMade = true;\r\n\r\n // Check if colour is applicable to design before adding , else change colour back to TBA\r\n const beam = config?.design_options?.[designTemplate || this_area_data.SHAPE.DesignType]?.beam_1;\r\n let colours = GetColourArray(\r\n areaIndex > 0 ? [\"Match Area 1 Post\", beam?.colours] : [beam?.colours],\r\n config.colour_arrays\r\n );\r\n\r\n // If post colour is in beam 1 colour list then colour match , else set to TBA\r\n if (colours.includes(beam_and_post_data.PostCol)) colourMatch[\"Match Post\"] = beam_and_post_data.PostCol;\r\n else colourMatch[\"Match Post\"] = \"TBA\";\r\n\r\n if (!beam_and_post_data.BeamColMatchBeam) beam_and_post_data.BeamColMatchBeam = beam_and_post_data.BeamCol1;\r\n beam_and_post_data.BeamCol1 = beam_and_post_data.BeamColMatchBeam;\r\n if (beam_and_post_data.BeamColMatchBeam in colourMatch) {\r\n beam_and_post_data.BeamCol1 = colourMatch[beam_and_post_data.BeamColMatchBeam];\r\n }\r\n\r\n if (!beam_and_post_data.BeamCol2MatchBeam) beam_and_post_data.BeamCol2MatchBeam = beam_and_post_data.BeamCol2;\r\n beam_and_post_data.BeamCol2 = beam_and_post_data.BeamCol2MatchBeam;\r\n if (beam_and_post_data.BeamCol2MatchBeam in colourMatch) {\r\n beam_and_post_data.BeamCol2 = colourMatch[beam_and_post_data.BeamCol2MatchBeam];\r\n }\r\n\r\n if (!beam_and_post_data.BeamCol3MatchBeam) beam_and_post_data.BeamCol3MatchBeam = beam_and_post_data.BeamCol3;\r\n beam_and_post_data.BeamCol3 = beam_and_post_data.BeamCol3MatchBeam;\r\n if (beam_and_post_data.BeamCol3MatchBeam in colourMatch) {\r\n beam_and_post_data.BeamCol3 = colourMatch[beam_and_post_data.BeamCol3MatchBeam];\r\n }\r\n\r\n if (!beam_and_post_data.BeamCol4MatchBeam) beam_and_post_data.BeamCol4MatchBeam = beam_and_post_data.BeamCol4;\r\n beam_and_post_data.BeamCol4 = beam_and_post_data.BeamCol4MatchBeam;\r\n if (beam_and_post_data.BeamCol4MatchBeam in colourMatch) {\r\n beam_and_post_data.BeamCol4 = colourMatch[beam_and_post_data.BeamCol4MatchBeam];\r\n }\r\n\r\n if (!beam_and_post_data.PostColMatchBeam) beam_and_post_data.PostColMatchBeam = beam_and_post_data.PostCol;\r\n beam_and_post_data.PostCol = beam_and_post_data.PostColMatchBeam;\r\n if (beam_and_post_data.PostColMatchBeam in colourMatch) {\r\n beam_and_post_data.PostCol = colourMatch[beam_and_post_data.PostColMatchBeam];\r\n }\r\n\r\n if (window.LYSAGHT) {\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n beam_and_post_data.PortalPostType = 1;\r\n } else {\r\n beam_and_post_data.PortalPostType = 0;\r\n }\r\n }\r\n\r\n if (\r\n this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL &&\r\n beam_and_post_data.PortalPostType === 0\r\n ) {\r\n beam_and_post_data.BeamType1 = beam_and_post_data.PostType;\r\n if (beam_and_post_data.BeamType1.startsWith(\"100mm\")) beam_and_post_data.BeamType1 = \"1086510\";\r\n if (beam_and_post_data.BeamType1.startsWith(\"150mm\")) beam_and_post_data.BeamType1 = \"1586510\";\r\n }\r\n\r\n let area_config = config?.design_options?.[designTemplate || this_area_data.SHAPE.DesignType];\r\n let area_freestanding = this_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].Freestanding;\r\n\r\n if (area_config) {\r\n let options = area_config?.post?.options;\r\n if (area_freestanding && area_config?.post?.freestanding_options)\r\n options = area_config?.post?.freestanding_options;\r\n\r\n let post_valid = false;\r\n let replaced_RHS = beam_and_post_data.PostType.replace(\" x 2mm\", \" x 3mm\").replace(\" x 2.5mm\", \" x 3mm\");\r\n if (options)\r\n for (const group in options) {\r\n if (options[group].includes(beam_and_post_data.PostType)) post_valid = true;\r\n else if (options[group].includes(replaced_RHS)) {\r\n beam_and_post_data.PostType = replaced_RHS;\r\n post_valid = true;\r\n }\r\n if (post_valid) break;\r\n }\r\n\r\n if (!post_valid && area_config?.post) {\r\n if (area_freestanding && area_config?.post?.section_freestanding_default)\r\n beam_and_post_data.PostType = area_config.post.section_freestanding_default;\r\n else beam_and_post_data.PostType = area_config.post.section_default;\r\n }\r\n\r\n if (post_types?.[beam_and_post_data.PostType]) {\r\n let post_type = post_types?.[beam_and_post_data.PostType];\r\n\r\n const design_post_options =\r\n config?.design_options?.[designTemplate || this_area_data.SHAPE.DesignType]?.post;\r\n let post_colours = GetColourArray(\r\n post_type?.colours ? post_type?.colours : design_post_options.colours,\r\n config.colour_arrays\r\n );\r\n\r\n if (post_colours.length === 1) {\r\n beam_and_post_data.PostColMatchBeam = post_colours[0];\r\n beam_and_post_data.PostCol = post_colours[0];\r\n } else if (\r\n beam_and_post_data.PostColMatchBeam != \"TBA\" &&\r\n !post_colours.includes(beam_and_post_data.PostColMatchBeam)\r\n ) {\r\n beam_and_post_data.PostColMatchBeam = \"TBA\";\r\n beam_and_post_data.PostCol = \"TBA\";\r\n }\r\n if (beam_and_post_data.PostCol === \"TBA\") beam_and_post_data.PostColourSelectionMade = false;\r\n else beam_and_post_data.PostColourSelectionMade = true;\r\n\r\n if (window.LYSAGHT && post_type?.allow_flanged !== undefined && post_type?.allow_flanged === false) {\r\n beam_and_post_data.PostExternalConnectors = 0;\r\n\r\n if (this_area_data?.Footings) {\r\n this_area_data.Footings = this_area_data.Footings.filter(function (a) {\r\n return a?.Connector !== 2;\r\n });\r\n }\r\n }\r\n }\r\n\r\n let beam1_valid = false;\r\n if (beam_and_post_data?.BeamType1 && area_config?.beam_1?.options)\r\n for (const group in area_config?.beam_1?.options) {\r\n if (area_config.beam_1.options?.[group]) {\r\n if (area_config.beam_1.options[group].includes(beam_and_post_data.BeamType1)) beam1_valid = true;\r\n else if (\r\n area_config.beam_1.options[group].includes(\r\n beam_and_post_data.BeamType1.replace(\" x 2mm\", \" x 3mm\").replace(\" x 2.5mm\", \" x 3mm\")\r\n )\r\n ) {\r\n beam_and_post_data.BeamType1 = beam_and_post_data.BeamType1.replace(\" x 2mm\", \" x 3mm\").replace(\r\n \" x 2.5mm\",\r\n \" x 3mm\"\r\n );\r\n beam1_valid = true;\r\n }\r\n }\r\n if (beam1_valid) break;\r\n }\r\n if (!beam1_valid && area_config?.beam_1) beam_and_post_data.BeamType1 = area_config.beam_1.section_default;\r\n\r\n let beam2 = area_config?.beam_2;\r\n if (\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL ||\r\n this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n ) {\r\n if (this_area_data.BEAMS_AND_POSTS.HasRidgeBeam === 1 && area_config?.beam_2_inset)\r\n beam2 = area_config.beam_2_inset;\r\n }\r\n\r\n let beam2_valid = false;\r\n if (beam_and_post_data?.BeamType2 && beam2?.options)\r\n for (const group in beam2.options) {\r\n if (beam2.options?.[group]) {\r\n if (beam2.options[group].includes(beam_and_post_data.BeamType2)) beam2_valid = true;\r\n else if (\r\n beam2.options[group].includes(\r\n beam_and_post_data.BeamType2.replace(\" x 2mm\", \" x 3mm\").replace(\" x 2.5mm\", \" x 3mm\")\r\n )\r\n ) {\r\n beam_and_post_data.BeamType2 = beam_and_post_data.BeamType2.replace(\" x 2mm\", \" x 3mm\").replace(\r\n \" x 2.5mm\",\r\n \" x 3mm\"\r\n );\r\n beam2_valid = true;\r\n }\r\n }\r\n if (beam2_valid) break;\r\n }\r\n if (!beam2_valid && beam2) beam_and_post_data.BeamType2 = beam2.section_default;\r\n\r\n let beam3_valid = false;\r\n if (beam_and_post_data?.BeamType3 && area_config?.beam_3?.options)\r\n for (const group in area_config?.beam_3?.options) {\r\n if (area_config.beam_3.options?.[group]) {\r\n if (area_config.beam_3.options[group].includes(beam_and_post_data.BeamType3)) beam3_valid = true;\r\n else if (\r\n area_config.beam_3.options[group].includes(\r\n beam_and_post_data.BeamType3.replace(\" x 2mm\", \" x 3mm\").replace(\" x 2.5mm\", \" x 3mm\")\r\n )\r\n ) {\r\n beam_and_post_data.BeamType3 = beam_and_post_data.BeamType3.replace(\" x 2mm\", \" x 3mm\").replace(\r\n \" x 2.5mm\",\r\n \" x 3mm\"\r\n );\r\n beam3_valid = true;\r\n }\r\n }\r\n if (beam3_valid) break;\r\n }\r\n if (!beam3_valid && area_config?.beam_3) beam_and_post_data.BeamType3 = area_config.beam_3.section_default;\r\n\r\n let beam4_valid = false;\r\n if (beam_and_post_data?.BeamType4 && area_config?.beam_4?.options)\r\n for (const group in area_config?.beam_4?.options) {\r\n if (area_config.beam_4.options?.[group]) {\r\n if (area_config.beam_4.options[group].includes(beam_and_post_data.BeamType4)) beam4_valid = true;\r\n else if (\r\n area_config.beam_4.options[group].includes(\r\n beam_and_post_data.BeamType4.replace(\" x 2mm\", \" x 3mm\").replace(\" x 2.5mm\", \" x 3mm\")\r\n )\r\n ) {\r\n beam_and_post_data.BeamType4 = beam_and_post_data.BeamType4.replace(\" x 2mm\", \" x 3mm\").replace(\r\n \" x 2.5mm\",\r\n \" x 3mm\"\r\n );\r\n beam4_valid = true;\r\n }\r\n }\r\n if (beam4_valid) break;\r\n }\r\n if (!beam4_valid && area_config?.beam_4) beam_and_post_data.BeamType4 = area_config.beam_4.section_default;\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n beam_and_post_data.MultipleAreaBeamType = beam_and_post_data.BeamType3;\r\n } else {\r\n beam_and_post_data.MultipleAreaBeamType = beam_and_post_data.BeamType1;\r\n if (this_area_data.SHAPE.AREAJOIN.JoinType === \"L1\")\r\n beam_and_post_data.MultipleAreaBeamType = beam_and_post_data.BeamType3;\r\n if (this_area_data.SHAPE.AREAJOIN.JoinType === \"Angle\")\r\n beam_and_post_data.MultipleAreaBeamType = beam_and_post_data.BeamType3;\r\n }\r\n }\r\n\r\n //min beam spacings\r\n if (beam_and_post_data?.AdjustedLength || in_adjusted_length) {\r\n if (in_adjusted_length) beam_and_post_data.AdjustedLength = in_adjusted_length;\r\n\r\n let min_int_rafters = 0;\r\n\r\n let max_length = 8000;\r\n if (beam_and_post_data.BeamType2 === \"656510\") {\r\n max_length = 5500;\r\n } else if (beam_and_post_data.BeamType2 === \"1086510\") {\r\n max_length = 7000;\r\n }\r\n if (window.LYSAGHT) {\r\n // max_length = job.DesignParameters.SplicingLength;\r\n max_length = 99999;\r\n }\r\n\r\n if (this_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) {\r\n // if (window.LYSAGHT) {\r\n // max_length = job.DesignParameters.SplicingLength;\r\n // }\r\n\r\n if (this_area_data[BASIC_SPECS_SECTIONS.SHAPE].DesignSubType === \"Type 3\") {\r\n min_int_rafters = Math.trunc((this_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth - 1) / max_length);\r\n } else {\r\n min_int_rafters = Math.trunc((beam_and_post_data.AdjustedLength - 1) / max_length);\r\n }\r\n }\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.PITCHED) {\r\n min_int_rafters = Math.trunc((this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.Depth - 1) / max_length);\r\n\r\n if (\r\n beam_and_post_data.NumExtraPortals &&\r\n beam_and_post_data.NumExtraPortals === beam_and_post_data.MinInternalRafters\r\n )\r\n beam_and_post_data.NumExtraPortals = min_int_rafters;\r\n if (beam_and_post_data.NumExtraPortals < min_int_rafters)\r\n beam_and_post_data.NumExtraPortals = min_int_rafters;\r\n\r\n beam_and_post_data.MinInternalRafters = min_int_rafters;\r\n } else if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n let base_min = 2;\r\n let adjusted_length = beam_and_post_data.AdjustedLength;\r\n\r\n if (this_area_data.ActualStructureLength && adjusted_length < this_area_data.ActualStructureLength)\r\n adjusted_length = this_area_data.ActualStructureLength;\r\n\r\n if (last_area_data) {\r\n //has a last area\r\n if (last_area_data.SHAPE.AREAJOIN.JoinType === \"Hip\") base_min += 2;\r\n\r\n if (last_area_data.SHAPE.AREAJOIN.JoinType === \"Gable\") {\r\n base_min++;\r\n adjusted_length -= last_area_data?.[BASIC_SPECS_SECTIONS.SHAPE].Depth;\r\n }\r\n } else if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.RoofType1 !== \"Gable\") {\r\n base_min++;\r\n if (\r\n this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.RoofType1 === \"Hip\" &&\r\n this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.HipAngle1 === 60\r\n )\r\n adjusted_length -= this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE].Depth / 4;\r\n else adjusted_length -= this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE].Depth / 2;\r\n }\r\n if (next_area_data) {\r\n //has a next area\r\n if (this_area_data.SHAPE.AREAJOIN.JoinType === \"Hip\") base_min += 2;\r\n\r\n if (this_area_data.SHAPE.AREAJOIN.JoinType === \"Gable\") {\r\n base_min++;\r\n adjusted_length -= next_area_data?.[BASIC_SPECS_SECTIONS.SHAPE].Depth;\r\n }\r\n } else if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.RoofType2 !== \"Gable\") {\r\n base_min++;\r\n if (\r\n this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.RoofType2 === \"Hip\" &&\r\n this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.HipAngle2 === 60\r\n )\r\n adjusted_length -= this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE].Depth / 4;\r\n else adjusted_length -= this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE].Depth / 2;\r\n }\r\n\r\n min_int_rafters = base_min + Math.trunc((adjusted_length - 1) / max_length);\r\n\r\n if (\r\n beam_and_post_data.MinInternalRafters &&\r\n beam_and_post_data.NumPortals === beam_and_post_data.MinInternalRafters\r\n )\r\n beam_and_post_data.NumPortals = min_int_rafters;\r\n if (beam_and_post_data.NumPortals < min_int_rafters) beam_and_post_data.NumPortals = min_int_rafters;\r\n\r\n beam_and_post_data.NumInternalPortals = 0;\r\n beam_and_post_data.MinInternalRafters = min_int_rafters;\r\n beam_and_post_data.NumExtraPortals = 0;\r\n } else {\r\n if (\r\n beam_and_post_data.MinInternalRafters &&\r\n beam_and_post_data.NumInternalRafters === beam_and_post_data.MinInternalRafters\r\n )\r\n beam_and_post_data.NumInternalRafters = min_int_rafters;\r\n if (beam_and_post_data.NumInternalRafters < min_int_rafters)\r\n beam_and_post_data.NumInternalRafters = min_int_rafters;\r\n\r\n beam_and_post_data.MinInternalRafters = min_int_rafters;\r\n }\r\n\r\n if (beam_and_post_data.NumInternalRafter < beam_and_post_data.MinInternalRafters) {\r\n beam_and_post_data.NumInternalRafter = beam_and_post_data.MinInternalRafters;\r\n }\r\n }\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n beam_and_post_data.NumExtraPortals = 0;\r\n\r\n if (beam_and_post_data.BeamType1.includes(\"FL10011\")) {\r\n if (beam_and_post_data.BeamType2.includes(\"FL20020\") || beam_and_post_data.BeamType2.includes(\"FL15015\")) {\r\n beam_and_post_data.BeamType2 = \"FL10011\";\r\n }\r\n } else if (beam_and_post_data.BeamType1.includes(\"FL15015\")) {\r\n if (beam_and_post_data.BeamType2.includes(\"FL20020\")) {\r\n beam_and_post_data.BeamType2 = \"FL15015\";\r\n }\r\n }\r\n }\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.DECK) {\r\n let maxPostSpacing = 4000;\r\n if (maxPostSpacing && beam_and_post_data.PostSpacing > maxPostSpacing)\r\n beam_and_post_data.PostSpacing = maxPostSpacing;\r\n\r\n let maxBeamSpacing = 5000;\r\n if (maxBeamSpacing && beam_and_post_data.BeamSpacing > maxBeamSpacing)\r\n beam_and_post_data.BeamSpacing = maxBeamSpacing;\r\n\r\n if (window.FIELDERS) {\r\n beam_and_post_data.PostCol = \"Galvanised\";\r\n beam_and_post_data.BeamCol1 = \"Galvanised\";\r\n beam_and_post_data.BeamCol2 = \"Galvanised\";\r\n }\r\n beam_and_post_data.PostColMatchBeam = beam_and_post_data.PostCol;\r\n } else {\r\n if (window.LYSAGHT) {\r\n beam_and_post_data.BeamSpacing = job.DesignParameters.SplicingLength;\r\n beam_and_post_data.PostSpacing = 30000;\r\n }\r\n }\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.ROOF_SHEETING]?.RoofSheetData.single_span_only) {\r\n beam_and_post_data.NumInternalRafters = 0;\r\n } else {\r\n }\r\n\r\n // LYSAGHT SPECIFIC VALIDATIONS\r\n if (job?.Distributor?.Brand === \"Lysaght\") {\r\n if (beam_and_post_data?.CornerPostsFullHeight === 0) beam_and_post_data.CornerPostsFullHeight = 1;\r\n if (beam_and_post_data?.IntermediatePostsFullHeight === 0) beam_and_post_data.IntermediatePostsFullHeight = 1;\r\n\r\n // check is notch is valid for post\r\n if (post_types) {\r\n if (\r\n post_types?.[BeamPostParameters.PostType]?.allow_notched === false &&\r\n post_types?.[BeamPostParameters.PostType]?.allow_side === false\r\n ) {\r\n beam_and_post_data.CornerPostsFullHeight = 3;\r\n beam_and_post_data.IntermediatePostsFullHeight = 3;\r\n } else if (\r\n post_types?.[BeamPostParameters.PostType]?.allow_notched === false &&\r\n post_types?.[BeamPostParameters.PostType]?.allow_behind === false\r\n ) {\r\n beam_and_post_data.CornerPostsFullHeight = 1;\r\n beam_and_post_data.IntermediatePostsFullHeight = 1;\r\n } else if (\r\n post_types?.[BeamPostParameters.PostType]?.allow_side === false &&\r\n post_types?.[BeamPostParameters.PostType]?.allow_behind === false\r\n ) {\r\n beam_and_post_data.CornerPostsFullHeight = 2;\r\n beam_and_post_data.IntermediatePostsFullHeight = 2;\r\n } else if (post_types?.[BeamPostParameters.PostType]?.allow_notched === false) {\r\n if (beam_and_post_data.CornerPostsFullHeight === 2) beam_and_post_data.CornerPostsFullHeight = 3;\r\n if (beam_and_post_data.IntermediatePostsFullHeight === 2)\r\n beam_and_post_data.IntermediatePostsFullHeight = 3;\r\n } else if (post_types?.[BeamPostParameters.PostType]?.allow_side === false) {\r\n if (beam_and_post_data.CornerPostsFullHeight === 1) beam_and_post_data.CornerPostsFullHeight = 3;\r\n if (beam_and_post_data.CornerPostsFullHeight === 1) beam_and_post_data.IntermediatePostsFullHeight = 3;\r\n } else if (post_types?.[BeamPostParameters.PostType]?.allow_behind === false) {\r\n if (beam_and_post_data.CornerPostsFullHeight === 3) beam_and_post_data.CornerPostsFullHeight = 1;\r\n if (beam_and_post_data.CornerPostsFullHeight === 3) beam_and_post_data.IntermediatePostsFullHeight = 1;\r\n }\r\n }\r\n\r\n beam_and_post_data.AutoAddBeamBreakPost = job.DesignParameters.AutoAddBeamBreakPost;\r\n beam_and_post_data.HasRidgeBeam = 1;\r\n beam_and_post_data.IntRafterBracketClearance = 0;\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) {\r\n // beam_and_post_data.InfillEndAlign1 = 2;\r\n // beam_and_post_data.InfillEndAlign2 = 2;\r\n delete beam_and_post_data.InfillEndAlign1;\r\n delete beam_and_post_data.InfillEndAlign2;\r\n\r\n if (beam_and_post_data.CollarTieBeam && beam_and_post_data.CollarTieBeam.includes(\"FL15015\")) {\r\n beam_and_post_data.CollarTieBracket = \"CTC15\";\r\n } else {\r\n beam_and_post_data.RidgePurlinsNoBrackets = 1;\r\n beam_and_post_data.CollarTieBracket = \"CTC10\";\r\n }\r\n\r\n if (beam_and_post_data.BeamType1.includes(\"FL10011\")) {\r\n beam_and_post_data.ApexBracketInternal = \"CCD10\";\r\n beam_and_post_data.ApexBracketEnd = \"CC10\";\r\n beam_and_post_data.DoubleIntermediateRafters = 0;\r\n beam_and_post_data.CollarTie = 1;\r\n } else if (beam_and_post_data.BeamType1.includes(\"FL15015\")) {\r\n beam_and_post_data.ApexBracketInternal = \"CCD15\";\r\n beam_and_post_data.ApexBracketEnd = \"CC15\";\r\n } else if (beam_and_post_data.BeamType1.includes(\"FL20020\")) {\r\n beam_and_post_data.CollarTie = 0;\r\n }\r\n\r\n if (beam_and_post_data.BeamType1.includes(\"FL20020\")) {\r\n if (beam_and_post_data.BeamType2.includes(\"FL10011\")) beam_and_post_data.BeamType2 = \"FL15015\";\r\n if (beam_and_post_data.BeamType3.includes(\"FL10011\")) beam_and_post_data.BeamType3 = \"FL20020\";\r\n if (beam_and_post_data.BeamType3.includes(\"FL15015\")) beam_and_post_data.BeamType3 = \"FL20020\";\r\n }\r\n\r\n if (beam_and_post_data.BeamType1.includes(\"FL15015\")) {\r\n if (beam_and_post_data.BeamType2.includes(\"FL20020\")) beam_and_post_data.BeamType2 = \"FL15015\";\r\n if (beam_and_post_data.BeamType3.includes(\"FL10011\")) beam_and_post_data.BeamType3 = \"FL15015\";\r\n }\r\n\r\n if (beam_and_post_data.BeamType1.includes(\"FL10011\")) {\r\n if (!beam_and_post_data.BeamType2.includes(\"FL10011\")) beam_and_post_data.BeamType2 = \"FL10011\";\r\n }\r\n\r\n beam_and_post_data.GableRafterBaseFlushCut = 1;\r\n\r\n if (beam_and_post_data.CollarTie === 1) {\r\n beam_and_post_data.GableTopPurlinOffset = -1;\r\n beam_and_post_data.GableRafterApexFlushCut = 1;\r\n beam_and_post_data.CollarTiePosition = 0.7;\r\n beam_and_post_data.DoubleIntermediateRafters = 0;\r\n beam_and_post_data.RidgePurlinsNoBrackets = 1;\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS]?.HasInfillBeam1 === 0)\r\n beam_and_post_data.CollarTieEnd1 = 1;\r\n else beam_and_post_data.CollarTieEnd1 = 0;\r\n\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS]?.HasInfillBeam2 === 0)\r\n beam_and_post_data.CollarTieEnd2 = 1;\r\n else beam_and_post_data.CollarTieEnd2 = 0;\r\n\r\n beam_and_post_data.BeamType2 = beam_and_post_data.BeamType1;\r\n\r\n if (this_area_data.META.HasHips && beam_and_post_data.CollarTie === 1) {\r\n beam_and_post_data.BeamType4 = beam_and_post_data.BeamType1;\r\n }\r\n } else {\r\n beam_and_post_data.CollarTieBeam = beam_and_post_data.BeamType1;\r\n beam_and_post_data.RidgePurlinsNoBrackets = 0;\r\n beam_and_post_data.GableTopPurlinOffset = 75;\r\n beam_and_post_data.GableRafterApexFlushCut = 0;\r\n beam_and_post_data.ApexBracketInternal = \"\";\r\n beam_and_post_data.ApexBracketEnd = \"\";\r\n }\r\n } else {\r\n beam_and_post_data.RidgePurlinsNoBrackets = 0;\r\n beam_and_post_data.GableTopPurlinOffset = 75;\r\n beam_and_post_data.GableRafterApexFlushCut = 0;\r\n beam_and_post_data.ApexBracketInternal = \"\";\r\n beam_and_post_data.ApexBracketEnd = \"\";\r\n }\r\n } else {\r\n beam_and_post_data.IntRafterBracketClearance = 0;\r\n beam_and_post_data.RidgePurlinsNoBrackets = 0;\r\n beam_and_post_data.GableTopPurlinOffset = 75;\r\n beam_and_post_data.AutoAddBeamBreakPost = job.DesignParameters.AutoAddBeamBreakPost;\r\n beam_and_post_data.GableRafterApexFlushCut = 0;\r\n beam_and_post_data.GableRafterBaseFlushCut = 0;\r\n beam_and_post_data.ApexBracketInternal = \"\";\r\n beam_and_post_data.ApexBracketEnd = \"\";\r\n beam_and_post_data.DoubleIntermediateRafters = 0;\r\n beam_and_post_data.CornerPostsFullHeightOffset = 0;\r\n }\r\n\r\n // Special requirement for Job Summary & Quote Page\r\n const engineeringMaxResults = job?.QuoteParameters?.ENGINEERING?.EngineeringResults?.AreaMaxResults?.[areaIndex];\r\n if (engineeringMaxResults) {\r\n const result = {};\r\n for (const key in engineeringMaxResults) {\r\n if (key.startsWith(\"Num\")) {\r\n const newKey = \"Eng\" + key;\r\n result[newKey] = engineeringMaxResults[key];\r\n }\r\n }\r\n beam_and_post_data.CountsFromEngineering = result;\r\n }\r\n\r\n return beam_and_post_data;\r\n};\r\n\r\nexport const validateEngineeringAndDesign = (config, job, areaIndex) => {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n\r\n if (job.SiteParameters?.ExistingStructure?.RoofType === \"Tile\") {\r\n this_area_data.ENGINEERING_AND_DESIGN.RiserBracketSpacing = 1200;\r\n this_area_data.ENGINEERING_AND_DESIGN.CarportRiserBracketSpacing = 1200;\r\n } else {\r\n this_area_data.ENGINEERING_AND_DESIGN.RiserBracketSpacing = 900;\r\n this_area_data.ENGINEERING_AND_DESIGN.CarportRiserBracketSpacing = 900;\r\n }\r\n\r\n return job;\r\n};\r\n\r\nexport const validateOptions = (config, job, areaIndex) => {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n\r\n let roofsheet_types = config.roofsheet_types;\r\n let roof_sheet_data = { ...this_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING] };\r\n const roofsheetgroup = roofsheet_types[roof_sheet_data[\"RoofGroupType\"]];\r\n\r\n if (!roofsheetgroup?.skylights || Object.keys(roofsheetgroup.skylights).length === 0) {\r\n this_area_data.SKYLIGHTS = [];\r\n }\r\n\r\n // BEAM MODIFICATIONS\r\n let beam_mods_to_transfer_to_specs = [];\r\n if (this_area_data[BASIC_SPECS_SECTIONS.BEAMMODIFICATIONS]) {\r\n let ref4s = [];\r\n for (let beammod of this_area_data[BASIC_SPECS_SECTIONS.BEAMMODIFICATIONS]) {\r\n if (beammod?.Ref4 && ref4s.includes(beammod.Ref4)) {\r\n // removes item if the ref4 alreay exists to remove double ups\r\n const index = this_area_data[BASIC_SPECS_SECTIONS.BEAMMODIFICATIONS].indexOf(beammod);\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMMODIFICATIONS].splice(index, 1);\r\n } else {\r\n ref4s.push(beammod.Ref4);\r\n }\r\n\r\n if (beammod?.Ref2 && beammod?.Ref2.startsWith(\"P/\")) {\r\n beammod.Ref2 = beammod.Ref2.slice(2);\r\n }\r\n\r\n if (beammod.Section !== \"\" || beammod.Colour !== \"\" || toNumber(beammod.Length) !== 0) {\r\n beam_mods_to_transfer_to_specs.push({ ...beammod });\r\n beammod.Section = \"\";\r\n beammod.Colour = \"\";\r\n beammod.Length = \"\";\r\n }\r\n }\r\n }\r\n\r\n if (this_area_data[BASIC_SPECS_SECTIONS.BEAMSPECMODIFICATIONS]) {\r\n for (let mod of beam_mods_to_transfer_to_specs) {\r\n let found = false;\r\n for (let beam_spec_mod of this_area_data[BASIC_SPECS_SECTIONS.BEAMSPECMODIFICATIONS]) {\r\n if (beam_spec_mod.Area == mod.Area && beam_spec_mod.Ref2 == mod.Ref2) {\r\n if (beam_spec_mod.Section === \"\") {\r\n beam_spec_mod.Section = mod.Section;\r\n }\r\n if (beam_spec_mod.Colour === \"\") {\r\n beam_spec_mod.Colour = mod.Colour;\r\n }\r\n if (toNumber(beam_spec_mod.Length) === 0 && toNumber(mod.Length) !== 0) {\r\n beam_spec_mod.Length = mod.Length;\r\n }\r\n\r\n found = true;\r\n }\r\n }\r\n\r\n if (!found) {\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMSPECMODIFICATIONS].push({ ...mod });\r\n }\r\n }\r\n }\r\n\r\n return job;\r\n};\r\n\r\nexport const validateDecks = (config, job, areaIndex) => {\r\n let this_area_data = job.AreaSpecifications[areaIndex];\r\n if (this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === CONFIG.DESIGN_TYPES.DECK) {\r\n let beam_and_post_data = { ...this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS] };\r\n let area_design_options = config?.design_options?.[this_area_data?.[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType];\r\n let engineeringResult = EngineerDeckv2(beam_and_post_data);\r\n\r\n if (!job?.QuoteParameters?.ENGINEERING) job.QuoteParameters.ENGINEERING = { Data: [] };\r\n if (!job?.QuoteParameters?.ENGINEERING?.Data) job.QuoteParameters.ENGINEERING.Data = [];\r\n job.QuoteParameters.ENGINEERING.Data[areaIndex] = engineeringResult;\r\n\r\n if (area_design_options) {\r\n if (area_design_options?.beam_1?.Name)\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName1 = area_design_options?.beam_1?.Name;\r\n else this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName1 = \"\";\r\n if (area_design_options?.beam_2?.Name)\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName2 = area_design_options?.beam_2?.Name;\r\n else this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName2 = \"\";\r\n if (area_design_options?.beam_3?.Name)\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName3 = area_design_options?.beam_3?.Name;\r\n else this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName3 = \"\";\r\n if (area_design_options?.beam_4?.Name)\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName4 = area_design_options?.beam_4?.Name;\r\n else this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamName4 = \"\";\r\n }\r\n\r\n if (this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1 === \"SB15865\") {\r\n if (this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"SB20865\") {\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 = \"SB15865\";\r\n }\r\n }\r\n if (this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1 === \"SB10865\") {\r\n if (\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"SB20865\" ||\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"SB15865\"\r\n ) {\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 = \"SB10865\";\r\n }\r\n }\r\n\r\n // this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BearerLocations = \"1000,3500\";\r\n if (window.LYSAGHT) {\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].IntermediatePostsFullHeight =\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CornerPostsFullHeight;\r\n } else {\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CornerPostsFullHeight = 1;\r\n this_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].IntermediatePostsFullHeight = 1;\r\n }\r\n\r\n if (area_design_options) {\r\n this_area_data[BASIC_SPECS_SECTIONS.DECK_PARAMETERS].StrapBraceCode =\r\n area_design_options?.bracing?.strap_brace_code;\r\n this_area_data[BASIC_SPECS_SECTIONS.DECK_PARAMETERS].StrapBraceRollLength =\r\n area_design_options?.bracing?.strap_brace_roll_length;\r\n this_area_data[BASIC_SPECS_SECTIONS.DECK_PARAMETERS].WireBraceCode =\r\n area_design_options?.bracing?.wire_brace_code;\r\n this_area_data[BASIC_SPECS_SECTIONS.DECK_PARAMETERS].WireBraceRollLength =\r\n area_design_options?.bracing?.wire_brace_roll_length;\r\n this_area_data[BASIC_SPECS_SECTIONS.DECK_PARAMETERS].RodBraceCode =\r\n area_design_options?.bracing?.rod_brace_code;\r\n this_area_data[BASIC_SPECS_SECTIONS.DECK_PARAMETERS].FloorBraceCode =\r\n area_design_options?.bracing?.floor_brace_code;\r\n this_area_data[BASIC_SPECS_SECTIONS.DECK_PARAMETERS].FloorBraceArea =\r\n area_design_options?.bracing?.floor_brace_area;\r\n }\r\n }\r\n //validate height\r\n // ** \"Minimum height from the ground to the steel floor system is generally recommended to be 450 mm, to allow sufficient ventilation. This may be reduced to a minimum of 50mm only in cases where existing adjacent structure wall ventilation openings are not restricted by the framing & Local Authorities permit a reduced termite clearance and underfloor ventilation. Refer to NCC – BCA Vol 2, clause 3.4.1.\"\r\n\r\n return job;\r\n};\r\n\r\nexport function AdjustedLengthForMultipleAreas(job, areaIndex, in_length = null) {\r\n if (job.AreaSpecifications.length === 0) return -1;\r\n if (job.AreaSpecifications.length === 1) {\r\n if (job.AreaSpecifications[0].SHAPE.DesignType === \"Pitched Roof\") return job.AreaSpecifications[0].SHAPE.Depth;\r\n return job.AreaSpecifications[0].SHAPE.Length;\r\n }\r\n if (job.AreaSpecifications[areaIndex].SHAPE.DesignType === \"Pitched Roof\")\r\n return job.AreaSpecifications[areaIndex].SHAPE.Depth;\r\n\r\n let extension1 = 0;\r\n let extension2 = 0;\r\n\r\n // copy from opal\r\n let area = job.AreaSpecifications[0];\r\n if (areaIndex <= job.AreaSpecifications.length) area = job.AreaSpecifications[areaIndex];\r\n\r\n let modified_length = in_length ? in_length : area.SHAPE.Length;\r\n\r\n let areaNext = job.AreaSpecifications[areaIndex + 1];\r\n if (areaIndex <= job.AreaSpecifications.length - 1 && areaNext) {\r\n // has next area\r\n if (area.SHAPE.AREAJOIN.JoinType === \"Offset\") {\r\n //none\r\n }\r\n if ([\"Angle\", \"Hip\", \"Gable\"].includes(area.SHAPE.AREAJOIN.JoinType)) {\r\n let ext_results = find_join_angle_extension(\r\n area.SHAPE.AREAJOIN.JoinAngle,\r\n area.SHAPE.Depth,\r\n areaNext.SHAPE.Depth\r\n );\r\n //depth = quote.Areas[areaIndex].Projection;\r\n //angle_r = quote.Areas[areaIndex].AreaJoin.JoinAngle.ToRadians();\r\n if (ext_results.ext_this > 0) modified_length += ext_results.ext_this;\r\n } else if (area.SHAPE.AREAJOIN.JoinType === \"L1\") {\r\n if (area.SHAPE.AREAJOIN.JoinAngle > 0) {\r\n modified_length = modified_length + areaNext.SHAPE.Depth;\r\n if (area.SHAPE.CUTOUTS[\"BackLeft-CutoutType\"] !== \"None\") {\r\n modified_length = modified_length + area.SHAPE.CUTOUTS[\"BackLeft-WidthX\"];\r\n }\r\n if (areaNext.SHAPE.CUTOUTS[\"FrontLeft-CutoutType\"] !== \"None\") {\r\n modified_length -= areaNext.SHAPE.CUTOUTS[\"FrontLeft-WidthY\"];\r\n }\r\n if (areaNext.SHAPE.CUTOUTS[\"BackLeft-CutoutType\"] !== \"None\") {\r\n modified_length -= areaNext.SHAPE.CUTOUTS[\"BackLeft-WidthY\"];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let lastArea = job.AreaSpecifications[areaIndex - 1];\r\n if (areaIndex > 0 && lastArea) {\r\n if (lastArea.SHAPE.AREAJOIN.JoinType === \"Offset\") {\r\n //none\r\n }\r\n if ([\"Angle\", \"Hip\", \"Gable\"].includes(lastArea.SHAPE.AREAJOIN.JoinType)) {\r\n let ext_results = find_join_angle_extension(\r\n lastArea.SHAPE.AREAJOIN.JoinAngle,\r\n lastArea.SHAPE.Depth,\r\n area.SHAPE.Depth\r\n );\r\n if (ext_results.ext_next > 0) modified_length += ext_results.ext_next;\r\n } else if (lastArea.SHAPE.AREAJOIN.JoinType === \"L1\") {\r\n } else if (lastArea.SHAPE.AREAJOIN.JoinType === \"L2\") {\r\n if (lastArea.SHAPE.AREAJOIN.JoinAngle > 0) {\r\n modified_length = modified_length + lastArea.SHAPE.Depth;\r\n\r\n if (area.SHAPE.CUTOUTS[\"BackRight-CutoutType\"] !== \"None\") {\r\n modified_length = modified_length + area.SHAPE.CUTOUTS[\"BackRight-WidthX\"];\r\n }\r\n if (lastArea.SHAPE.CUTOUTS[\"FrontRight-CutoutType\"] !== \"None\") {\r\n modified_length -= lastArea.SHAPE.CUTOUTS[\"FrontRight-WidthY\"];\r\n }\r\n if (lastArea.SHAPE.CUTOUTS[\"BackRight-CutoutType\"] !== \"None\") {\r\n modified_length -= lastArea.SHAPE.CUTOUTS[\"BackRight-WidthY\"];\r\n }\r\n }\r\n }\r\n }\r\n return modified_length;\r\n}\r\n\r\n//\r\n//\r\n//\r\n//\r\n//GENERAL FUNCTIONS\r\n//\r\n//\r\n//\r\n//\r\n\r\nexport const checkValidationScheme = (regex_scheme, value) => {\r\n let error = null;\r\n\r\n var isRequired = false;\r\n\r\n if (regex_scheme[\"IsRequired\"] !== null) {\r\n isRequired = regex_scheme[\"IsRequired\"];\r\n }\r\n\r\n let value_is_null_or_empty = true;\r\n if (value && value !== \"\") value_is_null_or_empty = false;\r\n\r\n if (isRequired && value_is_null_or_empty) {\r\n error = \"value is required\";\r\n } else if (!isRequired && value_is_null_or_empty) {\r\n error = null;\r\n } else {\r\n if (regex_scheme[\"MaxChars\"] && !value_is_null_or_empty) {\r\n let max_chars = toNumber(regex_scheme[\"MaxChars\"]);\r\n\r\n if ([\"IntergersOnly\", \"Decimal\"].includes(regex_scheme[\"Type\"])) {\r\n if (Number(value) > Number(max_chars)) error = \"max is \" + max_chars;\r\n } else if (max_chars > -1 && value.length > max_chars) {\r\n error = \"exceeds \" + value.length + \"/\" + max_chars + \" max characters\";\r\n }\r\n }\r\n if (regex_scheme[\"MinChars\"] && !value_is_null_or_empty) {\r\n let min_chars = toNumber(regex_scheme[\"MinChars\"]);\r\n if ([\"IntergersOnly\", \"Decimal\"].includes(regex_scheme[\"Type\"])) {\r\n if (Number(value) < Number(min_chars)) error = \"min is \" + min_chars;\r\n } else if (min_chars > -1 && value.length < min_chars) {\r\n error = \"under min length of \" + min_chars + \" characters\";\r\n }\r\n }\r\n\r\n if (regex_scheme[\"Regex\"]) {\r\n const regex = RegExp(regex_scheme[\"Regex\"]);\r\n if (!regex.test(value)) {\r\n let descriptor = regex_scheme[\"Descriptor\"];\r\n error = \"value '\" + value + \"' is not valid\";\r\n if (descriptor && descriptor !== \"\") error = descriptor;\r\n }\r\n }\r\n }\r\n return error;\r\n};\r\n\r\nexport const validateNumberRange_old = (value, range) => {\r\n if (range) {\r\n if ((value === undefined || value === null) && range?.default) value = toNumber(range?.default);\r\n else if (range?.min && value < toNumber(range?.min)) {\r\n value = toNumber(range?.min);\r\n } else if (range?.max && value > toNumber(range?.max)) {\r\n value = toNumber(range?.max);\r\n }\r\n }\r\n return value;\r\n};\r\n\r\nexport const validateNumberRange = (value, errorMap) => {\r\n errorMap.value = value;\r\n if (errorMap?.range) {\r\n if ((value === undefined || value === null) && errorMap.range?.default)\r\n errorMap.value = toNumber(errorMap.range?.default);\r\n else if (errorMap.range?.min && value < toNumber(errorMap.range?.min)) {\r\n errorMap.value = toNumber(errorMap.range?.default ? errorMap.range?.default : errorMap.range?.min);\r\n if (errorMap.range?.min_reason) errorMap.message = errorMap.range?.min_reason;\r\n else\r\n errorMap.message =\r\n (errorMap?.name ? errorMap?.name + \" \" : \"value \") +\r\n \" was under min value. Set to \" +\r\n (errorMap.range?.default ? \"default: \" : \"min: \") +\r\n errorMap.value;\r\n } else if (errorMap.range?.max && value > toNumber(errorMap.range?.max)) {\r\n errorMap.value = toNumber(errorMap.range?.default ? errorMap.range?.default : errorMap.range?.max);\r\n if (errorMap.range?.max_reason) errorMap.message = errorMap.range?.max_reason;\r\n else\r\n errorMap.message =\r\n (errorMap?.name ? errorMap?.name + \" \" : \"value \") +\r\n \" was over max value. Set to \" +\r\n (errorMap.range?.default ? \"default: \" : \"max: \") +\r\n errorMap.value;\r\n }\r\n }\r\n return errorMap;\r\n};\r\n\r\nexport const CheckSuggestions = (config, job, areaIndex, app) => (dispatch) => {\r\n let standardErrors = jobStateErrorPopups({ config, job, app, dispatch });\r\n if (standardErrors) return standardErrors;\r\n for (let i in job.AreaSpecifications) {\r\n const areaIndex = Number(i);\r\n const areaNumber = Number(i + 1);\r\n const last_area = job?.AreaSpecifications?.[areaIndex - 1];\r\n const this_area = job.AreaSpecifications[areaIndex];\r\n const next_area = job?.AreaSpecifications?.[areaIndex + 1];\r\n\r\n let area_META = this_area?.META;\r\n\r\n if (area_META) {\r\n if (area_META.HasBoxGutterToFascia() && !this_area.Acknowledgements?.BoxHouseGutterAcknowledgement) {\r\n return {\r\n error: true,\r\n title: \"Box Gutter Warning\",\r\n message: [\r\n <>\r\n As per the National Construction Code, ABCB Housing Provisions and AS 3500.3 Clause 4.5.4\r\n (a) a box gutter requires a minimum fall of 1 in 200 - this cannot be achieved when\r\n attaching with standard rafter brackets. By selecting ‘Accept’ you are indemnifying{\" \"}\r\n {window.LYSAGHT ? \"Lysaght\" : \"Fielders\"} for any liability arising from this choice.{\" \"}\r\n {window.LYSAGHT ? \"Lysaght\" : \"Fielders\"} recommends that you use ‘double gutters’ in this\r\n instance\r\n >,\r\n ],\r\n primaryActionText: \"Accept Warning\",\r\n primaryAction: () => {\r\n let new_job = COMMON.deepCopy(job);\r\n new_job.AreaSpecifications[areaIndex].Acknowledgements.BoxHouseGutterAcknowledgement = true;\r\n //forced compliance/ mass settings, updates\r\n new_job = validateFullJob(config, new_job, -1, app);\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n },\r\n secondaryActionText: \"Change to 'Double Gutter'\",\r\n secondaryAction: () => {\r\n let new_job = COMMON.deepCopy(job);\r\n if (area_META.FrontState.HasBoxGutterToFascia())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterF = 1;\r\n if (area_META.BackState.HasBoxGutterToFascia())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterB = 1;\r\n if (area_META.LeftState.HasBoxGutterToFascia())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterL = 1;\r\n if (area_META.RightState.HasBoxGutterToFascia())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterR = 1;\r\n //forced compliance/ mass settings, updates\r\n new_job = validateFullJob(config, new_job, -1, app);\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n },\r\n };\r\n }\r\n\r\n if (area_META.HasIsOnlyHouseGutter() && !this_area.Acknowledgements?.DoubleGutterAcknowledgement) {\r\n return {\r\n error: true,\r\n title: \"No Gutter (House Gutter Only) Warning\",\r\n message: [\r\n <>\r\n {window.LYSAGHT ? \"Lysaght Living\" : \"Fielders Centenary\"} do not recommend using the\r\n existing house gutter only as this may contravene the stormwater requirements of the\r\n National Construction Code. Where there is any doubt please allow for full/double gutters.\r\n >,\r\n ],\r\n primaryActionText: \"Accept Warning\",\r\n primaryAction: () => {\r\n let new_job = COMMON.deepCopy(job);\r\n new_job.AreaSpecifications[areaIndex].Acknowledgements.DoubleGutterAcknowledgement = true;\r\n //forced compliance/ mass settings, updates\r\n new_job = validateFullJob(config, new_job, -1, app);\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n },\r\n secondaryActionText: \"Change to 'Full/Double Gutter'\",\r\n secondaryAction: () => {\r\n let new_job = COMMON.deepCopy(job);\r\n if (area_META.FrontState.IsOnlyHouseGutter())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterF = 1;\r\n if (area_META.BackState.IsOnlyHouseGutter())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterB = 1;\r\n if (area_META.LeftState.IsOnlyHouseGutter())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterL = 1;\r\n if (area_META.RightState.IsOnlyHouseGutter())\r\n new_job.AreaSpecifications[areaIndex].GUTTERS_AND_DOWNPIPES.GutterR = 1;\r\n\r\n if (new_job.AreaSpecifications[areaIndex]?.ATTACHMENTS?.PARTIAL_ATTACHMENTS.length > 0) {\r\n for (let mod of new_job.AreaSpecifications[areaIndex]?.ATTACHMENTS?.PARTIAL_ATTACHMENTS) {\r\n if (mod.Ref.includes(new_job.AreaSpecifications[areaIndex].SHAPE.SheetDirection))\r\n mod.HasGutter = 1;\r\n }\r\n }\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = validateFullJob(config, new_job, -1, app);\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n },\r\n };\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const WarningIcon_Orange = ;\r\n\r\nexport const getWarnings = (job, user, config) => {\r\n let warnings = [];\r\n\r\n if (jobWarningPopups({ job, user, config })) warnings.push(jobWarningPopups({ job, user, config }));\r\n\r\n let region = job?.SiteParameters?.WindData?.WindZoneAS1170?.region;\r\n\r\n let roofsheet_types = config.roofsheet_types;\r\n\r\n for (let i in job.AreaSpecifications) {\r\n const areaIndex = Number(i);\r\n const areaNumber = Number(i + 1);\r\n const last_area = job?.AreaSpecifications?.[Number(areaIndex) - 1];\r\n const this_area = job.AreaSpecifications[Number(areaIndex)];\r\n const next_area = job?.AreaSpecifications?.[Number(areaIndex) + 1];\r\n\r\n let is_flat = false;\r\n let is_pitched = false;\r\n let is_portal = false;\r\n\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) is_flat = true;\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) is_pitched = true;\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) is_portal = true;\r\n\r\n let gutter_downpipe_data = this_area[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES];\r\n let roofsheet_data = this_area[BASIC_SPECS_SECTIONS.ROOF_SHEETING];\r\n let downpipe_types = config.downpipe_types;\r\n let this_downpipe = downpipe_types?.[gutter_downpipe_data.DownpipeType];\r\n\r\n if (this_downpipe?.max_overhang_offset_span !== null) {\r\n if (this_area?.SHAPE?.OH_Back > this_downpipe?.max_overhang_offset_span) {\r\n // Back too long\r\n warnings.push(\r\n <>\r\n {WarningIcon_Orange} Back overhang spans too large for elbow on '{this_downpipe.name}'. Max\r\n overhang allowed: '{this_downpipe?.max_overhang_offset_span}'. Please change overhang or\r\n downpipe.\r\n \r\n >\r\n );\r\n\r\n // gutter_downpipe_data.DownpipeType = \"90mm Round PVC Downpipe\";\r\n }\r\n if (this_area?.SHAPE?.OH_Front > this_downpipe?.max_overhang_offset_span) {\r\n // Front too long\r\n warnings.push(\r\n <>\r\n {WarningIcon_Orange} Front overhang spans too large for elbow on '{this_downpipe.name}'. Max\r\n overhang allowed: '{this_downpipe?.max_overhang_offset_span}'. Please change overhang or\r\n downpipe.\r\n \r\n >\r\n );\r\n\r\n // gutter_downpipe_data.DownpipeType = \"90mm Round PVC Downpipe\";\r\n }\r\n }\r\n const roofsheetgroup = roofsheet_types?.[roofsheet_data?.[\"RoofGroupType\"]];\r\n const subType = roofsheetgroup?.subtypes?.[roofsheet_data?.RoofSubType];\r\n\r\n if (subType?.discontinued) {\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}'{roofsheet_data?.RoofSubType}' is discontinued as a roof sheet and cannot be\r\n supplied. Please change to another type.\r\n \r\n
\r\n );\r\n }\r\n\r\n if (is_flat) {\r\n if (this_area.SHAPE.SheetDirection === \"Front\" && gutter_downpipe_data.GutterF === 0)\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}Gutter is recommended on Front side of Flat Area {areaNumber}\r\n \r\n
\r\n );\r\n if (this_area.SHAPE.SheetDirection === \"Back\" && gutter_downpipe_data.GutterB === 0)\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}Gutter is recommended on Back side of Flat Area {areaNumber}\r\n \r\n
\r\n );\r\n if (this_area.SHAPE.SheetDirection === \"Left\" && gutter_downpipe_data.GutterL === 0)\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}Gutter is recommended on Left side of Flat Area {areaNumber}\r\n \r\n
\r\n );\r\n if (this_area.SHAPE.SheetDirection === \"Right\" && gutter_downpipe_data.GutterR === 0)\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}Gutter is recommended on Right side of Flat Area {areaNumber}\r\n \r\n
\r\n );\r\n\r\n // Designed differently, remove engineering and add warning\r\n // if (\r\n // roofsheet_data?.RoofSheetData?.InsulatedMultispan !== undefined &&\r\n // roofsheet_data?.RoofSheetData?.InsulatedMultispan !==\r\n // job.QuoteParameters?.ENGINEERING?.EngineeringResults?.AreaMaxResults?.[areaIndex]?.NumPurlins > 0\r\n // ) {\r\n // warnings.push(\r\n // \r\n // {WarningIcon_Orange}Roofsheet for Area {areaNumber} Number of Purlins have changed. Please\r\n // re-run engineering on new design.\r\n // \r\n //
\r\n // );\r\n // }\r\n }\r\n\r\n if (is_pitched) {\r\n if (this_area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentLeft === 0 && gutter_downpipe_data.GutterL === 0)\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}Gutter missing on Left side of Pitched Area {areaNumber}\r\n \r\n
\r\n );\r\n if (this_area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentRight === 0 && gutter_downpipe_data.GutterR === 0)\r\n warnings.push(\r\n <>\r\n {WarningIcon_Orange}Gutter missing on Right side of Pitched Area {areaNumber}\r\n \r\n >\r\n );\r\n }\r\n\r\n if (is_portal) {\r\n if (this_area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentTop === 0 && gutter_downpipe_data.GutterB === 0)\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}Gutter is recommended on Back side of Portal Area {areaNumber}\r\n \r\n
\r\n );\r\n if (\r\n this_area[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentBottom === 0 &&\r\n gutter_downpipe_data.GutterF === 0\r\n )\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}Gutter is recommended on Front side of Portal Area {areaNumber}\r\n \r\n
\r\n );\r\n if (this_area[BASIC_SPECS_SECTIONS.SHAPE].Depth > 10000)\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}As Portal Area {areaNumber} has a width greater than 10m, Supplementary\r\n engineering will be required.\r\n \r\n
\r\n );\r\n }\r\n\r\n if (region && roofsheet_data?.RoofSheetData && (region === \"C\" || region === \"D\")) {\r\n if (!roofsheet_data?.RoofSheetData?.allow_cyclonic) {\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}\r\n {roofsheet_data.RoofGroupType} is not suitable for Cyclonic regions. Please change to a suitable\r\n roof sheet. \r\n
\r\n );\r\n }\r\n }\r\n }\r\n\r\n let one_off_warnings = {};\r\n\r\n for (let i in job.AreaSpecifications) {\r\n const areaIndex = Number(i);\r\n const areaNumber = Number(i + 1);\r\n const this_area = job.AreaSpecifications[Number(areaIndex)];\r\n\r\n let area_META = this_area?.META;\r\n\r\n if (area_META) {\r\n if (area_META?.HasIsOnlyHouseGutter && area_META.HasIsOnlyHouseGutter())\r\n one_off_warnings[\"No Gutter (House Gutter Only) Warning\"] =\r\n \"House Gutter Only is not recommended. Double gutters are recommended instead.\";\r\n if (area_META?.HasBoxGutterToFascia && area_META.HasBoxGutterToFascia())\r\n one_off_warnings[\"Box Gutter Warning\"] = \"Box Gutters are not recommended when attaching to Fascia.\";\r\n }\r\n }\r\n\r\n for (var warning in one_off_warnings) {\r\n warnings.push(\r\n \r\n {WarningIcon_Orange}\r\n {one_off_warnings[warning]}\r\n \r\n
\r\n );\r\n }\r\n\r\n if (job.QuoteParameters?.ENGINEERING?.EngineeringLoads) {\r\n let loads = job.QuoteParameters?.ENGINEERING?.EngineeringLoads;\r\n var splitted = loads.split(/\\r?\\n/);\r\n var headers = splitted[1];\r\n var headers_split = headers.split(\"|\");\r\n var extra_data_index = headers_split.indexOf(\"EXTRA_DATA\");\r\n var name_index = headers_split.indexOf(\"NAME\");\r\n let brackets = [];\r\n\r\n let col_headers = null;\r\n let col_headers_split = null;\r\n let col_name_index = null;\r\n let height_index = null;\r\n let embedment_index = null;\r\n let type_index = null;\r\n let columns_section = false;\r\n let columns_over_max = [];\r\n\r\n for (let split of splitted) {\r\n if (split.includes(\"***MODIFIED\")) break;\r\n\r\n let beam = split.split(\"|\");\r\n let extra_data = beam?.[extra_data_index];\r\n\r\n if (extra_data) {\r\n let extra_data_split = extra_data.split(\";\");\r\n for (let data_kvp of extra_data_split) {\r\n if (data_kvp.startsWith(\"FA_1=\") || data_kvp.startsWith(\"FA_2=\")) {\r\n let beam_name = beam[name_index];\r\n let angle = Math.abs(toNumber(data_kvp.replace(\"FA_1=\", \"\").replace(\"FA_2=\", \"\")));\r\n\r\n if ((angle > 60 && angle < 120) || (angle > 240 && angle < 300)) {\r\n if (beam_name.startsWith(\"SF\") || beam_name.startsWith(\"FB\")) {\r\n if (data_kvp.startsWith(\"FA_1=\") && extra_data.includes(\"END_STATE_1=To Fascia\")) {\r\n brackets.push(beam_name);\r\n } else if (\r\n data_kvp.startsWith(\"FA_2=\") &&\r\n extra_data.includes(\"END_STATE_2=To Fascia\")\r\n ) {\r\n brackets.push(beam_name);\r\n }\r\n } else {\r\n brackets.push(beam_name);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (split.includes(\"***COLUMNS***\")) columns_section = true;\r\n if (columns_section) {\r\n if (split.startsWith(\"NAME|\")) {\r\n col_headers = split;\r\n col_headers_split = col_headers.split(\"|\");\r\n col_name_index = col_headers_split.indexOf(\"NAME\");\r\n height_index = col_headers_split.indexOf(\"HEIGHT\");\r\n embedment_index = col_headers_split.indexOf(\"EMBEDMENT\");\r\n type_index = col_headers_split.indexOf(\"COLUMN_TYPE\");\r\n } else if (col_headers_split) {\r\n let col_split = split.split(\"|\");\r\n let name = col_split[col_name_index];\r\n let type = col_split[type_index];\r\n let height = Number(col_split[height_index]);\r\n let embed = Number(col_split[embedment_index]);\r\n let length = height + embed + 100;\r\n let max_length = config?.beam_types?.[type]?.max_length;\r\n\r\n if (max_length && Number(max_length) < length) {\r\n columns_over_max.push(\r\n <>\r\n {name} - {type} @ {length}mm (max:{max_length}mm)\r\n \r\n >\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (brackets.length > 0) {\r\n warnings.push(\r\n <>\r\n {WarningIcon_Orange}This design has a beam to beam/fascia angle of less than 30 degrees (\r\n {ConvertListToString(brackets)}). Please redesign to have an angle greater than 30 degrees. \r\n >\r\n );\r\n }\r\n if (columns_over_max.length > 0) {\r\n warnings.push(\r\n <>\r\n {WarningIcon_Orange}This design has columns that are supplied longer than the available max length:{\" \"}\r\n { }\r\n { }\r\n {columns_over_max}\r\n { }If you continue, they may be supplied split which may not work. Please redesign or change\r\n column types. \r\n >\r\n );\r\n }\r\n }\r\n\r\n if (window?.paper?.project?.getItems) {\r\n window.paper.project.getItems({ has_warning: true }).forEach(function (item) {\r\n if (item?.warning_msg) {\r\n warnings.push(\r\n \r\n {WarningIcon_Orange} {item.warning_msg.replaceAll(\"_\", \" \")}\r\n \r\n
\r\n );\r\n }\r\n });\r\n }\r\n\r\n if (warnings.length > 0) {\r\n return {\r\n warning: true,\r\n title: \"Design Warnings\",\r\n message: warnings,\r\n };\r\n }\r\n\r\n return warnings;\r\n};\r\n\r\nexport const checkSupplementaryEngineering = (config, job) => {\r\n let SupplementaryEngineering = [];\r\n // if (job.DesignParameters.DeckMode === 1) {\r\n // SupplementaryEngineering.push(\r\n // \"Decks require engineering confirmation for the suitability of footings and bracing.\"\r\n // );\r\n // }\r\n\r\n for (let i in job.AreaSpecifications) {\r\n const areaIndex = Number(i);\r\n const areaNumber = Number(i + 1);\r\n const last_area = job?.AreaSpecifications?.[Number(areaIndex) - 1];\r\n const this_area = job.AreaSpecifications[Number(areaIndex)];\r\n const next_area = job?.AreaSpecifications?.[Number(areaIndex) + 1];\r\n\r\n let is_flat = false;\r\n let is_pitched = false;\r\n let is_portal = false;\r\n\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) is_flat = true;\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) is_pitched = true;\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) is_portal = true;\r\n\r\n let gutter_downpipe_data = this_area[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES];\r\n\r\n if (is_flat) {\r\n }\r\n\r\n if (is_pitched) {\r\n }\r\n\r\n if (is_portal) {\r\n if (this_area[BASIC_SPECS_SECTIONS.SHAPE].Depth > 10000)\r\n SupplementaryEngineering.push(\r\n \"Portal Area \" + areaNumber + \" width greater than 10m. Engineering Design Check required.\"\r\n );\r\n }\r\n }\r\n\r\n return SupplementaryEngineering;\r\n};\r\n\r\nconst engineeringCodes = ({ job }) => {\r\n const engineeringHashCode = job?.QuoteParameters?.ENGINEERING?.engineeringHashCode;\r\n const currentHashCode = GetShapeUpdateString(false, true);\r\n return { engineeringHashCode, currentHashCode };\r\n};\r\n\r\nexport const engineeringChanged = ({ job }) => {\r\n const { engineeringHashCode, currentHashCode } = engineeringCodes({ job });\r\n if (engineeringHashCode !== currentHashCode) return true;\r\n return false;\r\n};\r\n\r\nexport const engineeringPassed = ({ job }) => {\r\n const { engineeringHashCode, currentHashCode } = engineeringCodes({ job });\r\n\r\n const OVERSTRESS_FACTOR = 1.03;\r\n let MaxResults =\r\n toNumber(job?.QuoteParameters?.ENGINEERING?.EngineeringResults?.MaxResultOverAll) / OVERSTRESS_FACTOR;\r\n let MaxResultsText = job?.QuoteParameters?.ENGINEERING?.EngineeringResults?.maxResultOverAllText;\r\n\r\n let engValid = false;\r\n let engValidNoOverride = false;\r\n const engOverride = job?.OverrideEngineering ? true : false;\r\n\r\n if (\r\n engineeringHashCode &&\r\n currentHashCode &&\r\n engineeringHashCode === currentHashCode &&\r\n MaxResults &&\r\n MaxResults < 1.01\r\n ) {\r\n engValid = true;\r\n engValidNoOverride = true;\r\n }\r\n\r\n let engUpdated = false;\r\n if (engineeringHashCode && currentHashCode && engineeringHashCode === currentHashCode) engUpdated = true;\r\n\r\n if (engOverride) engValid = true;\r\n\r\n if (job?.DesignParameters?.DeckMode === 1) {\r\n engValid = false;\r\n MaxResults = toNumber(job?.QuoteParameters?.ENGINEERING?.Data?.[0]?.MaxOverallCapacity);\r\n if (MaxResults && MaxResults < 1.01) {\r\n engValid = true;\r\n engValidNoOverride = true;\r\n }\r\n }\r\n\r\n return { engValid, MaxResultsText, engOverride, engValidNoOverride, engUpdated };\r\n};\r\n\r\n// Return actual structure length from engineering based on area index\r\nexport const getActualLength = ({ job, areaIndex }) => {\r\n return job?.QuoteParameters?.AREA_DATA?.[areaIndex]?.ActualStructureWidth;\r\n};\r\n\r\nexport const validateJobOrderReadiness = async ({\r\n job,\r\n config,\r\n app,\r\n user,\r\n overrideEngineeringAction,\r\n continueEngineeringAction,\r\n confirmEngineeringAction,\r\n continueWarningAction,\r\n forOrder = false,\r\n dispatch,\r\n defaultFootingChange,\r\n defaultPostChange,\r\n bom_was_open,\r\n}) => {\r\n let has_flat = false;\r\n let has_pitched = false;\r\n let has_portal = false;\r\n\r\n const carportMode = job?.DesignParameters?.CarportMode === 1;\r\n\r\n for (const area of job.AreaSpecifications) {\r\n if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT) has_flat = true;\r\n if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) has_pitched = true;\r\n if (area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) has_portal = true;\r\n }\r\n\r\n //check piched has a flat next to it\r\n if (has_pitched) {\r\n for (const i in job.AreaSpecifications) {\r\n const areaIndex = Number(i);\r\n const last_area = job?.AreaSpecifications?.[Number(areaIndex) - 1];\r\n const this_area = job.AreaSpecifications[Number(areaIndex)];\r\n const next_area = job?.AreaSpecifications?.[Number(areaIndex) + 1];\r\n\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED) {\r\n let hasAdjacentFlat = false;\r\n if (\r\n last_area &&\r\n last_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT &&\r\n last_area.SHAPE.Length > 1999\r\n )\r\n hasAdjacentFlat = true;\r\n if (\r\n next_area &&\r\n next_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT &&\r\n next_area.SHAPE.Length > 1999\r\n )\r\n hasAdjacentFlat = true;\r\n\r\n if (!hasAdjacentFlat) {\r\n return {\r\n error: true,\r\n title: \"Pitched Gable Design Error\",\r\n message: [\r\n <>\r\n Pitched Gable Design must have at least one Flat Area adjacent to it with a min of\r\n 2000mm length.\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i in job.AreaSpecifications) {\r\n const areaIndex = Number(i);\r\n const last_area = job?.AreaSpecifications?.[Number(areaIndex) - 1];\r\n const this_area = job.AreaSpecifications[Number(areaIndex)];\r\n const next_area = job?.AreaSpecifications?.[Number(areaIndex) + 1];\r\n\r\n // check for freestanding design needing RHS columns\r\n if (\r\n this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT ||\r\n this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n ) {\r\n if (\r\n job.DesignParameters.Freestanding &&\r\n !this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostType.includes(\"P/C\") &&\r\n !this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostType.includes(\"SHS\")\r\n ) {\r\n return {\r\n error: true,\r\n title: \"Freestanding Post Error\",\r\n message: [<>A Freestanding Flat or Pitched Gable section must has SHS Posts.>],\r\n secondaryActionText: \"Change to '65mm SHS x 3mm'?\",\r\n secondaryAction: () => {\r\n this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostType = \"65mm x 65mm x 3mm P/C\";\r\n return {\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: null,\r\n value: this_area,\r\n error: null,\r\n };\r\n },\r\n };\r\n }\r\n }\r\n\r\n if (forOrder) {\r\n if (this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.DECK) {\r\n } else {\r\n let TBA = [];\r\n if (this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostCol === \"TBA\") TBA.push(\"Post\");\r\n if (\r\n this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamCol1 === \"TBA\" ||\r\n this_area[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamCol2 === \"TBA\"\r\n )\r\n TBA.push(\"Beam\");\r\n if (this_area[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RoofSheetColour === \"TBA\") TBA.push(\"Roof Sheet\");\r\n if (this_area[BASIC_SPECS_SECTIONS.ROOF_SHEETING].FlashingColour === \"TBA\") TBA.push(\"Flashing\");\r\n if (this_area[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterCol === \"TBA\") TBA.push(\"Gutter\");\r\n if (this_area[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].DownpipeCol === \"TBA\") TBA.push(\"Downpipe\");\r\n\r\n if (\r\n this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED ||\r\n this_area.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL\r\n ) {\r\n if (this_area[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RidgeColour === \"TBA\") TBA.push(\"Ridge\");\r\n }\r\n\r\n if (TBA.length > 0) {\r\n return {\r\n error: true,\r\n title: \"Cannot Submit Order With Undecided Colours\",\r\n message: [\r\n <>{ConvertListToString(TBA) + \" have colour set to TBA. Please set before proceeding.\"}>,\r\n ],\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n const { engValid, MaxResultsText, engOverride } = engineeringPassed({ job });\r\n const engChanged = engineeringChanged({ job });\r\n\r\n // if (engChanged) {\r\n // return {\r\n // error: true,\r\n // title: \"Engineering has changed.\",\r\n // message: [\r\n // <>\r\n // {\"Please confirm engineering before proceeding.\"}\r\n // \r\n // {MaxResultsText ? MaxResultsText : \"\"}\r\n // >,\r\n // ],\r\n // primaryActionText: \"Cancel\",\r\n // tertiaryActionText: \"Check Engineering\",\r\n // tertiaryAction: confirmEngineeringAction,\r\n // };\r\n // }\r\n if (!engValid && !bom_was_open && !engOverride) {\r\n try {\r\n await continueEngineeringAction({\r\n user,\r\n adminOnly: app?.user?.BusinessDetails?.EngineerOverride !== \"ALL USERS\",\r\n MaxResultsText,\r\n confirmEngineeringAction,\r\n });\r\n // Continue with your logic here if the user pressed \"Continue\"\r\n } catch {\r\n return {\r\n cancel: true,\r\n };\r\n // Handle the case where the user pressed \"Cancel\" or closed the dialog\r\n // You can either do nothing or add specific handling here\r\n }\r\n }\r\n\r\n // if (!engValid && app?.user?.BusinessDetails?.EngineerOverride !== \"ALL USERS\") {\r\n // if (user.Role >= 10) {\r\n // try {\r\n // await continueEngineeringAction();\r\n // // Continue with your logic here if the user pressed \"Continue\"\r\n // } catch {\r\n // return {\r\n // cancel: true,\r\n // };\r\n // // Handle the case where the user pressed \"Cancel\" or closed the dialog\r\n // // You can either do nothing or add specific handling here\r\n // }\r\n // } else\r\n // return {\r\n // error: true,\r\n // title: \"Engineering is not passed.\",\r\n // message: [\r\n // <>\r\n // {\"Please confirm engineering (a green tick) before proceeding.\"}\r\n // \r\n // {MaxResultsText ? MaxResultsText : \"\"}\r\n // >,\r\n // ],\r\n // primaryActionText: \"Cancel\",\r\n // secondaryActionText: \"Check Engineering\",\r\n // secondaryAction: confirmEngineeringAction,\r\n // tertiaryActionText: user.Role >= 91 && !engValid ? \"Authorise Override?\" : \"\",\r\n // tertiaryAction: user.Role >= 91 && !engValid ? overrideEngineeringAction : {},\r\n // };\r\n // } // Always check engineering before documents.\r\n // else if (engChanged) {\r\n // return {\r\n // error: true,\r\n // title: \"Engineering has changed.\",\r\n // message: [\r\n // <>\r\n // {\"Please confirm engineering before proceeding.\"}\r\n // \r\n // {MaxResultsText ? MaxResultsText : \"\"}\r\n // >,\r\n // ],\r\n // primaryActionText: \"Cancel\",\r\n // tertiaryActionText: \"Check Engineering\",\r\n // tertiaryAction: confirmEngineeringAction,\r\n // };\r\n // } else if (!engValid && app?.user?.BusinessDetails?.EngineerOverride === \"ALL USERS\" && !bom_was_open) {\r\n // try {\r\n // await continueEngineeringAction();\r\n // // Continue with your logic here if the user pressed \"Continue\"\r\n // } catch {\r\n // return {\r\n // cancel: true,\r\n // };\r\n // // Handle the case where the user pressed \"Cancel\" or closed the dialog\r\n // // You can either do nothing or add specific handling here\r\n // }\r\n // }\r\n\r\n // These are checked on ordering the job or checking the BOM.\r\n // Note this will handle each error individually\r\n // Meaning the user will need to fix the errors individually,\r\n // then the error will popup for the rest of the errors\r\n let jobStateWarnings = jobReadyStateErrorPopups({\r\n job,\r\n app,\r\n user,\r\n config,\r\n dispatch,\r\n continueWarningAction,\r\n confirmEngineeringAction,\r\n overrideEngineeringAction,\r\n engValid: job?.OverrideEngineering,\r\n });\r\n\r\n if (jobStateWarnings && !engOverride) return jobStateWarnings;\r\n\r\n if (job.QuoteParameters?.ENGINEERING?.EngineeringLoads) {\r\n let loads = job.QuoteParameters?.ENGINEERING?.EngineeringLoads;\r\n var splitted = loads.split(/\\r?\\n/);\r\n var headers = splitted[1];\r\n var headers_split = headers.split(\"|\");\r\n // var extra_data_index = headers_split.indexOf(\"EXTRA_DATA\");\r\n // var name_index = headers_split.indexOf(\"NAME\");\r\n // let brackets = [];\r\n\r\n let col_headers = null;\r\n let col_headers_split = null;\r\n let col_name_index = null;\r\n let height_index = null;\r\n let embedment_index = null;\r\n let type_index = null;\r\n let GROUND_CONNECTION_index = null;\r\n let columns_section = false;\r\n let columns_over_max = [];\r\n\r\n let num_columns = 0;\r\n let num_columns_concrete_in = 0;\r\n\r\n for (let split of splitted) {\r\n if (split.includes(\"***MODIFIED\")) break;\r\n if (split.includes(\"***COLUMNS***\")) columns_section = true;\r\n if (columns_section) {\r\n if (split.startsWith(\"NAME|\")) {\r\n col_headers = split;\r\n col_headers_split = col_headers.split(\"|\");\r\n col_name_index = col_headers_split.indexOf(\"NAME\");\r\n height_index = col_headers_split.indexOf(\"HEIGHT\");\r\n GROUND_CONNECTION_index = col_headers_split.indexOf(\"GROUND_CONNECTION\");\r\n embedment_index = col_headers_split.indexOf(\"EMBEDMENT\");\r\n type_index = col_headers_split.indexOf(\"COLUMN_TYPE\");\r\n } else if (col_headers_split) {\r\n let col_split = split.split(\"|\");\r\n let name = col_split[col_name_index];\r\n let type = col_split[type_index];\r\n let height = Number(col_split[height_index]);\r\n let embed = Number(col_split[embedment_index]);\r\n let GROUND_CONNECTION = col_split[GROUND_CONNECTION_index];\r\n let length = height + embed + 100;\r\n\r\n num_columns++;\r\n if (GROUND_CONNECTION === \"Concrete In\") num_columns_concrete_in++;\r\n }\r\n }\r\n }\r\n\r\n if (job.DesignParameters.Freestanding && num_columns_concrete_in / num_columns < 0.5 && !carportMode) {\r\n return {\r\n error: true,\r\n title: \"More embedded posts required\",\r\n message: [\r\n <>\r\n {\r\n \"In a freestanding structure, more than 50% of posts must be embedded. Please remove some 'bolt to slab' posts.\"\r\n }\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n\r\n //false means no error, duh\r\n return false;\r\n};\r\n\r\nexport function MaxDeckJoistSpans(joist_section, joist_spacing, structure_width, bearer_spacing, joist_spans) {\r\n let span_config = 1;\r\n\r\n let joist_spacing_data = {\r\n 1: {\r\n SB10865: {\r\n 300: 3300,\r\n 450: 2890,\r\n 600: 2620,\r\n },\r\n SB15865: {\r\n 300: 4450,\r\n 450: 3870,\r\n 600: 3530,\r\n },\r\n SB20865: {\r\n 300: 5500,\r\n 450: 4800,\r\n 600: 4380,\r\n },\r\n },\r\n 2: {\r\n SB10865: {\r\n 300: 3740,\r\n 450: 3260,\r\n 600: 2960,\r\n },\r\n SB15865: {\r\n 300: 5020,\r\n 450: 4390,\r\n 600: 3990,\r\n },\r\n SB20865: {\r\n 300: 6170,\r\n 450: 5450,\r\n 600: 4940,\r\n },\r\n },\r\n 3: {\r\n SB10865: {\r\n 300: 3610,\r\n 450: 3160,\r\n 600: 2870,\r\n },\r\n SB15865: {\r\n 300: 4860,\r\n 450: 4250,\r\n 600: 3860,\r\n },\r\n SB20865: {\r\n 300: 6030,\r\n 450: 5270,\r\n 600: 4800,\r\n },\r\n },\r\n };\r\n if (joist_spans) joist_spacing_data = joist_spans;\r\n\r\n return joist_spacing_data[span_config][joist_section][joist_spacing];\r\n}\r\n\r\nexport function MaxDeckBearerSpans(\r\n bearer_section,\r\n structure_width,\r\n structure_length,\r\n bearer_spacing,\r\n post_spacing,\r\n bearer_spans = null\r\n) {\r\n let span_config = 1;\r\n if (structure_length > post_spacing) span_config = 2;\r\n if (structure_length > post_spacing * 2) span_config = 3;\r\n\r\n let num_bearers = 2 + Math.trunc((structure_width - 65) / bearer_spacing);\r\n let FLW = structure_width / (num_bearers - 1);\r\n\r\n if (FLW <= 900) FLW = 900;\r\n else if (FLW <= 1200) FLW = 1200;\r\n else if (FLW <= 1500) FLW = 1500;\r\n else if (FLW <= 1800) FLW = 1800;\r\n else if (FLW <= 2100) FLW = 2100;\r\n else if (FLW <= 2400) FLW = 2400;\r\n else if (FLW <= 3000) FLW = 3000;\r\n else if (FLW <= 3600) FLW = 3600;\r\n else FLW = 4000;\r\n\r\n let bearer_span_data = {\r\n 1: {\r\n SB10865: {\r\n 900: 2780,\r\n 1200: 2530,\r\n 1500: 2340,\r\n 1800: 2200,\r\n 2100: 2100,\r\n 2400: 2000,\r\n 3000: 1860,\r\n 3600: 1750,\r\n 4000: 1690,\r\n },\r\n SB15865: {\r\n 900: 3740,\r\n 1200: 3320,\r\n 1500: 3150,\r\n 1800: 2980,\r\n 2100: 2660,\r\n 2400: 2340,\r\n 3000: 1880,\r\n 3600: 1570,\r\n 4000: 1420,\r\n },\r\n SB20865: {\r\n 900: 4380,\r\n 1200: 3350,\r\n 1500: 2710,\r\n 1800: 2280,\r\n 2100: 1970,\r\n 2400: 1730,\r\n 3000: 1390,\r\n 3600: 1160,\r\n 4000: 1050,\r\n },\r\n },\r\n 2: {\r\n SB10865: {\r\n 900: 3150,\r\n 1200: 2850,\r\n 1500: 2650,\r\n 1800: 2390,\r\n 2100: 2180,\r\n 2400: 2000,\r\n 3000: 1730,\r\n 3600: 1520,\r\n 4000: 1410,\r\n },\r\n SB15865: {\r\n 900: 3800,\r\n 1200: 3100,\r\n 1500: 2610,\r\n 1800: 2260,\r\n 2100: 1980,\r\n 2400: 1770,\r\n 3000: 1450,\r\n 3600: 1220,\r\n 4000: 1110,\r\n },\r\n SB20865: {\r\n 900: 3330,\r\n 1200: 2600,\r\n 1500: 2120,\r\n 1800: 1800,\r\n 2100: 1550,\r\n 2400: 1370,\r\n 3000: 1100,\r\n 3600: 930,\r\n 4000: 840,\r\n },\r\n },\r\n 3: {\r\n SB10865: {\r\n 900: 3050,\r\n 1200: 2780,\r\n 1500: 2580,\r\n 1800: 2410,\r\n 2100: 2300,\r\n 2400: 2170,\r\n 3000: 1870,\r\n 3600: 1630,\r\n 4000: 1510,\r\n },\r\n SB15865: {\r\n 900: 4080,\r\n 1200: 3300,\r\n 1500: 2760,\r\n 1800: 2370,\r\n 2100: 2080,\r\n 2400: 1840,\r\n 3000: 1500,\r\n 3600: 1270,\r\n 4000: 1150,\r\n },\r\n SB20865: {\r\n 900: 3470,\r\n 1200: 2700,\r\n 1500: 2200,\r\n 1800: 1860,\r\n 2100: 1610,\r\n 2400: 1410,\r\n 3000: 1140,\r\n 3600: 950,\r\n 4000: 860,\r\n },\r\n },\r\n };\r\n\r\n if (bearer_spans) bearer_span_data = bearer_spans;\r\n return bearer_span_data[span_config][bearer_section][FLW];\r\n}\r\n\r\nexport function MaxDeckPostHeights(RHS_size, post_spans = null) {\r\n let spans = {\r\n \"65mm x 65mm x 2mm P/C\": 2095,\r\n \"65mm x 65mm x 2.5mm P/C\": 2070,\r\n \"65mm x 65mm x 3mm P/C\": 2070,\r\n \"75mm x 75mm x 2.5mm P/C\": 2405,\r\n \"75mm x 75mm x 3mm P/C\": 2390,\r\n \"100mm x 100mm x 3mm P/C\": 3225,\r\n default: 2070,\r\n };\r\n if (post_spans) spans = post_spans;\r\n\r\n let default_height = spans?.[\"default\"] ? spans?.[\"default\"] : 2070;\r\n\r\n if (spans[RHS_size]) return spans[RHS_size];\r\n return default_height;\r\n}\r\n\r\nexport function EngineerDeckv2(beam_and_post_data) {\r\n let JoistActual = 0;\r\n let JoistCapacity = 0;\r\n let BearerActual = 0;\r\n let BearerCapacity = 0;\r\n let PostCapacity = 0;\r\n\r\n let BracingSummary = {};\r\n let FootingSummary = {};\r\n\r\n if (window.paper && window.svg) {\r\n let beams = GetItems({ sel_type: \"beam\" });\r\n\r\n for (let beam of beams) {\r\n if (beam?.beamName === \"Joist\") {\r\n if (beam.eng_capacity && toNumber(beam.eng_capacity) > JoistCapacity) {\r\n JoistCapacity = toNumber(beam.eng_capacity);\r\n }\r\n if (beam.lengthQQ && beam.lengthQQ > JoistActual) {\r\n JoistActual = beam.lengthQQ;\r\n }\r\n }\r\n if (beam?.beamName?.includes && beam?.beamName.includes(\"Bearer\")) {\r\n if (beam.eng_capacity && toNumber(beam.eng_capacity) > BearerCapacity) {\r\n BearerCapacity = toNumber(beam.eng_capacity);\r\n }\r\n if (beam.lengthQQ && beam.lengthQQ > BearerActual) {\r\n BearerActual = beam.lengthQQ;\r\n }\r\n }\r\n }\r\n\r\n let posts = GetItems({ sel_type: \"post\" });\r\n\r\n for (let post of posts) {\r\n if (post.eng_capacity && toNumber(post.eng_capacity) > PostCapacity) {\r\n PostCapacity = toNumber(post.eng_capacity);\r\n }\r\n }\r\n\r\n let origin = GetItems({ typeQQ: \"origin\" });\r\n\r\n if (origin[0] && origin[0]?.deck_bracing) {\r\n let bracing_summary_split = origin[0]?.deck_bracing.split(\"/\");\r\n if (bracing_summary_split.length > 0) {\r\n BracingSummary.bracing_ns_actual = toNumber(bracing_summary_split[0]);\r\n }\r\n if (bracing_summary_split.length > 1) {\r\n BracingSummary.bracing_ns_required = bracing_summary_split[1];\r\n }\r\n if (bracing_summary_split.length > 2) {\r\n BracingSummary.bracing_ew_actual = toNumber(bracing_summary_split[2]);\r\n }\r\n if (bracing_summary_split.length > 3) {\r\n BracingSummary.bracing_ew_required = bracing_summary_split[3];\r\n }\r\n }\r\n\r\n if (origin[0] && origin[0]?.deck_footing) {\r\n let footing_summary_split = origin[0]?.deck_footing.split(\"/\");\r\n if (footing_summary_split.length > 0) {\r\n FootingSummary.clay_passed = COMMON.toBool(footing_summary_split[0]);\r\n }\r\n if (footing_summary_split.length > 1) {\r\n FootingSummary.clay_passed_width = toNumber(footing_summary_split[1]);\r\n }\r\n if (footing_summary_split.length > 2) {\r\n FootingSummary.clay_passed_depth = toNumber(footing_summary_split[2]);\r\n }\r\n if (footing_summary_split.length > 3) {\r\n FootingSummary.sand_passed = COMMON.toBool(footing_summary_split[3]);\r\n }\r\n if (footing_summary_split.length > 4) {\r\n FootingSummary.sand_passed_width = toNumber(footing_summary_split[4]);\r\n }\r\n if (footing_summary_split.length > 5) {\r\n FootingSummary.sand_passed_depth = toNumber(footing_summary_split[5]);\r\n }\r\n }\r\n }\r\n\r\n let bracing_capacity_ratio_NS = 0;\r\n if (BracingSummary.bracing_ns_required > 0) {\r\n if (BracingSummary.bracing_ns_actual === 0) {\r\n bracing_capacity_ratio_NS = 9.99;\r\n } else {\r\n bracing_capacity_ratio_NS = BracingSummary.bracing_ns_required / BracingSummary.bracing_ns_actual;\r\n }\r\n }\r\n let bracing_capacity_ratio_EW = 0;\r\n if (BracingSummary.bracing_ew_required > 0) {\r\n if (BracingSummary.bracing_ew_actual === 0) {\r\n bracing_capacity_ratio_EW = 9.99;\r\n } else {\r\n bracing_capacity_ratio_EW = BracingSummary.bracing_ew_required / BracingSummary.bracing_ew_actual;\r\n }\r\n }\r\n\r\n return {\r\n JoistMaxSpacing: beam_and_post_data.PurlinSpacing,\r\n JoistMaxSpan: null,\r\n JoistActual: JoistActual,\r\n JoistCapacity: JoistCapacity,\r\n BearerMaxSpacing: null,\r\n BearerMaxSpan: null,\r\n BearerActual: BearerActual,\r\n BearerCapacity: BearerCapacity,\r\n PostMaxHeight: null,\r\n PostCapacity: PostCapacity,\r\n MaxOverallCapacity: Math.max(\r\n JoistCapacity,\r\n BearerCapacity,\r\n PostCapacity,\r\n bracing_capacity_ratio_EW,\r\n bracing_capacity_ratio_NS\r\n ),\r\n BracingSummary: BracingSummary,\r\n FootingSummary: FootingSummary,\r\n };\r\n}\r\n\r\nexport function EngineerDeck(\r\n post_section,\r\n joist_section,\r\n joist_spacing,\r\n bearer_section,\r\n structure_width,\r\n structure_length,\r\n structure_height,\r\n bearer_spacing,\r\n post_spacing,\r\n post_spans = null,\r\n bearer_spans = null,\r\n joist_spans = null\r\n) {\r\n let span_config = 1;\r\n if (structure_width - 65 > bearer_spacing) span_config = 2;\r\n if (structure_width - 65 > bearer_spacing * 2) span_config = 3;\r\n if (structure_width - 65 > bearer_spacing * 3) span_config = 4;\r\n\r\n let JoistMaxSpan = MaxDeckJoistSpans(joist_section, joist_spacing, structure_width, bearer_spacing, joist_spans);\r\n let JoistActual = (structure_width - 65) / span_config;\r\n let JoistCapacity = JoistActual / JoistMaxSpan;\r\n let BearerMaxSpan = MaxDeckBearerSpans(\r\n bearer_section,\r\n structure_width,\r\n structure_length,\r\n bearer_spacing,\r\n post_spacing,\r\n bearer_spans\r\n );\r\n let BearerActual = post_spacing;\r\n let BearerCapacity = BearerActual / BearerMaxSpan;\r\n let PostMaxHeight = MaxDeckPostHeights(post_section, post_spans);\r\n let PostCapacity = structure_height / PostMaxHeight;\r\n\r\n return {\r\n JoistMaxSpacing: joist_spacing,\r\n JoistMaxSpan: JoistMaxSpan,\r\n JoistActual: JoistActual,\r\n JoistCapacity: JoistCapacity,\r\n BearerMaxSpacing: bearer_spacing,\r\n BearerMaxSpan: BearerMaxSpan,\r\n BearerActual: BearerActual,\r\n BearerCapacity: BearerCapacity,\r\n PostMaxHeight: PostMaxHeight,\r\n PostCapacity: PostCapacity,\r\n MaxOverallCapacity: Math.max(JoistCapacity, BearerCapacity, PostCapacity),\r\n };\r\n}\r\n","import React from \"react\";\r\n\r\nimport * as Schemas from \"./jobState_Schemas\";\r\nimport { API_BASE } from \"../AppConfig\";\r\nimport { setNull, fetchTimeout, get, toNumber, RemoveItemFromArray, getItemFromArray } from \"../components/Common\";\r\nimport * as ReducerFunctions from \"./reducerFunctions\";\r\nimport * as CONFIG from \"./configState\";\r\nimport * as COMMON from \"../components/Common\";\r\nimport { SITE_PARAMETER_SECTIONS, QUOTE_PARAMETER_SECTIONS, BASIC_SPECS_SECTIONS } from \"./jobState_Schemas\";\r\nimport * as JOBSTATE_VALIDATION from \"./jobState_Validation\";\r\nimport _merge from \"lodash/merge\";\r\nimport _cloneDeep from \"lodash/cloneDeep\";\r\nimport { GetColourUpdateString, GetBOMUpdateString } from \"../components_designer/layout/PaperFunctionHelper\";\r\nimport { GetDesignStringShort } from \"../components_designer/main_drawer/QuotePage\";\r\n\r\nimport { updateAPP, checkInternetConnection, UPDATE_DESIGNER, SHOW_LOADING_BAR, showDialogData } from \"./appState\";\r\nimport { GetShapeUpdateString } from \"../components_designer/layout/PaperFunctionHelper\";\r\nimport { jobStateErrorPopups, jobStateMessagePopups } from \"./jobStateWarningPopups\";\r\nconst { convertJobStateToIni } = require(\"../components/Common_Conversions\");\r\n\r\n// 2D Designer Actions\r\nexport const SHOW_DESIGNER_MESSAGE = \"SHOW_DESIGNER_MESSAGE\";\r\nexport const CLEAR_DESIGNER_MESSAGE = \"CLEAR_DESIGNER_MESSAGE\";\r\nexport const APPEND_DESIGNER_MESSAGE = \"APPEND_DESIGNER_MESSAGE\";\r\n\r\n// Action Constants\r\n\r\nexport const UPDATE_2D_DESIGNER_SVGS = \"UPDATE_2D_DESIGNER_SVGS\";\r\nexport const UPDATE_3D_MODEL = \"UPDATE_3D_MODEL\";\r\nexport const UPDATE_3D_GLB = \"UPDATE_3D_GLB\";\r\nexport const UPDATE_CUSTOMER = \"Customer\";\r\nexport const UPDATE_DISTRIBUTOR = \"Distributor\";\r\nexport const UPDATE_DESIGN_SPECIFICATION = \"UPDATE_DESIGN_SPECIFICATION\";\r\nexport const UPDATE_SITE_PARAMETERS = \"SiteParameters\";\r\nexport const UPDATE_AREA_SPECIFICATION = \"AreaSpecifications\";\r\nexport const UPDATE_QUOTE_PARAMETERS = \"QuoteParameters\";\r\nexport const UPDATE_DESIGN_PARAMETERS = \"DesignParameters\";\r\nexport const UPDATE_JOB_PARAMETERS = \"JobParameters\";\r\nexport const ADD_NOTE = \"ADD_NOTE\";\r\nexport const ADD_NEW_AREA = \"ADD_NEW_AREA\";\r\nexport const ADD_NEW_AREA_TO_START = \"ADD_NEW_AREA_TO_START\";\r\nexport const DELETE_AREA = \"DELETE_AREA\";\r\nexport const NEW_JOB = \"NEW_JOB\";\r\nexport const UPDATE_JOB = \"UPDATE_JOB\";\r\nexport const UPDATE_ERROR_MAP = \"UPDATE_ERROR_MAP\";\r\nexport const CLEAR_ERROR_MAP = \"CLEAR_ERROR_MAP\";\r\nexport const UPDATE_AREA_SPECIFICATION_ERROR_MAP = \"UPDATE_AREA_SPECIFICATION_ERROR_MAP\";\r\nexport const UPDATE_ENGINEERING = \"UPDATE_ENGINEERING\";\r\n// Combined Initial State\r\n\r\nexport const initialState = {};\r\nexport function newDefaultJobState(config, new_id = \"\", user_data = null, num_areas = 1) {\r\n const default_state = {\r\n id: new_id,\r\n UserID: user_data ? user_data.id : \"\",\r\n BusinessCode: user_data ? user_data.BusinessCode : \"\",\r\n UserCode: user_data ? user_data.Usercode : \"\",\r\n Status: \"New\",\r\n OrderStatus: \"\",\r\n DesignSummary: \"\",\r\n Customer: Schemas.customer_initialState,\r\n User: {\r\n id: user_data?.id ? user_data.id : \"\",\r\n BusinessCode: user_data?.BusinessCode ? user_data.BusinessCode : \"\",\r\n Email: user_data?.Email ? user_data.Email : \"\",\r\n Phone: user_data?.Phone ? user_data.Phone : \"\",\r\n FirstName: user_data?.FirstName ? user_data.FirstName : \"\",\r\n LastName: user_data?.LastName ? user_data.LastName : \"\",\r\n },\r\n Distributor: user_data ? { ...user_data.BusinessDetails } : \"\",\r\n App: {\r\n current_SVG: \"\",\r\n current_OBJ: \"\",\r\n },\r\n QuoteParameters: Schemas.quote_parameters_initialState,\r\n SiteParameters: Schemas.site_parameters_initialState,\r\n DesignParameters: Schemas.design_parameters_initialState,\r\n AreaSpecifications: [\r\n Schemas.basic_specs_initialState,\r\n // {\r\n // ...Schemas.basic_specs_initialState,\r\n // SHAPE: {\r\n // ...Schemas.basic_specs_initialState.SHAPE,\r\n // RoofPitch: 20,\r\n // DesignType: 'Pitched Roof',\r\n // }\r\n // }\r\n ],\r\n Notes: [],\r\n };\r\n\r\n while (default_state.AreaSpecifications.length < num_areas) {\r\n let default_area_data = _cloneDeep(Schemas.basic_specs_initialState);\r\n if (config?.design_options?.[\"Gable Hip Roof\"]?.allow_roll_top_ridge)\r\n default_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RollTopRidge = true;\r\n default_state.AreaSpecifications.push(default_area_data);\r\n }\r\n\r\n // let new_state = JOBSTATE_VALIDATION.validateJob({ ...default_state });\r\n let new_state = default_state;\r\n if (config?.id) {\r\n new_state = JOBSTATE_VALIDATION.validateFullJob(config, default_state);\r\n }\r\n\r\n let errorMapDefaultScheme = { ...setNull(new_state) };\r\n // if (new_id != \"\") {\r\n errorMapDefaultScheme.Customer.JobName = \"Job Name is required\";\r\n errorMapDefaultScheme.SiteParameters.Address.FormattedAddress = \"Site Address is required\";\r\n // errorMapDefaultScheme.SiteParameters.WindData.WindZoneAS1170 = \"Wind Data is required\";\r\n // errorMapDefaultScheme.SiteParameters.WindData.Blocking = \"Blocking is required\";\r\n // }\r\n\r\n if (user_data) {\r\n new_state.LastEditor = {\r\n id: user_data.id,\r\n DisplayName: user_data.DisplayName,\r\n UserCode: user_data.UserCode,\r\n _session_id: window?.session_id,\r\n _ts: Date.now(),\r\n };\r\n }\r\n\r\n return {\r\n ...new_state,\r\n ErrorMap: errorMapDefaultScheme,\r\n // design_parameters: Schemas.design_parameters_initialState,\r\n // area_specifications: {\r\n // 0: Schemas.basic_specs_initialState,\r\n // },\r\n Notes: [],\r\n };\r\n}\r\n\r\n// Recursive function to find differences in nested objects\r\nfunction findDifferences(previousState, newState) {\r\n const differences = {};\r\n\r\n if (previousState && newState)\r\n for (const key in newState) {\r\n if (key === \"META\" || key === \"LastEditor\") {\r\n continue; // Skip keys to be ignored\r\n }\r\n\r\n if (typeof newState[key] === \"object\" && newState[key] !== null) {\r\n // If the value is an object, recursively find differences\r\n const nestedDifferences = findDifferences(previousState[key], newState[key]);\r\n if (Object.keys(nestedDifferences).length > 0) {\r\n differences[key] = nestedDifferences;\r\n }\r\n } else if (previousState[key] !== newState[key]) {\r\n // If the value is different, record the difference\r\n differences[key] = {\r\n previous: previousState[key],\r\n new: newState[key],\r\n };\r\n\r\n break;\r\n }\r\n }\r\n\r\n return differences;\r\n}\r\n\r\nexport default function (state = initialState, action) {\r\n let section = action.type;\r\n switch (action.type) {\r\n case NEW_JOB:\r\n window.job = action.parameter;\r\n\r\n return action.parameter;\r\n\r\n case UPDATE_2D_DESIGNER_SVGS:\r\n return {\r\n ...state,\r\n App: {\r\n ...state.App,\r\n current_SVG: action.value,\r\n },\r\n };\r\n case UPDATE_3D_MODEL:\r\n return {\r\n ...state,\r\n App: {\r\n ...state.App,\r\n current_OBJ: action.value,\r\n },\r\n };\r\n case UPDATE_3D_GLB:\r\n return {\r\n ...state,\r\n App: {\r\n ...state.App,\r\n current_GLB: action.value,\r\n },\r\n };\r\n case ADD_NOTE:\r\n return {\r\n ...state,\r\n Notes: [\r\n ...state.Notes,\r\n {\r\n timestamp: action.timestamp,\r\n system_generated: action.system_generated,\r\n user: action.user.id,\r\n user_code: action.user.UserCode,\r\n user_role: action.user.RoleName,\r\n text: action.value,\r\n attachments: action.attachments,\r\n },\r\n ],\r\n };\r\n case ADD_NEW_AREA:\r\n let areaSpecs = [...state.AreaSpecifications];\r\n areaSpecs.push(action.value);\r\n let new_state = {\r\n ...state,\r\n AreaSpecifications: [...areaSpecs],\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n case ADD_NEW_AREA_TO_START:\r\n let areaSpecsNew = [...state.AreaSpecifications];\r\n areaSpecsNew.unshift(action.value);\r\n new_state = {\r\n ...state,\r\n AreaSpecifications: [...areaSpecsNew],\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n case DELETE_AREA:\r\n let deletedAreaSpecsNew = [...state.AreaSpecifications];\r\n deletedAreaSpecsNew.splice(Math.floor(action.areaIndex), 1);\r\n new_state = {\r\n ...state,\r\n AreaSpecifications: [...deletedAreaSpecsNew],\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n case UPDATE_DISTRIBUTOR:\r\n new_state = {\r\n ...state,\r\n Distributor: action.value,\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n case UPDATE_JOB_PARAMETERS:\r\n if (!state) return state;\r\n\r\n if (!action.parameter && typeof action.value === \"object\") {\r\n new_state = {\r\n ...state,\r\n ...action.value,\r\n };\r\n //\r\n } else {\r\n new_state = {\r\n ...state,\r\n [action.parameter]: action.value,\r\n };\r\n }\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n\r\n case UPDATE_CUSTOMER:\r\n case UPDATE_SITE_PARAMETERS:\r\n case UPDATE_QUOTE_PARAMETERS:\r\n if (!state) return state;\r\n\r\n if (!action.subsection) {\r\n let new_state = {\r\n ...state,\r\n [section]: {\r\n ...state[section],\r\n [action.parameter]: action.value,\r\n },\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n } else {\r\n let new_state = {\r\n ...state,\r\n [section]: {\r\n ...state[section],\r\n [action.subsection]: {\r\n ...state[section][action.subsection],\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n //\r\n // return newone;\r\n }\r\n\r\n case UPDATE_DESIGN_PARAMETERS:\r\n section = action.type;\r\n\r\n if (!state) return state;\r\n\r\n if (!action.subsection) {\r\n let new_state = {\r\n ...state,\r\n [section]: {\r\n ...state[section],\r\n [action.parameter]: action.value,\r\n },\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n } else {\r\n let new_state = {\r\n ...state,\r\n [section]: {\r\n ...state[section],\r\n [action.subsection]: {\r\n ...state[section][action.subsection],\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n };\r\n if (action.config) return JOBSTATE_VALIDATION.validateFullJob(action.config, new_state);\r\n else return new_state;\r\n //\r\n // return newone;\r\n }\r\n\r\n case UPDATE_DESIGN_SPECIFICATION:\r\n return {\r\n ...state,\r\n design_parameters: {\r\n ...state.design_parameters,\r\n [action.parameter]: action.value,\r\n },\r\n };\r\n case UPDATE_AREA_SPECIFICATION:\r\n section = action.type;\r\n\r\n let newAreaSpecifications = ReducerFunctions.UpdateObjectInArray(state[section], action);\r\n for (let index in newAreaSpecifications) {\r\n newAreaSpecifications[Number(index)].AreaIndex = Number(index);\r\n }\r\n\r\n // validateShapeData(newAreaSpecifications[action.index]);\r\n // if (action.section === \"SHAPE\") newAreaSpecifications[action.index][action.section] = validateShapeData(newAreaSpecifications[action.index]);\r\n\r\n let new_job = {\r\n ...state,\r\n [section]: newAreaSpecifications,\r\n };\r\n new_job.DesignSummary = GetDesignStringShort(new_job.AreaSpecifications);\r\n if (action.config) new_job = JOBSTATE_VALIDATION.validateFullJob(action.config, new_job);\r\n return new_job;\r\n case UPDATE_AREA_SPECIFICATION_ERROR_MAP:\r\n section = \"AreaSpecifications\";\r\n let error_action = {\r\n ...action,\r\n value: action.error,\r\n };\r\n\r\n if (!state.ErrorMap) {\r\n state.ErrorMap = Object.assign({}, newDefaultJobState.ErrorMap);\r\n }\r\n\r\n let new_job2 = {\r\n ...state,\r\n [section]: ReducerFunctions.UpdateObjectInArray(state[section], action),\r\n ErrorMap: {\r\n ...state.ErrorMap,\r\n [section]: ReducerFunctions.UpdateObjectInArray(state.ErrorMap[section], error_action),\r\n },\r\n };\r\n\r\n new_job2.DesignSummary = GetDesignStringShort(new_job2.AreaSpecifications);\r\n return new_job2;\r\n\r\n case CLEAR_ERROR_MAP:\r\n // let setAll = (obj, val) => Object.keys(obj).forEach(k => obj[k] = val);\r\n // let setNull = obj => setAll(obj, null);\r\n return {\r\n ...state,\r\n ErrorMap: setNull(state.ErrorMap),\r\n };\r\n\r\n case UPDATE_ERROR_MAP:\r\n if (!state.ErrorMap) {\r\n state.ErrorMap = Object.assign({}, newDefaultJobState.ErrorMap);\r\n }\r\n\r\n if (!action.section) {\r\n return {\r\n ...state,\r\n ErrorMap: action.value,\r\n };\r\n } else if (!action.subsection) {\r\n return {\r\n ...state,\r\n ErrorMap: {\r\n ...state.ErrorMap,\r\n [action.section]: {\r\n ...state.ErrorMap[action.section],\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n };\r\n } else {\r\n return {\r\n ...state,\r\n ErrorMap: {\r\n ...state?.ErrorMap,\r\n [action.section]: {\r\n ...state?.[\"ErrorMap\"]?.[action.section],\r\n [action.subsection]: {\r\n ...state?.[\"ErrorMap\"]?.[action.section]?.[action.subsection],\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n },\r\n };\r\n }\r\n\r\n case UPDATE_ENGINEERING:\r\n let new_eng_data = [...state.QuoteParameters.ENGINEERING.Data];\r\n new_eng_data[action.areaIndex] = action.value;\r\n new_state = {\r\n ...state,\r\n [\"QuoteParameters\"]: {\r\n ...state[\"QuoteParameters\"],\r\n [\"ENGINEERING\"]: {\r\n ...state[\"QuoteParameters\"][\"ENGINEERING\"],\r\n [\"Data\"]: new_eng_data,\r\n },\r\n },\r\n };\r\n return new_state;\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport const addNote =\r\n (system_generated, user, note, attachments = null) =>\r\n (dispatch) => {\r\n dispatch({\r\n type: ADD_NOTE,\r\n timestamp: new Date().getTime(),\r\n system_generated: system_generated,\r\n user: user,\r\n value: note,\r\n attachments: attachments,\r\n });\r\n };\r\n\r\nconst MatchUpColourSelections = ({ new_area_data, area_to_match }) => {\r\n new_area_data.BEAMS_AND_POSTS.BeamCol1 = area_to_match.BEAMS_AND_POSTS.BeamCol1;\r\n new_area_data.BEAMS_AND_POSTS.Beam1ColourSelectionMade = area_to_match.BEAMS_AND_POSTS.Beam1ColourSelectionMade;\r\n new_area_data.BEAMS_AND_POSTS.BeamColMatchBeam = area_to_match.BEAMS_AND_POSTS.BeamColMatchBeam;\r\n new_area_data.BEAMS_AND_POSTS.BeamCol2 = area_to_match.BEAMS_AND_POSTS.BeamCol2;\r\n new_area_data.BEAMS_AND_POSTS.BeamCol2MatchBeam = area_to_match.BEAMS_AND_POSTS.BeamCol2MatchBeam;\r\n new_area_data.BEAMS_AND_POSTS.BeamCol3 = area_to_match.BEAMS_AND_POSTS.BeamCol3;\r\n new_area_data.BEAMS_AND_POSTS.BeamCol3MatchBeam = area_to_match.BEAMS_AND_POSTS.BeamCol3MatchBeam;\r\n new_area_data.BEAMS_AND_POSTS.BeamCol4 = area_to_match.BEAMS_AND_POSTS.BeamCol4;\r\n new_area_data.BEAMS_AND_POSTS.BeamCol4MatchBeam = area_to_match.BEAMS_AND_POSTS.BeamCol4MatchBeam;\r\n new_area_data.BEAMS_AND_POSTS.PostCol = area_to_match.BEAMS_AND_POSTS.PostCol;\r\n new_area_data.BEAMS_AND_POSTS.PostColourSelectionMade = area_to_match.BEAMS_AND_POSTS.PostColourSelectionMade;\r\n new_area_data.BEAMS_AND_POSTS.PostColMatchBeam = area_to_match.BEAMS_AND_POSTS.PostColMatchBeam;\r\n new_area_data.BEAMS_AND_POSTS.FootingType = area_to_match.BEAMS_AND_POSTS.FootingType;\r\n new_area_data.BEAMS_AND_POSTS.IntermediatePostsFullHeight =\r\n area_to_match.BEAMS_AND_POSTS.IntermediatePostsFullHeight;\r\n new_area_data.BEAMS_AND_POSTS.CornerPostsFullHeight = area_to_match.BEAMS_AND_POSTS.CornerPostsFullHeight;\r\n\r\n new_area_data.ROOF_SHEETING.RoofColourSelectionMade = area_to_match.ROOF_SHEETING.RoofColourSelectionMade;\r\n new_area_data.ROOF_SHEETING.RoofSheetColour = area_to_match.ROOF_SHEETING.RoofSheetColour;\r\n new_area_data.ROOF_SHEETING.SkylightColourSelectionMade = area_to_match.ROOF_SHEETING.SkylightColourSelectionMade;\r\n new_area_data.ROOF_SHEETING.SkylightColour = area_to_match.ROOF_SHEETING.SkylightColour;\r\n new_area_data.ROOF_SHEETING.FlashingColourMatchString = area_to_match.ROOF_SHEETING.FlashingColourMatchString;\r\n new_area_data.ROOF_SHEETING.FlashingColour = area_to_match.ROOF_SHEETING.FlashingColour;\r\n new_area_data.ROOF_SHEETING.RidgeColour = area_to_match.ROOF_SHEETING.RidgeColour;\r\n new_area_data.ROOF_SHEETING.RidgeColourMatchString = area_to_match.ROOF_SHEETING.RidgeColourMatchString;\r\n\r\n new_area_data.GUTTERS_AND_DOWNPIPES.GutterColourSelectionMade =\r\n area_to_match.GUTTERS_AND_DOWNPIPES.GutterColourSelectionMade;\r\n new_area_data.GUTTERS_AND_DOWNPIPES.GutterCol = area_to_match.GUTTERS_AND_DOWNPIPES.GutterCol;\r\n new_area_data.GUTTERS_AND_DOWNPIPES.BoxGutterColour = area_to_match.GUTTERS_AND_DOWNPIPES.BoxGutterColour;\r\n new_area_data.GUTTERS_AND_DOWNPIPES.BoxGutterColourMatchBeam =\r\n area_to_match.GUTTERS_AND_DOWNPIPES.BoxGutterColourMatchBeam;\r\n new_area_data.GUTTERS_AND_DOWNPIPES.DownpipeCol = area_to_match.GUTTERS_AND_DOWNPIPES.DownpipeCol;\r\n new_area_data.GUTTERS_AND_DOWNPIPES.DownpipeColourSelectionMade =\r\n area_to_match.GUTTERS_AND_DOWNPIPES.DownpipeColourSelectionMade;\r\n\r\n // if (area_to_match.SHAPE.DesignType === \"Flat Roof\") {\r\n // new_area_data.SHAPE.RoofPitch = area_to_match.SHAPE.RoofPitch;\r\n // new_area_data.ROOF_SHEETING.RoofType = area_to_match.ROOF_SHEETING.RoofType;\r\n // new_area_data.ROOF_SHEETING.RoofGroupType = area_to_match.ROOF_SHEETING.RoofGroupType;\r\n // new_area_data.ROOF_SHEETING.RoofSubType = area_to_match.ROOF_SHEETING.RoofSubType;\r\n // new_area_data.ROOF_SHEETING.RoofSpan = area_to_match.ROOF_SHEETING.RoofSpan;\r\n // new_area_data.ROOF_SHEETING.RoofSheetData = area_to_match.ROOF_SHEETING.RoofSheetData;\r\n // new_area_data.ROOF_SHEETING.ReverseRoll = area_to_match.ROOF_SHEETING.ReverseRoll;\r\n // new_area_data.ROOF_SHEETING.SkylightType = area_to_match.ROOF_SHEETING.SkylightType;\r\n // new_area_data.ROOF_SHEETING.SkylightSubType = area_to_match.ROOF_SHEETING.SkylightSubType;\r\n // new_area_data.GUTTERS_AND_DOWNPIPES.DownpipeType = area_to_match.GUTTERS_AND_DOWNPIPES.DownpipeType;\r\n // new_area_data.GUTTERS_AND_DOWNPIPES.GutterType = area_to_match.GUTTERS_AND_DOWNPIPES.GutterType;\r\n // }\r\n\r\n return new_area_data;\r\n};\r\n\r\nconst MatchUpShape = ({ new_area_data, area_to_match }, roofType) => {\r\n const { SHAPE } = area_to_match;\r\n const { CUTOUTS, AREAJOIN, ...rest } = SHAPE; // Exclude Cutouts and Areajoin parameters\r\n\r\n new_area_data.SHAPE = { ...new_area_data.SHAPE, ...rest };\r\n\r\n if (!roofType) new_area_data.SHAPE.DesignType = \"Flat Roof\"; // Set to default - flat\r\n\r\n // If adding area from gable to flat set roofpitch to minimum\r\n if (SHAPE.DesignType !== new_area_data.SHAPE.DesignType)\r\n new_area_data.SHAPE.RoofPitch = new_area_data?.ROOF_SHEETING?.RoofSheetData?.min_pitch;\r\n\r\n return new_area_data;\r\n};\r\n\r\nconst MatchUpSpec = ({ new_area_data, area_to_match, area_spec }) => {\r\n const matchedArea = area_to_match[area_spec];\r\n new_area_data[area_spec] = { ...matchedArea };\r\n return new_area_data;\r\n};\r\n\r\nconst MatchUpRoofsheet = ({ new_area_data, area_to_match }) => {\r\n return MatchUpSpec({ new_area_data, area_to_match, area_spec: \"ROOF_SHEETING\" });\r\n};\r\n\r\nconst MatchUpAttachments = ({ new_area_data, area_to_match }) => {\r\n return MatchUpSpec({ new_area_data, area_to_match, area_spec: \"ATTACHMENTS\" });\r\n};\r\n\r\nconst MatchUpBeamPost = ({ new_area_data, area_to_match }) => {\r\n return MatchUpSpec({ new_area_data, area_to_match, area_spec: \"BEAMS_AND_POSTS\" });\r\n};\r\n\r\nconst MatchUpGutterDownpipe = ({ new_area_data, area_to_match }) => {\r\n return MatchUpSpec({ new_area_data, area_to_match, area_spec: \"GUTTERS_AND_DOWNPIPES\" });\r\n};\r\n\r\nexport const addNewArea =\r\n (add_to_start = false, areaSettings) =>\r\n (dispatch, getState) => {\r\n const config = getState().config;\r\n const AreaSpecifications = [...getState().job.AreaSpecifications];\r\n\r\n let new_area_data = { ...Schemas.basic_specs_initialState };\r\n\r\n const InheritAreaIndex = add_to_start ? 0 : AreaSpecifications.length > 0 ? AreaSpecifications.length - 1 : 0;\r\n\r\n if (config?.design_options?.[\"Gable Hip Roof\"]?.allow_roll_top_ridge)\r\n new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RollTopRidge = true;\r\n\r\n const areaData = { new_area_data, area_to_match: AreaSpecifications[InheritAreaIndex] };\r\n\r\n new_area_data = MatchUpColourSelections(areaData);\r\n if (areaSettings?.areaShape !== false) new_area_data = MatchUpShape(areaData, areaSettings?.roofType);\r\n if (areaSettings?.areaRoofsheet !== false) new_area_data = MatchUpRoofsheet(areaData);\r\n if (areaSettings?.areaAttachments !== false) new_area_data = MatchUpAttachments(areaData);\r\n if (areaSettings?.areaBeamPost !== false) new_area_data = MatchUpBeamPost(areaData);\r\n if (areaSettings?.areaGutterDownpipe !== false) new_area_data = MatchUpGutterDownpipe(areaData);\r\n\r\n dispatch({\r\n type: add_to_start ? ADD_NEW_AREA_TO_START : ADD_NEW_AREA,\r\n value: new_area_data,\r\n config: getState().config,\r\n });\r\n };\r\n\r\nexport const deleteArea = (areaIndex) => (dispatch, getState) => {\r\n dispatch({\r\n type: DELETE_AREA,\r\n areaIndex: areaIndex,\r\n value: { ...Schemas.basic_specs_initialState },\r\n config: getState().config,\r\n });\r\n};\r\n\r\n// export const updateCustomer = (parameter, value) => dispatch => {\r\n// let subsection = null;\r\n// if (parameter.includes(\".\")) {\r\n// let parameter_split = parameter.split(\".\");\r\n// subsection = parameter_split[0];\r\n// parameter = parameter_split[1];\r\n// }\r\n//\r\n// dispatch({\r\n// type: UPDATE_CUSTOMER,\r\n// parameter: parameter,\r\n// subsection: subsection,\r\n// value: value\r\n// });\r\n// }\r\n\r\nexport const updateDistributor = (value, validate = false) => {\r\n return updateJobState(UPDATE_DISTRIBUTOR, null, value, validate);\r\n};\r\nexport const updateJobUser = (value, validate = false) => {\r\n return updateJobState(\"User\", null, value, validate);\r\n};\r\nexport const updateCustomer = (parameter, value, validate = false) => {\r\n return updateJobState(UPDATE_CUSTOMER, parameter, value, validate);\r\n};\r\nexport const updateSiteParameters = (parameter, value, validate = false) => {\r\n return updateJobState(UPDATE_SITE_PARAMETERS, parameter, value, validate);\r\n};\r\n\r\n// export const updateValidateSiteParameters = (subsection, parameter, value) => {\r\n// let new_job = COMMON.deepCopy(getState().job);\r\n// const config = getState().config;\r\n// //forced compliance/ mass settings, updates\r\n// new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job);\r\n\r\n// dispatch({\r\n// type: NEW_JOB,\r\n// index: areaIndex,\r\n// section: null,\r\n// subsection: null,\r\n// parameter: new_job,\r\n// value: null,\r\n// error: null\r\n// });\r\n// // return updateJobState(UPDATE_SITE_PARAMETERS, parameter, value, validate);\r\n// }\r\n\r\nexport const updateQuoteParameters = (parameter, value, validate = false) => {\r\n return updateJobState(UPDATE_QUOTE_PARAMETERS, parameter, value, validate);\r\n};\r\n\r\nexport const updateDesignParameters = (parameter, value, validate = false) => {\r\n return updateJobState(UPDATE_DESIGN_PARAMETERS, parameter, value, validate);\r\n};\r\n\r\nexport const updateBOMOrderData =\r\n (order_data, system_data = null) =>\r\n (dispatch, getState) => {\r\n let new_bom_data = { ...getState().job.QuoteParameters.BOM };\r\n if (order_data !== null) new_bom_data.OrderList = order_data;\r\n if (system_data !== null) new_bom_data.SystemList = system_data;\r\n // return dispatch(updateQuoteParameters(\"BOM\", new_bom_data));\r\n return dispatch(updateJobState(UPDATE_QUOTE_PARAMETERS, \"BOM\", new_bom_data, false));\r\n };\r\n\r\nexport const updateBOMFreightPOA = (price) => (dispatch, getState) => {\r\n let new_bom_data = { ...getState().job.QuoteParameters.BOM };\r\n new_bom_data.FreightPOA = price;\r\n return dispatch(updateJobState(UPDATE_QUOTE_PARAMETERS, \"BOM\", new_bom_data, false));\r\n};\r\n\r\nconst toBase64 = (file) =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = (error) => reject(error);\r\n });\r\n\r\nexport const updateGLB =\r\n ({ glb }) =>\r\n (dispatch, getState) => {\r\n let job = getState()?.job;\r\n if (!job) return;\r\n // );\r\n\r\n toBase64(glb.glTFFiles[\"model.glb\"]).then((e) => {\r\n let api_url = API_BASE() + \"obj/\" + job.id + \"/\";\r\n\r\n return fetchTimeout(\r\n api_url,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n job,\r\n glb: e.split(\"base64,\")[1],\r\n }),\r\n },\r\n 60000\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n dispatch(updateJobState(UPDATE_3D_GLB, \"\", glb, false));\r\n });\r\n });\r\n };\r\n\r\nexport const updateBOMData =\r\n (job_data, fast = true, callback) =>\r\n async (dispatch, getState) => {\r\n let api_url = API_BASE() + \"bom/\" + job_data.id + \"/\";\r\n let config = getState().config;\r\n let pricefile = getState().app?.pricefile;\r\n let job_ini = convertJobStateToIni(job_data, getState().app, \"\", getState().config);\r\n let request_id = Date.now();\r\n let job_shape_details = {};\r\n let offering_bom_schema = {};\r\n const designTemplateName = job_data?.AreaSpecifications[0]?.SHAPE?.DesignTemplateName;\r\n\r\n window.loadingBOM_id = request_id;\r\n offering_bom_schema.overall = config?.bom_items_for_each_job;\r\n\r\n for (let this_area_data of job_data.AreaSpecifications) {\r\n if (designTemplateName) {\r\n offering_bom_schema[this_area_data.AreaIndex] =\r\n config?.design_options?.[job_data.DesignSummary]?.design_templates?.[\r\n designTemplateName\r\n ]?.bom_items.add;\r\n } else {\r\n const designType = this_area_data.SHAPE.DesignType;\r\n const design_option = config?.design_options?.[designType];\r\n offering_bom_schema[this_area_data.AreaIndex] = design_option?.bom_items;\r\n }\r\n\r\n // Only required if its a gable structure for sheet modification (sheet laying rules for GS1)\r\n let isGable = this_area_data.SHAPE.RoofType1 === \"Gable\" ? true : false;\r\n job_shape_details[this_area_data.AreaIndex] = { isGable, SKYLIGHTS: this_area_data.SKYLIGHTS };\r\n }\r\n\r\n // Add Packing fee to BOM for Lysaght\r\n if (window.LYSAGHT && !offering_bom_schema.overall.some((item) => item.Code === \"CONSOLHI\")) {\r\n offering_bom_schema.overall.push({ Code: \"CONSOLHI\", Modifiable: false });\r\n }\r\n\r\n let append_items = appendBOMItems(job_data, pricefile);\r\n\r\n let timeout = 20000;\r\n if (job_data?.DesignParameters) {\r\n timeout =\r\n 8000 +\r\n job_data.DesignParameters.NumFlat * 3000 +\r\n job_data.DesignParameters.NumGable * 4000 +\r\n job_data.DesignParameters.NumDeck * 3000;\r\n }\r\n\r\n try {\r\n const response = await fetchTimeout(\r\n api_url,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n job: job_ini,\r\n fast: fast,\r\n order_list: fast ? {} : get(job_data, \"QuoteParameters.BOM.OrderList\", {}),\r\n request_id: request_id,\r\n job_id: job_data.id,\r\n job_shape_details,\r\n site_poa: job_data?.App?.temp_POA\r\n ? job_data?.App?.temp_POA\r\n : job_data?.Distributor?.Offer?.Regions?.[0],\r\n offering_bom_schema: offering_bom_schema,\r\n append_items: append_items,\r\n }),\r\n retry: true,\r\n retry_timeout: timeout * 1.5,\r\n request_id: request_id,\r\n },\r\n timeout\r\n );\r\n\r\n const json = await response.json();\r\n\r\n if (json.request_id !== window.loadingBOM_id) return;\r\n\r\n if (json.Error) {\r\n throw new Error(json.Error);\r\n } else if (json.bom_system) {\r\n let new_bom_data = { ...getState().job.QuoteParameters.BOM };\r\n let hashcode = GetShapeUpdateString() + GetColourUpdateString() + GetBOMUpdateString();\r\n\r\n window.job = { ...job_data };\r\n\r\n new_bom_data.SystemList = json.bom_system?.system_items;\r\n new_bom_data.bomHashCode = hashcode;\r\n\r\n if (json.quote_data) {\r\n new_bom_data.QuoteData = json.quote_data;\r\n }\r\n\r\n if (json?.bom_system?.quote_data) {\r\n new_bom_data.QuoteData = json.bom_system.quote_data;\r\n }\r\n\r\n dispatch(updateQuoteParameters(\"BOM\", new_bom_data));\r\n }\r\n\r\n // No errors thrown so execute callback if one has been provided\r\n if (callback) callback();\r\n } catch (e) {\r\n let message = \"Error loading layout from QikQuote server.\";\r\n if (e.message === \"failed to fetch\") message = \"Error loading ... QikQuote server is not accessible.\";\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: \"Error: \" + message,\r\n });\r\n\r\n let new_bom_data = {};\r\n if (getState().job?.QuoteParameters?.BOM) new_bom_data = { ...getState().job?.QuoteParameters?.BOM };\r\n new_bom_data.error = message;\r\n dispatch(updateQuoteParameters(\"BOM\", new_bom_data));\r\n }\r\n };\r\n\r\nexport const appendBOMItems = (job, pricefile) => {\r\n let new_items = [];\r\n if (window.LYSAGHT && !job.DesignParameters.USE_ATTACHMENTS_2) {\r\n if (window?.drawing_svg_meta?.attachments) {\r\n for (let attachment of window?.drawing_svg_meta?.attachments) {\r\n let attachment_length = attachment.length;\r\n let attachment_type = job?.SiteParameters?.[SITE_PARAMETER_SECTIONS.ExistingStructure]?.AttachmentType;\r\n let sub_attachment_type = \"\";\r\n\r\n let area = attachment?.area ? attachment?.area : 0;\r\n\r\n const areaDataPartialAttachments = job.AreaSpecifications?.[area]?.ATTACHMENTS?.PARTIAL_ATTACHMENTS;\r\n if (areaDataPartialAttachments) {\r\n let data_paat = getItemFromArray(areaDataPartialAttachments, \"Ref\", attachment.ref2);\r\n if (data_paat) {\r\n attachment_length = data_paat?.Length;\r\n }\r\n }\r\n\r\n const areaDataAttachmentModifications =\r\n job.AreaSpecifications?.[area]?.ATTACHMENTS?.AttachmentModifications;\r\n if (areaDataAttachmentModifications) {\r\n let data_mods = getItemFromArray(areaDataAttachmentModifications, \"Ref\", attachment.ref2);\r\n if (data_mods?.AttachmentType) {\r\n attachment_type = data_mods?.AttachmentType;\r\n }\r\n if (data_mods?.AttachmentSubType) {\r\n sub_attachment_type = data_mods?.AttachmentSubType;\r\n }\r\n }\r\n\r\n if (attachment_type === \"Wall\") {\r\n if (sub_attachment_type === \"Timber Wall\") {\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n \"CS7510G\",\r\n toNumber(area) + 1,\r\n attachment_length / 600 + 1,\r\n \"\",\r\n \"\",\r\n \"Wall Attachment Fix\"\r\n )\r\n ); // coach screw\r\n } else if (sub_attachment_type === \"Timber Wall On Beam\") {\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n \"CS7510G\",\r\n toNumber(area) + 1,\r\n attachment_length / 600 + 1,\r\n \"\",\r\n \"\",\r\n \"Wall Attachment Fix\"\r\n )\r\n ); // coach screw\r\n\r\n let beam_type = job.AreaSpecifications[area][BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2;\r\n let beam_col = job.AreaSpecifications[area][BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamCol2;\r\n\r\n let beam_code = \"BS100\";\r\n if (beam_type === \"FL15015\") beam_code = \"BS150\";\r\n if (beam_type === \"FL20015\") beam_code = \"BS200\";\r\n\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n beam_code,\r\n toNumber(area) + 1,\r\n 1,\r\n attachment_length + 200,\r\n beam_col,\r\n \"Timber Wall Attachment Beam\"\r\n )\r\n ); // beam\r\n\r\n let endcap = \"FLUB100\";\r\n if (beam_type === \"FL15015\") endcap = \"FLUB150\";\r\n if (beam_type === \"FL20015\") endcap = \"FLUB200\";\r\n\r\n new_items.push(getItem(pricefile, endcap, toNumber(area) + 1, 2, \"\", beam_col)); // beam end cap\r\n } else if (sub_attachment_type === \"Masonry Wall\") {\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n \"SA7510G\",\r\n toNumber(area) + 1,\r\n attachment_length / 600 + 1,\r\n \"\",\r\n \"\",\r\n \"Wall Masonry Fix\"\r\n )\r\n ); // masonary screw\r\n } else if (sub_attachment_type === \"Masonry Wall On Beam\") {\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n \"SA7510G\",\r\n toNumber(area) + 1,\r\n attachment_length / 600 + 1,\r\n \"\",\r\n \"\",\r\n \"Wall Masonry Fix\"\r\n )\r\n ); // masonary screw\r\n\r\n let beam_type = job.AreaSpecifications[area][BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2;\r\n let beam_col = job.AreaSpecifications[area][BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamCol2;\r\n\r\n let beam_code = \"BS100\";\r\n if (beam_type === \"FL15015\") beam_code = \"BS150\";\r\n if (beam_type === \"FL20015\") beam_code = \"BS200\";\r\n\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n beam_code,\r\n toNumber(area) + 1,\r\n 1,\r\n attachment_length + 200,\r\n beam_col,\r\n \"Masonry Wall Attachment Beam\"\r\n )\r\n ); // beam\r\n\r\n let endcap = \"FLUB100\";\r\n if (beam_type === \"FL15015\") endcap = \"FLUB150\";\r\n if (beam_type === \"FL20015\") endcap = \"FLUB200\";\r\n new_items.push(getItem(pricefile, endcap, toNumber(area) + 1, 2, \"\", beam_col)); // beam end cap\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (window?.drawing_svg_meta?.area_data) {\r\n let frame = job?.SiteParameters?.[SITE_PARAMETER_SECTIONS.ExistingStructure]?.FrameType;\r\n\r\n for (let area_num in window?.drawing_svg_meta?.area_data) {\r\n let data = window?.drawing_svg_meta?.area_data[area_num];\r\n if (data?.num_beam_to_wall_attachments) {\r\n if (frame.includes(\"Brick\") || frame.includes(\"Masonry\")) {\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n \"SA7510G\",\r\n toNumber(area_num) + 1,\r\n 2 * data?.num_beam_to_wall_attachments,\r\n \"\",\r\n \"\",\r\n \"Bracket to Masonry Fix\"\r\n )\r\n ); // two dynabolts\r\n } else {\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n \"CS7510G\",\r\n toNumber(area_num) + 1,\r\n 2 * data?.num_beam_to_wall_attachments,\r\n \"\",\r\n \"\",\r\n \"Bracket to Wall Fix\"\r\n )\r\n ); // two coach screws\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let this_area_data of job.AreaSpecifications) {\r\n if (this_area_data.ROOF_SHEETING?.DownlightData) {\r\n if (\r\n this_area_data.ROOF_SHEETING?.DownlightData?.DownlightSelection &&\r\n this_area_data.ROOF_SHEETING?.DownlightData?.DownlightSelection !== \"None\"\r\n )\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n this_area_data.ROOF_SHEETING?.DownlightData?.DownlightSelection,\r\n this_area_data.AreaIndex + 1,\r\n this_area_data.ROOF_SHEETING?.DownlightData?.Amount,\r\n \"\",\r\n this_area_data.ROOF_SHEETING?.DownlightData?.DownlightColour\r\n )\r\n );\r\n }\r\n if (\r\n this_area_data.ROOF_SHEETING?.FanBracketSelection &&\r\n toNumber(this_area_data.ROOF_SHEETING?.FanBrackets) > 0\r\n ) {\r\n new_items.push(\r\n getItem(\r\n pricefile,\r\n this_area_data.ROOF_SHEETING?.FanBracketSelection,\r\n this_area_data.AreaIndex + 1,\r\n this_area_data.ROOF_SHEETING?.FanBrackets,\r\n \"\",\r\n \"\"\r\n )\r\n );\r\n }\r\n }\r\n\r\n // if (new_items.length > 0) system_items.items = system_items.items.concat(new_items);\r\n //\r\n return new_items;\r\n};\r\n\r\n// Get Index of item using description matching\r\nconst getIndexFromDesc = (desc, pricefile) => {\r\n let obj = pricefile.data.find((o) => o.ProductDescription === desc);\r\n\r\n if (obj) return obj.ProductIndex;\r\n else return \"\";\r\n};\r\n\r\nconst getItem = (pricefile, index, area, qty = \"1\", length = \"\", colour = \"\", use = null) => {\r\n let obj;\r\n if (pricefile) obj = pricefile.data.find((o) => o.ProductIndex === index);\r\n\r\n if (!obj && !obj?.GroupingName) {\r\n index = \"MSJ-\" + index;\r\n }\r\n\r\n return {\r\n Add: true,\r\n Category: obj?.GroupingName ? obj.GroupingName.toUpperCase() : \"\",\r\n Code: index,\r\n Desc:\r\n (obj?.ProductDescription ? obj.ProductDescription : \"****** Product Not Found:\") + \" \",\r\n Use: use ? use : \"Attachment Fix\",\r\n Colour: colour,\r\n Area: area,\r\n Qty: Math.trunc(qty).toString(),\r\n Length: length,\r\n CodeBase: index,\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"\",\r\n Fielders_Code: obj?.ProductCode ? obj.ProductCode : \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: obj?.SellingUOM ? obj.SellingUOM : \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: obj?.AncillaryParts ? obj.AncillaryParts : null,\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: obj?.PromptTextCodes ? obj.PromptTextCodes : \"\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n };\r\n};\r\n\r\nexport const updateWindDataParameters = (wind_data) => (dispatch, getState) => {\r\n let job = { ...getState().job };\r\n\r\n if (job?.SiteParameters?.WindData) {\r\n if (wind_data?.critical === null) {\r\n dispatch(updateSiteParameters(\"WindData.WindZone_UseAS1170\", false));\r\n dispatch(updateSiteParameters(\"WindData.WindZoneAS1170\", null));\r\n Promise.resolve(\"OK\");\r\n } else {\r\n dispatch(updateSiteParameters(\"WindData.WindZone_UseAS1170\", true));\r\n dispatch(updateSiteParameters(\"WindData.WindZoneAS1170\", wind_data, true));\r\n return Promise.resolve(\"OK\");\r\n }\r\n }\r\n\r\n return Promise.resolve(\"Error\");\r\n};\r\n\r\nexport const getWindData = (in_address, vr_mode) => (dispatch, getState) => {\r\n let job = { ...getState().job };\r\n let app = { ...getState().app };\r\n let round_down_wz = { ...getState().config?.job_settings?.round_down_wz };\r\n\r\n let api_url = API_BASE() + \"revolutio/\";\r\n\r\n let address = in_address ? in_address : job.SiteParameters.Address;\r\n\r\n let post_data = {\r\n lat: address.LatLng.lat,\r\n lng: address.LatLng.lng,\r\n height: 2400,\r\n address: address.FormattedAddress,\r\n post_code: address.PostCode,\r\n user_email: app.user.Email,\r\n };\r\n\r\n return fetchTimeout(\r\n api_url,\r\n {\r\n body: JSON.stringify(post_data),\r\n },\r\n 120000\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (json.Error) {\r\n throw json.Error;\r\n } else if (json.critical) {\r\n let new_wind_data = { ...json };\r\n\r\n if (new_wind_data.critical) {\r\n new_wind_data.calculated = JOBSTATE_VALIDATION.calculate_wind_data(\r\n new_wind_data,\r\n vr_mode,\r\n round_down_wz\r\n );\r\n }\r\n\r\n dispatch(updateWindDataParameters(new_wind_data));\r\n\r\n return Promise.resolve(new_wind_data);\r\n } else {\r\n throw \"no Data\";\r\n }\r\n })\r\n .catch((e) => {\r\n let message = \"Error loading Wind Data from QikQuote server.\";\r\n if (e.message === \"failed to fetch\") message = \"Error loading ... QikQuote server is not accesible.\";\r\n return Promise.resolve(\"Error: \" + message);\r\n });\r\n};\r\n\r\nexport const uploadDocument =\r\n (document_type, document_name, document_data, resizeImageByMaxWidth = 0) =>\r\n (dispatch, getState) => {\r\n let job = { ...getState().job };\r\n let api_url = API_BASE() + \"document/\" + job.id + \"/\" + document_type;\r\n\r\n return fetchTimeout(\r\n api_url,\r\n {\r\n method: \"PUT\",\r\n body: JSON.stringify({\r\n document_type: document_type,\r\n base_64: true,\r\n document_name: document_name,\r\n document_data: document_data,\r\n recompressImage: true,\r\n resizeImageByMaxWidth: resizeImageByMaxWidth,\r\n }),\r\n },\r\n 60000\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (json.Error) {\r\n throw json.Error;\r\n } else if (json.document_filename) {\r\n setTimeout(function () {\r\n dispatch(updateDocument(document_type, json.document_filename));\r\n }, 500);\r\n } else {\r\n }\r\n })\r\n .catch((e) => {\r\n let message = \"Error loading layout from QikQuote server.\";\r\n if (e.message === \"failed to fetch\") message = \"Error loading ... QikQuote server is not accesible.\";\r\n // dispatch({\r\n // type: SHOW_DESIGNER_MESSAGE,\r\n // message: \"Error: \" + message\r\n // });\r\n }); // parses JSON response into native Javascript objects\r\n };\r\n\r\nexport const updateDocument = (document_type, new_document) => (dispatch, getState) => {\r\n let new_document_data = { ...getState().job.QuoteParameters.DOCUMENTS };\r\n\r\n if (!new_document_data[document_type]) new_document_data[document_type] = [];\r\n\r\n new_document_data[document_type].unshift(new_document);\r\n\r\n dispatch({\r\n type: UPDATE_QUOTE_PARAMETERS,\r\n parameter: QUOTE_PARAMETER_SECTIONS.DOCUMENTS,\r\n subsection: null,\r\n value: new_document_data,\r\n config: getState().config,\r\n });\r\n\r\n return Promise.resolve();\r\n};\r\n\r\nexport const updateJobStateAndValidate = (section, parameter, value) => (dispatch, getState) => {\r\n dispatch(updateJobState(section, parameter, value)).then((result) => {\r\n let config = getState().config;\r\n let job = JOBSTATE_VALIDATION.validateJob(getState().job, config, dispatch);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: job,\r\n });\r\n });\r\n};\r\n\r\nexport const updateJobParameter = (parameter, value) => (dispatch, getState) => {\r\n return new Promise((resolve) => {\r\n dispatch({\r\n type: UPDATE_JOB_PARAMETERS,\r\n parameter: parameter,\r\n subsection: null,\r\n value: value,\r\n config: getState().config,\r\n });\r\n resolve(\"OK\");\r\n });\r\n};\r\n\r\nexport const updateJobState =\r\n (section, parameter, value, validate = false) =>\r\n (dispatch, getState) => {\r\n if (validate) {\r\n dispatch(validateJobState(section, parameter, value));\r\n }\r\n let subsection = null;\r\n if (parameter && parameter.includes(\".\")) {\r\n let parameter_split = parameter.split(\".\");\r\n subsection = parameter_split[0];\r\n parameter = parameter_split[1];\r\n } else if (section && section.includes(\".\")) {\r\n let section_split = section.split(\".\");\r\n section = section_split[0];\r\n subsection = section_split[1];\r\n }\r\n\r\n return new Promise((resolve) => {\r\n console.log(\"updateDesignParameters 2\", {\r\n type: section,\r\n parameter: parameter,\r\n subsection: subsection,\r\n value: value,\r\n config: getState().config,\r\n });\r\n dispatch({\r\n type: section,\r\n parameter: parameter,\r\n subsection: subsection,\r\n value: value,\r\n config: getState().config,\r\n });\r\n resolve(\"OK\");\r\n });\r\n };\r\n\r\nexport const validateCustomer = (parameter, value) => {\r\n validateJobState(UPDATE_CUSTOMER, parameter, value);\r\n};\r\n\r\nexport const validateSiteParameters = (parameter, value) => {\r\n return validateJobState(UPDATE_SITE_PARAMETERS, parameter, value);\r\n};\r\n\r\nexport const checkJobStateValidationSchema = (validationSchema, section, subsection, parameter, value) => {\r\n let error = null;\r\n let schema = get(validationSchema, section + (subsection ? \".\" + subsection : \"\") + \".\" + parameter);\r\n // if (validationSchema && validationSchema[section]) {\r\n // if (subsection && validationSchema[section][subsection] && validationSchema[section][subsection][parameter]) schema_exist = true;\r\n // else if (validationSchema[section][parameter]) schema_exist = true;\r\n // }\r\n //\r\n if (schema) {\r\n //\r\n error = JOBSTATE_VALIDATION.checkValidationScheme(schema, value);\r\n }\r\n return error;\r\n};\r\n\r\nexport const validateJobState = (section, parameter, value) => (dispatch, getState) => {\r\n let subsection = null;\r\n if (parameter.includes(\".\")) {\r\n let parameter_split = parameter.split(\".\");\r\n subsection = parameter_split[0];\r\n parameter = parameter_split[1];\r\n }\r\n\r\n let validationSchema = getState().config.validationSchema;\r\n\r\n let error = checkJobStateValidationSchema(validationSchema, section, subsection, parameter, value);\r\n\r\n dispatch({\r\n type: UPDATE_ERROR_MAP,\r\n section: section,\r\n parameter: parameter,\r\n subsection: subsection,\r\n value: error,\r\n });\r\n};\r\n\r\nexport const updateDesignSpecification = (areaIndex, section, parameter, value) => (dispatch) => {\r\n dispatch({\r\n type: UPDATE_DESIGN_SPECIFICATION,\r\n areaIndex: areaIndex,\r\n section: section,\r\n parameter: parameter,\r\n value: value,\r\n });\r\n};\r\n\r\nexport const deleteBeamPostMod = (areaIndex, ref, ref2, ref4) => (dispatch, getState) => {\r\n let current_array = getState().job?.AreaSpecifications?.[areaIndex]?.[\"BEAMMODIFICATIONS\"];\r\n let new_data_array = [...current_array];\r\n let tol = 60;\r\n new_data_array = current_array.filter((item) => {\r\n if (item.Area !== areaIndex) return true; // keep\r\n if (item[\"Ref2\"] === ref2 && item.Area === areaIndex) return false; //delete\r\n if (item[\"Ref\"] === ref && item.Area === areaIndex) return false; // delete\r\n if (COMMON.IsClose(item[\"Ref\"], ref, tol * 0.66, tol)) return false; // delete\r\n if (COMMON.IsClose(item[\"Ref4\"], ref4, tol * 0.66, tol)) return false; // delete\r\n return true; //keep\r\n });\r\n return new Promise((resolve) => {\r\n dispatch(updateAreaSpecification(areaIndex, \"BEAMMODIFICATIONS\", null, new_data_array));\r\n resolve(\"OK\");\r\n });\r\n};\r\n\r\nexport const deleteFromAreaSpecificationModificationArray =\r\n (\r\n areaIndex,\r\n section,\r\n ref,\r\n tol = 30,\r\n match_parameter = undefined,\r\n match_value = undefined,\r\n refKey2 = null,\r\n ref2 = null\r\n ) =>\r\n (dispatch, getState) => {\r\n let subsection = null;\r\n if (section && section.includes(\".\")) {\r\n let section_split = section.split(\".\");\r\n section = section_split[0];\r\n subsection = section_split[1];\r\n }\r\n // let current_data_array = [...get(getState().job, \"AreaSpecifications.\" + areaIndex + \".\" + section + (subsection ? \".\" + subsection : \"\"))];\r\n\r\n let current_array = getState().job?.AreaSpecifications?.[areaIndex]?.[section];\r\n if (current_array && subsection) current_array = current_array?.[subsection];\r\n\r\n let current_data_array = current_array ? [...current_array] : [];\r\n\r\n if (tol === \"closest\") {\r\n tol = 10;\r\n let new_data_array = [...current_data_array];\r\n while (tol < 20000 && new_data_array.length === current_data_array.length) {\r\n new_data_array = RemoveItemFromArray(\r\n current_data_array,\r\n \"Ref\",\r\n ref,\r\n null,\r\n null,\r\n tol,\r\n match_parameter,\r\n match_value\r\n );\r\n tol += 500;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n dispatch(\r\n updateAreaSpecification(\r\n areaIndex,\r\n section + (subsection ? \".\" + subsection : \"\"),\r\n null,\r\n new_data_array\r\n )\r\n );\r\n resolve(\"OK\");\r\n });\r\n\r\n // dispatch(\r\n // updateAreaSpecification(areaIndex, section + (subsection ? \".\" + subsection : \"\"), null, new_data_array)\r\n // );\r\n } else {\r\n let new_data_array = RemoveItemFromArray(\r\n current_data_array,\r\n \"Ref\",\r\n ref,\r\n refKey2,\r\n ref2,\r\n tol,\r\n match_parameter,\r\n match_value\r\n );\r\n\r\n return new Promise((resolve) => {\r\n dispatch(\r\n updateAreaSpecification(\r\n areaIndex,\r\n section + (subsection ? \".\" + subsection : \"\"),\r\n null,\r\n new_data_array\r\n )\r\n );\r\n resolve(\"OK\");\r\n });\r\n\r\n // dispatch(\r\n // updateAreaSpecification(areaIndex, section + (subsection ? \".\" + subsection : \"\"), null, new_data_array)\r\n // );\r\n }\r\n };\r\n\r\nexport const updateAreaSpecificationModificationArray =\r\n (areaIndex, section, ref, parameter, value, refresh_svg = true, ref2 = null) =>\r\n (dispatch, getState) => {\r\n let subsection = null;\r\n if (section && section.includes(\".\")) {\r\n let section_split = section.split(\".\");\r\n section = section_split[0];\r\n subsection = section_split[1];\r\n }\r\n\r\n let current_array = getState().job?.AreaSpecifications?.[areaIndex]?.[section];\r\n\r\n if (current_array && subsection) current_array = current_array?.[subsection];\r\n\r\n if (section === \"BEAMMODIFICATIONS\") {\r\n current_array = getState().job?.AreaSpecifications?.[0]?.[section];\r\n }\r\n\r\n let new_data_array = current_array ? [...current_array] : [];\r\n\r\n let thisModification = null;\r\n let lastModification = {};\r\n\r\n if (ref) {\r\n let twod_only = true;\r\n if (section === \"BEAMMODIFICATIONS\") {\r\n current_array = current_array.filter((mod) => {\r\n return mod.Area === undefined || mod.Area === areaIndex;\r\n });\r\n twod_only = true;\r\n }\r\n\r\n thisModification = getItemFromArray(current_array, \"Ref\", ref, \"Ref2\", ref2, 30, 90, twod_only);\r\n\r\n if (thisModification) lastModification = { ...thisModification };\r\n }\r\n\r\n let newValue = value === \"Default\" ? \"\" : value;\r\n if (section === \"BEAMMODIFICATIONS\") {\r\n if (parameter === \"Length\" && newValue !== \"\") value = Number(value);\r\n }\r\n if (newValue === \"\" && thisModification === null) return; // no change, no mods\r\n else if (thisModification === null) {\r\n //new mod needed\r\n thisModification = {};\r\n thisModification.Ref = ref;\r\n\r\n if (section === \"BEAMMODIFICATIONS\") {\r\n let ref_split = ref.split(\";\");\r\n if (ref_split.length > 1) {\r\n thisModification.P1 = ref_split[0].replaceAll(\"/\", \",\");\r\n thisModification.P2 = ref_split[1].replaceAll(\"/\", \",\");\r\n }\r\n }\r\n if (typeof value === \"object\" && !parameter) thisModification = { ...thisModification, ...value };\r\n else thisModification[parameter] = newValue;\r\n\r\n if (section === \"BEAMMODIFICATIONS\") {\r\n new_data_array = RemoveItemFromArray(new_data_array, \"Ref\", ref, \"Ref2\", ref2, 100, \"Area\", areaIndex);\r\n } else {\r\n new_data_array = RemoveItemFromArray(new_data_array, \"Ref\", ref, \"Ref2\", ref2);\r\n }\r\n\r\n //update Refs\r\n thisModification.Ref = ref;\r\n if (ref2) thisModification.Ref2 = ref2;\r\n\r\n new_data_array.push(thisModification);\r\n } else {\r\n if (typeof value === \"object\" && !parameter) thisModification = { ...thisModification, ...value };\r\n else thisModification[parameter] = newValue;\r\n\r\n if (section === \"BEAMMODIFICATIONS\") {\r\n new_data_array = RemoveItemFromArray(new_data_array, \"Ref\", ref, \"Ref2\", ref2, 100, \"Area\", areaIndex);\r\n } else {\r\n new_data_array = RemoveItemFromArray(new_data_array, \"Ref\", ref, \"Ref2\", ref2);\r\n }\r\n\r\n //update Refs\r\n thisModification.Ref = ref;\r\n if (ref2) thisModification.Ref2 = ref2;\r\n\r\n new_data_array.push(thisModification);\r\n\r\n // current_data_array = ReplaceItemFromArray(current_data_array, \"Ref\", ref, thisModification, \"Ref2\", ref2);\r\n }\r\n //\r\n // if (JSON.stringify(current_data_array) !== JSON.stringify(current_data_array)) {\r\n dispatch(\r\n updateAreaSpecification(\r\n section === \"BEAMMODIFICATIONS\" ? 0 : areaIndex,\r\n section + (subsection ? \".\" + subsection : \"\"),\r\n null,\r\n new_data_array\r\n )\r\n );\r\n // }\r\n };\r\n\r\nconst validateMinNumberOfIntBeams = (config, areaIndex, section, subsection, parameter, value, job, dispatch) => {\r\n if (parameter) {\r\n if (subsection) job.AreaSpecifications[areaIndex][section][subsection][parameter] = value;\r\n else job.AreaSpecifications[areaIndex][section][parameter] = value;\r\n } else {\r\n if (subsection) job.AreaSpecifications[areaIndex][section][subsection] = value;\r\n else job.AreaSpecifications[areaIndex][section] = value;\r\n }\r\n\r\n let new_beam_and_post_data = JOBSTATE_VALIDATION.validateBeamPostData(config, job, areaIndex);\r\n dispatch({\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS,\r\n subsection: null,\r\n parameter: null,\r\n value: new_beam_and_post_data,\r\n error: null,\r\n });\r\n\r\n if (subsection === \"AREAJOIN\") {\r\n //affects the next area too\r\n\r\n let new_next_area_beam_and_post_data = JOBSTATE_VALIDATION.validateBeamPostData(config, job, areaIndex + 1);\r\n dispatch({\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex + 1,\r\n section: BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS,\r\n subsection: null,\r\n parameter: null,\r\n value: new_next_area_beam_and_post_data,\r\n error: null,\r\n });\r\n }\r\n};\r\n\r\nexport const getWindDataLoading = ({\r\n newJobState,\r\n setWindDataLoading,\r\n dispatch,\r\n setErrorWindDataLoading,\r\n setWindErrorState,\r\n}) => {\r\n if (newJobState?.SiteParameters?.WindData?.WindZoneAS1170?.critical) return; //Already Loaded wind\r\n let retries = 0;\r\n\r\n const fetchData = () => {\r\n let newState = { ...newJobState };\r\n\r\n setWindDataLoading(true);\r\n setErrorWindDataLoading(false);\r\n let vr_mode = newJobState?.DesignParameters?.vr_mode ? newJobState?.DesignParameters?.vr_mode : 0;\r\n\r\n dispatch(getWindData(newState[\"SiteParameters\"][\"Address\"], vr_mode))\r\n .then((wind_data) => {\r\n handleWindData(wind_data, newState);\r\n })\r\n .catch(handleError);\r\n };\r\n\r\n const handleWindData = (wind_data, newState) => {\r\n if (!wind_data?.critical) {\r\n // Handle error\r\n setErrorWindDataLoading(wind_data);\r\n newState.SiteParameters.WindData.WindZone_UseAS1170 = false;\r\n newState.SiteParameters.WindData.WindZoneAS1170 = null;\r\n handleRetry(wind_data);\r\n } else {\r\n newState.SiteParameters.WindData.WindZone_UseAS1170 = true;\r\n newState.SiteParameters.WindData.WindZoneAS1170 = wind_data;\r\n setWindDataLoading(false);\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: {\r\n message: \"Info: Wind data was successfully loaded.\",\r\n type: \"success\",\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleRetry = (wind_data) => {\r\n retries++;\r\n\r\n if (retries < 3) {\r\n fetchData(); // Retry fetching data\r\n } else {\r\n setWindDataLoading(false);\r\n setErrorWindDataLoading(wind_data);\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: \"Error: there was an error getting the wind data. Please try loading address again.\",\r\n });\r\n }\r\n };\r\n\r\n const handleError = (error) => {\r\n handleRetry(newJobState);\r\n };\r\n\r\n // Initial fetch\r\n fetchData();\r\n};\r\n\r\nexport const updateSiteParameterData = (subsection, parameter, value) => (dispatch, getState) => {\r\n let new_job = COMMON.deepCopy(getState().job);\r\n const config = getState().config;\r\n\r\n if (!subsection && !parameter) new_job.SiteParameters = value;\r\n else if (subsection) new_job.SiteParameters[subsection][parameter] = value;\r\n else new_job.SiteParameters[parameter] = value;\r\n\r\n if (\r\n ![\"Beam\", \"Riser\", \"Flyover\"].includes(\r\n new_job?.SiteParameters?.[SITE_PARAMETER_SECTIONS.ExistingStructure]?.AttachmentType\r\n )\r\n )\r\n for (let index in new_job.AreaSpecifications) {\r\n if (new_job.AreaSpecifications[Number(index)].SHAPE.RoofPitch < 0) {\r\n return {\r\n error: true,\r\n title: \"Reverse Fall\",\r\n message: [\r\n <>\r\n To have an attached reverse fall, the attachment type must be \"Beam\", \"Riser\" or \"Flyover\".\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n\r\n let error = null;\r\n\r\n if ([\"Wall\"].includes(new_job?.SiteParameters?.[SITE_PARAMETER_SECTIONS.ExistingStructure]?.AttachmentType)) {\r\n let wall_height = new_job?.SiteParameters?.[SITE_PARAMETER_SECTIONS.ExistingStructure]?.WallHeight;\r\n if (wall_height <= 2400) {\r\n new_job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].WallHeight = 4000;\r\n new_job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].EaveDepth = 0;\r\n error = {\r\n error: true,\r\n title: \"Attachment Wall Height modified\",\r\n message: [\r\n <>\r\n As the attachment has been set to 'Wall', attachment wall height has been set to 4000mm and Eave\r\n Width has been set to 0mm.\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: new_job,\r\n });\r\n\r\n if (error) return error;\r\n};\r\nexport const updateAreaSpecificationJob =\r\n (areaIndex, section, subsection, parameter, value) => (dispatch, getState) => {\r\n let new_job = COMMON.deepCopy(getState().job);\r\n let new_area_data = new_job.AreaSpecifications[areaIndex];\r\n const config = getState().config;\r\n const app = getState().app;\r\n\r\n let isGable = new_area_data.SHAPE.RoofType1 === \"Gable\" ? true : false;\r\n\r\n if (value?.target?.value) value = value?.target?.value;\r\n\r\n if (!subsection && !parameter) new_area_data[section] = value;\r\n else if (subsection) new_area_data[section][subsection][parameter] = value;\r\n else new_area_data[section][parameter] = value;\r\n\r\n if (section === BASIC_SPECS_SECTIONS.ATTACHMENTS && parameter === \"AttachmentTop\" && value === 0 && !isGable) {\r\n new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterB = 0;\r\n }\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: new_job,\r\n });\r\n\r\n let error = JOBSTATE_VALIDATION.CheckSuggestions(config, new_job, -1, app)(dispatch);\r\n\r\n if (error && error.error) {\r\n dispatch(showDialogData(error));\r\n }\r\n\r\n return new Promise((resolve) => {\r\n resolve(\"OK\");\r\n });\r\n };\r\n\r\nexport const updateAreaSpecificationShape = (areaIndex, subsection, parameter, value) => (dispatch, getState) => {\r\n let new_job = COMMON.deepCopy(getState().job);\r\n let last_area_data = new_job?.AreaSpecifications?.[areaIndex - 1];\r\n let new_area_data = new_job.AreaSpecifications[areaIndex];\r\n let old_area_data = getState().job.AreaSpecifications[areaIndex];\r\n let next_area_data = new_job?.AreaSpecifications?.[areaIndex + 1];\r\n const config = getState().config;\r\n\r\n if (value?.target?.value) value = value?.target?.value;\r\n\r\n if (!subsection && !parameter) new_area_data[BASIC_SPECS_SECTIONS.SHAPE] = value;\r\n else if (subsection) new_area_data[BASIC_SPECS_SECTIONS.SHAPE][subsection][parameter] = value;\r\n else new_area_data[BASIC_SPECS_SECTIONS.SHAPE][parameter] = value;\r\n\r\n // returnable front end errors/responsive messages\r\n\r\n if (\r\n new_area_data &&\r\n new_area_data.SHAPE.RoofPitch < 0 &&\r\n ![\"Beam\", \"Riser\", \"Flyover\"].includes(\r\n new_job?.SiteParameters?.[SITE_PARAMETER_SECTIONS.ExistingStructure]?.AttachmentType\r\n )\r\n ) {\r\n return {\r\n error: true,\r\n title: \"Reverse Fall\",\r\n message: [<>To have an attached reverse fall, the attachment type must be \"Beam\".>],\r\n primaryActionText: \"Set to Beam\",\r\n // primaryAction: updateSiteParameterData(SITE_PARAMETER_SECTIONS.ExistingStructure, \"AttachmentType\", \"Beam\"),\r\n primaryAction: () => {\r\n new_job.SiteParameters[SITE_PARAMETER_SECTIONS.ExistingStructure].AttachmentType = \"Beam\";\r\n new_area_data.SHAPE.RoofPitch = value;\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: new_job,\r\n });\r\n },\r\n secondaryActionText: \"Cancel\",\r\n secondaryAction: null,\r\n };\r\n }\r\n\r\n if (\r\n last_area_data &&\r\n (last_area_data.SHAPE.AREAJOIN.JoinType === \"Hip\" || last_area_data.SHAPE.AREAJOIN.JoinType === \"Gable\")\r\n ) {\r\n if (new_area_data.SHAPE.DesignSubType === \"Projection\" || last_area_data.SHAPE.DesignSubType === \"Projection\") {\r\n return {\r\n error: true,\r\n title: \"Portal Hip/Gable Junction\",\r\n message: [\r\n <>\r\n Portal Hip/Gable Junctions cannot be used when a Gable is in 'Projection' orientation.\r\n \r\n \r\n You may change then to 'Parallel' and try again.\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n if (\r\n next_area_data &&\r\n (new_area_data.SHAPE.AREAJOIN.JoinType === \"Hip\" || new_area_data.SHAPE.AREAJOIN.JoinType === \"Gable\")\r\n ) {\r\n if (new_area_data.SHAPE.DesignSubType === \"Projection\" || next_area_data.SHAPE.DesignSubType === \"Projection\") {\r\n return {\r\n error: true,\r\n title: \"Portal Hip/Gable Junction\",\r\n message: [\r\n <>\r\n Portal Hip/Gable Junctions cannot be used when a Gable is in 'Projection' orientation.\r\n \r\n \r\n You may change then to 'Parallel' and try again.\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n\r\n if (next_area_data && new_area_data.SHAPE.AREAJOIN.JoinType === \"Hip\") {\r\n if (new_area_data.SHAPE.Height !== next_area_data.SHAPE.Height) {\r\n return {\r\n error: true,\r\n title: \"Portal Hip Junction\",\r\n message: [\r\n <>\r\n Portal Hip Junction must have matching Height, Width and Roof Pitch in both areas.\r\n \r\n \r\n Try 'Gable Junction' if Height, Width or Roof Pitch must be different\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n if (last_area_data && last_area_data.SHAPE.AREAJOIN.JoinType === \"Hip\") {\r\n if (last_area_data.SHAPE.Height !== new_area_data.SHAPE.Height) {\r\n return {\r\n error: true,\r\n title: \"Portal Hip Junction\",\r\n message: [\r\n <>\r\n Portal Hip Junction must have matching Height, Width and Roof Pitch in both areas.\r\n \r\n \r\n Try 'Gable Junction' if Height, Width or Roof Pitch must be different\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n\r\n if (next_area_data && new_area_data.SHAPE.AREAJOIN.JoinType === \"Gable\") {\r\n let gable_height = (new_area_data.SHAPE.Depth / 2) * Math.tan((new_area_data.SHAPE.RoofPitch * Math.PI) / 180);\r\n let gable_height_next =\r\n (next_area_data.SHAPE.Depth / 2) * Math.tan((new_area_data.SHAPE.RoofPitch * Math.PI) / 180);\r\n\r\n let diff = Math.abs(gable_height - gable_height_next);\r\n\r\n if (diff < 120) {\r\n return {\r\n error: true,\r\n title: \"Gable Junction\",\r\n message: [\r\n <>\r\n Gable Junction cannot have ridge heights at the similar height - one must be below the other by\r\n a minimum of 120mm (calculated=~{Math.trunc(diff)}mm). \r\n \r\n Try reducing the Width of one of the areas and try again.\r\n \r\n \r\n If Height, Width and Roof Pitch are the same, try a 'Hip Junction'.\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n if (last_area_data && last_area_data.SHAPE.AREAJOIN.JoinType === \"Gable\") {\r\n let gable_height =\r\n (last_area_data.SHAPE.Depth / 2) * Math.tan((last_area_data.SHAPE.RoofPitch * Math.PI) / 180);\r\n let gable_height_next =\r\n (new_area_data.SHAPE.Depth / 2) * Math.tan((new_area_data.SHAPE.RoofPitch * Math.PI) / 180);\r\n\r\n let diff = Math.abs(gable_height - gable_height_next);\r\n\r\n if (diff < 120) {\r\n return {\r\n error: true,\r\n title: \"Gable Junction\",\r\n message: [\r\n <>\r\n Gable Junction cannot have ridge heights at the similar height - one must be below the other by\r\n a minimum of 120mm (calculated=~{Math.trunc(diff)}mm). \r\n \r\n Try reducing the Width of one of the areas and try again.\r\n \r\n \r\n If Height, Width and Roof Pitch are the same, try a 'Hip Junction'.\r\n >,\r\n ],\r\n };\r\n }\r\n }\r\n if (\r\n last_area_data &&\r\n last_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED &&\r\n new_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n ) {\r\n return {\r\n error: true,\r\n title: \"Pitched Design\",\r\n message: [\r\n <>\r\n Cannot have two 'Pitched' structures adjacent to each other. Pitched structures must have a 'Flat'\r\n design adjacent to it.\r\n >,\r\n ],\r\n };\r\n }\r\n if (\r\n next_area_data &&\r\n next_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED &&\r\n new_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.PITCHED\r\n ) {\r\n return {\r\n error: true,\r\n title: \"Pitched Design\",\r\n message: [\r\n <>\r\n Cannot have two 'Pitched' structures adjacent to each other. Pitched structures must have a 'Flat'\r\n design adjacent to it.\r\n >,\r\n ],\r\n };\r\n }\r\n\r\n // mass settings based on NEW variable parameter\r\n if (parameter === \"JoinType\") {\r\n if (CONFIG.JOIN_TYPES[value]) {\r\n const join_data = CONFIG.JOIN_TYPES[value];\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinOffset = join_data.default_offset;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].AREAJOIN.JoinAngle = join_data.default_angle;\r\n }\r\n }\r\n if (parameter === \"DesignType\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][parameter] = value;\r\n let design_option = config?.design_options?.[new_area_data[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType];\r\n\r\n //reset design based paramters\r\n // if (design_option?.length_range?.default) {\r\n // new_area_data[BASIC_SPECS_SECTIONS.SHAPE].Length = toNumber(COMMON.replaceVariables(new_area_data, design_option?.length_range)?.default);\r\n // }\r\n // if (design_option?.depth_range?.default) {\r\n // new_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth = toNumber(COMMON.replaceVariables(new_area_data, design_option?.depth_range)?.default);\r\n // }\r\n\r\n new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RoofGroupType = design_option.roofsheet_default.grouptype;\r\n new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RoofSubType = design_option.roofsheet_default.subtype;\r\n new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING] = JOBSTATE_VALIDATION.validateRoofSheetData(\r\n config,\r\n new_job,\r\n areaIndex\r\n );\r\n\r\n if (design_option?.pitch_range?.default) {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].RoofPitch = toNumber(\r\n COMMON.replaceVariables(new_area_data, design_option?.pitch_range)?.default\r\n );\r\n }\r\n\r\n if (new_area_data[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === \"Gable Hip Roof\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].DesignSubType = \"Parallel\";\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].RotateArea = 0;\r\n\r\n let new_area_GUTTERS_AND_DOWNPIPES = new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES];\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterB = 1;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterF = 1;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterL = 0;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterR = 0;\r\n\r\n if (old_area_data[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType !== \"Gable Hip Roof\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Back = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Left = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Right = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Back_Sheet = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front_Sheet = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Left_Sheet = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Right_Sheet = 0;\r\n }\r\n } else if (new_area_data[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType === \"Flat Roof\") {\r\n let new_area_GUTTERS_AND_DOWNPIPES = new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES];\r\n let new_area_ATTACHMENTS = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS];\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterB = 0;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterF = 1 - new_area_ATTACHMENTS.AttachmentBottom;\r\n\r\n if (old_area_data[BASIC_SPECS_SECTIONS.SHAPE]?.DesignType !== \"Flat Roof\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Back = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Left = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Right = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Back_Sheet = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front_Sheet = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Left_Sheet = 0;\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Right_Sheet = 0;\r\n }\r\n }\r\n\r\n let new_area_BEAMS_AND_POSTS = new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS];\r\n if (design_option) {\r\n if (design_option?.beam_1) new_area_BEAMS_AND_POSTS.BeamType1 = design_option.beam_1.section_default;\r\n if (design_option?.beam_2) new_area_BEAMS_AND_POSTS.BeamType2 = design_option.beam_2.section_default;\r\n if (design_option?.beam_3) new_area_BEAMS_AND_POSTS.BeamType3 = design_option.beam_3.section_default;\r\n if (design_option?.beam_4) new_area_BEAMS_AND_POSTS.BeamType4 = design_option.beam_4.section_default;\r\n if (design_option?.post) new_area_BEAMS_AND_POSTS.PostType = design_option.post.section_default;\r\n }\r\n }\r\n if (parameter === \"DesignSubType\") {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.SHAPE].DesignType === \"Gable Hip Roof\") {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.SHAPE].DesignSubType === \"Projection\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].RotateArea = 1;\r\n let new_area_ATTACHMENTS = { ...new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS] };\r\n new_area_ATTACHMENTS.AttachmentLeft = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentTop;\r\n new_area_ATTACHMENTS.AttachmentTop = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentRight;\r\n new_area_ATTACHMENTS.AttachmentRight = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentBottom;\r\n new_area_ATTACHMENTS.AttachmentBottom = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentLeft;\r\n\r\n //adjust paats\r\n for (let PAAT of new_area_ATTACHMENTS.PARTIAL_ATTACHMENTS) {\r\n if (PAAT.Ref.includes(\"Back\")) PAAT.Ref = PAAT.Ref.replace(\"Back\", \"Right\");\r\n else if (PAAT.Ref.includes(\"Front\")) PAAT.Ref = PAAT.Ref.replace(\"Front\", \"Left\");\r\n else if (PAAT.Ref.includes(\"Left\")) PAAT.Ref = PAAT.Ref.replace(\"Left\", \"Back\");\r\n else if (PAAT.Ref.includes(\"Right\")) PAAT.Ref = PAAT.Ref.replace(\"Right\", \"Front\");\r\n PAAT.Name = PAAT.Ref;\r\n }\r\n\r\n //adjust mods\r\n for (let mods of new_area_ATTACHMENTS.AttachmentModifications) {\r\n if (mods.Ref.includes(\"Back\")) mods.Ref = mods.Ref.replace(\"Back\", \"Right\");\r\n else if (mods.Ref.includes(\"Front\")) mods.Ref = mods.Ref.replace(\"Front\", \"Left\");\r\n else if (mods.Ref.includes(\"Left\")) mods.Ref = mods.Ref.replace(\"Left\", \"Back\");\r\n else if (mods.Ref.includes(\"Right\")) mods.Ref = mods.Ref.replace(\"Right\", \"Front\");\r\n mods.Name = mods.Ref;\r\n }\r\n\r\n new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS] = new_area_ATTACHMENTS;\r\n\r\n let new_area_GUTTERS_AND_DOWNPIPES = new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES];\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterB = 1 - new_area_ATTACHMENTS.AttachmentTop;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterF = 1 - new_area_ATTACHMENTS.AttachmentBottom;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterL = 0;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterR = 0;\r\n } else {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].RotateArea = 0;\r\n let new_area_ATTACHMENTS = { ...new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS] };\r\n new_area_ATTACHMENTS.AttachmentLeft = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentBottom;\r\n new_area_ATTACHMENTS.AttachmentRight = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentTop;\r\n new_area_ATTACHMENTS.AttachmentTop = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentLeft;\r\n new_area_ATTACHMENTS.AttachmentBottom = new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS].AttachmentRight;\r\n\r\n //adjust paats\r\n for (let PAAT of new_area_ATTACHMENTS.PARTIAL_ATTACHMENTS) {\r\n if (PAAT.Ref.includes(\"Back\")) PAAT.Ref = PAAT.Ref.replace(\"Back\", \"Left\");\r\n else if (PAAT.Ref.includes(\"Front\")) PAAT.Ref = PAAT.Ref.replace(\"Front\", \"Right\");\r\n else if (PAAT.Ref.includes(\"Left\")) PAAT.Ref = PAAT.Ref.replace(\"Left\", \"Front\");\r\n else if (PAAT.Ref.includes(\"Right\")) PAAT.Ref = PAAT.Ref.replace(\"Right\", \"Back\");\r\n PAAT.Name = PAAT.Ref;\r\n }\r\n\r\n //adjust mods\r\n for (let mods of new_area_ATTACHMENTS.AttachmentModifications) {\r\n if (mods.Ref.includes(\"Back\")) mods.Ref = mods.Ref.replace(\"Back\", \"Left\");\r\n else if (mods.Ref.includes(\"Front\")) mods.Ref = mods.Ref.replace(\"Front\", \"Right\");\r\n else if (mods.Ref.includes(\"Left\")) mods.Ref = mods.Ref.replace(\"Left\", \"Front\");\r\n else if (mods.Ref.includes(\"Right\")) mods.Ref = mods.Ref.replace(\"Right\", \"Back\");\r\n mods.Name = mods.Ref;\r\n }\r\n\r\n new_area_data[BASIC_SPECS_SECTIONS.ATTACHMENTS] = new_area_ATTACHMENTS;\r\n\r\n let new_area_GUTTERS_AND_DOWNPIPES = new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES];\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterB = 1 - new_area_ATTACHMENTS.AttachmentTop;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterF = 1 - new_area_ATTACHMENTS.AttachmentBottom;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterL = 0;\r\n new_area_GUTTERS_AND_DOWNPIPES.GutterR = 0;\r\n }\r\n } else {\r\n let val_split = value.split(\"/\");\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].DesignSubType = val_split[0];\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].SheetDirection = val_split[1];\r\n }\r\n }\r\n if (parameter === \"RoofType1\") {\r\n if (value === \"Hip/45\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType1\"] = \"Hip\";\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"HipAngle1\"] = 45;\r\n } else if (value === \"Hip/60\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType1\"] = \"Hip\";\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"HipAngle1\"] = 60;\r\n }\r\n if (\r\n old_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType1\"] !==\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType1\"]\r\n ) {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType1\"] !== \"Gable\")\r\n new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterL = 1;\r\n else new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterL = 0;\r\n }\r\n }\r\n if (parameter === \"RoofType2\") {\r\n if (value === \"Hip/45\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType2\"] = \"Hip\";\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"HipAngle2\"] = 45;\r\n } else if (value === \"Hip/60\") {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType2\"] = \"Hip\";\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"HipAngle2\"] = 60;\r\n }\r\n if (\r\n old_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType2\"] !==\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType2\"]\r\n ) {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType2\"] !== \"Gable\")\r\n new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterR = 1;\r\n else new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterR = 0;\r\n }\r\n }\r\n\r\n let errors = [];\r\n\r\n if (window.LYSAGHT) {\r\n if (\r\n new_area_data.SHAPE.RoofPitch === 15 &&\r\n (new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType1\"] !== \"Gable\" ||\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType2\"] !== \"Gable\")\r\n ) {\r\n errors.push({\r\n error: true,\r\n title: \"Gable ends must be Gable for 15 degree roof pitch.\",\r\n message: [<>Gable ends must be Gable for 15 degree roof pitch. Ends have been reset to Gable.>],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType1\"] = \"Gable\";\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofType2\"] = \"Gable\";\r\n }\r\n }\r\n\r\n // if (\r\n // new_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.FLAT &&\r\n // new_area_data.BEAMS_AND_POSTS.CornerPostsFullHeight === 1\r\n // ) {\r\n // if (new_area_data.SHAPE.OH_Left >= 0 || new_area_data.SHAPE.OH_Right >= 0) {\r\n // errors.push({\r\n // error: true,\r\n // title: \"Corner Post with Overhangs.\",\r\n // message: [\r\n // <>\r\n // Corner Posts cannot be {window.LYSAGHT ? \"'Beam to Side'\" : \"Full Height\"} when there are Beam\r\n // Overhangs. They have been changed to {window.LYSAGHT ? \"'Notched'\" : \"Post Under\"}.\r\n // >,\r\n // ],\r\n // });\r\n\r\n // if (window.LYSAGHT) new_area_data.BEAMS_AND_POSTS.CornerPostsFullHeight = 2;\r\n // else new_area_data.BEAMS_AND_POSTS.CornerPostsFullHeight = 0;\r\n // }\r\n // }\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: new_job,\r\n });\r\n\r\n // warnings\r\n\r\n if (parameter === \"JoinType\" && value === \"Hip\") {\r\n return {\r\n error: true,\r\n title: \"Hip Portal Design\",\r\n message: [\r\n <>\r\n In a Portal Gable Hip Design, The Width and Roof Pitch of the two areas will be automatically\r\n matched.\r\n >,\r\n ],\r\n };\r\n }\r\n\r\n let error = JOBSTATE_VALIDATION.CheckSuggestions(config, new_job, areaIndex, getState().app)(dispatch);\r\n if (error) return error;\r\n if (errors && errors.length > 0) return ConsolidateErrors(errors);\r\n};\r\n\r\nexport const updateAreaSpecificationRoofSheet = (areaIndex, subsection, parameter, value) => (dispatch, getState) => {\r\n let new_job = COMMON.deepCopy(getState().job);\r\n let last_area_data = new_job?.AreaSpecifications?.[areaIndex - 1];\r\n let new_area_data = new_job.AreaSpecifications[areaIndex];\r\n let next_area_data = new_job?.AreaSpecifications?.[areaIndex + 1];\r\n const config = getState().config;\r\n\r\n if (value?.target?.value) value = value?.target?.value;\r\n\r\n // Set default roof span to trafficable if none set\r\n if (\r\n !new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING][\"RoofSpan\"] ||\r\n new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING][\"RoofSpan\"] === \"\"\r\n )\r\n new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING][\"RoofSpan\"] = \"No Foot Traffic\";\r\n\r\n if (parameter === \"RoofGroupType\") {\r\n let roofsheet_types = config.roofsheet_types;\r\n let roofsheetgroup_old = roofsheet_types[new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RoofGroupType];\r\n let roofsheetgroup = roofsheet_types[value];\r\n if (roofsheetgroup.min_pitch)\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE][\"RoofPitch\"] = toNumber(roofsheetgroup.min_pitch);\r\n\r\n if (\r\n roofsheetgroup_old?.min_front_overhang &&\r\n toNumber(new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front) ===\r\n toNumber(roofsheetgroup_old?.min_front_overhang)\r\n ) {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front = roofsheetgroup?.min_front_overhang\r\n ? toNumber(roofsheetgroup?.min_front_overhang)\r\n : 0;\r\n }\r\n\r\n if (\r\n roofsheetgroup_old?.min_front_overhang &&\r\n toNumber(new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Back) ===\r\n toNumber(roofsheetgroup_old?.min_front_overhang)\r\n ) {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Back = roofsheetgroup?.min_front_overhang\r\n ? toNumber(roofsheetgroup?.min_front_overhang)\r\n : 0;\r\n }\r\n\r\n if (\r\n roofsheetgroup_old?.min_side_overhang &&\r\n toNumber(new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Left) ===\r\n toNumber(roofsheetgroup_old?.min_side_overhang)\r\n ) {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Left = roofsheetgroup?.min_side_overhang\r\n ? toNumber(roofsheetgroup?.min_side_overhang)\r\n : 0;\r\n }\r\n\r\n if (\r\n roofsheetgroup_old?.min_side_overhang &&\r\n toNumber(new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Right) ===\r\n toNumber(roofsheetgroup_old?.min_side_overhang)\r\n ) {\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Right = roofsheetgroup?.min_side_overhang\r\n ? toNumber(roofsheetgroup?.min_side_overhang)\r\n : 0;\r\n }\r\n\r\n console.log(\r\n \"new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front\",\r\n new_area_data[BASIC_SPECS_SECTIONS.SHAPE].OH_Front\r\n );\r\n\r\n if (value === \"CUSTOM ORB\") {\r\n let design_option = config?.design_options?.[new_area_data.SHAPE.DesignType];\r\n if (design_option?.allow_roll_top_ridge) {\r\n new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING].RollTopRidge = true;\r\n }\r\n }\r\n }\r\n\r\n if (!subsection && !parameter) new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING] = value;\r\n else if (subsection) new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING][subsection][parameter] = value;\r\n else new_area_data[BASIC_SPECS_SECTIONS.ROOF_SHEETING][parameter] = value;\r\n\r\n if (\r\n (parameter === \"SheetLaying\" || parameter === \"SheetLayingOffset\") &&\r\n new_area_data &&\r\n new_area_data.SKYLIGHTS.length > 0\r\n ) {\r\n return {\r\n error: true,\r\n title: \"Skylights will be wiped\",\r\n message: [<>If you change the laying point, skylights will be wiped.>],\r\n primaryActionText: \"Change laying point\",\r\n // primaryAction: updateSiteParameterData(SITE_PARAMETER_SECTIONS.ExistingStructure, \"AttachmentType\", \"Beam\"),\r\n primaryAction: () => {\r\n new_area_data.SKYLIGHTS = [];\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: new_job,\r\n });\r\n },\r\n secondaryActionText: \"Cancel\",\r\n secondaryAction: null,\r\n };\r\n }\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: new_job,\r\n value: null,\r\n error: null,\r\n });\r\n};\r\n\r\nexport const updateAreaSpecificationBeamPost = (areaIndex, subsection, parameter, value) => (dispatch, getState) => {\r\n let new_job = COMMON.deepCopy(getState().job);\r\n let new_area_data = new_job.AreaSpecifications[areaIndex];\r\n const config = getState().config;\r\n const designType = new_area_data.SHAPE?.DesignType;\r\n const maxLengthRHS = 8000;\r\n\r\n let errors = [];\r\n let oldBeamSelection = \"\";\r\n\r\n if (value?.target?.value) value = value?.target?.value;\r\n\r\n if (!subsection && !parameter) {\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS] = value;\r\n } else if (subsection) {\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS][subsection][parameter] = value;\r\n } else {\r\n oldBeamSelection = new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS][parameter];\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS][parameter] = value;\r\n }\r\n\r\n // Check for RHS inserts longer than max\r\n if (!window.LYSAGHT) {\r\n const resultSet = JOBSTATE_VALIDATION.validateRHSBeamLength(config, new_job, areaIndex, value);\r\n const match = resultSet.has(parameter);\r\n\r\n if (match) {\r\n let beamName = undefined;\r\n\r\n switch (parameter) {\r\n case \"BeamType1\":\r\n beamName = config?.design_options?.[designType].beam_1.Name;\r\n break;\r\n case \"BeamType2\":\r\n beamName = config?.design_options?.[designType].beam_2.Name;\r\n break;\r\n case \"BeamType3\":\r\n beamName = config?.design_options?.[designType].beam_3.Name;\r\n break;\r\n case \"BeamType4\":\r\n beamName = config?.design_options?.[designType].beam_4.Name;\r\n break;\r\n }\r\n\r\n if (beamName) {\r\n errors.push({\r\n error: true,\r\n title: `${beamName} length exceeds RHS insert availability`,\r\n message: [\r\n <>\r\n At least one {beamName} in this design exceeds the {maxLengthRHS}mm limit for RHS inserts.\r\n \r\n Beams under the RHS limit can be modified individually.\r\n >,\r\n ],\r\n });\r\n\r\n // Beam isn't changing so restore original selection\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS][parameter] = oldBeamSelection;\r\n }\r\n }\r\n }\r\n\r\n let had_notched_posts = false;\r\n\r\n if (new_job.DesignParameters.DeckMode) {\r\n let is_larger = false;\r\n //cannot have joist smaller than bearer\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1 === \"SB15865\") {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"SB20865\") {\r\n is_larger = true;\r\n }\r\n }\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1 === \"SB10865\") {\r\n if (\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"SB20865\" ||\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"SB15865\"\r\n ) {\r\n is_larger = true;\r\n }\r\n }\r\n if (is_larger) {\r\n errors.push({\r\n error: true,\r\n title: \"Joist larger than Bearer\",\r\n message: [<>Joist cannot be a larger section than Bearer. Joist has been adjusted to match.>],\r\n });\r\n }\r\n } else {\r\n let is_portal = false;\r\n if (new_area_data.SHAPE.DesignType === CONFIG.DESIGN_TYPES.GABLE_PORTAL) is_portal = true;\r\n\r\n if (\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CornerPostsFullHeight === 2 ||\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].IntermediatePostsFullHeight === 2\r\n ) {\r\n had_notched_posts = true;\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostColMatchBeam === \"Merbau\") {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CornerPostsFullHeight === 2)\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CornerPostsFullHeight = 3;\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].IntermediatePostsFullHeight === 2)\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].IntermediatePostsFullHeight = 3;\r\n errors.push({\r\n error: true,\r\n title: \"Merbau is not available in Notched.\",\r\n message: [\r\n <>Merbau is not available in Notched. Post Postion has been set to \"Post Behind Beam\".>,\r\n ],\r\n });\r\n }\r\n }\r\n\r\n if (is_portal) {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1 === \"FL10011\") {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTie === 0) {\r\n errors.push({\r\n error: true,\r\n title: \"Gables with FL100 Rafters must have Collar Ties\",\r\n message: [<>Gables with FL100 Rafters must have Collar Ties. Collar Ties have been enabled.>],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTie = 1;\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTieBeam = \"FL10011\";\r\n }\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].DoubleIntermediateRafters === 1) {\r\n errors.push({\r\n error: true,\r\n title: \"Gables with FL100 Rafters cannot be doubled\",\r\n message: [<>Gables with FL100 Rafters cannot be doubled. Rafters have been set to single.>],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].DoubleIntermediateRafters = 0;\r\n }\r\n if (\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"FL15015\" ||\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"FL20020\"\r\n ) {\r\n errors.push({\r\n error: true,\r\n title: \"FL100 Rafters cannot have larger purlins\",\r\n message: [<>FL100 Rafters cannot have larger purlins. Purlins have been set to FL100.>],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 = \"FL10011\";\r\n }\r\n } else if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1 === \"FL15015\") {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"FL20020\") {\r\n errors.push({\r\n error: true,\r\n title: \"FL150 Rafters cannot have larger purlins\",\r\n message: [<>FL150 Rafters cannot have larger purlins. Purlins have been set to FL150.>],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 = \"FL15015\";\r\n }\r\n } else if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType1 === \"FL20020\") {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTie === 1) {\r\n errors.push({\r\n error: true,\r\n title: \"Gables with FL200 Rafters cannot have Collar Ties\",\r\n message: [\r\n <>Gables with FL200 Rafters cannot have Collar Ties. Collar Ties have been removed.>,\r\n ],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTie = 0;\r\n }\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 === \"FL10011\") {\r\n errors.push({\r\n error: true,\r\n title: \"FL200 Rafters cannot have FL100 purlins\",\r\n message: [<>FL200 Rafters cannot have FL100 purlins. Purlins have been set to FL150.>],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType2 = \"FL15015\";\r\n }\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType3 === \"FL15015\") {\r\n errors.push({\r\n error: true,\r\n title: \"FL200 Rafters cannot have FL150 Edge Beam\",\r\n message: [<>FL200 Rafters cannot have FL150 Edge Beam. Edge Beam has been set to FL200.>],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType3 = \"FL20020\";\r\n }\r\n }\r\n if (window.LYSAGHT) {\r\n if (\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTie === 1 &&\r\n new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS][\"DownlightFlashing\"] === 1\r\n ) {\r\n errors.push({\r\n error: true,\r\n title: \"Gable with Collar Ties cannot have Downlight Tray\",\r\n message: [\r\n <>Gable with Collar Ties cannot have Downlight Tray. Downlight Tray has been removed.>,\r\n ],\r\n });\r\n new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS][\"DownlightFlashing\"] = 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Forced compliance/mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n let merbau_error = false;\r\n\r\n if (had_notched_posts) {\r\n if (\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CornerPostsFullHeight !== 2 &&\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].IntermediatePostsFullHeight !== 2 &&\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].PostColMatchBeam === \"Merbau\"\r\n ) {\r\n merbau_error = {\r\n error: true,\r\n title: \"Merbau is not available in Notched.\",\r\n message: [<>Merbau is not available in Notched. Post Postion has been set to \"Post Behind Beam\".>],\r\n };\r\n }\r\n }\r\n\r\n if (\r\n new_area_data.Footings?.length > 0 &&\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS]?.PostCol === \"Merbau\"\r\n ) {\r\n // Change back footing types to concrete in (No Flanged)\r\n // If error message already there add both cases\r\n if (merbau_error) {\r\n merbau_error = {\r\n error: true,\r\n title: \"Merbau is not available in Notched or Flanged.\",\r\n message: [\r\n <>\r\n Merbau is not available in Notched or Flanged, Post Footing has been set to \"Concrete In\". Post\r\n Postion has been set to \"Post Behind Beam\". Select another post colour to change Footing Type or\r\n Post Position.\r\n >,\r\n ],\r\n };\r\n } else {\r\n merbau_error = {\r\n error: true,\r\n title: \"Merbau is not available in Flanged.\",\r\n message: [\r\n <>\r\n Merbau is not available in Flanged, Post Footing has been set to \"Concrete In\". Select another\r\n post colour to change footing type.\r\n >,\r\n ],\r\n };\r\n }\r\n\r\n new_area_data.Footings.forEach((item, i) =>\r\n deleteFromAreaSpecificationModificationArray(areaIndex, \"Footings\", item.Ref)\r\n );\r\n new_area_data.Footings = [];\r\n }\r\n if (merbau_error) errors.push(merbau_error);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: new_job,\r\n value: null,\r\n error: null,\r\n });\r\n\r\n if (errors && errors.length > 0) return ConsolidateErrors(errors);\r\n};\r\n\r\nconst ConsolidateErrors = (errors) => {\r\n if (!errors) return false;\r\n if (errors.length === 1) return errors[0];\r\n\r\n let consolidated_message = [];\r\n\r\n for (let error of errors) {\r\n consolidated_message.push({error.message[0]} );\r\n }\r\n return {\r\n error: true,\r\n title: \"Multiple Errors/Updates\",\r\n message: [\r\n \r\n {consolidated_message}\r\n ,\r\n ],\r\n };\r\n};\r\n\r\nexport const updateAreaSpecificationGutterDownpipe =\r\n (areaIndex, subsection, parameter, value) => (dispatch, getState) => {\r\n let new_job = COMMON.deepCopy(getState().job);\r\n let last_area_data = new_job?.AreaSpecifications?.[areaIndex - 1];\r\n let new_area_data = new_job.AreaSpecifications[areaIndex];\r\n let next_area_data = new_job?.AreaSpecifications?.[areaIndex + 1];\r\n const config = getState().config;\r\n\r\n if (value?.target?.value) value = value?.target?.value;\r\n\r\n //\r\n if (!subsection && !parameter) new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES] = value;\r\n else if (subsection) new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES][subsection][parameter] = value;\r\n else new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES][parameter] = value;\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: new_job,\r\n value: null,\r\n error: null,\r\n });\r\n\r\n let error = JOBSTATE_VALIDATION.CheckSuggestions(config, new_job, areaIndex, getState().app)(dispatch);\r\n let warnings = JOBSTATE_VALIDATION.getWarnings(config, new_job, areaIndex, getState().app);\r\n\r\n if (error) return error;\r\n };\r\n\r\nexport const updateAreaSpecificationValidateJob = (areaIndex, section, parameter, value) => (dispatch, getState) => {\r\n let subsection = null;\r\n if (parameter && parameter.includes(\".\")) {\r\n let parameter_split = parameter.split(\".\");\r\n subsection = parameter_split[0];\r\n parameter = parameter_split[1];\r\n } else if (section && section.includes(\".\")) {\r\n let section_split = section.split(\".\");\r\n section = section_split[0];\r\n subsection = section_split[1];\r\n }\r\n\r\n let new_job = COMMON.deepCopy(getState().job);\r\n let last_area_data = new_job?.AreaSpecifications?.[areaIndex - 1];\r\n let new_area_data = new_job.AreaSpecifications[areaIndex];\r\n let next_area_data = new_job?.AreaSpecifications?.[areaIndex + 1];\r\n const config = getState().config;\r\n\r\n if (value?.target?.value) value = value?.target?.value;\r\n\r\n if (!subsection && !parameter) new_area_data[section] = value;\r\n else if (subsection) new_area_data[section][subsection][parameter] = value;\r\n else new_area_data[section][parameter] = value;\r\n\r\n //forced compliance/ mass settings, updates\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: new_job,\r\n value: null,\r\n error: null,\r\n });\r\n\r\n let error = JOBSTATE_VALIDATION.CheckSuggestions(config, new_job, areaIndex, getState().app)(dispatch);\r\n if (error) return error;\r\n};\r\n\r\nexport const updateAreaSpecificationGableParameters =\r\n (areaIndex, subsection, parameter, value) => (dispatch, getState) => {\r\n let new_job = COMMON.deepCopy(getState().job);\r\n let last_area_data = new_job?.AreaSpecifications?.[areaIndex - 1];\r\n let new_area_data = new_job.AreaSpecifications[areaIndex];\r\n let next_area_data = new_job?.AreaSpecifications?.[areaIndex + 1];\r\n const config = getState().config;\r\n\r\n if (value?.target?.value) value = value?.target?.value;\r\n if (!subsection && !parameter) new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS] = value;\r\n else if (subsection) new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS][subsection][parameter] = value;\r\n else new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS][parameter] = value;\r\n\r\n let error;\r\n if (new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType === \"656510\") {\r\n if (\r\n new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterL > 0 ||\r\n new_area_data[BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES].GutterR > 0\r\n ) {\r\n return {\r\n error: true,\r\n title: \"Gable End with Gutter\",\r\n message: [<>Gable End Infill Beam cannot be 656510 when it is supporting a gutter.>],\r\n };\r\n }\r\n if (new_area_data[BASIC_SPECS_SECTIONS.SHAPE].Depth >= 4500) {\r\n return {\r\n error: true,\r\n title: \"Gable Width Beam Limit\",\r\n message: [<>Gable End Infill Beam cannot be 656510 when Gable Width over 4500mm.>],\r\n };\r\n }\r\n }\r\n\r\n if (parameter === \"DownlightFlashing\") {\r\n if (window.LYSAGHT) {\r\n if (new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].CollarTie === 1) {\r\n error = {\r\n error: true,\r\n title: \"Gable with Collar Ties cannot have Downlight Tray\",\r\n message: [<>Gable with Collar Ties cannot have Downlight Tray.>],\r\n };\r\n new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].DownlightFlashing = 0;\r\n }\r\n }\r\n }\r\n\r\n if (window.LYSAGHT && parameter === \"InfillBeamType\") {\r\n if (\r\n new_area_data[BASIC_SPECS_SECTIONS.GABLE_PARAMETERS].InfillBeamType !==\r\n new_area_data[BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS].BeamType3\r\n ) {\r\n error = {\r\n error: true,\r\n title: \"Infill Beam is matched with Edge Beam.\",\r\n message: [<>Infill Beam is matched with Edge Beam.>],\r\n };\r\n }\r\n }\r\n\r\n // new_area_data.GABLE_PARAMETERS[parameter] = value;\r\n new_job.AreaSpecifications[areaIndex] = new_area_data;\r\n new_area_data.GABLE_PARAMETERS = JOBSTATE_VALIDATION.validateGableParameters(config, new_job, areaIndex);\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n index: areaIndex,\r\n section: null,\r\n subsection: null,\r\n parameter: new_job,\r\n value: null,\r\n error: null,\r\n });\r\n\r\n //\r\n // dispatch({\r\n // type: UPDATE_AREA_SPECIFICATION,\r\n // index: areaIndex,\r\n // section: null,\r\n // subsection: null,\r\n // parameter: null,\r\n // value: new_area_data,\r\n // error: null,\r\n // });\r\n\r\n if (error) return error;\r\n };\r\n\r\nexport const updateAreaSpecification =\r\n (areaIndex, section, parameter, value, validate = false) =>\r\n (dispatch, getState) => {\r\n let subsection = null;\r\n if (parameter && parameter.includes(\".\")) {\r\n let parameter_split = parameter.split(\".\");\r\n subsection = parameter_split[0];\r\n parameter = parameter_split[1];\r\n } else if (section && section.includes(\".\")) {\r\n let section_split = section.split(\".\");\r\n section = section_split[0];\r\n subsection = section_split[1];\r\n }\r\n\r\n const config = getState().config;\r\n const validationSchema = config.validationSchema;\r\n\r\n // Ensure AreaSpecifications is an array and not null/undefined\r\n let job = COMMON.deepCopy(getState().job);\r\n\r\n // Job State Message Popups\r\n jobStateMessagePopups({ job, dispatch, config, section, value });\r\n\r\n let error = null;\r\n let schema = null;\r\n if (validationSchema) {\r\n schema = get(\r\n validationSchema,\r\n \"AreaSpecifications.\" +\r\n areaIndex +\r\n \".\" +\r\n section +\r\n (subsection ? \".\" + subsection : \"\") +\r\n \".\" +\r\n parameter\r\n );\r\n if (schema) {\r\n // let regex_scheme = subsection ? validationSchema[section][subsection][parameter] : validationSchema[section][parameter];\r\n\r\n error = JOBSTATE_VALIDATION.checkValidationScheme(schema, value);\r\n }\r\n }\r\n\r\n // if (parameter === \"Length\" || subsection === \"AREAJOIN\") {\r\n if (section === BASIC_SPECS_SECTIONS.SHAPE) {\r\n let job = COMMON.deepCopy(getState().job);\r\n validateMinNumberOfIntBeams(config, areaIndex, section, subsection, parameter, value, job, dispatch);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n dispatch({\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: section,\r\n subsection: subsection,\r\n parameter: parameter,\r\n value: value,\r\n error: error,\r\n config: config,\r\n });\r\n resolve(\"OK\");\r\n });\r\n\r\n // return Promise.resolve();\r\n };\r\n\r\nexport const updateAreaSpecificationOnly = (areaIndex, section, parameter, value) => (dispatch) => {\r\n let subsection = null;\r\n if (parameter && parameter.includes(\".\")) {\r\n let parameter_split = parameter.split(\".\");\r\n subsection = parameter_split[0];\r\n parameter = parameter_split[1];\r\n }\r\n\r\n dispatch({\r\n type: UPDATE_AREA_SPECIFICATION,\r\n index: areaIndex,\r\n section: section,\r\n subsection: subsection,\r\n parameter: parameter,\r\n value: value,\r\n });\r\n return Promise.resolve();\r\n};\r\n\r\nexport const newJob =\r\n (user_data, in_job_data = null, design_selected = null, subTypeSelected = null) =>\r\n (dispatch, getState) => {\r\n return new Promise((resolve) => {\r\n // https://fielders.atlassian.net/browse/DES-569 - Fix Duplicated order in CDS has the same Quote number as another job. When you click in it, another job appears\r\n // let api_url = API_BASE() + \"admin/getnextvalidjobid/?bus=\" + user_data.BusinessCode;\r\n\r\n // DES-1197 https://fielders.atlassian.net/browse/DES-1197, Allow branch user to select a distributor to create quote for.\r\n let api_url =\r\n API_BASE() +\r\n \"admin/getnextvalidjobid/?bus=\" +\r\n (in_job_data?.Distributor?.id ? in_job_data?.Distributor?.id : user_data.BusinessCode);\r\n\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then(async (response) => {\r\n if (response && response?.status && response.status >= 200 && response.status <= 300) {\r\n let id = await response.text();\r\n\r\n let new_qn = id;\r\n let config = getState().config;\r\n let new_job_data = COMMON.deepCopy(newDefaultJobState(config, new_qn, user_data));\r\n if (in_job_data) {\r\n new_job_data.Customer = { ...in_job_data.Customer };\r\n new_job_data.BusinessCode = in_job_data.BusinessCode;\r\n new_job_data.Distributor = { ...in_job_data.Distributor };\r\n new_job_data.SiteParameters = { ...in_job_data.SiteParameters };\r\n new_job_data.DesignParameters = { ...in_job_data.DesignParameters };\r\n new_job_data.Notes = [...in_job_data.Notes];\r\n new_job_data.CreationDate = Date.now();\r\n new_job_data.DesignParameters.USE_ATTACHMENTS_2 = true;\r\n new_job_data.DesignParameters.UseAreaJoinExtensions = false;\r\n\r\n // Add history creation Date\r\n new_job_data.History = [];\r\n new_job_data.History.push({ Created: new Date(Date.now()).toUTCString() });\r\n\r\n if (design_selected.includes(\"Deck\")) {\r\n new_job_data.DesignParameters.DeckMode = 1;\r\n new_job_data.SiteParameters.ExistingStructure.AttachmentType = \"Wall\";\r\n if (config?.design_options?.[\"Flat Deck\"]?.default_area_template) {\r\n let template = config?.design_options?.[\"Flat Deck\"]?.default_area_template;\r\n new_job_data.AreaSpecifications[0] = _merge(\r\n new_job_data.AreaSpecifications[0],\r\n template\r\n );\r\n }\r\n\r\n new_job_data.AreaSpecifications[0].SHAPE.Length =\r\n in_job_data.AreaSpecifications[0].SHAPE.Length;\r\n new_job_data.AreaSpecifications[0].SHAPE.Height =\r\n in_job_data.AreaSpecifications[0].SHAPE.Height;\r\n new_job_data.AreaSpecifications[0].SHAPE.Depth =\r\n in_job_data.AreaSpecifications[0].SHAPE.Depth;\r\n new_job_data.AreaSpecifications[0].SHAPE.CUTOUTS =\r\n in_job_data.AreaSpecifications[0].SHAPE.CUTOUTS;\r\n new_job_data.AreaSpecifications[0].ATTACHMENTS =\r\n in_job_data.AreaSpecifications[0].ATTACHMENTS;\r\n\r\n new_job_data.AcceptedWarnings = in_job_data.AcceptedWarnings;\r\n\r\n if (new_job_data.AreaSpecifications[0]?.BEAMS_AND_POSTS?.PurlinSpacing != null)\r\n new_job_data.AreaSpecifications[0].BEAMS_AND_POSTS.PurlinSpacing =\r\n in_job_data.AreaSpecifications[0].BEAMS_AND_POSTS.PurlinSpacing;\r\n } else if (design_selected === \"Gable 5.4m x 5.4m\") {\r\n if (config?.design_options?.[\"Gable Hip Roof\"]?.default_area_template) {\r\n let template = config?.design_options?.[\"Gable Hip Roof\"]?.default_area_template;\r\n new_job_data.AreaSpecifications[0] = _merge(\r\n new_job_data.AreaSpecifications[0],\r\n template\r\n );\r\n }\r\n } else if (design_selected === \"Gable\") {\r\n if (config?.design_options?.[\"Gable Hip Roof\"]?.default_area_template) {\r\n let template = config?.design_options?.[\"Gable Hip Roof\"]?.default_area_template;\r\n new_job_data.AreaSpecifications[0] = _merge(\r\n new_job_data.AreaSpecifications[0],\r\n template\r\n );\r\n }\r\n } else if (design_selected === \"National Carport\") {\r\n new_job_data.DesignParameters.CarportMode = 1;\r\n if (config?.design_options?.[\"National Carport\"]?.design_templates[subTypeSelected]) {\r\n let template =\r\n config?.design_options?.[\"National Carport\"]?.design_templates[subTypeSelected];\r\n new_job_data.AreaSpecifications[0] = _merge(\r\n new_job_data.AreaSpecifications[0],\r\n template\r\n );\r\n }\r\n } else {\r\n if (config?.design_options?.[\"Flat Roof\"]?.default_area_template) {\r\n let template = config?.design_options?.[\"Flat Roof\"]?.default_area_template;\r\n new_job_data.AreaSpecifications[0] = _merge(\r\n new_job_data.AreaSpecifications[0],\r\n template\r\n );\r\n }\r\n }\r\n }\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: new_job_data,\r\n });\r\n return resolve();\r\n } else {\r\n let error = await response.text();\r\n return resolve(\"ERROR: \" + error);\r\n }\r\n })\r\n .catch((e) => {\r\n return resolve(\"ERROR\");\r\n });\r\n });\r\n // let new_index = (user_data?.BusinessDetails?.QuoteNumberIndex ? user_data?.BusinessDetails?.QuoteNumberIndex : 0) + 1;\r\n };\r\n\r\nexport const newDuplicateJob =\r\n (user_data, in_job_data = null) =>\r\n (dispatch) => {\r\n return new Promise((resolve) => {\r\n // https://fielders.atlassian.net/browse/DES-569 - Fix Duplicated order in CDS has the same Quote number as another job. When you click in it, another job appears\r\n let api_url = API_BASE() + \"admin/getnextvalidjobid/?bus=\" + in_job_data.BusinessCode;\r\n\r\n // // DES-1197 https://fielders.atlassian.net/browse/DES-1197, Allow branch user to select a distributor to create quote for.\r\n // let api_url =\r\n // API_BASE() +\r\n // \"admin/getnextvalidjobid/?bus=\" +\r\n // (in_job_data?.Distributor?.id ? in_job_data?.Distributor?.id : user_data.BusinessCode);\r\n\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then(async (response) => {\r\n if (response && response?.status && response.status >= 200 && response.status <= 300) {\r\n let id = await response.text();\r\n // let new_index = id;\r\n // let new_qn = user_data.BusinessCode + \"C\" + pad(new_index, 5);\r\n\r\n let new_qn = id;\r\n\r\n let new_job_data = COMMON.deepCopy(in_job_data);\r\n // new_job_data.BusinessCode = user_data.BusinessCode; // Move to new bucket\r\n new_job_data.id = new_qn;\r\n new_job_data.Status = \"New\";\r\n new_job_data.OrderStatus = \"\";\r\n new_job_data.CreationDate = Date.now();\r\n new_job_data.QuoteParameters.DOCUMENTS = {\r\n \"3DScreenShots\": [],\r\n };\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: new_job_data,\r\n });\r\n return resolve();\r\n } else {\r\n let error = await response.text();\r\n return resolve(\"ERROR: \" + error);\r\n }\r\n })\r\n .catch((e) => {\r\n return resolve(\"ERROR\");\r\n });\r\n });\r\n\r\n return Promise.resolve();\r\n };\r\n\r\nexport const updateJobStatus = (business_code, job_id, new_status) => (dispatch) => {\r\n return new Promise((resolve) => {\r\n let job_url = API_BASE() + \"job/\" + business_code + \"/\" + job_id;\r\n fetchTimeout(job_url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n body: JSON.stringify({\r\n action: \"update\",\r\n value: {\r\n Status: new_status,\r\n },\r\n }),\r\n }).then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) resolve(\"OK\");\r\n else resolve(\"ERROR\");\r\n });\r\n });\r\n};\r\n\r\nexport const updateJobHistory =\r\n ({ business_code, job_id, new_history }) =>\r\n (dispatch) => {\r\n return new Promise((resolve) => {\r\n let job_url = API_BASE() + \"job/\" + business_code + \"/\" + job_id;\r\n fetchTimeout(job_url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n body: JSON.stringify({\r\n action: \"update\",\r\n value: {\r\n History: new_history,\r\n },\r\n }),\r\n }).then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) resolve(\"OK\");\r\n else resolve(\"ERROR\");\r\n });\r\n });\r\n };\r\n\r\nexport const updateJobIfRequired =\r\n (updateSVGIfLocked = true) =>\r\n (dispatch, getState) => {\r\n const job = getState()?.job;\r\n if (!job) return;\r\n if (document.hidden) return;\r\n const job_ts = job._ts;\r\n const business_code = job.BusinessCode;\r\n const job_id = job.id;\r\n const user_data = getState().app?.user;\r\n\r\n return new Promise((resolve) => {\r\n let job_url = API_BASE() + \"job/\" + business_code + \"/\" + job_id;\r\n fetchTimeout(job_url, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n body: JSON.stringify({\r\n action: \"getJobIfRequired\",\r\n job_ts: job_ts,\r\n user_id: user_data.id,\r\n session_id: window?.session_id,\r\n }),\r\n }).then(async (response) => {\r\n if (response && response?.status && response.status >= 200 && response.status <= 300) {\r\n let text = await response.text();\r\n if (text == \"\") {\r\n resolve(\"OK, no need to update\");\r\n\r\n if (updateSVGIfLocked && job?.App?.Locked) {\r\n let job_to_load = _cloneDeep(job);\r\n job_to_load.App.current_SVG = null;\r\n if (job.App.current_SVG === null) job_to_load.App.current_SVG = \"\";\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: job_to_load,\r\n });\r\n\r\n dispatch({\r\n type: UPDATE_DESIGNER,\r\n parameter: SHOW_LOADING_BAR,\r\n value: false,\r\n });\r\n }\r\n } else {\r\n let data = JSON.parse(text);\r\n\r\n if (data?.Locked) {\r\n let job_to_load = _cloneDeep(job);\r\n\r\n job_to_load.App.Locked = true;\r\n job_to_load.App.LockMessage = data.LockMessage;\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: job_to_load,\r\n });\r\n\r\n dispatch({\r\n type: UPDATE_DESIGNER,\r\n parameter: SHOW_LOADING_BAR,\r\n value: false,\r\n });\r\n return;\r\n }\r\n let job_to_load = _cloneDeep(data);\r\n\r\n resolve(\"OK, update\", job_to_load);\r\n if (job?.[\"QuoteParameters\"]?.[\"BOM\"]) {\r\n if (job_to_load?.[\"QuoteParameters\"]) job_to_load[\"QuoteParameters\"] = {};\r\n job_to_load[\"QuoteParameters\"][\"BOM\"] = COMMON.deepCopy(job[\"QuoteParameters\"][\"BOM\"]);\r\n }\r\n\r\n if (updateSVGIfLocked && job_to_load?.App?.Locked) {\r\n job_to_load.App.current_SVG = null;\r\n if (job.App.current_SVG === null) job_to_load.App.current_SVG = \"\";\r\n }\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: job_to_load,\r\n });\r\n\r\n dispatch({\r\n type: UPDATE_DESIGNER,\r\n parameter: SHOW_LOADING_BAR,\r\n value: false,\r\n });\r\n }\r\n } else resolve(\"ERROR\");\r\n });\r\n });\r\n };\r\n\r\nexport const loadJob =\r\n (business_code, quote_id, user_data, db_mode = \"\") =>\r\n (dispatch, getState) => {\r\n checkInternetConnection(dispatch);\r\n window.loading_job_id = quote_id;\r\n return new Promise((resolve) => {\r\n let job_url = API_BASE() + \"job/\" + business_code + \"/\" + quote_id + \"/\" + db_mode;\r\n fetchTimeout(\r\n job_url,\r\n {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n },\r\n 45000\r\n )\r\n .then(async (response) => {\r\n //\r\n // response.headers.forEach(console.log);\r\n // if (window.debug) throw new Error(\"No Job\");\r\n let documents = JSON.parse(await response.text());\r\n\r\n window.loading_job_id = null;\r\n if (documents.length > 0) {\r\n //merge with template\r\n let recall_job_data = { ...documents[0] };\r\n\r\n let config = getState().config;\r\n\r\n let app = getState().app;\r\n\r\n let region = recall_job_data?.Distributor?.Offer?.Regions?.[0];\r\n //\r\n if (region && config && region !== config.id) {\r\n // save this offering\r\n let brand = recall_job_data?.Distributor?.Offer?.Brand;\r\n let region_offering = recall_job_data?.Distributor?.Offer?.offerings?.[region];\r\n if (!region_offering) region_offering = app?.offerings?.[brand]?.Regions?.[region];\r\n if (region_offering) {\r\n config = COMMON.mergeDeep(\r\n { ..._cloneDeep(app.offerings[brand].Master) },\r\n region_offering\r\n );\r\n\r\n let new_app_offering = { ...app.offerings };\r\n\r\n new_app_offering[brand].Regions[region] = region_offering;\r\n if (new_app_offering) dispatch(updateAPP(\"offerings\", new_app_offering));\r\n dispatch(CONFIG.updateConfigAll(config));\r\n }\r\n }\r\n\r\n let user_data_for_validation = user_data;\r\n if (recall_job_data?.User) user_data_for_validation = recall_job_data?.User;\r\n if (!user_data_for_validation?.BusinessDetails && recall_job_data?.Distributor)\r\n user_data_for_validation.BusinessDetails = recall_job_data?.Distributor;\r\n let num_areas = recall_job_data?.AreaSpecifications.length;\r\n let job_to_load = _cloneDeep(\r\n newDefaultJobState(config, \"\", user_data_for_validation, num_areas ? num_areas : 1)\r\n );\r\n\r\n _merge(job_to_load, recall_job_data);\r\n\r\n //reset values\r\n window.svg = null;\r\n window.svg_data = null;\r\n job_to_load.App = {\r\n current_SVG: \"\",\r\n current_OBJ: \"\",\r\n temp_POA: \"\",\r\n };\r\n if (job_to_load?.QuoteParameters?.BOM?.bomHashCode)\r\n job_to_load.QuoteParameters.BOM.bomHashCode = 0;\r\n\r\n // if (job_to_load?.LastEditor?.id) {\r\n // if (job_to_load?.LastEditor?.id !== user_data.id) {\r\n // job_to_load.App.Locked = true;\r\n // job_to_load.App.LockMessage = \"JOB IS CURRENTLY BEING EDITED BY \" + job_to_load?.LastEditor?.DisplayName + \". Would you like to take over the session here?\";\r\n\r\n // }\r\n //\r\n // if (job_to_load?.LastEditor?.id === user_data.id && job_to_load?.LastEditor?._session_id !== window.session_id) {\r\n // - job_to_load?.LastEditor?._ts));\r\n // if ((Date.now() - job_to_load?.LastEditor?._ts) < 600000*3) // thirty minutes\r\n // job_to_load.App.Locked = true;\r\n // job_to_load.App.LockMessage = \"This job is currently being edited in another session by you. Would you like to take over the session here? If you continue, the job will update from the server.\";\r\n // }\r\n // }\r\n\r\n if (config?.region?.id === region ? config : null)\r\n job_to_load = JOBSTATE_VALIDATION.validateFullJob(config, job_to_load, -1, getState().app);\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: job_to_load,\r\n });\r\n\r\n setTimeout(function () {\r\n let warnings = JOBSTATE_VALIDATION.getWarnings(\r\n job_to_load,\r\n getState()?.app?.user,\r\n getState()?.config\r\n );\r\n // Add warnings from warningsHelper\r\n let standardErrors = jobStateErrorPopups({\r\n config: getState()?.config,\r\n job: job_to_load,\r\n dispatch: () => null,\r\n app: getState()?.app,\r\n });\r\n\r\n if (standardErrors?.length > 0) warnings[\"message\"] = standardErrors.title;\r\n\r\n if (warnings && warnings.warning)\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: warnings.message,\r\n });\r\n }, 2000);\r\n\r\n return resolve(true);\r\n } else {\r\n throw new Error(\"No Job\");\r\n }\r\n })\r\n .catch((e) => {\r\n // dispatch(setDesignerLoadingBackdrop(\"ERROR LOADING JOB #\" + job_id));\r\n\r\n window.loading_job_id = null;\r\n return resolve(false);\r\n // handle errors and timeout error\r\n }); // parses JSON response into native Javascript objects\r\n });\r\n };\r\n\r\nexport const saveJob =\r\n (job = null) =>\r\n (dispatch, getState) => {\r\n if (!job) job = { ...getState().job };\r\n if (!job) {\r\n return;\r\n }\r\n if (job?.App?.Locked) {\r\n }\r\n\r\n let savejob_url = API_BASE() + \"job/\" + job.id;\r\n var save_job = Object.assign({}, job);\r\n save_job.ErrorMap = {};\r\n\r\n const user_data = getState().app?.user;\r\n if (user_data)\r\n save_job.LastEditor = {\r\n id: user_data.id,\r\n DisplayName: user_data.DisplayName,\r\n UserCode: user_data.UserCode,\r\n _session_id: window?.session_id,\r\n _ts: Date.now(),\r\n };\r\n\r\n return (\r\n fetchTimeout(savejob_url, {\r\n method: \"PUT\", // *GET, POST, PUT, DELETE, etc.\r\n body: JSON.stringify(save_job), // body data type must match \"Content-Type\" header\r\n })\r\n // .then(async response => {let new_response = {text: await response.text()}; return new_response})\r\n .then(async (response) => {\r\n if (response.status === 401) {\r\n let error = await response.text();\r\n\r\n let job_to_load = _cloneDeep(job);\r\n\r\n job_to_load.App.Locked = true;\r\n job_to_load.App.LockMessage = error;\r\n\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: job_to_load,\r\n });\r\n }\r\n if (response.status === 422) {\r\n let error_map = JSON.parse(await response.text());\r\n\r\n dispatch({\r\n type: UPDATE_ERROR_MAP,\r\n value: error_map,\r\n });\r\n } else if (response.status >= 200 && response.status < 300) {\r\n dispatch({\r\n type: CLEAR_ERROR_MAP,\r\n });\r\n } else {\r\n }\r\n })\r\n .catch((e) => {\r\n // handle errors and timeout error\r\n })\r\n ); // parses JSON response into native Javascript objects\r\n };\r\n","import _debounce from \"lodash/debounce\";\r\nimport { fetchTimeout, deepCopy, RehydrateThumbnails, deleteCookie } from \"../components/Common\";\r\nimport { API_BASE, PRICEFILE_KEY } from \"../AppConfig\";\r\n\r\nimport { createStoreDatabase, decryptData } from \"./database\";\r\n\r\nimport { NEW_JOB } from \"./jobState\";\r\nimport { loadOffering } from \"./configState\";\r\nimport * as JOBSTATE_VALIDATION from \"./jobState_Validation\";\r\n\r\n// App Actions\r\nexport const UPDATE_USER = \"UPDATE_USER\";\r\nexport const UPDATE_BUSINESS = \"UPDATE_BUSINESS\";\r\nexport const UPDATE_LAST_QUOTES_EDITED = \"UPDATE_LAST_QUOTES_EDITED\";\r\nexport const UPDATE_LAST_QUOTES_EDITED_ARCHIVED = \"UPDATE_LAST_QUOTES_EDITED_ARCHIVED\";\r\n\r\n// Page Actions\r\nexport const UPDATE_APP = \"UPDATE_APP\";\r\nexport const TOGGLE_APP = \"TOGGLE_APP\";\r\nexport const UPDATE_PAGE = \"UPDATE_PAGE\";\r\n// Page Attributes\r\nexport const MAIN_PAGE = \"MAIN_PAGE\";\r\nexport const DESIGNER_PAGE = \"DESIGNER_PAGE\";\r\n\r\n// Designer Actions\r\nexport const UPDATE_DESIGNER = \"UPDATE_DESIGNER\";\r\nexport const TOGGLE_DESIGNER = \"TOGGLE_DESIGNER\";\r\nexport const SET_TOOLSET_AREA = \"setToolSetArea\";\r\nexport const SHOW_LOADING_BACKDROP = \"SHOW_LOADING_BACKDROP\";\r\nexport const LOADING_BACKDROP_MESSAGE = \"LOADING_BACKDROP_MESSAGE\";\r\n// Designer Attributes\r\nexport const MAIN_DRAWER_OPEN = \"mainDrawerOpen\";\r\nexport const TOOL_DRAWER_OPEN = \"toolDrawerOpen\";\r\nexport const TOOL_DRAWER_HIDE = \"toolDrawerHide\";\r\nexport const TOOL_DRAWER_AREA = \"toolDrawerArea\";\r\nexport const THREED_MODE = \"threeDMode\";\r\nexport const THREED_MINI_MODE = \"threeDMiniMode\";\r\nexport const THREED_MINI_WIDTH = \"threeDMiniWidth\";\r\nexport const THREED_MINI_HEIGHT = \"threeDMiniHeight\";\r\nexport const SHOW_CUSTOMER_JOB_PANEL = \"showCustomerJobPanel\";\r\nexport const SHOW_NOTES_PANEL = \"showNotesPanel\";\r\nexport const SHOW_DEBUG_TOOLS = \"SHOW_DEBUG_TOOLS\";\r\nexport const UNLOCKED = \"UNLOCKED\";\r\nexport const TOOL_DRAWER_WIDTH = \"TOOL_DRAWER_WIDTH\";\r\n\r\n// 2D Designer Actions\r\nexport const UPDATE_2D_DESIGNER = \"UPDATE_2D_DESIGNER\";\r\nexport const UPDATE_2D_DESIGNER_SVGS = \"UPDATE_2D_DESIGNER_SVGS\";\r\nexport const TOGGLE_2D_DESIGNER = \"TOGGLE_2D_DESIGNER\";\r\nexport const SHOW_DESIGNER_MESSAGE = \"SHOW_DESIGNER_MESSAGE\";\r\nexport const CLEAR_DESIGNER_MESSAGE = \"CLEAR_DESIGNER_MESSAGE\";\r\nexport const APPEND_DESIGNER_MESSAGE = \"APPEND_DESIGNER_MESSAGE\";\r\n\r\nexport const SELECT_POINT = \"SELECT_POINT\";\r\nexport const SELECT_POINT_NOTE = \"SELECT_POINT_NOTE\";\r\nexport const SELECTED_POINT = \"SELECTED_POINT\";\r\nexport const SELECT_POINT_ALLOW_HIT_SELTYPE = \"SELECT_POINT_ALLOW_HIT_SELTYPE\";\r\nexport const AREA_INDEX = \"AREA_INDEX\";\r\n\r\n// 2D Designer Attributes\r\nexport const SHOW_IMPORTED_MAP = \"showImportedMap\";\r\nexport const SHOW_BEAM_LENGTHS = \"SHOW_BEAM_LENGTHS\";\r\nexport const SHOW_POST_DIMENSIONS = \"SHOW_POST_DIMENSIONS\";\r\nexport const DRAW_FULL_LAYOUT = \"DRAW_FULL_LAYOUT\";\r\n\r\n// 3D Designer Actions\r\nexport const UPDATE_3D_DESIGNER = \"UPDATE_3D_DESIGNER\";\r\nexport const TOGGLE_3D_DESIGNER = \"TOGGLE_3D_DESIGNER\";\r\nexport const UPDATE_3D_MODEL = \"UPDATE_3D_MODEL\";\r\n\r\n// 3D Babylon Designer Attributes\r\nexport const SHOW_GROUND_PHOTO = \"showGroundPhoto\";\r\nexport const SHOW_HOUSE_MODEL = \"showHouseModel\";\r\nexport const SHOW_VERANDAH_MODEL = \"showVerandahModel\";\r\nexport const SHOW_VERANDAH_LAYOUT = \"showVerandahLayout\";\r\nexport const BABYLON_SELECTED_ITEM = \"babylonSelectedItem\";\r\n\r\nexport const ATTACHMENT_MESH_MODE = \"ATTACHMENT_MESH_MODE\";\r\nexport const ROOFSHEET__MESH_MODE = \"ROOFSHEET__MESH_MODE\";\r\nexport const BEAM_AND_POST_MESH_MODE = \"BEAM_AND_POST_MESH_MODE\";\r\nexport const GUTTERS_AND_FLASHING_MESH_MODE = \"GUTTERS_AND_FLASHING_MESH_MODE\";\r\nexport const FOOTINGS_MESH_MODE = \"FOOTINGS_MESH_MODE\";\r\n\r\nexport const VERANDAH_MESH_MODE = \"verandahMeshMode\";\r\nexport const VERANDAH_EDGE_LINE_MODE = \"verandahEdgeLineMode\";\r\nexport const BACKGROUND_MODE = \"backgroundMode\";\r\nexport const BACKGROUND_SHADOW_MODE = \"backgroundShadowMode\";\r\nexport const RENDERQUALITYFACTOR = \"RENDERQUALITYFACTOR\";\r\nexport const SUN_ANGLE = \"SUN_ANGLE\";\r\nexport const SUN_ANGLE_Y = \"SUN_ANGLE_Y\";\r\nexport const FONT_SIZE = \"FONT_SIZE\";\r\nexport const SHOW_GRAPH_BG = \"SHOW_GRAPH_BG\";\r\nexport const SHOW_DISPLAY_OPTIONS = \"SHOW_DISPLAY_OPTIONS\";\r\n\r\nexport const DRAWER_TOOLSET_EXPANDED = \"drawerToolSetExpanded\";\r\n\r\nexport const ATTACHMENT_TOOL = \"attachment_tool\";\r\nexport const GUTTERS_DOWNPIPES_TOOL = \"gutters_downpipes_tool\";\r\nexport const ROOFSHEET_TOOL = \"roofsheet_tool\";\r\nexport const BEAMS_AND_POSTS_TOOL = \"beams_and_posts_tool\";\r\nexport const PITCHED_GABLE_TOOL = \"pitched_gable_tool\";\r\nexport const OTHER_TOOLS = \"OTHER_TOOLS\";\r\n\r\nexport const SHAPE_TOOL = \"SHAPE_TOOL\";\r\nexport const SHOW_LOADING_BAR = \"SHOW_LOADING_BAR\";\r\nexport const SHOW_WIND_DATA_LOADING_BAR = \"SHOW_WIND_DATA_LOADING_BAR\";\r\nexport const SHOW_MESSAGE = \"SHOW_MESSAGE\";\r\nexport const MESSAGE = \"MESSAGE\";\r\nexport const SHOW_DIALOG = \"SHOW_DIALOG\";\r\nexport const DIALOG_DATA = \"DIALOG_DATA\";\r\nexport const DOCUMENT_TO_SHOW = \"DOCUMENT_TO_SHOW\";\r\nexport const GENERATING_DOCUMENT = \"GENERATING_DOCUMENT\";\r\nexport const GENERATING_DOCUMENT_STATUS = \"GENERATING_DOCUMENT_STATUS\";\r\n\r\nexport const initialState = {\r\n page: MAIN_PAGE,\r\n MAIN_PAGE: {\r\n page: \"Recall\",\r\n NumRecallItems: 50,\r\n },\r\n help_open: false,\r\n help_section: null,\r\n designer: {\r\n [TOOL_DRAWER_OPEN]: false,\r\n [TOOL_DRAWER_HIDE]: false,\r\n [MAIN_DRAWER_OPEN]: false,\r\n [TOOL_DRAWER_AREA]: 0,\r\n [THREED_MODE]: false,\r\n [THREED_MINI_MODE]: false,\r\n [THREED_MINI_HEIGHT]: window.innerHeight * 0.45,\r\n [THREED_MINI_WIDTH]: window.innerWidth * 0.55,\r\n [SHOW_CUSTOMER_JOB_PANEL]: false,\r\n [SHOW_NOTES_PANEL]: false,\r\n [SHOW_LOADING_BAR]: true,\r\n [SHOW_LOADING_BACKDROP]: false,\r\n [SHOW_DEBUG_TOOLS]: false,\r\n [LOADING_BACKDROP_MESSAGE]: \"\",\r\n [SHOW_DIALOG]: false,\r\n [DIALOG_DATA]: {},\r\n [SHOW_MESSAGE]: false,\r\n [DOCUMENT_TO_SHOW]: null,\r\n [GENERATING_DOCUMENT]: false,\r\n [GENERATING_DOCUMENT_STATUS]: false,\r\n [MESSAGE]: \"\",\r\n [SHOW_DISPLAY_OPTIONS]: false,\r\n [UNLOCKED]: false,\r\n [TOOL_DRAWER_WIDTH]: 390,\r\n designer2D: {\r\n [SHOW_IMPORTED_MAP]: false,\r\n [SHOW_BEAM_LENGTHS]: false,\r\n [SHOW_POST_DIMENSIONS]: false,\r\n [DRAW_FULL_LAYOUT]: false,\r\n [FONT_SIZE]: 100,\r\n [SHOW_GRAPH_BG]: true,\r\n [SELECT_POINT_NOTE]: \"\",\r\n [AREA_INDEX]: -1,\r\n [SELECT_POINT]: false,\r\n [SELECT_POINT_ALLOW_HIT_SELTYPE]: false,\r\n [SELECTED_POINT]: { x: 0, y: 0 },\r\n svgs: {\r\n area_all: null,\r\n },\r\n },\r\n designer3D: {\r\n [SHOW_GROUND_PHOTO]: true,\r\n [SHOW_HOUSE_MODEL]: true,\r\n [SHOW_VERANDAH_MODEL]: false,\r\n [ATTACHMENT_MESH_MODE]: \"Render\",\r\n [ROOFSHEET__MESH_MODE]: \"Render\",\r\n [BEAM_AND_POST_MESH_MODE]: \"Render\",\r\n [GUTTERS_AND_FLASHING_MESH_MODE]: \"Render\",\r\n [FOOTINGS_MESH_MODE]: \"Render\",\r\n [VERANDAH_MESH_MODE]: false,\r\n [VERANDAH_EDGE_LINE_MODE]: false,\r\n [SHOW_VERANDAH_LAYOUT]: false,\r\n [BABYLON_SELECTED_ITEM]: null,\r\n [DRAWER_TOOLSET_EXPANDED]: null,\r\n [BACKGROUND_SHADOW_MODE]: false,\r\n [BACKGROUND_SHADOW_MODE]: false,\r\n [BACKGROUND_MODE]: \"Grid\",\r\n [RENDERQUALITYFACTOR]: 7,\r\n [SUN_ANGLE]: 1,\r\n [SUN_ANGLE_Y]: -1,\r\n objs: {\r\n area_all: null,\r\n },\r\n },\r\n },\r\n user: null,\r\n logged_user_code: null,\r\n user_last_jobs_edited: null,\r\n user_last_jobs_edited_archived: null,\r\n offerings: null,\r\n online: true,\r\n manufacturer: window?.F\r\n ? {\r\n Name: \"Centenary\",\r\n ProductName: \"Centenary\",\r\n FullRegisteredName: \"Fielders Pty Ltd\",\r\n Logo: \"/app/images/centenary_logo.png\",\r\n BrandColour: \"rgb(0, 52, 102)\",\r\n SoftwareName: \"Centenary Design Suite\",\r\n }\r\n : {\r\n Name: \"Lysaght\",\r\n ProductName: \"Lysaght Living\",\r\n FullRegisteredName: \"Bluescope Steel Limited\",\r\n Logo: \"/images/lys_logo_topbar.png\",\r\n BrandColour: \"#066CB6\",\r\n SoftwareName: \"Lysaght Living Designer\",\r\n },\r\n job_history_buffer: {\r\n data: [],\r\n pointer: -1,\r\n },\r\n};\r\n\r\nexport default function (state = initialState, action) {\r\n switch (action.type) {\r\n case UPDATE_APP:\r\n return {\r\n ...state,\r\n [action.parameter]: action.value,\r\n };\r\n case TOGGLE_APP:\r\n let toggle_app_value =\r\n action.value || action.value === false ? action.value : !state[action.parameter] ? true : false;\r\n return {\r\n ...state,\r\n [action.parameter]: toggle_app_value,\r\n };\r\n case UPDATE_PAGE:\r\n return {\r\n ...state,\r\n page: action.value,\r\n };\r\n case UPDATE_USER:\r\n return {\r\n ...state,\r\n user: action.value,\r\n };\r\n case UPDATE_BUSINESS:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n BusinessCode: action?.value?.id,\r\n BusinessDetails: action.value,\r\n },\r\n };\r\n\r\n case UPDATE_LAST_QUOTES_EDITED:\r\n return {\r\n ...state,\r\n user_last_jobs_edited: action.value,\r\n };\r\n\r\n case UPDATE_LAST_QUOTES_EDITED_ARCHIVED:\r\n return {\r\n ...state,\r\n user_last_jobs_edited_archived: action.value,\r\n };\r\n\r\n case UPDATE_DESIGNER:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n [action.parameter]: action.value,\r\n },\r\n };\r\n\r\n case TOGGLE_DESIGNER:\r\n let value =\r\n action.value || action.value === false\r\n ? action.value\r\n : !state.designer[action.parameter]\r\n ? true\r\n : false;\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n [action.parameter]: value,\r\n },\r\n };\r\n case UPDATE_2D_DESIGNER:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n designer2D: {\r\n ...state.designer.designer2D,\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n };\r\n case UPDATE_2D_DESIGNER_SVGS:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n designer2D: {\r\n ...state.designer.designer2D,\r\n svgs: {\r\n ...state.designer.designer2D.svgs,\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n },\r\n };\r\n case UPDATE_3D_MODEL:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n designer3D: {\r\n ...state.designer.designer3D,\r\n objs: {\r\n ...state.designer.designer3D.objs,\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n },\r\n };\r\n case TOGGLE_2D_DESIGNER:\r\n let value_TOGGLE_2D_DESIGNER =\r\n action.value || action.value === false\r\n ? action.value\r\n : !state.designer.designer2D[action.parameter]\r\n ? true\r\n : false;\r\n\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n designer2D: {\r\n ...state.designer.designer2D,\r\n [action.parameter]: value_TOGGLE_2D_DESIGNER,\r\n },\r\n },\r\n };\r\n case UPDATE_3D_DESIGNER:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n designer3D: {\r\n ...state.designer.designer3D,\r\n [action.parameter]: action.value,\r\n },\r\n },\r\n };\r\n case TOGGLE_3D_DESIGNER:\r\n let value_TOGGLE_3D_DESIGNER =\r\n action.value || action.value === false\r\n ? action.value\r\n : !state.designer.designer3D[action.parameter]\r\n ? true\r\n : false;\r\n\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n designer3D: {\r\n ...state.designer.designer3D,\r\n [action.parameter]: value_TOGGLE_3D_DESIGNER,\r\n },\r\n },\r\n };\r\n case SET_TOOLSET_AREA:\r\n let toolset = state.designer.designer3D[DRAWER_TOOLSET_EXPANDED];\r\n if (action.toolset !== null) {\r\n // if (toolset == action.toolset) toolset = null;\r\n // else\r\n toolset = action.toolset;\r\n }\r\n\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n [TOOL_DRAWER_AREA]: action.area,\r\n designer3D: {\r\n ...state.designer.designer3D,\r\n [DRAWER_TOOLSET_EXPANDED]: toolset,\r\n },\r\n },\r\n };\r\n\r\n case CLEAR_DESIGNER_MESSAGE:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n [SHOW_MESSAGE]: false,\r\n [MESSAGE]: \"\",\r\n },\r\n };\r\n case SHOW_DESIGNER_MESSAGE:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n [SHOW_MESSAGE]: true,\r\n [MESSAGE]: action.message,\r\n },\r\n };\r\n case APPEND_DESIGNER_MESSAGE:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n [SHOW_MESSAGE]: true,\r\n [MESSAGE]: (state.designer.message ? state.designer.message + \" \" : \"\") + action.message,\r\n },\r\n };\r\n case SHOW_DIALOG:\r\n return {\r\n ...state,\r\n designer: {\r\n ...state.designer,\r\n [SHOW_DIALOG]: true,\r\n [DIALOG_DATA]: action.value,\r\n },\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport const showDialog =\r\n (title, message, primaryActionText = \"Close\", primaryAction, secondaryActionText, secondaryAction) =>\r\n (dispatch) => {\r\n dispatch({\r\n type: SHOW_DIALOG,\r\n value: {\r\n title: title,\r\n message: message,\r\n primaryActionText: primaryActionText,\r\n primaryAction: primaryAction,\r\n secondaryActionText: secondaryActionText,\r\n secondaryAction: secondaryAction,\r\n },\r\n });\r\n };\r\nexport const showDialogData = (dialogData) => (dispatch) => {\r\n let defaultData = {\r\n title: \"\",\r\n message: \"\",\r\n primaryActionText: \"OK\",\r\n primaryAction: null,\r\n secondaryActionText: null,\r\n secondaryAction: null,\r\n };\r\n\r\n dispatch({\r\n type: SHOW_DIALOG,\r\n value: {\r\n ...defaultData,\r\n ...dialogData,\r\n },\r\n });\r\n};\r\n\r\nexport const UNDO = () => (dispatch) => {\r\n dispatch({\r\n type: \"UNDO\",\r\n });\r\n};\r\nexport const REDO = () => (dispatch) => {\r\n dispatch({\r\n type: \"REDO\",\r\n });\r\n};\r\n\r\nexport const loadAppTemplate = (template) => (dispatch) => {\r\n \r\n dispatch({\r\n type: \"LOAD_TEMPLATE\",\r\n value: template,\r\n });\r\n};\r\n\r\nexport const resetAll = () => (dispatch) => {\r\n \r\n dispatch({\r\n type: \"RESET_ALL\",\r\n value: \"RESET_ALL\",\r\n });\r\n};\r\n\r\nexport const updateAPP = (parameter, value) => (dispatch) => {\r\n \r\n return new Promise((resolve) => {\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: parameter,\r\n value: value,\r\n });\r\n return resolve(true);\r\n });\r\n};\r\n\r\nexport const toggleAPP =\r\n (parameter, value = null) =>\r\n (dispatch) => {\r\n // \r\n return new Promise((resolve) => {\r\n dispatch({\r\n type: TOGGLE_APP,\r\n parameter: parameter,\r\n value: value,\r\n });\r\n return resolve(true);\r\n });\r\n };\r\n\r\nexport const resetDesigner = () => (dispatch, getState) => {\r\n const job = getState().job;\r\n const carportMode = job?.DesignParameters?.CarportMode === 1;\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: \"designer\",\r\n value: {\r\n ...initialState.designer,\r\n threeDMode: window.debug && !carportMode ? true : false,\r\n threeDMiniMode: window.debug && !carportMode ? true : false,\r\n designer2D: { ...getState()?.app?.designer?.designer2D, AREA_INDEX: -1, SELECT_POINT: false },\r\n designer3D: { ...getState()?.app?.designer?.designer3D },\r\n },\r\n });\r\n return Promise.resolve();\r\n};\r\n\r\nexport const loadUser = (email_address, password) => (dispatch) => {\r\n return new Promise((resolve) => {\r\n dispatch(updateUserFromWeb(email_address, password)).then((user_data) => {\r\n // \r\n if (!user_data) {\r\n return resolve(false);\r\n }\r\n if (user_data.Error) {\r\n return resolve(user_data);\r\n }\r\n\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: \"logged_user_code\",\r\n value: email_address,\r\n });\r\n\r\n let config_url = API_BASE() + `config/` + btoa(email_address);\r\n // if (window.debug) config_url = BaseURL(\"data/config_data_response.json\");\r\n\r\n if (!window.location.href.includes(\"use_cache\")) {\r\n fetchTimeout(config_url, {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n })\r\n .then((res) => res.json())\r\n .then(async (json_user_data) => {\r\n \r\n\r\n if (!json_user_data?.offerings) throw \"No offering data\";\r\n\r\n // dispatch(updateConfigAll({\r\n // ...json_user_data.offerings.Fielders.Master,\r\n // validationSchema: {\r\n // ...json_user_data.offerings.Fielders.validationSchema,\r\n // }\r\n // }));\r\n\r\n let offering = null;\r\n if (window.FIELDERS && json_user_data?.offerings?.Fielders)\r\n offering = json_user_data?.offerings?.Fielders;\r\n if (window.LYSAGHT && json_user_data?.offerings?.Lysaght)\r\n offering = json_user_data?.offerings?.Lysaght;\r\n\r\n \r\n\r\n if (offering)\r\n dispatch(updateAPP(\"offerings\", json_user_data.offerings)).then(() => {\r\n dispatch(loadOffering());\r\n });\r\n if (json_user_data?.pricefile) {\r\n if (json_user_data?.pricefile?.Error)\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: json_user_data?.pricefile?.Error,\r\n });\r\n else {\r\n const encryptedPricefile = json_user_data?.pricefile;\r\n\r\n \r\n\r\n let decryptedPricefile;\r\n // Decrypt the encrypted data\r\n if (encryptedPricefile?.data && encryptedPricefile?.iv)\r\n decryptedPricefile = JSON.parse(\r\n decryptData(\r\n encryptedPricefile.data, // Access the \"data\" property that contains the encrypted data\r\n encryptedPricefile.iv,\r\n PRICEFILE_KEY // Encyrption Key\r\n )\r\n );\r\n\r\n // // not logged for security reasons\r\n\r\n const encyrptedPricefile = json_user_data?.pricefile;\r\n\r\n createStoreDatabase(JSON.stringify(encyrptedPricefile));\r\n // sessionStorage.setItem(\"pricefile\", encyrptedPricefile);\r\n dispatch(updateAPP(\"pricefile\", RehydrateThumbnails(decryptedPricefile)));\r\n }\r\n }\r\n if (json_user_data?.dist_level) dispatch(updateAPP(\"dist_levels\", json_user_data?.dist_level));\r\n if (json_user_data?.special_factors)\r\n dispatch(updateAPP(\"special_factors\", json_user_data?.special_factors));\r\n if (json_user_data?.announcements)\r\n dispatch(updateAPP(\"announcements\", json_user_data?.announcements));\r\n resolve(true);\r\n })\r\n .catch((e) => {\r\n resolve({\r\n Error: \"Server Error: Could not load offerings from Server\",\r\n });\r\n });\r\n }\r\n\r\n // updateRecallListFromWeb(user_data);\r\n });\r\n });\r\n};\r\n\r\nexport const changePage = (page_name) => (dispatch) => {\r\n window.history.pushState({ page: page_name }, page_name, window.location);\r\n dispatch({\r\n type: UPDATE_PAGE,\r\n value: page_name,\r\n });\r\n\r\n if (page_name === MAIN_PAGE)\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: null,\r\n });\r\n};\r\n\r\nexport const changeMainPage =\r\n (page_name, record_state = true) =>\r\n (dispatch, getState) => {\r\n if (record_state) window.history.pushState({ MAIN_PAGE: { page: page_name } }, page_name, window.location);\r\n\r\n let new_state = { ...getState().app[MAIN_PAGE] };\r\n new_state.page = page_name;\r\n new_state._ts = Date.now();\r\n\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: MAIN_PAGE,\r\n value: new_state,\r\n });\r\n };\r\n\r\nexport const SetAppDialogMessage = (message) => (dispatch, getState) => {\r\n let new_state = { ...getState().app[MAIN_PAGE] };\r\n new_state.Message = message;\r\n\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: MAIN_PAGE,\r\n value: new_state,\r\n });\r\n};\r\n\r\nexport const updateUserFromWeb =\r\n (email_ddress_id, password = null) =>\r\n (dispatch) => {\r\n checkInternetConnection(dispatch);\r\n\r\n return new Promise((resolve) => {\r\n fetchTimeout(API_BASE() + \"user/\" + btoa(email_ddress_id) + (password ? \"/\" + password : \"\"), {\r\n // fetchTimeout(API_BASE() + \"user/\" + email_ddress, {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n let user_data = await response.json();\r\n // if (user_data?.BusinessDetails?.Brand) {\r\n // window.brand = user_data?.BusinessDetails?.Brand;\r\n // if (window.brand === \"Fielders\") {\r\n // window.FIELDERS = true;\r\n // window.LYSAGHT = false;\r\n // } else if (window.brand === \"Lysaght\") {\r\n // window.FIELDERS = false;\r\n // window.LYSAGHT = true;\r\n // }\r\n // }\r\n dispatch(updateUser(user_data));\r\n resolve(user_data);\r\n } else if (response.status === 401) {\r\n let error = await response.json();\r\n \r\n resolve(error);\r\n return;\r\n } else resolve(false);\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n let user_data = await response.json();\r\n \r\n if (user_data?.BusinessDetails?.Brand && window.debug) {\r\n window.brand = user_data?.BusinessDetails?.Brand;\r\n if (window.brand === \"Fielders\") {\r\n window.FIELDERS = true;\r\n window.LYSAGHT = false;\r\n } else if (window.brand === \"Lysaght\") {\r\n window.FIELDERS = false;\r\n window.LYSAGHT = true;\r\n }\r\n }\r\n dispatch(updateUser(user_data));\r\n resolve(user_data);\r\n } else if (response.status === 401) {\r\n let error = await response.json();\r\n \r\n resolve(error);\r\n return;\r\n } else resolve(false);\r\n })\r\n .catch((e) => {\r\n resolve({\r\n Error: \"Server Error: Could not load user from Server\",\r\n });\r\n });\r\n });\r\n };\r\n\r\nexport const updateRecallListFromWeb =\r\n (businessCode, status = \"\", container = \"\") =>\r\n (dispatch, getState) => {\r\n \r\n checkInternetConnection(dispatch);\r\n const num_items = getState().app[MAIN_PAGE].NumRecallItems;\r\n\r\n return new Promise((resolve) => {\r\n fetchTimeout(API_BASE() + `job/` + businessCode, {\r\n method: \"POST\", // *GET, POST, PUT, DELETE, etc.\r\n body: JSON.stringify({\r\n Status: status,\r\n Container: container,\r\n NumItems: num_items,\r\n }),\r\n })\r\n .then(async (res) => {\r\n if (res.status >= 200 && res.status <= 300) {\r\n let json_recall_data = await res.json();\r\n if (status === \"ARCHIVED\") dispatch(updateLastQuotesEditedArchived(json_recall_data[0]?.Jobs));\r\n else dispatch(updateLastQuotesEdited(json_recall_data[0]?.Jobs));\r\n resolve(\"OK\");\r\n } else {\r\n \r\n }\r\n })\r\n .catch((e) => {});\r\n\r\n updateAnnouncements()(dispatch);\r\n });\r\n };\r\n\r\nexport const updateAnnouncements = () => (dispatch) => {\r\n checkInternetConnection(dispatch);\r\n\r\n let api_url = API_BASE() + \"admin/getannouncements/\";\r\n if (window.LYSAGHT) api_url = API_BASE() + \"admin/getannouncements/?b=L\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (json.Message) throw json.Message;\r\n dispatch(updateAPP(\"announcements\", json));\r\n })\r\n .catch((e) => {\r\n \r\n });\r\n};\r\n\r\nexport const updateUser = (user_data) => (dispatch, getState) => {\r\n checkInternetConnection(dispatch);\r\n\r\n \r\n dispatch({\r\n type: UPDATE_USER,\r\n value: user_data,\r\n });\r\n\r\n let job = getState().job;\r\n\r\n if (job) {\r\n let new_job = deepCopy(job);\r\n new_job = JOBSTATE_VALIDATION.validateFullJob(getState().config, new_job, -1, getState().app);\r\n\r\n dispatch({\r\n type: \"NEW_JOB\",\r\n parameter: new_job,\r\n });\r\n }\r\n};\r\n\r\nexport const updateBusiness = (businessDetails) => (dispatch) => {\r\n dispatch({\r\n type: UPDATE_BUSINESS,\r\n value: businessDetails,\r\n });\r\n};\r\n\r\nexport const saveUserToWeb =\r\n (user_data, update_local_data = false, update_business = false) =>\r\n (dispatch) => {\r\n checkInternetConnection(dispatch);\r\n\r\n if (update_local_data) dispatch(updateUser(user_data));\r\n\r\n let savejob_url = API_BASE() + \"user/\" + btoa(user_data.id);\r\n if (update_business) savejob_url += \"/UpdateBusiness\";\r\n\r\n \r\n return fetchTimeout(savejob_url, {\r\n method: \"PUT\", // *GET, POST, PUT, DELETE, etc.\r\n body: JSON.stringify(user_data), // body data type must match \"Content-Type\" header\r\n });\r\n };\r\n\r\nexport const updateLastQuotesEdited = (jobs_data) => (dispatch) => {\r\n dispatch({\r\n type: UPDATE_LAST_QUOTES_EDITED,\r\n value: jobs_data,\r\n });\r\n};\r\n\r\nexport const updateLastQuotesEditedArchived = (jobs_data) => (dispatch) => {\r\n dispatch({\r\n type: UPDATE_LAST_QUOTES_EDITED_ARCHIVED,\r\n value: jobs_data,\r\n });\r\n};\r\n\r\nexport const updateDesigner = (parameter, value) => (dispatch) => {\r\n \r\n dispatch({\r\n type: UPDATE_DESIGNER,\r\n parameter: parameter,\r\n value: value,\r\n });\r\n return Promise.resolve();\r\n};\r\nexport const toggleDesigner = (parameter) => (dispatch) => {\r\n \r\n dispatch({\r\n type: TOGGLE_DESIGNER,\r\n parameter: parameter,\r\n });\r\n return Promise.resolve();\r\n};\r\n\r\nexport const setDesignerLoadingBackdrop = (message) => (dispatch) => {\r\n \r\n\r\n if (!message) {\r\n dispatch(updateDesigner(SHOW_LOADING_BACKDROP, false));\r\n return Promise.resolve();\r\n }\r\n dispatch({\r\n type: UPDATE_DESIGNER,\r\n parameter: SHOW_LOADING_BACKDROP,\r\n value: true,\r\n });\r\n dispatch({\r\n type: UPDATE_DESIGNER,\r\n parameter: LOADING_BACKDROP_MESSAGE,\r\n value: message,\r\n });\r\n return Promise.resolve();\r\n};\r\n\r\nexport const getImageBlob = function (url) {\r\n return new Promise(async (resolve) => {\r\n try {\r\n let resposne = await fetchTimeout(url, {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n });\r\n let blob = resposne.blob();\r\n resolve(blob);\r\n } catch (e) {\r\n \r\n resolve(false);\r\n }\r\n });\r\n};\r\n\r\n// convert a blob to base64\r\nexport const blobToBase64 = function (blob) {\r\n return new Promise((resolve) => {\r\n let reader = new FileReader();\r\n reader.onload = function () {\r\n let dataUrl = reader.result;\r\n resolve(dataUrl);\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n};\r\n\r\nexport const checkInternetConnection = (dispatch) => {\r\n if (window.OFFLINE_MODE) {\r\n if (!window.OFFLINE_SET) {\r\n window.OFFLINE_SET = true;\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: \"online\",\r\n value: true,\r\n });\r\n }\r\n return;\r\n }\r\n if (document.hidden) return;\r\n var connected = window.navigator.onLine;\r\n if (connected) {\r\n if (window.checkingConnection > 0) {\r\n window.checkingConnection--;\r\n return;\r\n }\r\n // are you sure?\r\n // // check server\r\n window.checkingConnection = 3;\r\n\r\n fetchTimeout(\r\n API_BASE() + \"isalive/ping\",\r\n {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n },\r\n 5000\r\n )\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n connected = true;\r\n window.checkingConnectionFailed = 0;\r\n window.tokenexpired = 0;\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: \"online\",\r\n value: true,\r\n });\r\n\r\n try {\r\n // want to store reponse in global variable, to avoid react or redux incase of error.\r\n let json = await response.json();\r\n window.settings = json;\r\n } catch {}\r\n } else {\r\n \r\n if ((response, response.status === 401)) {\r\n let response_text = await response.text();\r\n if (response_text.includes(\"TOKEN DENIED\")) {\r\n \r\n if (window.tokenexpired) window.tokenexpired++;\r\n else window.tokenexpired = 1;\r\n\r\n if (window.tokenexpired >= 5) {\r\n //logout and redirect to auth\r\n deleteCookie(\"CDS_token\");\r\n localStorage.clear();\r\n dispatch({\r\n type: \"LOG_OUT\",\r\n });\r\n localStorage.clear();\r\n setTimeout(function () {\r\n localStorage.clear();\r\n // window.location.reload();\r\n window.location.href = \"/auth/\";\r\n }, 1000);\r\n }\r\n }\r\n }\r\n throw false;\r\n }\r\n window.checkingConnection = false;\r\n })\r\n .catch((e) => {\r\n if (!window?.checkingConnectionFailed) window.checkingConnectionFailed = 0;\r\n window.checkingConnectionFailed++;\r\n window.checkingConnection = false;\r\n if (window.checkingConnectionFailed > 3) {\r\n dispatch({\r\n type: TOGGLE_DESIGNER,\r\n parameter: SHOW_LOADING_BAR,\r\n value: false,\r\n });\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: \"online\",\r\n value: false,\r\n });\r\n setTimeout(function () {\r\n checkInternetConnection(dispatch);\r\n }, 3000);\r\n } else {\r\n setTimeout(function () {\r\n checkInternetConnection(dispatch);\r\n }, 2000);\r\n }\r\n });\r\n } else if (!connected) {\r\n dispatch({\r\n type: UPDATE_APP,\r\n parameter: \"online\",\r\n value: false,\r\n });\r\n dispatch({\r\n type: TOGGLE_DESIGNER,\r\n parameter: SHOW_LOADING_BAR,\r\n value: false,\r\n });\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: \"INTERNET NOT CONNECTED. Check your connection and try again.\",\r\n });\r\n window.checkingConnection = false;\r\n setTimeout(function () {\r\n checkInternetConnection(dispatch);\r\n }, 1000);\r\n }\r\n return connected;\r\n};\r\n\r\n// export const updateLayout3D_old = () => (dispatch, getState) => {\r\n// checkInternetConnection(dispatch);\r\n\r\n// let user_id = getState().app.user.id;\r\n// let online = getState().app.online;\r\n// if (!online) return;\r\n// if (document.hidden) return;\r\n\r\n// // if (!checkInternetConnection(dispatch)) {\r\n// // return;\r\n// // }\r\n\r\n// let job_data = getState().job;\r\n// if (!job_data) {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// return;\r\n// }\r\n// if (!job_data?.AreaSpecifications?.length) {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// return;\r\n// }\r\n\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: true,\r\n// });\r\n\r\n// let job_ini = convertJobStateToIni(job_data, getState().app, \"3D\", getState().config);\r\n\r\n// let id = getState().job.id;\r\n\r\n// let api_url = API_BASE() + \"obj/\" + id;\r\n\r\n// setTimeout(() => {\r\n// loadingMeshMode();\r\n// }, 2000);\r\n\r\n// window.loading3d = true;\r\n// let request_id = Date.now();\r\n// window.loading3d_id = request_id;\r\n\r\n// if (window.loading3d_controller) window.loading3d_controller.abort();\r\n// if (window.AbortController) window.loading3d_controller = new AbortController();\r\n\r\n// let timeout = 12000;\r\n// if (job_data?.DesignParameters) {\r\n// if (window.debug) {\r\n// timeout =\r\n// 6000 +\r\n// job_data.DesignParameters.NumFlat * 3000 +\r\n// job_data.DesignParameters.NumGable * 4000 +\r\n// job_data.DesignParameters.NumDeck * 3000;\r\n// } else {\r\n// timeout =\r\n// 6000 +\r\n// job_data.DesignParameters.NumFlat * 2500 +\r\n// job_data.DesignParameters.NumGable * 3500 +\r\n// job_data.DesignParameters.NumDeck * 2500;\r\n// }\r\n// }\r\n\r\n// \r\n\r\n// return fetchTimeout(\r\n// api_url,\r\n// {\r\n// signal: window?.loading3d_controller?.signal,\r\n// headers: {\r\n// \"Content-Type\": \"application/json\",\r\n// },\r\n// body: JSON.stringify({\r\n// user_id: user_id,\r\n// job_id: job_data.id,\r\n// job: job_ini,\r\n// request_id: request_id,\r\n// session_id: window?.session_id,\r\n// business_code: job_data?.BusinessCode,\r\n// }),\r\n// retry: true,\r\n// retry_timeout: timeout * 1.3,\r\n// request_id: request_id,\r\n// },\r\n// timeout\r\n// )\r\n// .then(async (response) => {\r\n// \r\n\r\n// if (response === undefined) {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// return;\r\n// }\r\n\r\n// let json = await response.json();\r\n\r\n// if (json.request_id != window.loading3d_id) return;\r\n// if (response === undefined) return;\r\n\r\n// window.loading3d = false;\r\n// if (json.Error) {\r\n// throw json.Error;\r\n// }\r\n// if (json.obj_url) {\r\n// dispatch({\r\n// type: UPDATE_3D_MODEL,\r\n// parameter: \"area_all\",\r\n// value: json.obj_url,\r\n// });\r\n\r\n// if (json.Locked) {\r\n// if (job_data) {\r\n// let new_job = deepCopy(job_data);\r\n\r\n// new_job.App.Locked = true;\r\n// new_job.App.LockMessage = json.LockMessage;\r\n\r\n// dispatch({\r\n// type: NEW_JOB,\r\n// parameter: new_job,\r\n// });\r\n// }\r\n// }\r\n// } else {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// }\r\n// })\r\n// .catch((e) => {\r\n// if (e?.message?.includes && e.message.includes(\"aborted\")) {\r\n// return;\r\n// }\r\n\r\n// window.loading3d = false;\r\n\r\n// \r\n\r\n// let message = \"Error loading model from QikQuote server.\";\r\n// if (e?.message) message = e.message;\r\n// if (e.message === \"failed to fetch\")\r\n// message = \"SERVER NOT REACHABLE. Check internet connection, then try again in a few minutes...\";\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// dispatch({\r\n// type: SHOW_DESIGNER_MESSAGE,\r\n// message: \"Error: \" + message,\r\n// });\r\n\r\n// // handle errors and timeout error\r\n// }); // parses JSON response into native Javascript objects\r\n// };\r\n\r\n// export const updateLayout2D_old =\r\n// (mode = null, area_index = null, drawing_mode = null, force = false) =>\r\n// (dispatch, getState) => {\r\n// if (window.debug && window.location.href.includes(\"no_eng\") && !force) {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// return;\r\n// }\r\n// window.loading3d = false;\r\n// \r\n// checkInternetConnection(dispatch);\r\n// if (document.hidden) return;\r\n\r\n// let online = getState().app.online;\r\n\r\n// if (area_index === null) area_index = getState().app?.designer?.designer2D?.AREA_INDEX;\r\n// if (!online)\r\n// return new Promise((resolve) => {\r\n// return resolve(false);\r\n// });\r\n\r\n// let user_id = getState().app.user.id;\r\n// let job_data = getState().job;\r\n// if (!job_data) {\r\n// \r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// return new Promise((resolve) => {\r\n// return resolve(false);\r\n// });\r\n// }\r\n\r\n// if (!job_data.AreaSpecifications.length === 0) {\r\n// \r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// return new Promise((resolve) => {\r\n// return resolve(false);\r\n// });\r\n// }\r\n\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: true,\r\n// });\r\n\r\n// // , job_ini);\r\n\r\n// const toolopen = getState().app.designer.designer3D[DRAWER_TOOLSET_EXPANDED];\r\n// const select_point = getState().app.designer.designer2D[SELECT_POINT];\r\n// const draw_full_layout = getState().app.designer.designer2D[DRAW_FULL_LAYOUT];\r\n\r\n// let id = getState().job.id;\r\n\r\n// let api_url = API_BASE() + \"svg/\" + id + \"/selection\";\r\n// if (job_data.DesignParameters.DeckMode === 1) {\r\n// api_url = API_BASE() + \"svg/\" + id + \"/selection\";\r\n// } else if (toolopen === SHAPE_TOOL && job_data.DesignParameters.DeckMode !== 1 && !draw_full_layout) {\r\n// api_url = API_BASE() + \"svg/\" + id + \"/\";\r\n// } else if (toolopen === BEAMS_AND_POSTS_TOOL && area_index === -1 && !select_point) {\r\n// api_url = API_BASE() + \"svg/\" + id + \"/engineering\";\r\n// if (!job_data?.SiteParameters?.WindData?.WindZoneAS1170) {\r\n// api_url = API_BASE() + \"svg/\" + id + \"/selection\";\r\n// dispatch({\r\n// type: SHOW_DESIGNER_MESSAGE,\r\n// message: \"Error: Wind data must be defined to engineer this design\",\r\n// });\r\n// }\r\n// }\r\n\r\n// if (drawing_mode && drawing_mode === \"engineering\") {\r\n// api_url = API_BASE() + \"svg/\" + id + \"/engineering\";\r\n// if (!job_data?.SiteParameters?.WindData?.WindZoneAS1170) {\r\n// api_url = API_BASE() + \"svg/\" + id + \"/selection\";\r\n// dispatch({\r\n// type: SHOW_DESIGNER_MESSAGE,\r\n// message: \"Error: Wind data must be defined to engineer this design\",\r\n// });\r\n// }\r\n// }\r\n\r\n// // if (api_url.includes(\"/engineering\")) {\r\n// // job_data = deepCopy(job_data);\r\n// // job_data.SiteParameters.SpliceOffset = 0;\r\n// // }\r\n\r\n// let job_ini = convertJobStateToIni(job_data, getState().app, \"\", getState().config);\r\n\r\n// let request_id = Date.now();\r\n// window.loading2d_id = request_id;\r\n// if (window.loading2d_controller) window.loading2d_controller.abort();\r\n// if (window.AbortController) {\r\n// window.loading2d_controller = new AbortController();\r\n// }\r\n\r\n// if (mode) api_url = API_BASE() + \"svg/\" + id + \"/\" + mode;\r\n\r\n// \r\n\r\n// let timeout = 30000;\r\n// if (job_data?.DesignParameters) {\r\n// timeout =\r\n// 6000 +\r\n// job_data.DesignParameters.NumFlat * 2000 +\r\n// job_data.DesignParameters.NumGable * 3000 +\r\n// job_data.DesignParameters.NumDeck * 2000;\r\n// }\r\n\r\n// if (api_url.includes(\"/engineering\")) {\r\n// timeout = timeout * 2;\r\n// }\r\n\r\n// \r\n\r\n// return new Promise((resolve) => {\r\n// fetchTimeout(\r\n// api_url,\r\n// {\r\n// signal: window?.loading2d_controller?.signal,\r\n// headers: {\r\n// \"Content-Type\": \"application/json\",\r\n// },\r\n// body: JSON.stringify({\r\n// user_id: user_id,\r\n// job_id: job_data.id,\r\n// request_id: request_id,\r\n// job: job_ini,\r\n// wind_data: job_data?.SiteParameters?.WindData,\r\n// area_index: area_index,\r\n// session_id: window?.session_id,\r\n// business_code: job_data?.BusinessCode,\r\n// brand: window.LYSAGHT ? \"Lysaght\" : \"Fielders\",\r\n// }),\r\n// retry: true,\r\n// retry_timeout: timeout * 2,\r\n// request_id: request_id,\r\n// },\r\n// timeout\r\n// )\r\n// .then(async (response) => {\r\n// \r\n\r\n// if (response === undefined) {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// return resolve(false);\r\n// }\r\n\r\n// let json = await response.json();\r\n\r\n// // .then(json => {\r\n// \r\n// if (json.request_id != window.loading2d_id) {\r\n// return resolve(false);\r\n// }\r\n// if (json.Error) {\r\n// if (json.Locked) {\r\n// if (job_data) {\r\n// let new_job = deepCopy(job_data);\r\n\r\n// new_job.App.Locked = true;\r\n// new_job.App.LockMessage = json.Error;\r\n\r\n// dispatch({\r\n// type: NEW_JOB,\r\n// parameter: new_job,\r\n// });\r\n// }\r\n\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// } else {\r\n// throw json.Error;\r\n// }\r\n// }\r\n// window.svg_data = null;\r\n// if (json[\"svg_data\"]) {\r\n// window.job = { ...getState().job };\r\n// window.svg_data = json[\"svg_data\"];\r\n\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n\r\n// \r\n// var svg_url = json[\"svg\"];\r\n// // if (\"Data\" in json) {\r\n// // dispatch(updateQuoteParameters(\"AREA_DATA\", json[\"Data\"]));\r\n// // }\r\n\r\n// // dispatch({\r\n// // type: UPDATE_2D_DESIGNER_SVGS,\r\n// // parameter: \"area_all\",\r\n// // value: svg_url,\r\n// // });\r\n\r\n// LoadSVGFromData(json[\"svg_data\"], svg_url);\r\n\r\n// setTimeout(function () {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n\r\n// dispatch(updateAPP(\"loadingEngineering\", false));\r\n\r\n// if (\"Data\" in json) {\r\n// dispatch(updateQuoteParameters(\"AREA_DATA\", json[\"Data\"]));\r\n// }\r\n// if (\"EngineeringResults\" in json) {\r\n// let new_engineering = {\r\n// ...getState().job.QuoteParameters.ENGINEERING,\r\n// ...json,\r\n// };\r\n// window.job = { ...getState().job };\r\n// new_engineering.engineeringHashCode = GetShapeUpdateString();\r\n\r\n// new_engineering.EngineeringResults = json[\"EngineeringResults\"];\r\n// dispatch(updateQuoteParameters(\"ENGINEERING\", new_engineering));\r\n\r\n// setTimeout(function () {\r\n// let job_to_check = { ...getState().job };\r\n// job_to_check.QuoteParameters.ENGINEERING = new_engineering;\r\n// let warnings = JOBSTATE_VALIDATION.getWarnings(\r\n// job_to_check,\r\n// getState()?.app?.user,\r\n// getState()?.config\r\n// );\r\n// \r\n// if (warnings && warnings.warning)\r\n// dispatch({\r\n// type: SHOW_DESIGNER_MESSAGE,\r\n// message: warnings.message,\r\n// });\r\n// }, 1000);\r\n// }\r\n\r\n// dispatch({\r\n// type: UPDATE_2D_DESIGNER_SVGS,\r\n// parameter: \"area_all\",\r\n// value: svg_url,\r\n// });\r\n// }, 300);\r\n\r\n// resolve(true);\r\n// return;\r\n// }\r\n\r\n// dispatch(updateAPP(\"loadingEngineering\", false));\r\n\r\n// if (json.svg) {\r\n// \r\n// var svg_url = json[\"svg\"];\r\n// if (\"Data\" in json) {\r\n// dispatch(updateQuoteParameters(\"AREA_DATA\", json[\"Data\"]));\r\n// }\r\n// if (\"EngineeringResults\" in json) {\r\n// let new_engineering = {\r\n// ...getState().job.QuoteParameters.ENGINEERING,\r\n// ...json,\r\n// };\r\n// window.job = { ...getState().job };\r\n// new_engineering.engineeringHashCode = GetShapeUpdateString();\r\n\r\n// new_engineering.EngineeringResults = json[\"EngineeringResults\"];\r\n// dispatch(updateQuoteParameters(\"ENGINEERING\", new_engineering));\r\n\r\n// setTimeout(function () {\r\n// let job_to_check = { ...getState().job };\r\n// if (job_to_check?.QuoteParameters)\r\n// job_to_check.QuoteParameters.ENGINEERING = new_engineering;\r\n// let warnings = JOBSTATE_VALIDATION.getWarnings(\r\n// job_to_check,\r\n// getState()?.app?.user,\r\n// getState()?.config\r\n// );\r\n// \r\n// if (warnings && warnings.warning)\r\n// dispatch({\r\n// type: SHOW_DESIGNER_MESSAGE,\r\n// message: warnings.message,\r\n// });\r\n// }, 1000);\r\n// }\r\n// \r\n\r\n// if (json[\"svg_data\"]) {\r\n// // dispatch({\r\n// // type: TOGGLE_DESIGNER,\r\n// // parameter: SHOW_LOADING_BAR,\r\n// // value: false,\r\n// // });\r\n// // LoadSVGFromData(json[\"svg_data\"]);\r\n// // dispatch({\r\n// // type: UPDATE_2D_DESIGNER_SVGS,\r\n// // parameter: \"area_all\",\r\n// // value: svg_url,\r\n// // });\r\n// } else {\r\n// dispatch({\r\n// type: UPDATE_2D_DESIGNER_SVGS,\r\n// parameter: \"area_all\",\r\n// value: svg_url,\r\n// });\r\n// }\r\n// resolve(true);\r\n// } else {\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// resolve(false);\r\n// }\r\n// })\r\n// .catch((e) => {\r\n// if (e?.message?.includes && e.message.includes(\"aborted\")) {\r\n// \r\n// return resolve(false);\r\n// }\r\n// \r\n\r\n// let message = \"Error loading layout from QikQuote server.\";\r\n// if (typeof e === \"string\") message = e;\r\n// if (e.message === \"failed to fetch\")\r\n// message = \"SERVER NOT REACHABLE. Check internet connection, then try again in a few minutes...\";\r\n// dispatch({\r\n// type: TOGGLE_DESIGNER,\r\n// parameter: SHOW_LOADING_BAR,\r\n// value: false,\r\n// });\r\n// dispatch({\r\n// type: SHOW_DESIGNER_MESSAGE,\r\n// message: \"Error: \" + message,\r\n// });\r\n// return resolve(false);\r\n// // handle errors and timeout error\r\n// }); // parses JSON response into native Javascript objects\r\n// });\r\n// };\r\n\r\nexport const showDesignerMessage = (message) => (dispatch) => {\r\n dispatch({\r\n type: SHOW_DESIGNER_MESSAGE,\r\n message: message,\r\n });\r\n};\r\n\r\nexport const update2DDesigner = (parameter, value) => (dispatch) => {\r\n \r\n dispatch({\r\n type: UPDATE_2D_DESIGNER,\r\n parameter: parameter,\r\n value: value,\r\n });\r\n};\r\nexport const toggle2DDesigner = (parameter) => (dispatch) => {\r\n \r\n dispatch({\r\n type: TOGGLE_2D_DESIGNER,\r\n parameter: parameter,\r\n });\r\n};\r\n\r\nexport const update3DDesigner = (parameter, value) => (dispatch) => {\r\n \r\n dispatch({\r\n type: UPDATE_3D_DESIGNER,\r\n parameter: parameter,\r\n value: value,\r\n });\r\n};\r\nexport const toggle3DDesigner = (parameter) => (dispatch) => {\r\n \r\n dispatch({\r\n type: TOGGLE_3D_DESIGNER,\r\n parameter: parameter,\r\n });\r\n};\r\n","import { DRAWER_TOOLSET_EXPANDED, BEAMS_AND_POSTS_TOOL } from \"../../redux_store/appState\";\r\nimport * as APP from \"../../redux_store/appState\";\r\nimport * as COMMON from \"../../components/Common\";\r\nimport { GetHTMLColour, toNumber } from \"../../components/Common\";\r\n\r\nimport { BASIC_SPECS_SECTIONS } from \"../../redux_store/jobState_Schemas\";\r\nimport tinycolor from \"tinycolor2\";\r\nimport paper from \"paper\";\r\nimport { GetShapeUpdateString, GetSpecAllAreas } from \"./PaperFunctionHelper\";\r\nimport _ from \"lodash\";\r\nimport React from \"react\";\r\nimport { EngineerDeckv2 } from \"../../redux_store/jobState_Validation\";\r\nimport { API_BASE } from \"../../AppConfig\";\r\n\r\n// const paper = paper;\r\nvar _this = {};\r\n\r\n// const ROOF_SHEETING = \"ROOF_SHEETING\";\r\n// const GUTTERS_AND_DOWNPIPES = \"GUTTERS_AND_DOWNPIPES\";\r\n// const ATTACHMENT = \"ATTACHMENT\";\r\n// const BEAMS_AND_POSTS = \"BEAMS_AND_POSTS\";\r\n\r\nexport const LoadSVGFromData = (svg_data, svg) => {\r\n const start = Date.now();\r\n // - start) / 1000, start / 1000, window.last_svg_load_attempt);\r\n if (window.last_svg_load_attempt === svg) return; //already try/loaded\r\n\r\n let zoom_all = false;\r\n let last_was_layout = window.last_svg_load_attempt.includes(\"layout.svg\");\r\n if (last_was_layout) zoom_all = true;\r\n\r\n window.last_svg_load_attempt = svg;\r\n\r\n let url_base = URL.createObjectURL(new Blob([svg_data], { type: \"image/svg+xml\" }));\r\n // let url_base = API_BASE() + \"SVG/?mode=\" + svg;\r\n\r\n paper.project.importSVG(url_base, {\r\n onLoad: (new_item, svg_raw) => {\r\n // - start) / 1000);\r\n if (!new_item) return;\r\n new_item.svg_filename = url_base;\r\n new_item.scale(1);\r\n if (paper.project.activeLayer.children.length > 1) {\r\n paper.project.activeLayer.removeChildren(0, paper.project.activeLayer.children.length - 1);\r\n }\r\n window.svg = new_item;\r\n FormatSVGToJob();\r\n UpdateAllSVGMaterials();\r\n GetMetaData();\r\n if (zoom_all) zoomAll();\r\n paper.view.draw();\r\n\r\n UpdateJobFromSVG();\r\n\r\n // - start) / 1000);\r\n },\r\n onError: (message, status) => {\r\n ClearAll();\r\n },\r\n });\r\n};\r\n\r\nexport function ClearAll() {\r\n if (paper.project) {\r\n paper.project.activeLayer.removeChildren();\r\n paper.project.activeLayer.clear();\r\n paper.view.draw();\r\n }\r\n}\r\n\r\nexport function zoomIn() {\r\n let zoom = paper.view.zoom * 1.1;\r\n if (zoom > 7) zoom = 7;\r\n paper.view.zoom = zoom;\r\n}\r\nexport function zoomOut() {\r\n let zoom = paper.view.zoom / 1.1;\r\n if (zoom < 0.03) zoom = 0.03;\r\n paper.view.zoom = zoom;\r\n}\r\n\r\nexport function zoomAll(sidebar_adjustment_factor = null) {\r\n if (paper.project.activeLayer.children.length === 0) return;\r\n\r\n if (sidebar_adjustment_factor === null) {\r\n sidebar_adjustment_factor = 300;\r\n const TOOL_DRAWER_HIDE = window?.app?.designer?.[APP.TOOL_DRAWER_HIDE];\r\n const TOOL_DRAWER_WIDTH = window?.app?.designer?.[APP.TOOL_DRAWER_WIDTH];\r\n sidebar_adjustment_factor = TOOL_DRAWER_WIDTH - 90;\r\n if (TOOL_DRAWER_HIDE) sidebar_adjustment_factor = 0;\r\n }\r\n\r\n let topbar_adjustment_factor = 60;\r\n\r\n let bottom_adjustment_factor = 0;\r\n\r\n const THREED_MODE = window?.app?.designer?.[APP.THREED_MODE];\r\n const THREED_MINI_MODE = window?.app?.designer?.[APP.THREED_MINI_MODE];\r\n const THREED_MINI_HEIGHT = window?.app?.designer?.[APP.THREED_MINI_HEIGHT];\r\n const THREED_MINI_WIDTH = window?.app?.designer?.[APP.THREED_MINI_WIDTH];\r\n\r\n if (THREED_MODE && THREED_MINI_MODE) {\r\n if (THREED_MINI_MODE === true) topbar_adjustment_factor = THREED_MINI_HEIGHT;\r\n else sidebar_adjustment_factor = THREED_MINI_WIDTH - 90;\r\n }\r\n\r\n var screen_size = {\r\n width: paper.view.viewSize.width - sidebar_adjustment_factor,\r\n height: paper.view.viewSize.height - bottom_adjustment_factor - topbar_adjustment_factor,\r\n };\r\n var screen_ratio = screen_size.width / screen_size.height;\r\n\r\n var objects_size = paper.project.activeLayer.bounds.size;\r\n var objects_ratio = objects_size.width / objects_size.height;\r\n\r\n if (isNaN(objects_ratio)) return;\r\n var zoom = 1;\r\n if (objects_ratio > screen_ratio) {\r\n //scale by width\r\n zoom = screen_size.width / objects_size.width;\r\n } else {\r\n //scale by height\r\n zoom = screen_size.height / objects_size.height;\r\n }\r\n //\r\n paper.view.zoom = zoom * 0.85;\r\n let center = paper.project.activeLayer.bounds.center;\r\n let adjusment = new paper.Point(\r\n sidebar_adjustment_factor / paper.view.zoom / 2,\r\n (-topbar_adjustment_factor + bottom_adjustment_factor) / paper.view.zoom / 2\r\n );\r\n\r\n paper.view.center = center.add(adjusment);\r\n}\r\n\r\nexport function loadMap() {\r\n var map_url = \"images/20190302_WGS84_S_Mercator_138_57260_-34_93000_138_57356_-34_92956_21.jpg\";\r\n var map_geodata_url = map_url.replace(\".jpg\", \".jgw\");\r\n\r\n fetch(map_geodata_url)\r\n .then((res) => {\r\n return res.text();\r\n }) // Gets the response and returns it as a blob\r\n .then((text) => {\r\n // By lines\r\n var lines = text.split(\"\\n\");\r\n var x_scale = 1;\r\n var y_scale = 1;\r\n for (var line = 0; line < 4; line++) {\r\n //\r\n if (line === 0) x_scale = Number(lines[line]);\r\n if (line === 3) y_scale = Number(lines[line]);\r\n }\r\n var raster = new paper.Raster(map_url);\r\n raster.onLoad = function () {\r\n raster.name = \"imported_map\";\r\n raster.sendToBack();\r\n raster.width = 87730 / paper.view.scale;\r\n raster.height = 48880 / paper.view.scale;\r\n raster.opacity = 0.5;\r\n zoomAll();\r\n };\r\n });\r\n paper.view.draw();\r\n}\r\n\r\nexport function loadGoogleMap(address, zoom = 21) {\r\n let scale = 2;\r\n // let zoom = 21;\r\n let zoom_scale_base_20 = 1.12849722 / 0.94;\r\n let zoom_scale = zoom_scale_base_20 / 2;\r\n if (zoom === 20) zoom_scale = zoom_scale_base_20;\r\n if (zoom === 19) zoom_scale = zoom_scale_base_20 * 2;\r\n if (zoom <= 18) {\r\n zoom = 18;\r\n zoom_scale = zoom_scale_base_20 * 4;\r\n }\r\n\r\n // let metersPerPx = 156543.03392 * Math.cos(138.476657 * Math.PI / 180) / Math.pow(2, zoom);\r\n //\r\n //\r\n // zoom_scale = -metersPerPx*10;\r\n\r\n var map_url =\r\n \"https://maps.googleapis.com/maps/api/staticmap?center=\" +\r\n address +\r\n \"&zoom=\" +\r\n zoom +\r\n \"&scale=\" +\r\n scale +\r\n \"&size=1800x1800&maptype=hybrid&key=AIzaSyDusbQSuHd8yi5wBk8x4skpqjH4ttqBc2w\";\r\n\r\n // var map_geodata_url = map_url.replace(\".jpg\", \".jgw\");\r\n\r\n var item = paper.project.getItem({\r\n name: \"imported_map_google\",\r\n });\r\n\r\n if (item) item.remove();\r\n\r\n var raster = new paper.Raster(map_url);\r\n raster.onLoad = function () {\r\n raster.name = \"imported_map_google\";\r\n raster.sendToBack();\r\n raster.width = raster.width * scale * zoom_scale;\r\n raster.height = raster.height * scale * zoom_scale;\r\n // raster.width = 1128.497220/paper.view.scale;\r\n // raster.height = 1128.497220/paper.view.scale;\r\n raster.opacity = 0.5;\r\n zoomAll();\r\n };\r\n\r\n // fetch(map_geodata_url)\r\n // .then(res => { return res.text()}) // Gets the response and returns it as a blob\r\n // .then(text => {\r\n // // By lines\r\n // var lines = text.split('\\n');\r\n // var x_scale = 1;\r\n // var y_scale = 1;\r\n // for (var line = 0; line < 4; line++) {\r\n // //\r\n // if (line === 0) x_scale = Number(lines[line]);\r\n // if (line === 3) y_scale = Number(lines[line]);\r\n // }\r\n // });\r\n paper.view.draw();\r\n}\r\n\r\nexport function UpdateSVGsIfRequired(svgs) {\r\n for (var key in svgs) {\r\n if (paper.project !== null && svgs.hasOwnProperty(key) && svgs[key] !== null && svgs[key] !== \"\") {\r\n let svg_url = svgs[key];\r\n\r\n var item = paper.project.getItem({\r\n name: key,\r\n });\r\n\r\n if (item /* exists_in_paper*/) {\r\n // check if already added, and update existing\r\n // item.visible = false;\r\n\r\n paper.project.importSVG(svg_url, {\r\n onLoad: (new_item, svg_raw) => {\r\n new_item.name = key;\r\n new_item.scale(1);\r\n item.remove();\r\n item.name = null;\r\n this.zoomAll();\r\n window.svg = new_item;\r\n FormatSVGToJob();\r\n UpdateRoofSheets();\r\n GetMetaData();\r\n paper.view.draw();\r\n },\r\n });\r\n } else {\r\n paper.project.importSVG(svg_url, {\r\n onLoad: (new_item, svg_raw) => {\r\n new_item.name = key;\r\n new_item.scale(1);\r\n\r\n window.svg = new_item;\r\n FormatSVGToJob();\r\n UpdateRoofSheets();\r\n GetMetaData();\r\n this.zoomAll();\r\n paper.view.draw();\r\n },\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function generateRoof() {\r\n var house_plan = paper.project.importSVG(\"images/roof_native.svg\", {\r\n onLoad: (item, svg_raw) => {\r\n // item.scale(0.41, 0.41);\r\n item.scale(1 / paper.view.scale);\r\n item.rotate(-3.555);\r\n item.position = new paper.Point(-10, -150);\r\n item.bringToFront();\r\n item.on(\"mousedrag\", function (e) {\r\n item.position = item.position.add(e.delta);\r\n });\r\n },\r\n });\r\n // house_plan.rotate(45);\r\n}\r\n\r\n// export function ClearAll() {\r\n\r\n// paper.project.activeLayer.clear();\r\n// var from = new paper.Point(0, 0);\r\n// var middle = new paper.Point(0, 0);\r\n// var to = new paper.Point(0, 0);\r\n// paper.project.activeLayer.rubberband = new paper.Path(from, middle, to);\r\n// var rubberband = paper.project.activeLayer.rubberband;\r\n// rubberband.name = \"rubberband\";\r\n// rubberband.strokeColor = 'black';\r\n// rubberband.dashArray = [3, 3];\r\n// rubberband.visible = false;\r\n// paper.project.activeLayer.rubberband_label = new paper.PointText(new paper.Point(200, 50));\r\n// var rubberband_label = paper.project.activeLayer.rubberband_label;\r\n// rubberband_label.name = \"rubberband label\";\r\n// rubberband_label.justification = 'center';\r\n// rubberband_label.justification = 'center';\r\n// rubberband_label.fillColor = 'black';\r\n// rubberband_label.content = '2000mm';\r\n// rubberband.visible = false;\r\n// paper.view.draw();\r\n// }\r\n\r\nexport function Load_FlatDesign() {\r\n paper.project.importSVG(\"images/flat.svg\", {\r\n onLoad: (item, svg_raw) => {\r\n item.scale(1);\r\n this.zoomAll();\r\n },\r\n });\r\n}\r\n\r\nexport function loadToggleSVG(file_name) {\r\n var item = paper.project.getItem({\r\n name: file_name,\r\n });\r\n\r\n if (item !== null) {\r\n item.visible = !item.visible;\r\n } else {\r\n paper.project.importSVG(\"images/\" + file_name + \".svg\", {\r\n onLoad: (item, svg_raw) => {\r\n item.name = file_name;\r\n item.scale(1);\r\n this.zoomAll();\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function ForceUpdate() {\r\n function ExecuteUpdate() {\r\n if (paper.project) {\r\n // paper.project._needsUpdate = true;\r\n // paper.project.view.update();\r\n // paper.view.fire('resize', paper.view);\r\n window.dispatchEvent(new Event(\"resize\"));\r\n }\r\n }\r\n\r\n if (paper.project) {\r\n ExecuteUpdate();\r\n setTimeout(function () {\r\n ExecuteUpdate();\r\n setTimeout(function () {\r\n ExecuteUpdate();\r\n }, 1000);\r\n }, 100);\r\n } else {\r\n setTimeout(function () {\r\n ExecuteUpdate();\r\n setTimeout(function () {\r\n ExecuteUpdate();\r\n }, 2000);\r\n }, 100);\r\n }\r\n}\r\n\r\nexport function InitialisePaper(id) {\r\n // return;\r\n // Get a reference to the canvas object\r\n var canvas = document.getElementById(id);\r\n // Create an empty project and a view for the canvas:\r\n paper.setup(canvas);\r\n paper.project.options.handleSize = 6;\r\n paper.settings.hitTolerance = 6;\r\n paper.view.zoom = 1;\r\n paper.view.scale = 25;\r\n paper.view.scale = 25;\r\n paper.view.viewSize = new paper.Size(1920, 1200);\r\n window.paper = paper;\r\n window.paper_canvas = canvas;\r\n\r\n var segment_to_drag = false;\r\n var segment_to_drag_was_dragged = false;\r\n\r\n paper.view.onMouseUp = (e) => {\r\n //\r\n // // this.wasDragged = false;\r\n // alert(e);\r\n\r\n var hitResult = paper.project.activeLayer.hitTest(e.point, hitOptions); // isPointInPath\r\n\r\n if (!window.dragging && hitResult && hitResult.item) {\r\n if (hitResult.item.is_roofsheet)\r\n hitResult.item.is_skylight = hitResult.item.is_skylight ? !hitResult.item.is_skylight : true;\r\n UpdateRoofSheets();\r\n // if (hitResult.item.fillColor_o === null) hitResult.item.fillColor_o = hitResult.item.fillColor;\r\n\r\n // if (hitResult.item.is_skylight)\r\n // {\r\n // hitResult.item.fillColor = new paper.Color(1, 1, 1, 1);\r\n // }\r\n // else\r\n // {\r\n // if (hitResult.item.fillColor_o !== null) hitResult.item.fillColor = hitResult.item.fillColor_o;\r\n // }\r\n // alert(name);\r\n // setTimeout(function(){ alert(name); }, 200);\r\n }\r\n window.dragging = false;\r\n };\r\n paper.view.onMouseDown = (e) => {\r\n // this.wasDragged = false;\r\n //\r\n\r\n window.dragging = false;\r\n _this.downPoint = e.point;\r\n _this.downPointScreen = new paper.Point(e.event.x, e.event.y);\r\n _this.downButton = e.event.button;\r\n\r\n // var selected_items = paper.project.getItems({ selected: true });\r\n // segment_to_drag = false;\r\n // segment_to_drag_was_dragged = false;\r\n // if (_this.downButton === 0 && selected_items.length > 0) {\r\n // var hitResult = paper.project.activeLayer.hitTest(e.point, { match: (function (o) { return ((o.type === \"handle-in\" || o.type === \"handle-out\") && o.item.name !== \"rubberband\") }), curves: true, handles: true, tolerance: paper.settings.hitTolerance / paper.view.zoom });\r\n //\r\n // if (hitResult) segment_to_drag = hitResult.segment;\r\n // }\r\n // var hitResult = paper.project.activeLayer.hitTest(e.point, { match: (function (o) { return ((o.type === \"handle-in\" || o.type === \"handle-out\") && o.item.name !== \"rubberband\") }), curves: true, handles: true, tolerance: paper.settings.hitTolerance / paper.view.zoom });\r\n\r\n //\r\n // if (selected_items && selected_items[2])\r\n };\r\n\r\n var bg_pos1 = new paper.Point(-50, -50);\r\n var bg_pos2 = new paper.Point(-50, -50);\r\n var orig_bg_zoom1 = 100;\r\n var orig_zoom = 1;\r\n var last_rounded = 100;\r\n\r\n function offset_grid(offset = new paper.Point(-0, -0)) {\r\n var change_ratio = paper.view.zoom / orig_zoom;\r\n\r\n // var change_ratio = paper.view.zoom / orig_zoom;\r\n var rounded = orig_bg_zoom1 * change_ratio;\r\n var rounded_sm = rounded / 5;\r\n document.getElementById(\"qqCanvas\").style.backgroundSize =\r\n rounded +\r\n \"px \" +\r\n rounded +\r\n \"px, \" +\r\n rounded +\r\n \"px \" +\r\n rounded +\r\n \"px, \" +\r\n rounded_sm +\r\n \"px \" +\r\n rounded_sm +\r\n \"px, \" +\r\n rounded_sm +\r\n \"px \" +\r\n rounded_sm +\r\n \"px\";\r\n\r\n if (rounded !== last_rounded) {\r\n offset = offset.add(new paper.Point(-(rounded - last_rounded) / 2, -(rounded - last_rounded) / 2));\r\n }\r\n // bg_pos1 = bg_pos1.subtract(new paper.Point(-(rounded-last_rounded)/2, -(rounded-last_rounded)/2));\r\n // // bg_pos1 = bg_pos1.subtract(rounded);\r\n // bg_pos1 = bg_pos1.subtract(offset);\r\n // bg_pos2 = bg_pos2.subtract(offset);\r\n if (offset) {\r\n offset.x = offset.x * change_ratio;\r\n offset.y = offset.y * change_ratio;\r\n bg_pos1 = bg_pos1.subtract(offset);\r\n bg_pos2 = bg_pos2.subtract(offset);\r\n document.getElementById(\"qqCanvas\").style.backgroundPosition =\r\n bg_pos1.x +\r\n \"px \" +\r\n bg_pos1.y +\r\n \"px, \" +\r\n bg_pos1.x +\r\n \"px \" +\r\n bg_pos1.y +\r\n \"px, \" +\r\n bg_pos2.x +\r\n \"px \" +\r\n bg_pos2.y +\r\n \"px, \" +\r\n bg_pos2.x +\r\n \"px \" +\r\n bg_pos2.y +\r\n \"px\";\r\n }\r\n last_rounded = rounded;\r\n }\r\n\r\n var qqCanvas = document.getElementById(\"qqCanvas\");\r\n if (qqCanvas)\r\n qqCanvas.addEventListener(\"wheel\", function (e) {\r\n var delta = e.deltaY;\r\n var zoom = paper.view.zoom * (1 - delta / 4500);\r\n\r\n // zoom = zoom * (1 + delta / 5500);\r\n\r\n if (zoom > 7) zoom = 7;\r\n if (zoom < 0.03) zoom = 0.03;\r\n paper.view.zoom = zoom;\r\n\r\n offset_grid();\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n if (qqCanvas)\r\n qqCanvas.addEventListener(\"contextmenu\", function (e) {\r\n e.preventDefault();\r\n });\r\n\r\n // return;\r\n\r\n paper.view.onMouseDrag = function (e) {\r\n // // draw rubber band\r\n // rubberband.visible = true;\r\n // rubberband.bringToFront();\r\n // rubberband.segments[0].point = this.lastPointAdded;\r\n // rubberband.segments[1].point = e.point;\r\n // }\r\n\r\n // var distance_dragged = _this.downPoint?_this.downPoint.subtract(e.point):0;\r\n var distance_dragged = _this.downPoint ? _this.downPoint.getDistance(e.point) : 0;\r\n var distance_screen_dragged = _this.downPointScreen.getDistance(new paper.Point(e.event.x, e.event.y));\r\n // var offset = _this.downPoint.subtract(e.point);\r\n\r\n if (_this.downButton === 0 && segment_to_drag && (distance_dragged > 10 || segment_to_drag_was_dragged)) {\r\n segment_to_drag.point = segment_to_drag.point.add(e.delta);\r\n segment_to_drag_was_dragged = true;\r\n } else if (distance_screen_dragged > 20 && !window.dragging) {\r\n window.dragging = true;\r\n } else if ((_this.downButton === 0 || _this.downButton === 1 || _this.downButton === 2) && window.dragging) {\r\n _this.dragging = true;\r\n var offset = _this.downPoint.subtract(e.point);\r\n paper.view.center = paper.view.center.add(offset);\r\n offset_grid(offset);\r\n\r\n // document.getElementById(\"qqCanvas\").style.backgroundPosition = \"-2px -2px, -2px -2px, -1px -1px, -1px -1px\";\r\n\r\n // var bg_pos = document.getElementById(\"qqCanvas\").style.backgroundPosition;\r\n // if (bg_pos === \"\") bg_pos = \"-2px -2px, -2px -2px, -1px -1px, -1px -1px\";\r\n // var offsets = bg_pos.split(',');\r\n // var offset_1_X = offsets[0].split(' ')[0].replace(\"px\",\"\").trim();\r\n // var offset_1_Y = offsets[0].split(' ')[1].replace(\"px\",\"\").trim();\r\n // var offset_2_X = offsets[2].trim().split(' ')[0].replace(\"px\",\"\").trim();\r\n // var offset_2_Y = offsets[2].trim().split(' ')[1].replace(\"px\",\"\").trim();\r\n }\r\n };\r\n\r\n // The Path.Line constructor takes 2 points, defining the start and end of the line.\r\n var from = new paper.Point(0, 0);\r\n var middle = new paper.Point(0, 0);\r\n var to = new paper.Point(0, 0);\r\n paper.project.activeLayer.rubberband = new paper.Path(from, middle, to);\r\n var rubberband = paper.project.activeLayer.rubberband;\r\n rubberband.name = \"rubberband\";\r\n rubberband.strokeColor = \"black\";\r\n rubberband.dashArray = [3, 3];\r\n rubberband.visible = false;\r\n paper.project.activeLayer.rubberband_label = new paper.PointText(new paper.Point(200, 50));\r\n var rubberband_label = paper.project.activeLayer.rubberband_label;\r\n rubberband_label.name = \"rubberband label\";\r\n rubberband_label.justification = \"center\";\r\n rubberband_label.justification = \"center\";\r\n rubberband_label.fillColor = \"black\";\r\n rubberband_label.content = \"2000mm\";\r\n rubberband.visible = false;\r\n var rubberband_to_point;\r\n\r\n var offset;\r\n var offsetSpeed;\r\n var offset_run = false;\r\n var offset_running = false;\r\n var offset_direction = \"top\";\r\n\r\n paper.view.onMouseMove = function (e) {\r\n rubberband_label.visible = rubberband.visible;\r\n if (_this.adding_points_to_this_path && rubberband.visible) {\r\n _this.last_onMouseMove_event_data = e;\r\n\r\n //snap e.point to vector angle\r\n var from_point = _this.rubberband_from;\r\n rubberband_to_point = e.point;\r\n if (from_point) {\r\n var vector_mouse = rubberband_to_point.subtract(from_point);\r\n var new_vector = new paper.Point(0, 0);\r\n var vector_last_line = new paper.Point(0, 0);\r\n\r\n if (_this.adding_points_to_this_path && _this.adding_points_to_this_path.segments.length >= 2) {\r\n let num_segments = _this.adding_points_to_this_path.segments.length;\r\n vector_last_line = _this.adding_points_to_this_path.segments[num_segments - 1].point.subtract(\r\n _this.adding_points_to_this_path.segments[num_segments - 2].point\r\n );\r\n\r\n // vector_mouse = vector_mouse.subtract(vector_last_line);\r\n }\r\n\r\n //\r\n new_vector.length = vector_mouse.length;\r\n var angle_relative_to_last_line = vector_mouse.angle - vector_last_line.angle;\r\n var mod = Math.abs(angle_relative_to_last_line % 45);\r\n\r\n var snap_tolerance = 3;\r\n var snapped = false;\r\n if (!e.modifiers.control) {\r\n if (\r\n (mod < snap_tolerance && mod > -snap_tolerance) ||\r\n (mod > 45 - snap_tolerance && mod < 45 + snap_tolerance)\r\n ) {\r\n var angle = Math.round(angle_relative_to_last_line / 45) * 45 + vector_last_line.angle;\r\n\r\n new_vector.angle = angle;\r\n rubberband_to_point = from_point.add(new_vector);\r\n snapped = true;\r\n }\r\n }\r\n\r\n // if (vector_mouse.angle > 87.5 && vector_mouse.angle < 92.5) {\r\n // //snap to 90\r\n // new_vector.angle = 90;\r\n // rubberband_to_point = from_point.add(new_vector);\r\n // }\r\n // if (vector_mouse.angle > 177.5 && vector_mouse.angle < 182.5) {\r\n // //snap to 90\r\n // new_vector.angle = 180;\r\n // rubberband_to_point = from_point.add(new_vector);\r\n // }\r\n // if (vector_mouse.angle > -177.5 && vector_mouse.angle < -182.5) {\r\n // //snap to 90\r\n // new_vector.angle = 180;\r\n // rubberband_to_point = from_point.add(new_vector);\r\n // }\r\n // if (vector_mouse.angle > -177.5 && vector_mouse.angle < -182.5) {\r\n // //snap to 90\r\n // new_vector.angle = 180;\r\n // rubberband_to_point = from_point.add(new_vector);\r\n // }\r\n }\r\n\r\n new paper.Point(0, 0);\r\n\r\n //\r\n // draw rubber band\r\n rubberband.bringToFront();\r\n rubberband.segments[0].point = _this.rubberband_from ? _this.rubberband_from : rubberband_to_point;\r\n rubberband.segments[1].point = rubberband_to_point;\r\n rubberband.segments[2].point = _this.rubberband_end ? _this.rubberband_end : rubberband_to_point;\r\n var vector1 = rubberband_to_point.subtract(rubberband.segments[0].point);\r\n\r\n var actual_angle_relative_to_last_line = vector1.angle - vector_last_line.angle;\r\n\r\n rubberband_label.point = e.point.add(new paper.Point(100 / paper.view.zoom, 10));\r\n rubberband_label.content =\r\n Math.round(vector1.length * paper.view.scale) +\r\n \"mm @\" +\r\n actual_angle_relative_to_last_line.toFixed(2) +\r\n \" degs\\n\" +\r\n (snapped ? \" *press ctrl to unsnap*\" : \"\");\r\n rubberband_label.fontSize = 14 / paper.view.zoom;\r\n\r\n var scroll_tolerance = 100;\r\n offsetSpeed = 2 / paper.view.zoom;\r\n if (e.event.y < scroll_tolerance) {\r\n offset_direction = \"top\";\r\n offset_run = true;\r\n if (e.event.x < scroll_tolerance * 2) {\r\n offset_direction = \"top-left\";\r\n } else if (e.event.x > paper.view.viewSize.width - scroll_tolerance * 2) {\r\n offset_direction = \"top-right\";\r\n }\r\n\r\n if (e.event.y < (scroll_tolerance * 2) / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.y < scroll_tolerance / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.y < scroll_tolerance / 10) offsetSpeed = offsetSpeed * 2;\r\n } else if (e.event.y > paper.view.viewSize.height - scroll_tolerance) {\r\n offset_direction = \"bottom\";\r\n offset_run = true;\r\n if (e.event.x < scroll_tolerance * 2) {\r\n offset_direction = \"bottom-left\";\r\n } else if (e.event.x > paper.view.viewSize.width - scroll_tolerance * 2) {\r\n offset_direction = \"bottom-right\";\r\n }\r\n if (e.event.y > paper.view.viewSize.height - (scroll_tolerance * 2) / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.y > paper.view.viewSize.height - scroll_tolerance / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.y > paper.view.viewSize.height - scroll_tolerance / 10) offsetSpeed = offsetSpeed * 2;\r\n } else if (e.event.x < scroll_tolerance) {\r\n offset_direction = \"left\";\r\n offset_run = true;\r\n if (e.event.x < (scroll_tolerance * 2) / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.x < scroll_tolerance / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.x < scroll_tolerance / 10) offsetSpeed = offsetSpeed * 2;\r\n } else if (e.event.x > paper.view.viewSize.width - scroll_tolerance) {\r\n offset_direction = \"right\";\r\n offset_run = true;\r\n if (e.event.x > paper.view.viewSize.width - (scroll_tolerance * 2) / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.x > paper.view.viewSize.width - scroll_tolerance / 3) offsetSpeed = offsetSpeed * 2;\r\n if (e.event.x > paper.view.viewSize.width - scroll_tolerance / 10) offsetSpeed = offsetSpeed * 2;\r\n } else {\r\n offset_run = false;\r\n }\r\n\r\n if (offset_run && !offset_running) {\r\n let offset_up = () => {\r\n offset = new paper.Point(0, -offsetSpeed);\r\n if (offset_direction === \"top-left\") offset = new paper.Point(-offsetSpeed, -offsetSpeed);\r\n if (offset_direction === \"top-right\") offset = new paper.Point(offsetSpeed, -offsetSpeed);\r\n if (offset_direction === \"bottom\") offset = new paper.Point(0, offsetSpeed);\r\n if (offset_direction === \"bottom-left\") offset = new paper.Point(-offsetSpeed, offsetSpeed);\r\n if (offset_direction === \"bottom-right\") offset = new paper.Point(offsetSpeed, offsetSpeed);\r\n if (offset_direction === \"left\") offset = new paper.Point(-offsetSpeed, 0);\r\n if (offset_direction === \"right\") offset = new paper.Point(offsetSpeed, 0);\r\n paper.view.center = paper.view.center.add(offset);\r\n\r\n // offset rubberband\r\n rubberband.segments[1].point = rubberband.segments[1].point.add(offset);\r\n offset_grid(offset);\r\n paper.view.draw();\r\n\r\n if (offset_run)\r\n setTimeout(function () {\r\n offset_up();\r\n }, 20);\r\n else offset_running = false;\r\n };\r\n offset_running = true;\r\n offset_up();\r\n }\r\n // else if (!offset_run) {\r\n\r\n // }\r\n\r\n // }\r\n // offset = new paper.Point(0, 5 / paper.view.zoom);\r\n // paper.view.center = paper.view.center.add(offset);\r\n // }\r\n // else if(e.event.x < 70) {\r\n // offset = new paper.Point(-5 / paper.view.zoom, 0);\r\n // paper.view.center = paper.view.center.add(offset);\r\n // }\r\n // else if(e.event.x > (paper.view.viewSize.width - 70)) {\r\n // offset = new paper.Point(5 / paper.view.zoom, 0);\r\n // paper.view.center = paper.view.center.add(offset);\r\n // }\r\n // }\r\n }\r\n };\r\n\r\n // paper.view.onMouseUp = function (e) {\r\n // // draggin functions\r\n\r\n // if (segment_to_drag && segment_to_drag_was_dragged) {\r\n // segment_to_drag = false;\r\n // segment_to_drag_was_dragged = false;\r\n // return;\r\n // }\r\n // segment_to_drag = false;\r\n\r\n // if (_this.dragging) {\r\n // _this.dragging = false;\r\n\r\n // var screen_distance = _this.downPointScreen.getDistance(new paper.Point(e.event.x, e.event.y));\r\n // //\r\n\r\n // if (e.event.button === 2 && screen_distance < 20) {\r\n // if (_this.adding_points_to_this_path) {\r\n // _this.adding_points_to_this_path = null;\r\n // rubberband.visible = false;\r\n // rubberband.sendToBack();\r\n // }\r\n // else {\r\n // paper.project.deselectAll();\r\n // }\r\n // }\r\n // }\r\n // else {\r\n // this.dragging = false;\r\n // if (e.event.button === 0) {\r\n\r\n // var selected_items = paper.project.getItems({ selected: true });\r\n\r\n // if (_this.adding_points_to_this_path) {\r\n // var new_point = new paper.Point(e.point.x, e.point.y);\r\n // if (rubberband_to_point) new_point = rubberband_to_point;\r\n // _this.adding_points_to_this_path.fullySelected = false;\r\n // _this.adding_points_to_this_path.selected = true;\r\n //\r\n // if (_this.adding_points_to_this_path_inserting_after_index !== null && _this.adding_points_to_this_path_inserting_after_index < _this.adding_points_to_this_path.segments.length) {\r\n\r\n //\r\n // let new_segment = _this.adding_points_to_this_path.insert(_this.adding_points_to_this_path_inserting_after_index + 1, new_point);\r\n // new_segment.selected = true;\r\n // _this.adding_points_to_this_path_inserting_after_index++;\r\n // _this.rubberband_from = new_point;\r\n // }\r\n // else {\r\n //\r\n\r\n // //check for closing shape\r\n // var hitResult = paper.project.activeLayer.hitTest(new_point, { match: (function (o) { return o.type !== \"pixel\" && o.item.name !== \"rubberband\" }), handles: true, tolerance: paper.settings.hitTolerance*2 / paper.view.zoom });\r\n\r\n //\r\n // if (hitResult && hitResult.item === _this.adding_points_to_this_path && hitResult.segment.index === 0) {\r\n // // close shape\r\n // _this.adding_points_to_this_path.closed = true;\r\n // _this.adding_points_to_this_path_inserting_after_index = _this.adding_points_to_this_path.segments.length;\r\n // _this.rubberband_from = _this.adding_points_to_this_path.lastSegment.point;\r\n // _this.rubberband_end = _this.adding_points_to_this_path.firstSegment.point;\r\n // alert(\"closing shape\");\r\n // }\r\n // else {\r\n\r\n // let new_segment = _this.adding_points_to_this_path.add(new_point);\r\n // new_segment.selected = true;\r\n // _this.rubberband_from = new_point;\r\n // if (_this.adding_points_to_this_path.closed) {\r\n // _this.rubberband_end = _this.adding_points_to_this_path.firstSegment.point;\r\n // }\r\n // else _this.rubberband_end = new_point;\r\n // }\r\n\r\n // }\r\n // _this.adding_points_to_this_path.bringToFront();\r\n // //\r\n // }\r\n // else if (!_this.adding_points_to_this_path && selected_items.length > 0) {\r\n // // check to see if handle clicked\r\n // // this.handleSelected = null;\r\n // // Do a hit test on selected paths for handles:\r\n // var hitResult = paper.project.activeLayer.hitTest(e.point, { match: (function (o) { return (o.type === \"handle-in\" || o.type === \"handle-out\") }), curves: true, handles: true, tolerance: paper.settings.hitTolerance / paper.view.zoom });\r\n //\r\n // if (hitResult) {\r\n //\r\n // // if (hitResult.type === 'handle-in') {\r\n // // this.handleSelected = hitResult.segment.handleIn;\r\n // // } else {\r\n // // this.handleSelected = hitResult.segment.handleOut;\r\n // // };\r\n // //\r\n // let segment = null;\r\n // if (hitResult.type === \"curve\") {\r\n // segment = hitResult.location._segment1;\r\n // }\r\n // else segment = hitResult.segment;\r\n\r\n // hitResult.item.fullySelected = false;\r\n // hitResult.item.selected = true;\r\n // segment.selected = true;\r\n\r\n // _this.adding_points_to_this_path = hitResult.item;\r\n // _this.adding_points_to_this_path_inserting_after_index = segment.index;\r\n // _this.insert = hitResult.item;\r\n // _this.rubberband_from = segment.point;\r\n // if (hitResult.item.segments.length > segment.index + 1) _this.rubberband_end = hitResult.item.segments[segment.index + 1].point;\r\n // else _this.rubberband_end = null;\r\n // rubberband.visible = true;\r\n // }\r\n // else {\r\n // paper.project.deselectAll();\r\n // }\r\n\r\n // }\r\n // else if (!_this.adding_points_to_this_path) {\r\n // // );\r\n // let hits = paper.project.activeLayer.hitTestAll(e.point);\r\n // if (hits.length > 0 && (!hits[0].item.name || !hits[0].item.name.includes(\"imported_map\"))) {\r\n // if (hits[0].item.fullySelected) return;\r\n // paper.project.deselectAll();\r\n // hits[0].item.selected = true;\r\n // // this.lastPointAdded = hits[0].item.segments[hits[0].item.segments.length-1].point;\r\n // // this.adding_points_to_this_path = hits[0].item;\r\n // }\r\n // else {\r\n // if (paper.project.getItems({ selected: true }).length > 0) {\r\n // paper.project.deselectAll();\r\n // }\r\n // else {\r\n // // begin adding points to new path?\r\n // paper.project.deselectAll();\r\n // var new_path = new paper.Path();\r\n // new_path.strokeColor = 'red';\r\n // new_path.strokeWidth = 4;\r\n // new_path.strokeCap = 'round';\r\n // new_path.strokeJoin = 'round';\r\n // new_path.selected = true;\r\n // var point = new paper.Point(e.point.x, e.point.y);\r\n // new_path.add(point);\r\n // _this.rubberband_from = point;\r\n // _this.rubberband_end = point;\r\n // rubberband.visible = true;\r\n // _this.adding_points_to_this_path = new_path;\r\n // new_path.on('mousedrag', function (e) {\r\n //\r\n // // new_path.position = new_path.position.add(e.delta);\r\n // });\r\n //\r\n //\r\n // }\r\n\r\n // }\r\n // };\r\n // };\r\n\r\n // if (e.event.button === 2) {\r\n // if (_this.adding_points_to_this_path) {\r\n // _this.adding_points_to_this_path.fullySelected = false;\r\n // _this.adding_points_to_this_path = null;\r\n // rubberband.visible = false;\r\n // _this.lastPointAdded = null;\r\n // }\r\n // else {\r\n // paper.project.deselectAll();\r\n // }\r\n // }\r\n // }\r\n\r\n // }\r\n\r\n // paper.view.onKeyDown = function (e) {\r\n //\r\n // var offset;\r\n // if (e.key === \"up\") {\r\n // offset = new paper.Point(0, -15 / paper.view.zoom);\r\n // paper.view.center = paper.view.center.add(offset);\r\n // }\r\n // if (e.key === \"down\") {\r\n // offset = new paper.Point(0, 15 / paper.view.zoom);\r\n // paper.view.center = paper.view.center.add(offset);\r\n // }\r\n // if (e.key === \"left\") {\r\n // offset = new paper.Point(-15 / paper.view.zoom, 0);\r\n // paper.view.center = paper.view.center.add(offset);\r\n // }\r\n // if (e.key === \"right\") {\r\n // offset = new paper.Point(15 / paper.view.zoom, 0);\r\n // paper.view.center = paper.view.center.add(offset);\r\n // }\r\n // if (e.key === \"delete\" || e.key === \"backspace\") {\r\n // var selected_items = paper.project.getItems({ selected: true });\r\n //\r\n // if (selected_items.length > 0) {\r\n // for (var path of selected_items) {\r\n // path.selected = true;\r\n // path.remove();\r\n // // this.adding_points_to_this_path = null;\r\n // // rubberband.visible = false;\r\n // // this.lastPointAdded = null;\r\n // // paper.project.deselectAll();\r\n // }\r\n // }\r\n // }\r\n // if (e.key === \"control\" && _this.adding_points_to_this_path && rubberband.visible && _this.last_onMouseMove_event_data) {\r\n //\r\n // paper.view.emit('mousemove', _this.last_onMouseMove_event_data);\r\n // }\r\n // }\r\n\r\n // paper.view.onKeyUp = function (e) {\r\n // if (e.key === \"control\" && _this.adding_points_to_this_path && rubberband.visible && _this.last_onMouseMove_event_data) {\r\n //\r\n // setTimeout(paper.view.emit('mousemove', _this.last_onMouseMove_event_data), 50);\r\n // }\r\n // }\r\n\r\n var hitOptions = {\r\n // Trigger hit only on 'fill' part of the path with 0 tolerance\r\n segments: false,\r\n stroke: false,\r\n fill: true,\r\n tolerance: 0,\r\n };\r\n\r\n let last_hover = null;\r\n\r\n var tool = new paper.Tool(); // Again manually. Life is much easier with script type=\"text/paperscript\"\r\n tool.onMouseMove = function (event) {\r\n // Installig paperjs event\r\n var x = event.point.x;\r\n var y = event.point.y;\r\n\r\n // document.getElementById(\"xycoordinates\").innerHTML = \"Coordinates: (\" + x + \",\" + y + \")\";\r\n\r\n var hitResult = paper.project.activeLayer.hitTest(event.point, hitOptions); // isPointInPath\r\n\r\n if (last_hover && (!hitResult || hitResult.item !== last_hover)) {\r\n //\r\n if (last_hover.shadow) {\r\n item.shadowColor = last_hover.shadow.shadowColor;\r\n item.shadowBlur = last_hover.shadow.shadowBlur;\r\n item.shadowOffset = last_hover.shadow.shadowOffset;\r\n } else {\r\n last_hover.shadowColor = null;\r\n last_hover.shadowBlur = 0;\r\n }\r\n // if (last_hover.fillColor) last_hover.fillColor.alpha = last_hover.fillColorAlpha_o?last_hover.fillColorAlpha_o:1;\r\n last_hover = null;\r\n }\r\n\r\n if (hitResult && hitResult.item !== last_hover) {\r\n //\r\n let name = GetName(hitResult.item);\r\n if (name) {\r\n // document.body.style.cursor = \"pointer\";\r\n paper.view.element.style.setProperty(\"cursor\", \"pointer\");\r\n var item = hitResult.item;\r\n //\r\n if (!item.shadow)\r\n item.shadow = {\r\n shadowColor: item.shadowColor,\r\n shadowBlur: item.shadowBlur,\r\n shadowOffset: item.shadowOffset,\r\n };\r\n // if (item.opacity = Number(item.opacity)*0.8;\r\n // else if (item.opacity_o>0.25) item.opacity = item.opacity_o*2;\r\n // else item.opacity = 0.75;\r\n // if (!item.fillColorAlpha_o) item.fillColorAlpha_o = item.fillColor.alpha;\r\n // if (item.fillColorAlpha_o > 0.4) item.fillColor.alpha = item.fillColorAlpha_o*0.75;\r\n // else item.fillColor.alpha = item.fillColorAlpha_o*3;\r\n //\r\n item.shadowColor = \"green\";\r\n item.shadowBlur = 20;\r\n item.shadowOffset = new paper.Point(0, 0);\r\n last_hover = item;\r\n }\r\n } else if (hitResult && hitResult.item === last_hover) {\r\n paper.view.element.style.setProperty(\"cursor\", \"pointer\");\r\n } else {\r\n if (!window.dragging) paper.view.element.style.setProperty(\"cursor\", \"crosshair\");\r\n if (window.dragging) paper.view.element.style.setProperty(\"cursor\", \"all-scroll\");\r\n }\r\n };\r\n\r\n function GetName(item) {\r\n if (item) {\r\n if (item.name) return item.name;\r\n if (item.parent && item.parent.name && !item.parent.name.startsWith(\"area\")) return item.parent.name;\r\n if (item.parent.parent && item.parent.parent.name && !item.parent.parent.name.startsWith(\"area\"))\r\n return item.parent.parent.name;\r\n }\r\n return null;\r\n }\r\n\r\n var qqCanvas = document.getElementById(\"qqCanvas\");\r\n if (qqCanvas)\r\n qqCanvas.addEventListener(\"wheel\", function (e) {\r\n var delta = e.deltaY;\r\n var zoom = paper.view.zoom * (1 - delta / 4500);\r\n\r\n // zoom = zoom * (1 + delta / 5500);\r\n\r\n if (zoom > 7) zoom = 7;\r\n if (zoom < 0.03) zoom = 0.03;\r\n paper.view.zoom = zoom;\r\n\r\n offset_grid();\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n if (qqCanvas)\r\n qqCanvas.addEventListener(\"contextmenu\", function (e) {\r\n e.preventDefault();\r\n });\r\n}\r\n\r\nexport function toggleGrid(show_grid) {\r\n // let current_bg = document.getElementById(\"qqCanvas\").style.backgroundImage;\r\n // if (!window.paper_bg_default && current_bg && current_bg !== \"none\") window.paper_bg_default = document.getElementById(\"qqCanvas\").style.backgroundImage;\r\n\r\n if (!show_grid) document.getElementById(\"qqCanvas\").style.backgroundImage = \"none\";\r\n else document.getElementById(\"qqCanvas\").style.removeProperty(\"background-image\");\r\n}\r\n\r\nexport function ClosePaper() {\r\n paper.remove();\r\n paper.clear();\r\n window.svg = null;\r\n}\r\n\r\nfunction SetQQAttributes(in_item) {\r\n for (let key in in_item.children) {\r\n let item = in_item.children[key];\r\n\r\n if (item?.name?.includes && item.name.includes(\"type:origin\")) {\r\n window.paper_origin = item.position;\r\n\r\n window.origin_convert = (pt) => {\r\n let out_pt = { ...pt };\r\n if (window.paper_origin) {\r\n out_pt.x = out_pt.x - window.paper_origin.x;\r\n out_pt.y = -(out_pt.y - window.paper_origin.y);\r\n }\r\n return out_pt;\r\n };\r\n window.origin_convert_reverse = (pt) => {\r\n let out_pt = { ...pt };\r\n if (window.paper_origin) {\r\n out_pt.x = out_pt.x + window.paper_origin.x;\r\n out_pt.y = window.paper_origin.y - out_pt.y;\r\n }\r\n return out_pt;\r\n };\r\n }\r\n\r\n if (item?.segments?.length && item.segments.length === 4 && item.fillColor.red === 0.6980392156862745) {\r\n //breacket bg;\r\n item.fillColor.alpha = 0.05;\r\n }\r\n // setting defaults\r\n item.areaIndex = -1;\r\n item.areaNumber = -1;\r\n if (window?.job?.AreaSpecifications && window?.job?.AreaSpecifications.length === 1) {\r\n item.areaIndex = 0;\r\n item.areaNumber = 1;\r\n }\r\n item.ref = \"\";\r\n item.lengthQQ = 0;\r\n let kvp_base = item.name ? item.name : item.parent.name ? item.parent.name : key;\r\n let kvps = kvp_base ? kvp_base.split(\",\") : [];\r\n if (kvp_base && kvps.length > 0) {\r\n for (let kvp of kvps) {\r\n let split = kvp.split(\":\");\r\n let this_key = split[0];\r\n let value = split[1];\r\n\r\n if (this_key === \"len\") item.lengthQQ = Number(value);\r\n else if (this_key === \"area\") {\r\n item.areaIndex = Number(value) - 1;\r\n item.areaNumber = Number(value);\r\n } else if (this_key === \"name\") item.nameQQ = value;\r\n else if (this_key === \"type\") item.typeQQ = value;\r\n else if (this_key === \"eng_capacity\") item.eng_capacity = toNumber(value);\r\n else if (value !== undefined) item[this_key] = value;\r\n else item[this_key] = true;\r\n }\r\n //\r\n }\r\n if ([\"sheet\", \"skylight\"].includes(item.sel_type)) {\r\n item.is_roofsheet = true;\r\n if (item.sel_type === \"skylight\") item.is_skylight = true;\r\n // if (COMMON.Contains(key, [\"Ampelite\", \"Polycarbonate\", \"Alsynite\"])) item.is_skylight = true;\r\n }\r\n if (key.includes(\"name:sheet_section_\")) item.remove();\r\n if (item.sel_type === \"gutter\") item.is_gutter = true;\r\n\r\n if (item.sel_type === \"attachment\") {\r\n if (item.typeQQ === \"attachment_ghost\") item.is_attachment_ghost = true;\r\n else item.is_attachment = true;\r\n\r\n if (item.ref === \"unknown\") {\r\n if (item.ref2.startsWith(\"CBR\")) item.ref = \"BackRight-Attachment\";\r\n if (item.ref2.startsWith(\"CBL\")) item.ref = \"BackLeft-Attachment\";\r\n if (item.ref2.startsWith(\"CFR\")) item.ref = \"FrontRight-Attachment\";\r\n if (item.ref2.startsWith(\"CFL\")) item.ref = \"FrontLeft-Attachment\";\r\n }\r\n }\r\n\r\n if (\r\n item.nameQQ &&\r\n (item.nameQQ.startsWith(\"JMB\") || item.nameQQ.startsWith(\"UCE\") || item.nameQQ.startsWith(\"BK50\"))\r\n ) {\r\n item.typeQQ = \"riser_bracket\";\r\n item.sel_type = \"riser_bracket\";\r\n }\r\n\r\n if (item.sel_type && item.sel_type.includes(\"beam\")) {\r\n item.is_beam = true;\r\n }\r\n\r\n if (item.sel_type && item.sel_type === \"brace\") {\r\n item.is_brace = true;\r\n }\r\n\r\n if ((item.sel_type && item.sel_type === \"slat_post\") || item.typeQQ === \"slat_post\") {\r\n item.sel_type = \"slat_post\";\r\n item.typeQQ = \"slat_post\";\r\n item.is_post = false;\r\n } else if ((item.sel_type && item.sel_type === \"post\") || item.typeQQ === \"post\") {\r\n item.is_post = true;\r\n }\r\n\r\n if (item.sel_type && item.sel_type === \"note\") {\r\n item.is_note = true;\r\n }\r\n\r\n if (item.warning) {\r\n item.has_warning = true;\r\n }\r\n\r\n if (item.typeQQ === \"post_label\") {\r\n item.is_post_label = true;\r\n }\r\n if (item.typeQQ === \"bracket_label\") {\r\n item.is_bracket_label = true;\r\n }\r\n if (item.typeQQ === \"slat_panel\") {\r\n item.is_slat = true;\r\n item.sel_type = \"slat_panel\";\r\n // if (!item.ref) item.ref=\"(0,0,0);(0,0,0)\";\r\n }\r\n if (item.typeQQ === \"slat_label\") {\r\n item.sel_type = \"slat_label\";\r\n // if (!item.ref) item.ref=\"(0,0,0);(0,0,0)\";\r\n }\r\n\r\n if (item.typeQQ === \"downpipe\") {\r\n item.is_downpipe = true;\r\n if (!item.ref) item.ref = \"Auto\";\r\n }\r\n\r\n if (item.typeQQ === \"cutout_ghost\") {\r\n item.is_cutout = true;\r\n }\r\n if (!item?.ref2 || item?.ref2 === true) item.ref2 = \"\";\r\n\r\n if (item?.ref2 && item.ref2.startsWith && (item.ref2.startsWith(\"CB\") || item.ref2.startsWith(\"CF\"))) {\r\n item.is_cutout = true;\r\n }\r\n\r\n if ((item.sel_type && item.sel_type === \"slat_post_footing\") || item.typeQQ === \"slat_post_footing\") {\r\n item.sel_type = \"slat_post_footing\";\r\n item.typeQQ = \"slat_post_footing\";\r\n item.is_footing = false;\r\n } else if (item.sel_type && item.sel_type === \"post_footing\") {\r\n item.is_footing = true;\r\n }\r\n\r\n if (\r\n (item.typeQQ && item.typeQQ.startsWith(\"dimension\")) ||\r\n (item.parent && item.parent.typeQQ && item.parent.typeQQ.startsWith(\"dimension\"))\r\n ) {\r\n item.is_dimension = true;\r\n item.sel_type = \"dimension\";\r\n\r\n if (item.typeQQ === \"dimension/overall\" && item?.content && !item.ref) {\r\n let depth = toNumber(GetSpec(item.areaIndex, \"SHAPE\", \"Depth\", -1));\r\n let length = toNumber(GetSpec(item.areaIndex, \"SHAPE\", \"Length\", -1));\r\n let dim_value = toNumber(item.content);\r\n\r\n if (depth === dim_value) item.ref = \"Depth\";\r\n else if (length === dim_value) item.ref = \"Length\";\r\n }\r\n }\r\n\r\n if (item.ref === \"unknown\" && item?.ref2?.startsWith && item.ref2.startsWith(\"C\")) {\r\n if (item.ref2 === \"CFL\") {\r\n item.ref = \"FrontLeft-Attachment\";\r\n }\r\n if (item.ref2 === \"CFR\") {\r\n item.ref = \"FrontRight-Attachment\";\r\n }\r\n if (item.ref2 === \"CBL\") {\r\n item.ref = \"BackLeft-Attachment\";\r\n }\r\n if (item.ref2 === \"CBM\") {\r\n item.ref = \"BackMid-Attachment\";\r\n }\r\n if (item.ref2 === \"CBR\") {\r\n item.ref = \"BackRight-Attachment\";\r\n }\r\n }\r\n\r\n if (item?.warning_msg) {\r\n item.warning_msg = item.warning_msg.replaceAll(\"_\", \" \").replaceAll(\"$$COMMA$$\", \",\");\r\n }\r\n if (item?.warning) {\r\n item.warning = item.warning.replaceAll(\"_\", \" \").replaceAll(\"$$COMMA$$\", \",\");\r\n }\r\n\r\n if (item.typeQQ === \"barge_cap\") {\r\n item.is_barge = true;\r\n }\r\n\r\n if (item.children) {\r\n item = SetQQAttributes(item);\r\n }\r\n\r\n // if (item.typeQQ === \"gutter_label\" || (item.children && item.children.length > 0 && item.children[0].typeQQ && item.children[0].typeQQ === \"gutter_label\")) {\r\n // item.locked = true;\r\n // if (item.children && item.children.length > 0 && item.children[0].typeQQ && item.children[0].typeQQ) item.children[0].locked = true;\r\n // }\r\n }\r\n\r\n return in_item;\r\n}\r\n\r\nexport const GetItems = (parameters) => {\r\n if (window.svg) {\r\n return paper.project.getItems(parameters);\r\n }\r\n return null;\r\n};\r\n\r\nexport function FormatSVGToJob() {\r\n if (window.svg) {\r\n window.base_font_factor = 100;\r\n window.svg = SetQQAttributes(window.svg);\r\n\r\n let deckMode = false;\r\n const carportMode = window?.job?.DesignParameters?.CarportMode === 1;\r\n\r\n if (window?.job?.DesignParameters?.DeckMode) deckMode = true;\r\n\r\n paper.project.getItems({ is_attachment: true }).forEach(function (item) {\r\n // paper.project.activeLayer.addChild(item.parent.parent);\r\n // item.parent.parent.sendToBack();\r\n // paper.project.activeLayer.addChild();\r\n\r\n item.parent.parent.sendToBack();\r\n item.parent.sendToBack();\r\n item.sendToBack();\r\n item.fillPattern = COMMON.BaseURL(\"images/hatching.png\");\r\n });\r\n\r\n paper.project.getItems({ typeQQ: \"cutout_ghost\" }).forEach(function (item) {\r\n if (item.length > 2100) {\r\n if (!deckMode) item.visible = false;\r\n } else {\r\n item.parent.parent.sendToBack();\r\n item.parent.sendToBack();\r\n item.sendToBack();\r\n }\r\n });\r\n\r\n // Remove \"IN GROUND\" text from carport 2D plan view\r\n if (carportMode) {\r\n paper.project.getItems({ typeQQ: \"post\" }).forEach(function (item) {\r\n if (item instanceof paper.PointText && item.parent instanceof paper.Group) {\r\n item.parent.remove();\r\n }\r\n });\r\n }\r\n\r\n paper.project.getItems({ typeQQ: \"attachment_ghost\" }).forEach(function (item) {\r\n if (toNumber(item?.lengthQQ) > 500) {\r\n item.parent.parent.sendToBack();\r\n item.parent.sendToBack();\r\n item.sendToBack();\r\n }\r\n });\r\n\r\n paper.project.getItems({ is_roofsheet: true }).forEach(function (item) {\r\n // paper.project.activeLayer.addChild(item.parent.parent);\r\n // item.parent.parent.sendToBack();\r\n // paper.project.activeLayer.addChild();\r\n item.parent.parent.sendToBack();\r\n item.parent.sendToBack();\r\n item.sendToBack();\r\n // item.opacity = 0.5;\r\n });\r\n\r\n if (deckMode)\r\n paper.project.getItems({ typeQQ: \"cutout_ghost\" }).forEach(function (item) {\r\n if (item.length > 2100) {\r\n item.parent.parent.sendToBack();\r\n item.parent.sendToBack();\r\n item.sendToBack();\r\n }\r\n });\r\n\r\n paper.project.getItems({ is_beam: true }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n paper.project.getItems({ typeQQ: \"sheet_label\" }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n paper.project.getItems({ typeQQ: \"gutter_label\" }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n paper.project.getItems({ is_bracket_label: true }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n\r\n let post_data = {};\r\n paper.project.getItems({ is_post: true }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n // item.locked = true;\r\n let split = item.ref.split(\"/\");\r\n if (split.length > 1) {\r\n let ref = split[0] + \"/\" + split[1] + \")\";\r\n post_data[ref] = {\r\n ref: item.ref,\r\n ref2: item.ref2,\r\n ref3: item?.ref3,\r\n ref4: item?.ref4,\r\n areaIndex: item.areaIndex,\r\n areaNumber: item.areaNumber,\r\n adj: item.adj,\r\n code: item.code,\r\n colour: item.colour,\r\n lengthQQ: item.lengthQQ,\r\n nameQQ: item.nameQQ,\r\n };\r\n }\r\n });\r\n\r\n paper.project.getItems({ is_footing: true }).forEach(function (item) {\r\n if (post_data[item.ref]) {\r\n item.post_data = post_data[item.ref];\r\n }\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n\r\n paper.project.getItems({ is_post: true }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n\r\n // paper.project.getItems({ is_footing: true }).forEach(function (item) {\r\n // });\r\n paper.project.getItems({ is_downpipe: true }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n\r\n // );\r\n // get roofsheet labels\r\n let paper_origin = new paper.Point(0, 0);\r\n\r\n paper.project.getItems({ class: paper.TextItem }).forEach(function (item) {\r\n if (window.LYSAGHT) {\r\n item.fontSize = item.fontSize * 0.8;\r\n item.fontFamily = \"'canada-type-gibson', \" + item.fontFamily;\r\n }\r\n if (item.label_pos_ref && item.name !== \"type:origin\") {\r\n let distance = item.point.getDistance(paper_origin);\r\n if (distance < 1) {\r\n let pnt = COMMON.getPointForRef(item.label_pos_ref);\r\n pnt = window.origin_convert(pnt);\r\n item.point = new paper.Point(pnt.x, pnt.y);\r\n }\r\n }\r\n item.orig_point = new paper.Point(item.point);\r\n });\r\n paper.project.getItems({ has_warning: true }).forEach(function (item) {\r\n let title = \"\";\r\n let message = \"\";\r\n // if (item?.warning === \"FlatHipBeamPostClash\") {\r\n // title = \"Post position error\";\r\n // message = \"You cannot have a post in the corner of a hip area join. Please move this post.\";\r\n // }\r\n if (item?.warning_msg) {\r\n title = item.warning;\r\n message = item.warning_msg;\r\n }\r\n if (title && message) {\r\n paper.project.activeLayer.warning_circle = new paper.Path.Circle({\r\n center: item.position,\r\n radius: 100,\r\n fillColor: null,\r\n strokeColor: \"#9a560d\",\r\n strokeWidth: 30,\r\n dashArray: [30, 20],\r\n });\r\n paper.project.activeLayer.warning_circle.name = \"warning_circle\";\r\n paper.project.activeLayer.warning_circle.is_warning_element = true;\r\n\r\n let warning_exists = false;\r\n paper.project.getItems({ warning_title: title }).forEach(function (warning_item) {\r\n if (warning_item?.warning_title === title) {\r\n warning_exists = true;\r\n\r\n paper.project.activeLayer.warning_line = new paper.Path(item.position, warning_item.position);\r\n let warning_line = paper.project.activeLayer.warning_line;\r\n warning_line.name = \"warning_line\";\r\n warning_line.is_warning_element = true;\r\n warning_line.strokeColor = \"red\";\r\n warning_line.strokeWidth = 6;\r\n warning_line.dashArray = [3, 3];\r\n warning_line.visible = true;\r\n warning_line.bringToFront();\r\n }\r\n });\r\n\r\n if (!warning_exists) {\r\n paper.project.activeLayer.raster_warning = new paper.Raster(\r\n COMMON.BaseURL(\"images/icons8-error-48.png\")\r\n );\r\n let rasterWarning = paper.project.activeLayer.raster_warning;\r\n rasterWarning.warning_title = title;\r\n rasterWarning.is_warning_element = true;\r\n let pnt = item.position.add(new paper.Point(300, 200));\r\n rasterWarning.position = pnt;\r\n rasterWarning.onLoad = function () {\r\n paper.project.activeLayer.warning_line = new paper.Path(item.position, pnt);\r\n let warning_line = paper.project.activeLayer.warning_line;\r\n warning_line.name = \"warning_line\";\r\n warning_line.is_warning_element = true;\r\n warning_line.strokeColor = \"red\";\r\n warning_line.strokeWidth = 6;\r\n warning_line.dashArray = [3, 3];\r\n warning_line.visible = true;\r\n warning_line.bringToFront();\r\n\r\n rasterWarning.name = \"warning_icon\";\r\n rasterWarning.scale(7);\r\n rasterWarning.opacity = 1.0;\r\n rasterWarning.bringToFront();\r\n\r\n rasterWarning.onFrame = function (event) {\r\n if (this.glow_up) this.opacity += 0.008;\r\n else this.opacity -= 0.008;\r\n if (this.opacity < 0.6) this.glow_up = true;\r\n if (this.opacity > 1.0) this.glow_up = false;\r\n\r\n if (this.rotate_back) this.rotate(-0.1);\r\n else this.rotate(0.1);\r\n if (this.rotation > 2) this.rotate_back = true;\r\n if (this.rotation < -2) this.rotate_back = false;\r\n };\r\n\r\n rasterWarning.onMouseEnter = function (event) {\r\n rasterWarning.scale(1.5);\r\n paper.view.element.style.setProperty(\"cursor\", \"pointer\");\r\n };\r\n rasterWarning.onMouseLeave = function (event) {\r\n rasterWarning.scale(2 / 3);\r\n paper.view.element.style.setProperty(\"cursor\", \"crosshair\");\r\n };\r\n\r\n if (message.includes(\"/n\")) {\r\n //split for line breakInside:\r\n let message_split = message.split(\"/n\");\r\n message = [];\r\n let first = true;\r\n for (let str of message_split) {\r\n message.push({str}
);\r\n first = false;\r\n }\r\n }\r\n\r\n rasterWarning.onClick = function (event) {\r\n window.dispatch({\r\n type: \"SHOW_DIALOG\",\r\n value: {\r\n title: (\r\n <>\r\n {\" \"}\r\n {title}\r\n >\r\n ),\r\n message: message,\r\n // primaryActionText: primaryActionText,\r\n // primaryAction: primaryAction,\r\n // secondaryActionText: secondaryActionText,\r\n // secondaryAction: secondaryAction,\r\n },\r\n });\r\n };\r\n };\r\n }\r\n }\r\n });\r\n }\r\n}\r\n// export function WipeSkylights(areaIndex = -1) {\r\n// if (window.svg) {\r\n// for (let key in window.svg.children) {\r\n// let item = window.svg.children[key];\r\n//\r\n// if (item.is_skylight && (areaIndex === -1 || areaIndex === item.areaIndex)) item.is_skylight = false;\r\n// }\r\n// }\r\n// return UpdateRoofSheets();\r\n// }\r\n\r\nexport function UpdateSkylights2D() {\r\n if (window.svg) {\r\n let skylightsAll = GetSpecAllAreas(\"SKYLIGHTS\", null, []);\r\n let roofsheets = paper.project.getItems({ is_roofsheet: true });\r\n roofsheets.forEach(function (item) {\r\n item.is_skylight = false;\r\n item.sel_type = \"sheet\";\r\n item.fillColorAlpha_o = null;\r\n });\r\n\r\n //\r\n\r\n skylightsAll.forEach(function (area_skylights, areaIndex) {\r\n area_skylights.forEach(function (skylight) {\r\n let ref = skylight.Section + \"/\" + skylight.Offset;\r\n let ref2 =\r\n skylight?.Index !== undefined && toNumber(skylight?.Index) >= 0\r\n ? skylight.Section + \"/\" + skylight.Index\r\n : null;\r\n\r\n roofsheets.forEach(function (item) {\r\n if (areaIndex === -1 || areaIndex === item.areaIndex) {\r\n if (ref2 && item.ref2) {\r\n if (ref2 === item.ref2) {\r\n item.is_skylight = true;\r\n }\r\n } else if (ref === item.ref) {\r\n item.is_skylight = true;\r\n }\r\n // item.is_skylight = false;\r\n // item.sel_type = \"sheet\";\r\n // item.fillColorAlpha_o = null;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n UpdateRoofSheets();\r\n}\r\n\r\nexport function WipeSkylights(areaIndex = -1) {\r\n if (window.svg) {\r\n paper.project.getItems({ is_skylight: true }).forEach(function (item) {\r\n if (areaIndex === -1 || areaIndex === item.areaIndex) {\r\n item.is_skylight = false;\r\n item.sel_type = \"sheet\";\r\n item.fillColorAlpha_o = null;\r\n }\r\n });\r\n }\r\n UpdateRoofSheets();\r\n}\r\n\r\nexport function GetSkylights() {\r\n let skylights = {};\r\n if (window?.job?.AreaSpecifications)\r\n for (let area of window.job.AreaSpecifications) {\r\n skylights[area.AreaIndex] = [];\r\n }\r\n if (window.svg) {\r\n paper.project.getItems({ is_skylight: true }).forEach(function (item) {\r\n if (item.areaIndex !== null && !skylights?.[item.areaIndex]) skylights[item.areaIndex] = [];\r\n let index = item?.ref2 ? item.ref2.split(\"/\")[1] : -1;\r\n skylights[item.areaIndex].push({\r\n Section: item.ref.split(\"/\")[0],\r\n Offset: item.ref.split(\"/\")[1],\r\n Index: index,\r\n });\r\n });\r\n }\r\n\r\n return skylights;\r\n}\r\n\r\nexport function GetRoofColoursAreasHTML() {\r\n let roofsheet_colour_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.ROOF_SHEETING,\r\n \"RoofSheetColour\",\r\n \"Classic Cream/Grey\"\r\n );\r\n let roofrolling_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"ReverseRoll\", false);\r\n roofsheet_colour_in_areas.forEach(function (value, index, array) {\r\n let reverse = roofrolling_in_areas[index];\r\n let side = 0;\r\n if (reverse) side = 1;\r\n\r\n array[index] = GetHTMLColour(value)[side];\r\n });\r\n return roofsheet_colour_in_areas;\r\n}\r\nexport function GetRoofColoursUndersideAreasHTML() {\r\n let roofsheet_colour_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.ROOF_SHEETING,\r\n \"RoofSheetColour\",\r\n \"Classic Cream/Grey\"\r\n );\r\n let roofrolling_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"ReverseRoll\", false);\r\n roofsheet_colour_in_areas.forEach(function (value, index, array) {\r\n let reverse = roofrolling_in_areas[index];\r\n let side = 1;\r\n if (reverse) side = 0;\r\n\r\n array[index] = GetHTMLColour(value)[side];\r\n });\r\n return roofsheet_colour_in_areas;\r\n}\r\n\r\nexport function UpdateRoofSheets() {\r\n if (window.svg) {\r\n let roofsheet_colour_in_areas_HTML = GetRoofColoursAreasHTML();\r\n\r\n let GutterCol_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"GutterCol\",\r\n \"Classic Cream\"\r\n );\r\n let gutter_colour_html_in_areas = [...GutterCol_in_areas];\r\n let gutter_colour_html_contrasttext_in_areas = [];\r\n gutter_colour_html_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n gutter_colour_html_contrasttext_in_areas[index] = GetHTMLColour(value)[2];\r\n });\r\n\r\n let GutterType_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterType\", \"\");\r\n let GutterSlottedGutter_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"SlottedGutter\",\r\n \"\"\r\n );\r\n let GutterGutterWithReturn_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"GutterWithReturn\",\r\n \"\"\r\n );\r\n let GutterF_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterF\", \"\");\r\n let GutterL_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterL\", \"\");\r\n let GutterR_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterR\", \"\");\r\n let GutterB_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES, \"GutterB\", \"\");\r\n let BoxGutterColour_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.GUTTERS_AND_DOWNPIPES,\r\n \"BoxGutterColour\",\r\n \"\"\r\n );\r\n let BoxGutterColour_html_in_areas = [...BoxGutterColour_in_areas];\r\n BoxGutterColour_html_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n });\r\n\r\n let AttachmentTop_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ATTACHMENT, \"AttachmentTop\", 0);\r\n\r\n // get roofsheets\r\n\r\n const ROOFSHEET__MESH_MODE = window.app.designer.designer3D[APP.ROOFSHEET__MESH_MODE];\r\n let roofsheet_grouptype_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"RoofGroupType\", \"\");\r\n let roofsheet_data_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"RoofSheetData\", {});\r\n\r\n paper.project.getItems({ typeQQ: \"sheet\" }).forEach(function (item) {\r\n if (ROOFSHEET__MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n // if (item.hasStroke()) {\r\n // }\r\n // item.dashArray = [30, 60];\r\n // item.strokeColor = \"red\";\r\n });\r\n\r\n let roofsheets = paper.project.getItems({ is_roofsheet: true });\r\n\r\n roofsheets.forEach(function (item, index, array) {\r\n item.is_next_to_skylight = false;\r\n item.fillColorAlpha_o = null;\r\n item.fillColor = roofsheet_colour_in_areas_HTML[item.areaIndex];\r\n if (ROOFSHEET__MESH_MODE !== \"Render\") item.visible = false;\r\n else {\r\n item.visible = true;\r\n if (item?.areaIndex !== undefined) {\r\n let index = item?.areaIndex;\r\n if (roofsheet_grouptype_in_areas[index] === \"Polycarbonate\") {\r\n item.fillColor.alpha = 0.6;\r\n item.fillColorAlpha_o = 0.6;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // get roofsheet labels\r\n paper.project.getItems({ typeQQ: \"sheet_label\" }).forEach(function (item) {\r\n item.fontWeight = 600;\r\n if (ROOFSHEET__MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n\r\n // get skylights\r\n let skylight_type_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"SkylightType\", \"\");\r\n let skylight_colour_in_areas = GetSpecAllAreasColourHTML(\r\n BASIC_SPECS_SECTIONS.ROOF_SHEETING,\r\n \"SkylightColour\",\r\n \"Clear\"\r\n );\r\n\r\n paper.project.getItems({ is_skylight: true }).forEach(function (item, index, array) {\r\n if (skylight_type_in_areas[item.areaIndex] !== \"\") {\r\n let coverage = roofsheet_data_in_areas?.[item.areaIndex]?.coverage\r\n ? roofsheet_data_in_areas?.[item.areaIndex]?.coverage\r\n : 760;\r\n let skylight_spacing = roofsheet_data_in_areas?.[item.areaIndex]?.skylight_spacing\r\n ? roofsheet_data_in_areas?.[item.areaIndex]?.skylight_spacing\r\n : 0;\r\n\r\n item.fillColor = skylight_colour_in_areas[item.areaIndex];\r\n if (!item.fillColor) {\r\n }\r\n if (item?.fillColor) item.fillColor.alpha = 0.6;\r\n item.fillColorAlpha_o = 0.6;\r\n\r\n if (skylight_spacing > 0) {\r\n let ref = item.ref.split(\"/\");\r\n let section = ref[0];\r\n let offset = toNumber(ref[1]);\r\n\r\n roofsheets.forEach(function (sheet, index, array) {\r\n let ref2_split = sheet.ref.split(\"/\");\r\n let section2 = ref2_split[0];\r\n let offset2 = toNumber(ref2_split[1]);\r\n\r\n let diff = Math.abs(offset2 - offset);\r\n if (section == section2 && diff > 1 && diff < coverage * (0.6 + skylight_spacing)) {\r\n sheet.is_next_to_skylight = true;\r\n }\r\n });\r\n }\r\n }\r\n // if (item.areaIndex !== null && skylights[item.areaIndex] === null) skylights[item.areaIndex] = [];\r\n // skylights[item.areaIndex].push({\r\n // Section: item.ref.split('/')[0],\r\n // Offset: item.ref.split('/')[1]\r\n // });\r\n });\r\n\r\n // get gutters\r\n\r\n paper.project.getItems({ is_gutter: true }).forEach(function (item, index, array) {\r\n let areaIndex = [Number(item.areaIndex)];\r\n if (item.ref && item.ref.includes(\"GutterF\") && GutterF_in_areas[areaIndex] === 0) {\r\n if (item.material && item.material === \"Centenary Box Gutter\")\r\n item.fillColor = BoxGutterColour_html_in_areas[areaIndex];\r\n else item.fillColor = gutter_colour_html_in_areas[areaIndex];\r\n if (item.fillColor) item.fillColor.alpha = 0;\r\n } else if (item.ref && item.ref.includes(\"GutterB\") && GutterB_in_areas[areaIndex] === 0) {\r\n if (item.material && item.material === \"Centenary Box Gutter\")\r\n item.fillColor = BoxGutterColour_html_in_areas[areaIndex];\r\n else item.fillColor = gutter_colour_html_in_areas[areaIndex];\r\n if (item.fillColor) item.fillColor.alpha = 0;\r\n } else if (item.ref && item.ref.includes(\"GutterR\") && GutterR_in_areas[areaIndex] === 0) {\r\n if (item.material && item.material === \"Centenary Box Gutter\")\r\n item.fillColor = BoxGutterColour_html_in_areas[areaIndex];\r\n else item.fillColor = gutter_colour_html_in_areas[areaIndex];\r\n if (item.fillColor) item.fillColor.alpha = 0;\r\n } else if (item.ref && item.ref.includes(\"GutterL\") && GutterL_in_areas[areaIndex] === 0) {\r\n if (item.material && item.material === \"Centenary Box Gutter\")\r\n item.fillColor = BoxGutterColour_html_in_areas[areaIndex];\r\n else item.fillColor = gutter_colour_html_in_areas[areaIndex];\r\n if (item.fillColor) item.fillColor.alpha = 0;\r\n } else {\r\n if (item.material && item.material === \"Centenary Box Gutter\")\r\n item.fillColor = BoxGutterColour_html_in_areas[areaIndex];\r\n else item.fillColor = gutter_colour_html_in_areas[areaIndex];\r\n if (item.fillColor) item.fillColor.alpha = 1.0;\r\n }\r\n item.colour = GutterCol_in_areas[areaIndex];\r\n });\r\n\r\n // get attachmentsconst\r\n\r\n const ATTACHMENT_MESH_MODE = window.app.designer.designer3D[APP.ATTACHMENT_MESH_MODE];\r\n\r\n paper.project.getItems({ is_attachment: true }).forEach(function (item) {\r\n if (item.ref && item.ref.includes(\"GutterF\") && GutterF_in_areas[item.areaIndex] === 0) {\r\n item.fillColor.alpha = 0;\r\n }\r\n if (ATTACHMENT_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n paper.project.getItems({ typeQQ: \"attachment_label\" }).forEach(function (item) {\r\n if (ATTACHMENT_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n\r\n let gutter_area_has_label = [];\r\n // get gutter labels\r\n let gutter_labels = paper.project.getItems({ typeQQ: \"gutter_label\" });\r\n // gutter_labels.forEach(function (item) {\r\n // let areaIndex = [Number(item.areaIndex)];\r\n // if (gutter_area_has_label[areaIndex] === true) {\r\n // item.visible = false;\r\n // return;\r\n // }\r\n // let label = GutterType_in_areas[areaIndex];\r\n // if (GutterSlottedGutter_in_areas[areaIndex] === 1) label = \" \" + label + \" Slotted\";\r\n // if (GutterGutterWithReturn_in_areas[areaIndex] === 1) label = \" \" + label + \" w/Return\";\r\n // if (label !== null && label != \"\" && !item.content.includes(\"Box Gutter\") && item.content.length > 5) {\r\n // item.content = label;\r\n // item.justification = 'center';\r\n // item.fillColor = new paper.Color(gutter_colour_html_contrasttext_in_areas[areaIndex]);\r\n // item.shadowColor = new paper.Color(gutter_colour_html_contrasttext_in_areas[areaIndex]===\"#000000\"?\"#F5F5F5\":\"#000000\");\r\n // item.shadowBlur = 5;\r\n // item.shadowOffset = new paper.Point(1, 1);\r\n // };\r\n // gutter_area_has_label[areaIndex] = true;\r\n // });\r\n\r\n const GUTTERS_AND_FLASHING_MESH_MODE = window.app.designer.designer3D[APP.GUTTERS_AND_FLASHING_MESH_MODE];\r\n\r\n gutter_labels.forEach(function (item) {\r\n if (GUTTERS_AND_FLASHING_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n paper.project.getItems({ typeQQ: \"gutter\" }).forEach(function (item) {\r\n if (GUTTERS_AND_FLASHING_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n paper.project.getItems({ is_gutter: true }).forEach(function (item) {\r\n if (GUTTERS_AND_FLASHING_MESH_MODE === \"Hidden\") item.visible = false;\r\n else if (GUTTERS_AND_FLASHING_MESH_MODE === \"Mesh\" && !item.strokeColor) item.visible = false;\r\n else if (GUTTERS_AND_FLASHING_MESH_MODE === \"Mesh\" && item.strokeColor) item.visible = false;\r\n else item.visible = true;\r\n });\r\n }\r\n // return skylights;\r\n}\r\n\r\nexport function UpdateBeams(show_engineering = true, skip = 0) {\r\n if (window.skipUpdateBeams && window.skipUpdateBeams > 0) {\r\n window.skipUpdateBeams--;\r\n return;\r\n }\r\n window.skipUpdateBeams = skip;\r\n\r\n if (window.svg) {\r\n //\r\n\r\n let roofsheet_colour_in_areas = GetSpecAllAreas(\r\n BASIC_SPECS_SECTIONS.ROOF_SHEETING,\r\n \"RoofSheetColour\",\r\n \"Classic Cream\"\r\n );\r\n let roofrolling_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.ROOF_SHEETING, \"ReverseRoll\", false);\r\n let RoofColour_html_contrasttext_in_areas = [];\r\n let RoofColour_html_shadow_in_areas = [];\r\n roofsheet_colour_in_areas.forEach(function (value, index, array) {\r\n let reverse = roofrolling_in_areas[index];\r\n let side = 1;\r\n if (reverse) side = 0;\r\n else if (value.includes(\"/\") && !value.includes(\"/Grey\")) side = 0;\r\n\r\n array[index] = GetHTMLColour(value)[side];\r\n RoofColour_html_contrasttext_in_areas[index] = reverse ? \"#000000\" : GetHTMLColour(value)[2];\r\n RoofColour_html_shadow_in_areas[index] = \"black\";\r\n\r\n let colour = tinycolor(RoofColour_html_contrasttext_in_areas[index]);\r\n if (colour.isDark()) RoofColour_html_shadow_in_areas[index] = \"white\";\r\n else RoofColour_html_shadow_in_areas[index] = \"black\";\r\n });\r\n\r\n let BeamCol_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol1\", \"Classic Cream\");\r\n let BeamCol_html_in_areas = [...BeamCol_in_areas];\r\n BeamCol_html_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n });\r\n let BeamCol2_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol2\", \"Classic Cream\");\r\n let BeamCol2_html_in_areas = [...BeamCol2_in_areas];\r\n BeamCol2_html_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n });\r\n let BeamCol3_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol3\", \"Classic Cream\");\r\n let BeamCol3_html_in_areas = [...BeamCol3_in_areas];\r\n BeamCol3_html_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n });\r\n let BeamCol4_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamCol4\", \"Classic Cream\");\r\n let BeamCol4_html_in_areas = [...BeamCol4_in_areas];\r\n BeamCol4_html_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n });\r\n let BeamType_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamType1\", \"\");\r\n let BeamType2_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamType2\", \"\");\r\n let BeamType3_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamType3\", \"\");\r\n let BeamType4_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"BeamType4\", \"\");\r\n let PurlinSpacing_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"PurlinSpacing\", \"\");\r\n\r\n let BeamMods_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMMODIFICATIONS, null, []);\r\n\r\n let beam_items = paper.project.getItems({\r\n typeQQ: \"beam\",\r\n });\r\n beam_items.push.apply(\r\n beam_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam1\",\r\n })\r\n );\r\n beam_items.push.apply(\r\n beam_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam2\",\r\n })\r\n );\r\n beam_items.push.apply(\r\n beam_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam3\",\r\n })\r\n );\r\n beam_items.push.apply(\r\n beam_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam4\",\r\n })\r\n );\r\n\r\n let toolopen = window.app.designer.designer3D[DRAWER_TOOLSET_EXPANDED];\r\n\r\n let show_eng = false;\r\n let deckMode = false;\r\n if (window?.job?.DesignParameters?.DeckMode) {\r\n deckMode = true;\r\n }\r\n\r\n const OVERSTRESS_FACTOR = 1.03;\r\n\r\n if (toolopen === BEAMS_AND_POSTS_TOOL) {\r\n let currentHashCode = GetShapeUpdateString(false, true);\r\n\r\n // console.log(\r\n // \"UpdateBeams\",\r\n // show_engineering,\r\n // currentHashCode,\r\n // window?.job?.QuoteParameters?.ENGINEERING?.engineeringHashCode\r\n // );\r\n\r\n if (\r\n window?.job?.QuoteParameters?.ENGINEERING?.engineeringHashCode &&\r\n window.job.QuoteParameters.ENGINEERING.engineeringHashCode === currentHashCode\r\n )\r\n show_eng = true;\r\n if (deckMode) show_eng = true;\r\n }\r\n\r\n for (let item of beam_items) {\r\n let areaIndex = item.areaIndex;\r\n\r\n let mod_colour = null;\r\n if (BeamMods_in_areas[areaIndex]) {\r\n BeamMods_in_areas[areaIndex].forEach((element) => {\r\n if (element.Ref === item.ref && element.Colour) {\r\n mod_colour = element.Colour;\r\n }\r\n });\r\n }\r\n\r\n if (mod_colour) item.fillColor = new paper.Color(GetHTMLColour(mod_colour)[1]);\r\n else if (item.typeQQ === \"beam1\") item.fillColor = new paper.Color(BeamCol_html_in_areas[areaIndex]);\r\n else if (item.typeQQ === \"beam2\") item.fillColor = new paper.Color(BeamCol2_html_in_areas[areaIndex]);\r\n else if (item.typeQQ === \"beam3\") item.fillColor = new paper.Color(BeamCol3_html_in_areas[areaIndex]);\r\n else if (item.typeQQ === \"beam4\") item.fillColor = new paper.Color(BeamCol4_html_in_areas[areaIndex]);\r\n else if (item.colour) item.fillColor = new paper.Color(GetHTMLColour(item.colour)[1]);\r\n\r\n if (show_engineering && show_eng) {\r\n if (deckMode) {\r\n let engineering = window?.job?.QuoteParameters?.ENGINEERING?.Data?.[0];\r\n\r\n let capacity = engineering?.BearerCapacity;\r\n if (item.typeQQ === \"beam2\") {\r\n capacity = engineering?.JoistCapacity;\r\n // item.engineering = calculateDeckBeamCapacity(\r\n // \"Joist\",\r\n // BeamType2_in_areas[item.areaIndex],\r\n // item.lengthQQ,\r\n // PurlinSpacing_in_areas[item.areaIndex]\r\n // );\r\n // capacity = item.engineering.capacity_max;\r\n }\r\n if (item?.eng_capacity) capacity = item.eng_capacity;\r\n if (!capacity || capacity > 1) item.fillColor = \"red\";\r\n else if (capacity > 0.9) item.fillColor = \"orange\";\r\n else item.fillColor = \"green\";\r\n } else {\r\n item.Engineering = GetEngineeringResult(item.nameQQ);\r\n if (item.Engineering) {\r\n let split = item.Engineering.split(\"=\");\r\n let capacity = Number(split[0]) / OVERSTRESS_FACTOR;\r\n if (capacity > 1) item.fillColor = \"red\";\r\n else if (capacity > 0.9) item.fillColor = \"orange\";\r\n else item.fillColor = \"green\";\r\n item.beam_capacity = capacity;\r\n paper.project.activeLayer.addChild(item);\r\n // if (capacity > 0.9) item.content += \" \" + (Number(split[0])).toFixed(2) + \" \" + split[1];\r\n // item.content += \" \" + Number(split[0]).toString(2) + split[1];\r\n // item.content += \" \" + Number(split[0]).toString(2) + split[1];\r\n }\r\n }\r\n }\r\n }\r\n for (let item of beam_items) {\r\n if (item?.beam_capacity > 1.0) {\r\n //ensure we show the red beams on top\r\n paper.project.activeLayer.addChild(item);\r\n }\r\n }\r\n\r\n if (show_engineering && show_eng) {\r\n //move bracket labels to top\r\n paper.project.getItems({ is_bracket_label: true }).forEach(function (item) {\r\n item.visible = true;\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n } else {\r\n //move bracket labels to top\r\n paper.project.getItems({ is_bracket_label: true }).forEach(function (item) {\r\n item.visible = false;\r\n });\r\n }\r\n //slats need to be on top of beams\r\n paper.project.getItems({ typeQQ: \"slat_panel\" }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n paper.project.getItems({ typeQQ: \"slat_label\" }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n\r\n let beam_label_items = paper.project.getItems({\r\n typeQQ: \"beam_label\",\r\n });\r\n beam_label_items.push.apply(\r\n beam_label_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam1_label\",\r\n })\r\n );\r\n beam_label_items.push.apply(\r\n beam_label_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam2_label\",\r\n })\r\n );\r\n beam_label_items.push.apply(\r\n beam_label_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam3_label\",\r\n })\r\n );\r\n beam_label_items.push.apply(\r\n beam_label_items,\r\n paper.project.getItems({\r\n typeQQ: \"beam4_label\",\r\n })\r\n );\r\n\r\n paper.project.getItems({ sel_type: \"downpipe\" }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n });\r\n\r\n //\r\n\r\n for (let item of beam_label_items) {\r\n let areaIndex = item.areaIndex;\r\n item.fillColor = new paper.Color(RoofColour_html_contrasttext_in_areas[areaIndex]);\r\n if (!item.content_original) item.content_original = item.content;\r\n\r\n if (show_engineering) {\r\n let current_content = item.content_original\r\n ? item.content_original.split(\"(\")\r\n : item.content\r\n ? item.content.split(\"(\")\r\n : \"\";\r\n\r\n let end_desc = item.content_original\r\n ? item.content_original.split(\")\")\r\n : item.content\r\n ? item.content.split(\")\")\r\n : \"\";\r\n if (end_desc.length > 1) end_desc = end_desc[1].trim();\r\n else end_desc = false;\r\n\r\n if (!current_content || current_content?.[0].length < 2) continue;\r\n\r\n item.content = current_content[0] ? current_content[0].trim() : \"\";\r\n // if (item.typeQQ === \"beam_label\") item.content = current_content[0];\r\n // if (item.typeQQ === \"beam1_label\") item.content = BeamType_in_areas[areaIndex];\r\n // if (item.typeQQ === \"beam2_label\") item.content = BeamType2_in_areas[areaIndex];\r\n // if (item.typeQQ === \"beam3_label\") item.content = BeamType3_in_areas[areaIndex];\r\n // if (item.typeQQ === \"beam4_label\") item.content = BeamType4_in_areas[areaIndex];\r\n\r\n // if (window?.app?.designer?.designer2D?.SHOW_BEAM_LENGTHS && item)\r\n if (current_content.length > 1 && window?.app?.designer?.designer2D?.SHOW_BEAM_LENGTHS)\r\n item.content += \" (\" + current_content[1];\r\n else if (end_desc) item.content += \" \" + end_desc;\r\n\r\n if (show_eng) {\r\n if (deckMode) {\r\n let engineering = window?.job?.QuoteParameters?.ENGINEERING?.Data?.[0];\r\n let capacity = engineering?.BearerCapacity;\r\n if (item.typeQQ === \"beam2_label\") capacity = engineering?.JoistCapacity;\r\n paper.project.getItems({ nameQQ: item.nameQQ }).forEach(function (_item) {\r\n if (_item?.eng_capacity) capacity = _item?.eng_capacity;\r\n });\r\n item.content += \" - \" + (capacity * 100).toFixed(1) + \"%\";\r\n } else {\r\n item.Engineering = GetEngineeringResult(item.nameQQ);\r\n if (item.Engineering && !item.content.includes(\"%\")) {\r\n let split = item.Engineering.split(\"=\");\r\n let capacity = Number(split[0]) / OVERSTRESS_FACTOR;\r\n if (capacity > 0.9 || capacity < 0)\r\n item.content += \" - \" + (capacity * 100).toFixed(1) + \"% \" + split[1];\r\n else if (capacity > 0) item.content += \" - \" + (capacity * 100).toFixed(1) + \"%\";\r\n\r\n if (window.debug && item.content && !item.content.startsWith(item.nameQQ))\r\n item.content = item.nameQQ + \" - \" + item.content;\r\n }\r\n\r\n // item.AttachmentBracketEngineering = GetAttachmentBracketEngineeringResult(item.nameQQ);\r\n //\r\n // if (item.AttachmentBracketEngineering && (window.debug || window.test)) {\r\n // let design_type = GetSpec(item.areaIndex, \"SHAPE\", \"DesignType\", \"Flat\");\r\n // let is_flat = true;\r\n // if (!design_type.includes(\"Flat\")) is_flat = false;\r\n // let depth = toNumber(GetSpec(item.areaIndex, \"SHAPE\", \"Depth\", -1));\r\n // let length = toNumber(GetSpec(item.areaIndex, \"SHAPE\", \"Length\", -1));\r\n\r\n // var pnt = item.position.add(new paper.Point(0, 0));\r\n // let x_pos = item.position.x - window.paper_origin.x;\r\n // let y_pos = Math.abs(item.position.y - window.paper_origin.y);\r\n // let is_flyover =\r\n // item.AttachmentBracketEngineering.type.includes(\"JUM\") ||\r\n // item.AttachmentBracketEngineering.type.includes(\"BK50\");\r\n\r\n // if (is_flyover) {\r\n // if (is_flat) {\r\n // if (y_pos > depth - 1000)\r\n // pnt = pnt.add(new paper.Point(200, is_flyover ? -300 : -500));\r\n // else if (x_pos < 1000) pnt = pnt.add(new paper.Point(is_flyover ? 100 : 200, 500));\r\n // else pnt = pnt.add(new paper.Point(is_flyover ? 800 : 1200, 500));\r\n // } else {\r\n // if (y_pos > depth - 1000)\r\n // pnt = pnt.add(new paper.Point(200, is_flyover ? -800 : -1000));\r\n // else if (x_pos < 1000) pnt = pnt.add(new paper.Point(is_flyover ? 100 : 200, 500));\r\n // else pnt = pnt.add(new paper.Point(is_flyover ? 800 : 880, 500));\r\n // }\r\n\r\n // var text = new paper.PointText(pnt);\r\n // text.justification = \"right\";\r\n // // if (y_pos > depth - 200 || y_pos < 1000) text.justification = \"center\";\r\n // // else if (x_pos < 200) text.justification = \"right\";\r\n // // else text.justification = \"left\";\r\n // text.fontSize = 60.4;\r\n\r\n // text.content =\r\n // \"*** \" +\r\n // item.AttachmentBracketEngineering.type +\r\n // \" Max (Fx) \" +\r\n // item.AttachmentBracketEngineering.max_shear_kn.toFixed(2) +\r\n // \"kN (Fy) \" +\r\n // item.AttachmentBracketEngineering.max_uplift_kn.toFixed(2) +\r\n // \"kN***\";\r\n\r\n // text.shadowColor = \"black\";\r\n // text.shadowBlur = 5;\r\n // text.shadowOffset = new paper.Point(0, 0);\r\n\r\n // let rect = new paper.Path.Rectangle(\r\n // pnt.x + 15,\r\n // pnt.y + 30,\r\n // -text.bounds.width - 30,\r\n // -text.bounds.height - 30\r\n // );\r\n\r\n // rect.fillColor = \"#ffefd5CC\";\r\n // rect.strokeWidth = 10;\r\n // rect.strokeColor = \"#ffa500\";\r\n // rect.rotate(item.rotation);\r\n\r\n // text.bringToFront();\r\n // // text.rotate(-90);\r\n // text.rotate(item.rotation);\r\n // }\r\n // }\r\n }\r\n }\r\n }\r\n\r\n paper.project.activeLayer.addChild(item);\r\n\r\n item.shadowColor = RoofColour_html_shadow_in_areas[areaIndex];\r\n item.shadowBlur = 5;\r\n item.shadowOffset = new paper.Point(0, 0);\r\n }\r\n\r\n let post_label_items = paper.project.getItems({\r\n is_post_label: true,\r\n });\r\n post_label_items.push.apply(\r\n post_label_items,\r\n paper.project.getItems({\r\n is_post: true,\r\n })\r\n );\r\n\r\n const SHOW_POST_DIMENSIONS = window?.app?.designer?.designer2D?.SHOW_POST_DIMENSIONS;\r\n\r\n paper.project.getItems({ typeQQ: \"dimension/post\" }).forEach(function (item) {\r\n item.visible = SHOW_POST_DIMENSIONS;\r\n });\r\n\r\n let PostCol_in_areas = GetSpecAllAreas(BASIC_SPECS_SECTIONS.BEAMS_AND_POSTS, \"PostCol\", \"Classic Cream\");\r\n\r\n let PostCol_html_in_areas = [...PostCol_in_areas];\r\n PostCol_html_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n });\r\n\r\n let post_label_added = [];\r\n\r\n for (let item of post_label_items) {\r\n let areaIndex = item.areaIndex;\r\n // let colour = tinycolor([areaIndex]);\r\n //\r\n item.fillColor = new paper.Color(RoofColour_html_contrasttext_in_areas[areaIndex]);\r\n item.shadowColor = new paper.Color(RoofColour_html_shadow_in_areas[areaIndex]);\r\n // item.shadowColor = colour.isLight()?\"black\":\"white\";\r\n item.shadowBlur = 5;\r\n item.shadowOffset = new paper.Point(0, 0);\r\n\r\n item.Engineering = GetEngineeringResult(item.nameQQ);\r\n\r\n let engineering_data = item.Engineering;\r\n if (item.eng_capacity) {\r\n engineering_data = item.eng_capacity + \"=\";\r\n }\r\n\r\n if (engineering_data && show_engineering && show_eng) {\r\n if (item?.is_post_label && item?.content) {\r\n item.content = item.nameQQ;\r\n }\r\n\r\n if (item.is_post && item.hasFill() && !item?.content && !item?._content) {\r\n if (item.children && item.children.length > 0 && item.children[0]?.content) {\r\n item.fillColor = new paper.Color(RoofColour_html_contrasttext_in_areas[areaIndex]);\r\n item.shadowColor = new paper.Color(RoofColour_html_shadow_in_areas[areaIndex]);\r\n // item.shadowColor = colour.isLight()?\"black\":\"white\";\r\n item.shadowBlur = 5;\r\n item.shadowOffset = new paper.Point(0, 0);\r\n } else {\r\n item.fillColor = new paper.Color(PostCol_html_in_areas[areaIndex]);\r\n }\r\n }\r\n\r\n if (item.content && item.content.includes(\"%\")) {\r\n } else if (engineering_data) {\r\n let split = engineering_data.split(\"=\");\r\n let capacity = Number(split[0]) / OVERSTRESS_FACTOR;\r\n if (capacity > 1) {\r\n if (item.is_post_label) item.content += \" - \" + (capacity * 100).toFixed(1) + \"% \" + split[1];\r\n if (item.is_post_label) item.fillColor = new paper.Color(\"#C52f12\");\r\n if (item.hasStroke()) {\r\n item.strokeWidth = 8;\r\n item.strokeColor = new paper.Color(\"#882f12\");\r\n // item.strokeColor = new paper.Color(\"#333333\");\r\n }\r\n if (item.is_post && item.hasFill() && item.nameQQ && item.ref) {\r\n var myCircle = new paper.Path.Circle(item.position, 120);\r\n myCircle.fillColor = \"#C52f1233\";\r\n myCircle.strokeWidth = 25;\r\n myCircle.strokeColor = \"#C52f12\";\r\n // item.strokeColor = new paper.Color(\"#333333\");\r\n }\r\n } else if (capacity > 0.9) {\r\n if (item.is_post_label) item.content += \" - \" + (capacity * 100).toFixed(1) + \"% \" + split[1];\r\n if (item.is_post_label) item.fillColor = new paper.Color(\"orange\");\r\n if (item.hasStroke()) {\r\n item.strokeWidth = 8;\r\n item.strokeColor = new paper.Color(\"orange\");\r\n // item.strokeColor = new paper.Color(\"#333333\");\r\n }\r\n } else if (capacity > 0) {\r\n if (item.is_post_label) item.content += \" - \" + (capacity * 100).toFixed(1) + \"%\";\r\n if (item.is_post_label) item.fillColor = new paper.Color(\"green\");\r\n if (item.hasStroke()) {\r\n item.strokeWidth = 8;\r\n item.strokeColor = new paper.Color(\"#116611\");\r\n // item.strokeColor = new paper.Color(\"#333333\");\r\n }\r\n }\r\n\r\n paper.project.activeLayer.addChild(item);\r\n\r\n if (deckMode && capacity > 0 && !post_label_added.includes(item.nameQQ)) {\r\n let capacity = Number(split[0]);\r\n post_label_added.push(item.nameQQ);\r\n\r\n let offset = 200;\r\n if (item.is_post && item.add_post_index !== undefined) {\r\n offset = 300;\r\n }\r\n\r\n var pnt = item.position.add(new paper.Point(0, -offset));\r\n var text = new paper.PointText(pnt);\r\n text.justification = \"center\";\r\n text.fontSize = 70.4;\r\n text.content = item.nameQQ + \"\\n\" + (capacity * 100).toFixed(1) + \"% \";\r\n\r\n if (item.is_post && item.add_post_index !== undefined) {\r\n text.content = \"*ADDED*\\n\" + text.content;\r\n }\r\n\r\n text.shadowColor = \"white\";\r\n text.shadowBlur = 5;\r\n text.shadowOffset = new paper.Point(0, 0);\r\n\r\n let rect = new paper.Path.Rectangle(\r\n pnt.x - text.bounds.width / 2,\r\n pnt.y - text.bounds.height / 2,\r\n text.bounds.width + 20,\r\n text.bounds.height + 20\r\n );\r\n rect.fillColor = \"#eeeeeeCC\";\r\n rect.strokeWidth = 0;\r\n rect.strokeColor = \"#eeeeeeCC\";\r\n text.bringToFront();\r\n\r\n if (capacity > 1) {\r\n rect.position.y += 40;\r\n rect.fillColor = \"#eeaaaaCC\";\r\n rect.strokeWidth = 2;\r\n rect.strokeColor = \"#882f12\";\r\n text.fillColor = \"#882f12\";\r\n text.fontWeight = \"600\";\r\n // if (item.hasStroke()) {\r\n // item.strokeWidth = 8;\r\n // item.strokeColor = new paper.Color(\"#882f12\");\r\n // }\r\n // item.fillColor = new paper.Color(\"#882f12\");\r\n } else if (capacity > 0.9) {\r\n text.fillColor = \"#a66b00\";\r\n text.fontWeight = \"600\";\r\n // item.fillColor = \"#a66b00\";\r\n } else {\r\n text.fillColor = \"green\";\r\n text.fontWeight = \"400\";\r\n // item.fillColor = \"green\";\r\n }\r\n }\r\n }\r\n }\r\n if (item.is_post_label) {\r\n paper.project.activeLayer.addChild(item);\r\n\r\n let colour = tinycolor(RoofColour_html_shadow_in_areas[areaIndex]);\r\n item.shadowColor = colour.isLight() ? \"black\" : \"white\";\r\n item.shadowBlur = 5;\r\n item.shadowOffset = new paper.Point(0, 0);\r\n let pnt = item.position;\r\n\r\n let rect = new paper.Path.Rectangle(\r\n pnt.x - item.bounds.width / 2 - 10,\r\n pnt.y - item.bounds.height / 2 - 30,\r\n item.bounds.width + 20,\r\n item.bounds.height + 20\r\n );\r\n\r\n // let rect = new paper.Path.Rectangle(pnt.x, pnt.y, text.bounds.width, text.bounds.height);\r\n\r\n rect.fillColor = \"#eeeeeeCC\";\r\n rect.strokeWidth = 0;\r\n rect.strokeColor = \"#eeeeeeCC\";\r\n item.bringToFront();\r\n\r\n // if (capacity > 1) {\r\n // rect.position.y += 40;\r\n // rect.fillColor = \"#eeaaaaCC\";\r\n // rect.strokeWidth = 2;\r\n // rect.strokeColor = \"#882f12\";\r\n // text.fillColor = \"#882f12\";\r\n // text.fontWeight = \"600\";\r\n // if (item.hasStroke()) {\r\n // item.strokeWidth = 8;\r\n // item.strokeColor = new paper.Color(\"#882f12\");\r\n // }\r\n // item.fillColor = new paper.Color(\"#882f12\");\r\n // } else if (capacity > 0.9) {\r\n // text.fillColor = \"#a66b00\";\r\n // text.fontWeight = \"600\";\r\n // // text.content = item.nameQQ + \" - \" + (capacity * 100).toFixed(1) + \"% \" + split[1];\r\n // item.fillColor = \"#a66b00\";\r\n // } else {\r\n // text.fillColor = \"green\";\r\n // text.fontWeight = \"400\";\r\n // // text.content = item.nameQQ + \" - \" + (capacity * 100).toFixed(1) + \"%\";\r\n // item.fillColor = \"green\";\r\n // }\r\n }\r\n }\r\n\r\n // floyver bracket labelling for enginering\r\n\r\n // let deckMode = window?.job?.DesignParameters?.DeckMode;\r\n if (show_engineering && show_eng) {\r\n // if (deckMode) {\r\n // let posts = paper.project.getItems({\r\n // is_post: true,\r\n // })\r\n\r\n // for (let item of posts) {\r\n // }\r\n // }\r\n\r\n let rafter_brackets = paper.project.getItems({\r\n typeQQ: \"riser_bracket\",\r\n });\r\n\r\n let bracket_ordered = [];\r\n for (let item of rafter_brackets) {\r\n if ((item.segments && item.segments.length > 2) || item?.bkt_type?.length > 1)\r\n bracket_ordered.push(item);\r\n }\r\n for (let item of rafter_brackets) {\r\n if ((item.segments && item.segments.length > 2) || item?.bkt_type?.length > 1) {\r\n } else {\r\n bracket_ordered.push(item);\r\n }\r\n }\r\n\r\n let bracket_results_added = [];\r\n\r\n for (let item of bracket_ordered) {\r\n item.Engineering = GetEngineeringResult(item.nameQQ);\r\n //\r\n if (item.Engineering && !bracket_results_added.includes(item.nameQQ)) {\r\n bracket_results_added.push(item.nameQQ);\r\n let areaIndex = item.areaIndex;\r\n let split = item.Engineering.split(\"=\");\r\n let capacity = Number(split[0]) / OVERSTRESS_FACTOR;\r\n\r\n let is_flyover = item.nameQQ.includes(\"JMB\") || item.nameQQ.includes(\"BK50\");\r\n\r\n if (is_flyover) {\r\n let depth = toNumber(GetSpec(item.areaIndex, \"SHAPE\", \"Depth\", -1));\r\n let length = toNumber(GetSpec(item.areaIndex, \"SHAPE\", \"Length\", -1));\r\n\r\n var pnt = item.position.add(new paper.Point(0, 0));\r\n let x_pos = item.position.x - window.paper_origin.x;\r\n let y_pos = Math.abs(item.position.y - window.paper_origin.y);\r\n if (y_pos > depth - 1000)\r\n pnt = pnt.add(new paper.Point(is_flyover ? 0 : 50, is_flyover ? -125 : -250));\r\n else if (x_pos < 1000) pnt = pnt.add(new paper.Point(-200, 125));\r\n else pnt = pnt.add(new paper.Point(200, 125));\r\n var text = new paper.PointText(pnt);\r\n text.justification = \"center\";\r\n // if (y_pos > depth - 200 || y_pos < 1000) text.justification = \"center\";\r\n // else if (x_pos < 200) text.justification = \"right\";\r\n // else text.justification = \"left\";\r\n text.fontSize = 90.4;\r\n\r\n if (capacity > 1.0) {\r\n text.content =\r\n item.nameQQ +\r\n \"\\n\" +\r\n (capacity * 100).toFixed(1) +\r\n \"% \" +\r\n split[1].replace(\"Area Load \", \"\");\r\n } else {\r\n if (y_pos > depth - 1000) {\r\n text.content = (capacity * 100).toFixed(1) + \"%\";\r\n text.fontSize = 80.4;\r\n } else {\r\n text.content = (capacity * 100).toFixed(1) + \"%\";\r\n text.fontSize = 80.4;\r\n }\r\n }\r\n\r\n let colour = tinycolor(RoofColour_html_shadow_in_areas[areaIndex]);\r\n text.shadowColor = colour.isLight() ? \"black\" : \"white\";\r\n text.shadowBlur = 5;\r\n text.shadowOffset = new paper.Point(0, 0);\r\n\r\n let rect = new paper.Path.Rectangle(\r\n pnt.x - text.bounds.width / 2 - 10,\r\n pnt.y - text.bounds.height / 2 - 30,\r\n text.bounds.width + 20,\r\n text.bounds.height + 20\r\n );\r\n\r\n // let rect = new paper.Path.Rectangle(pnt.x, pnt.y, text.bounds.width, text.bounds.height);\r\n\r\n rect.fillColor = \"#eeeeeeCC\";\r\n rect.strokeWidth = 0;\r\n rect.strokeColor = \"#eeeeeeCC\";\r\n text.bringToFront();\r\n\r\n if (capacity > 1) {\r\n rect.position.y += 40;\r\n rect.fillColor = \"#eeaaaaCC\";\r\n rect.strokeWidth = 2;\r\n rect.strokeColor = \"#882f12\";\r\n text.fillColor = \"#882f12\";\r\n text.fontWeight = \"600\";\r\n if (item.hasStroke()) {\r\n item.strokeWidth = 8;\r\n item.strokeColor = new paper.Color(\"#882f12\");\r\n }\r\n item.fillColor = new paper.Color(\"#882f12\");\r\n } else if (capacity > 0.9) {\r\n text.fillColor = \"#a66b00\";\r\n text.fontWeight = \"600\";\r\n // text.content = item.nameQQ + \" - \" + (capacity * 100).toFixed(1) + \"% \" + split[1];\r\n item.fillColor = \"#a66b00\";\r\n } else {\r\n text.fillColor = \"green\";\r\n text.fontWeight = \"400\";\r\n // text.content = item.nameQQ + \" - \" + (capacity * 100).toFixed(1) + \"%\";\r\n item.fillColor = \"green\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const BEAM_AND_POST_MESH_MODE = window.app.designer.designer3D[APP.BEAM_AND_POST_MESH_MODE];\r\n\r\n beam_label_items.forEach(function (item) {\r\n if (BEAM_AND_POST_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n post_label_items.forEach(function (item) {\r\n if (BEAM_AND_POST_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n\r\n beam_items.forEach(function (item) {\r\n if (BEAM_AND_POST_MESH_MODE === \"Hidden\") item.visible = false;\r\n else if (BEAM_AND_POST_MESH_MODE === \"Mesh\" && !item.strokeColor) item.visible = false;\r\n else item.visible = true;\r\n });\r\n\r\n beam_items.forEach(function (item) {\r\n if (BEAM_AND_POST_MESH_MODE === \"Hidden\") item.visible = false;\r\n else if (BEAM_AND_POST_MESH_MODE === \"Mesh\" && !item.strokeColor) item.visible = false;\r\n else item.visible = true;\r\n });\r\n\r\n const FOOTINGS_MESH_MODE = window.app.designer.designer3D[APP.FOOTINGS_MESH_MODE];\r\n\r\n //mesh footings\r\n paper.project.getItems({ is_footing: true }).forEach(function (item) {\r\n if (FOOTINGS_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n\r\n paper.project.getItems({ typeQQ: \"post\" }).forEach(function (item) {\r\n if (FOOTINGS_MESH_MODE === \"Hidden\") item.visible = false;\r\n else item.visible = true;\r\n });\r\n\r\n //bring text to front\r\n paper.project.getItems({ class: paper.TextItem }).forEach(function (item) {\r\n paper.project.activeLayer.addChild(item);\r\n item.bringToFront();\r\n });\r\n\r\n // paper.project.getItems({ is_roofsheet: true }).forEach(function (item, index, array) {\r\n // item.fillColor = roofsheet_colour_in_areas_HTML[item.areaIndex];\r\n // if (ROOFSHEET__MESH_MODE !== \"Render\") item.visible = false;\r\n // else item.visible = true;\r\n // });\r\n\r\n // // get roofsheet labels\r\n // paper.project.getItems({ typeQQ: \"sheet_label\" }).forEach(function (item) {\r\n // item.fontWeight = 600;\r\n // if (ROOFSHEET__MESH_MODE === \"Hidden\") item.visible = false;\r\n // else item.visible = true;\r\n // });\r\n }\r\n}\r\n\r\nexport function UpdateDimensions() {\r\n if (window.svg) {\r\n let dimension_items = paper.project.getItems({\r\n is_dimension: true,\r\n });\r\n\r\n for (let item of dimension_items) {\r\n if (!item.ref && item.content) {\r\n item.fillColor = new paper.Color(\"#888888\");\r\n }\r\n }\r\n }\r\n}\r\n// item.is_dimension\r\n\r\nexport function UpdateAllSVGMaterials() {\r\n UpdateRoofSheets();\r\n UpdateBeams();\r\n UpdateDimensions();\r\n UpdateAllText(window?.app?.designer?.designer2D?.FONT_SIZE);\r\n UpdateWarningElements();\r\n}\r\n\r\nfunction UpdateWarningElements() {\r\n paper.project.getItems({ is_warning_element: true }).forEach(function (item) {\r\n item.bringToFront();\r\n });\r\n}\r\n\r\nfunction UpdateJobFromSVG() {\r\n if (window?.dispatch && window?.job?.DesignParameters?.DeckMode) {\r\n let engineeringResult = EngineerDeckv2(window.job.AreaSpecifications[0][\"BEAMS_AND_POSTS\"]);\r\n window.dispatch({\r\n type: \"UPDATE_ENGINEERING\",\r\n value: engineeringResult,\r\n areaIndex: 0,\r\n });\r\n }\r\n}\r\n\r\nexport function GetMetaData() {\r\n let attachments = [];\r\n paper.project.getItems({ typeQQ: \"attachment\" }).forEach(function (item) {\r\n attachments.push({\r\n ref: item.ref,\r\n ref2: item.ref2,\r\n length: item?.lengthQQ !== undefined ? item?.lengthQQ : item?.len,\r\n area: item?.areaIndex !== undefined ? item?.areaIndex : item?.area,\r\n });\r\n });\r\n\r\n let area_data = {};\r\n paper.project.getItems({ is_beam: true }).forEach(function (item) {\r\n let area_num = item?.areaIndex !== undefined ? item?.areaIndex : item?.area;\r\n if (area_num === \"undefined\") area_num = -1;\r\n if (!area_data[area_num]) area_data[area_num] = {};\r\n let num = 0;\r\n if (area_data?.[area_num]?.num_beam_to_wall_attachments)\r\n num = area_data?.[area_num]?.num_beam_to_wall_attachments;\r\n if (item?.E1 === \"W\") {\r\n num++;\r\n area_data[area_num].num_beam_to_wall_attachments = num;\r\n }\r\n if (item?.E2 === \"W\") {\r\n num++;\r\n area_data[area_num].num_beam_to_wall_attachments = num;\r\n }\r\n });\r\n\r\n window.drawing_svg_meta = {\r\n attachments: attachments,\r\n area_data: area_data,\r\n };\r\n}\r\n\r\nexport function UpdateAllText(factor) {\r\n if (window.svg) {\r\n let last_factor = window.base_font_factor ? window.base_font_factor : 100;\r\n let change = factor / last_factor;\r\n paper.project.activeLayer.children.forEach(function (item) {\r\n if (item.fontSize) {\r\n item.fontSize = item.fontSize * change;\r\n } else item.content = item.fontSize;\r\n if (item.children) {\r\n item.children.forEach(function (item_child) {\r\n if (item_child.fontSize) {\r\n item_child.fontSize = item_child.fontSize * change;\r\n // item.content = replaceContent(item.content);\r\n } else item_child.content = item_child.fontSize;\r\n if (item_child.content) item_child.content = replaceContent(item_child.content);\r\n // item.fontWeight = 600;\r\n });\r\n }\r\n if (item.content) item.content = replaceContent(item.content);\r\n // item.fontWeight = 600;\r\n });\r\n\r\n window.base_font_factor = factor;\r\n\r\n paper.project.getItems({ class: paper.TextItem }).forEach(function (item) {\r\n item.bringToFront();\r\n });\r\n }\r\n}\r\n\r\nfunction replaceContent(input) {\r\n if (!input) return \"\";\r\n let output = input;\r\n if (window.LYSAGHT) {\r\n output = output.replace(\"BK34D\", \"UCE\");\r\n output = output.replace(\"BK34S\", \"UCE\");\r\n output = output.replace(\"BK34\", \"UCE\");\r\n output = output.replace(\"BK50\", \"JMB\");\r\n output = output.replace(\"BK50\", \"JMB\");\r\n output = output.replace(\"BK25\", \"UCL\");\r\n }\r\n return output;\r\n}\r\n\r\nfunction UpdateItemsInDrawing(\r\n name_string_to_match,\r\n secondard_parameter_to_match = null,\r\n section,\r\n parameter,\r\n default_value = \"\"\r\n) {\r\n if (window.svg) {\r\n let values_in_areas = GetSpecAllAreas(section, parameter, default_value);\r\n\r\n if (parameter === \"RoofSheetColour\")\r\n values_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[1];\r\n });\r\n\r\n for (let key in window.svg.children) {\r\n if (key.startsWith(name_string_to_match)) {\r\n let item = window.svg.children[key];\r\n\r\n let areaIndex = item.areaIndex ? item.areaIndex : 0;\r\n item.fillColor = new paper.Color(values_in_areas[areaIndex]);\r\n // item.fillColor.alpha = 1;\r\n // new_item.children[key].onMouseEnter = function (event) {\r\n // // document.querySelector(\".QQ2DCanvas-qq2dCanvasContainer-578\").style.cursor = \"pointer\";\r\n //\r\n // }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function GetSpec(areaIndex, Section, Parameter, default_value) {\r\n if (!window.job) return default_value;\r\n if (window.job) {\r\n if (\r\n window.job.AreaSpecifications &&\r\n window.job.AreaSpecifications[areaIndex] &&\r\n window.job.AreaSpecifications[areaIndex][Section] &&\r\n window.job.AreaSpecifications[areaIndex][Section][Parameter]\r\n ) {\r\n return window.job.AreaSpecifications[areaIndex][Section][Parameter];\r\n }\r\n }\r\n return default_value;\r\n}\r\n\r\nexport function GetSpecAllAreasAlpha(Section, Parameter, default_value) {\r\n let alpha_in_areas = GetSpecAllAreas(Section, Parameter, default_value);\r\n alpha_in_areas.forEach(function (value, index, array) {\r\n array[index] = COMMON.GetColourAlpha(value);\r\n });\r\n return alpha_in_areas;\r\n}\r\nexport function GetSpecAllAreasColourHTML(Section, Parameter, default_value, underside = false) {\r\n let colour_in_areas = GetSpecAllAreas(Section, Parameter, default_value);\r\n colour_in_areas.forEach(function (value, index, array) {\r\n array[index] = GetHTMLColour(value)[underside ? 1 : 0];\r\n });\r\n return colour_in_areas;\r\n}\r\n\r\nfunction GetEngineeringResult(BeamorPostName) {\r\n if (!BeamorPostName) return null;\r\n //\r\n //\r\n let EngineeringResults = COMMON.get(window.job, \"QuoteParameters.ENGINEERING.EngineeringResults\");\r\n let engineeringHashCode = COMMON.get(window.job, \"QuoteParameters.ENGINEERING.engineeringHashCode\");\r\n if (!EngineeringResults) return null;\r\n if (!engineeringHashCode) return null;\r\n\r\n if (EngineeringResults.BeamResults) {\r\n for (var beam_names in EngineeringResults.BeamResults) {\r\n if (beam_names.startsWith(BeamorPostName + \",\") || beam_names.includes(\",\" + BeamorPostName + \",\"))\r\n return EngineeringResults.BeamResults[beam_names];\r\n }\r\n }\r\n if (EngineeringResults.ColumnResults) {\r\n for (var col_name in EngineeringResults.ColumnResults) {\r\n if (col_name === BeamorPostName) return EngineeringResults.ColumnResults[col_name];\r\n }\r\n }\r\n //\r\n if (EngineeringResults.AttachmentBracketResults) {\r\n for (var bracket_name in EngineeringResults.AttachmentBracketResults) {\r\n if (window.LYSAGHT) {\r\n let name = bracket_name.replace(\"BK50\", \"JMB\");\r\n name = name.replace(\"BK34D\", \"UCE\");\r\n name = name.replace(\"BK34S\", \"UCE\");\r\n name = name.replace(\"BK34\", \"UCE\");\r\n if (name === BeamorPostName || bracket_name === BeamorPostName)\r\n return EngineeringResults.AttachmentBracketResults[bracket_name];\r\n } else if (bracket_name === BeamorPostName)\r\n return EngineeringResults.AttachmentBracketResults[bracket_name];\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction GetAttachmentBracketEngineeringResult(BeamName) {\r\n if (!BeamName) return null;\r\n //\r\n //\r\n let EngineeringResults = COMMON.get(window.job, \"QuoteParameters.ENGINEERING.EngineeringResults\");\r\n let engineeringHashCode = COMMON.get(window.job, \"QuoteParameters.ENGINEERING.engineeringHashCode\");\r\n if (!EngineeringResults) return null;\r\n if (!engineeringHashCode) return null;\r\n\r\n if (EngineeringResults.BeamAttachmentBracketResults) {\r\n for (var beam_names in EngineeringResults.BeamAttachmentBracketResults) {\r\n if (\r\n beam_names === BeamName ||\r\n beam_names.startsWith(BeamName + \",\") ||\r\n beam_names.includes(\",\" + BeamName + \",\")\r\n )\r\n return EngineeringResults.BeamAttachmentBracketResults[beam_names];\r\n }\r\n }\r\n return null;\r\n}\r\n","import React from \"react\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\n\r\nexport const StyledTabs = withStyles((theme) => ({\r\n indicator: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n backgroundColor: \"transparent\",\r\n bottom: \"inherit\",\r\n height: \"4px\",\r\n borderRadius: \"2px\",\r\n \"& > span\": {\r\n maxWidth: 80,\r\n width: \"100%\",\r\n backgroundColor: theme.brand.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n },\r\n },\r\n fixed: {\r\n paddingBottom: \"10px\",\r\n },\r\n}))((props) => }} />);\r\n\r\nexport const StyledTab = withStyles((theme) => ({\r\n root: {\r\n textTransform: theme.brand.FIELDERS ? \"none\" : \"uppercase\",\r\n color: theme.brand.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n // fontWeight: 600,\r\n // font: \"12pt \" + (window.FIELDERS?Palette.Fielders.FontFamily:Palette.Lysaght.FontFamily),\r\n font: theme.brand.FIELDERS\r\n ? \"600 12pt \" + theme.typography.fontFamily\r\n : \"600 11pt \" + theme.typography.fontFamily,\r\n marginRight: \"10px\",\r\n minWidth: \"100px\",\r\n \"&:focus\": {\r\n opacity: 1,\r\n },\r\n },\r\n selected: {\r\n backgroundColor: \"transparent !important\",\r\n boxShadow: \"none !important\",\r\n },\r\n}))((props) => );\r\n\r\nexport const SectionHeader = withStyles((theme) => ({\r\n sectionHeader: {\r\n font: (theme.brand.FIELDERS ? \"14pt \" : \"11pt \") + theme.typography.fontFamily,\r\n fontWeight: theme.brand.FIELDERS ? \"400\" : \"600\",\r\n textTransform: theme.brand.FIELDERS ? \"none\" : \"uppercase\",\r\n color: Palette.Control.DarkGrey,\r\n verticalAlign: \"text-top\",\r\n // width: '180px',\r\n paddingTop: \"16px\",\r\n paddingBottom: \"4px\",\r\n whiteSpace: \"nowrap\",\r\n textAlign: \"start\",\r\n paddingLeft: \"7px\",\r\n },\r\n}))((props) => (\r\n \r\n {props.children}\r\n
\r\n));\r\n\r\nexport const SectionSubHeader = withStyles((theme) => ({\r\n sectionSubHeader: {\r\n font: \"12pt \" + theme.typography.fontFamily,\r\n fontWeight: \"300\",\r\n color: Palette.Control.DarkGrey,\r\n verticalAlign: \"text-top\",\r\n // width: '180px',\r\n paddingTop: \"8px\",\r\n paddingBottom: \"4px\",\r\n whiteSpace: \"nowrap\",\r\n textAlign: \"start\",\r\n paddingLeft: \"7px\",\r\n },\r\n}))((props) => (\r\n \r\n {props.children}\r\n
\r\n));\r\n\r\nexport const ElementHeader = withStyles((theme) => ({\r\n sectionHeader: {\r\n font: \"14px \" + theme.typography.fontFamily,\r\n fontWeight: \"400\",\r\n color: Palette.Control.DarkGrey,\r\n verticalAlign: \"text-top\",\r\n // width: '180px',\r\n paddingTop: \"8px\",\r\n paddingBottom: \"4px\",\r\n whiteSpace: \"nowrap\",\r\n textAlign: \"start\",\r\n paddingLeft: \"7px\",\r\n },\r\n}))((props) => (\r\n \r\n {props.children}\r\n
\r\n));\r\n\r\nexport const SectionContainer = withStyles((theme) => ({\r\n sectionContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n}))((props) => (\r\n \r\n {props.children}\r\n
\r\n));\r\n\r\nexport const SectionRow = withStyles((theme) => ({\r\n sectionRow: {\r\n font: \"18pt \" + theme.typography.fontFamily,\r\n fontWeight: \"400\",\r\n color: Palette.Control.DarkGrey,\r\n verticalAlign: \"text-top\",\r\n display: \"flex\",\r\n paddingBottom: \"5px\",\r\n flexDirection: \"row\",\r\n alignSelf: \"flex-start\",\r\n width: \"100%\",\r\n flexFlow: \"wrap\",\r\n },\r\n}))((props) => (\r\n \r\n {props.children}\r\n
\r\n));\r\n\r\nexport const SectionColumn = withStyles((theme) => ({\r\n sectionColumn: {\r\n font: \"18pt \" + theme.typography.fontFamily,\r\n fontWeight: \"400\",\r\n color: Palette.Control.DarkGrey,\r\n verticalAlign: \"text-top\",\r\n display: \"flex\",\r\n paddingBottom: \"5px\",\r\n flexDirection: \"column\",\r\n alignSelf: \"flex-start\",\r\n width: \"100%\",\r\n flexFlow: \"wrap\",\r\n flex: 1,\r\n },\r\n}))((props) => (\r\n \r\n {props.children}\r\n
\r\n));\r\n\r\nexport const HelperText = withStyles((theme) => ({\r\n helperText: {\r\n flex: \"1\",\r\n font: \"13px \" + theme.typography.fontFamily,\r\n color: Palette.Control.DarkGrey,\r\n textAlign: \"start\",\r\n padding: \"4px 0px 4px 10px\",\r\n whiteSpace: \"normal\",\r\n },\r\n}))((props) => (\r\n \r\n {props.children}\r\n
\r\n));\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: \"1\",\r\n margin: \"2px 2px 2px 8px\",\r\n padding: \"6px 0px 6px 0px\",\r\n textAlign: \"start\",\r\n },\r\n root_tight: {\r\n margin: \"2px 2px 0px 8px\",\r\n padding: \"6px 0px 4px 0px\",\r\n maxWidth: \"100%\",\r\n maxWidth: \"-webkit-fill-available\",\r\n maxWidth: \"-moz-available\",\r\n maxWidth: \"fill-available\",\r\n },\r\n root_extra_tight: {\r\n margin: \"0px 2px 0px 8px\",\r\n padding: \"2px 0px 0px 0px\",\r\n maxWidth: \"100%\",\r\n maxWidth: \"-webkit-fill-available\",\r\n maxWidth: \"-moz-available\",\r\n maxWidth: \"fill-available\",\r\n },\r\n label: {\r\n flex: \"1\",\r\n font: \"14px \" + theme.typography.fontFamily,\r\n fontWeight: theme.brand.FIELDERS ? \"700\" : \"200\",\r\n color: Palette.Control.DarkGrey,\r\n padding: \"6px 0px\",\r\n textAlign: \"start\",\r\n },\r\n label_tight: {\r\n font: \"13px \" + theme.typography.fontFamily,\r\n fontWeight: theme.brand.FIELDERS ? \"700\" : \"200\",\r\n padding: \"6px 0px 4px 0px\",\r\n maxWidth: \"100%\",\r\n maxWidth: \"-webkit-fill-available\",\r\n maxWidth: \"-moz-available\",\r\n maxWidth: \"fill-available\",\r\n },\r\n label_extra_tight: {\r\n font: \"12px \" + theme.typography.fontFamily,\r\n fontWeight: theme.brand.FIELDERS ? \"700\" : \"200\",\r\n padding: \"2px 0px 0px 0px\",\r\n maxWidth: \"100%\",\r\n maxWidth: \"-webkit-fill-available\",\r\n maxWidth: \"-moz-available\",\r\n maxWidth: \"fill-available\",\r\n },\r\n subtitle: {\r\n flex: \"1\",\r\n font: \"13px \" + theme.typography.fontFamily,\r\n fontWeight: theme.brand.FIELDERS ? \"400\" : \"200\",\r\n color: \"#6B8799\",\r\n textAlign: \"end\",\r\n padding: \"4px 0px\",\r\n },\r\n helperText: {\r\n flex: \"1\",\r\n font: \"13px \" + theme.typography.fontFamily,\r\n color: Palette.Control.DarkGrey,\r\n textAlign: \"start\",\r\n padding: \"4px 0px\",\r\n },\r\n errorText: {\r\n flex: \"1\",\r\n font: \"13px \" + theme.typography.fontFamily,\r\n color: Palette.Control.Error,\r\n textAlign: \"start\",\r\n padding: \"0px 0px\",\r\n verticalAlign: \"text-top\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n input: {\r\n padding: \"2px\",\r\n font: \"16px \" + theme.typography.fontFamily,\r\n fontWeight: theme.brand.FIELDERS ? \"400\" : \"200\",\r\n padding: \"10px 8px\",\r\n },\r\n input_tight: {\r\n padding: \"4px 0px 4px 8px\",\r\n },\r\n textField: {\r\n borderRadius: \"0px\",\r\n background: \"white\",\r\n border: \"1px solid #6B8799\",\r\n \"&:before\": {\r\n border: \"none\",\r\n },\r\n },\r\n notchedOutline: {\r\n \"&:focus\": {\r\n borderWidth: \"1px\",\r\n borderColor: \"#002D62 !important\",\r\n },\r\n },\r\n disabled: {\r\n backgroundColor: Palette.Control.LightGrey,\r\n },\r\n endAdornment: {\r\n paddingRight: \"6px\",\r\n font: \"16px \" + theme.typography.fontFamily,\r\n fontWeight: theme.brand.FIELDERS ? \"400\" : \"200\",\r\n color: \"#6B8799\",\r\n },\r\n}));\r\n\r\nexport default function BSL_ControlContainer(props) {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {(props.label !== undefined || props.optional) && (\r\n
\r\n
\r\n {props.label}\r\n
\r\n {props.optional && (\r\n
\r\n Optional\r\n
\r\n )}\r\n
\r\n )}\r\n {props.children}\r\n {(props.helperText || props.error) && (\r\n
\r\n {props.error && (\r\n
\r\n {\" \"}\r\n {props.error}\r\n
\r\n )}\r\n {props.helperText && (\r\n
\r\n {typeof props.helperText === \"function\" ? props.helperText() : props.helperText}\r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport { toNumber } from \"../components/Common\";\r\n\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport BSL_ControlContainer from \"./BSL_ControlContainer\";\r\nimport { Tooltip } from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n input: {\r\n padding: \"2px\",\r\n // font: \"16px 'Univers45', sans-serif\",\r\n marginTop: theme.brand.FIELDERS ? \"0px\" : \"2px\",\r\n font: theme.brand.FIELDERS\r\n ? \"200 14px \" + theme.typography.fontFamily\r\n : \"200 13px \" + theme.typography.fontFamily,\r\n padding: \"10px 8px\",\r\n minWidth: \"24px\",\r\n },\r\n input_tight: {\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n input_extra_tight: {\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n textField: {\r\n // root: {\r\n borderRadius: \"0px\",\r\n background: \"white\",\r\n border: theme.brand.FIELDERS ? \"1px solid \" + Palette.FieldersBlue : \"1px solid \" + Palette.Lysaght.DarkBlue,\r\n \"&:before\": {\r\n border: \"none\",\r\n },\r\n // }\r\n },\r\n notchedOutline: {\r\n \"&:focus\": {\r\n borderWidth: \"1px\",\r\n borderColor: theme.brand.FIELDERS\r\n ? Palette.FieldersBlue + \" !important\"\r\n : Palette.Lysaght.LightBlue + \" !important\",\r\n },\r\n },\r\n disabled: {\r\n backgroundColor: Palette.Control.LightGrey,\r\n },\r\n endAdornment: {\r\n paddingLeft: \"1px\",\r\n paddingRight: \"6px\",\r\n font: theme.brand.FIELDERS\r\n ? \"200 14px \" + theme.typography.fontFamily\r\n : \"200 13px \" + theme.typography.fontFamily,\r\n color: theme.brand.FIELDERS ? \"6B8799\" : Palette.Lysaght.DarkGrey,\r\n textShadow: \"none\",\r\n },\r\n startAdornment: {\r\n paddingLeft: \"6px\",\r\n paddingRight: \"1px\",\r\n font: theme.brand.FIELDERS\r\n ? \"200 14px \" + theme.typography.fontFamily\r\n : \"200 13px \" + theme.typography.fontFamily,\r\n color: theme.brand.FIELDERS ? \"6B8799\" : Palette.Lysaght.DarkGrey,\r\n textShadow: \"none\",\r\n },\r\n tooltip: {},\r\n}));\r\n\r\nconst BSL_ToolTip = withStyles((theme) => ({\r\n tooltip: {\r\n backgroundColor: Palette.Control.FieldersDarkBlue,\r\n color: \"white\",\r\n zIndex: 10000,\r\n whiteSpace: \"pre-line\",\r\n },\r\n arrow: {\r\n color: Palette.Control.FieldersDarkBlue,\r\n zIndex: 10000,\r\n },\r\n}))(Tooltip);\r\n\r\nexport default function BSL_TextInput(props) {\r\n const classes = useStyles();\r\n // const [escapePressed, setEscapePressed] = React.useState(false);\r\n const [loaded, setLoaded] = React.useState(false);\r\n const [displayValue, setDisplayValue] = React.useState(null);\r\n const inputRef = React.useRef(null);\r\n\r\n React.useEffect(() => {\r\n if (props.autoFocus) {\r\n if (props.selectAll) {\r\n inputRef.current.select();\r\n } else {\r\n inputRef.current.selectionStart = inputRef.current.value.length;\r\n inputRef.current.selectionEnd = inputRef.current.value.length;\r\n }\r\n }\r\n }, [loaded]);\r\n // React.useEffect(() => {\r\n // if (escapePressed) {\r\n // setEscapePressed(false);\r\n // }\r\n // }, [escapePressed]);// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\r\n if (!loaded && props.autoFocus) setLoaded(true);\r\n\r\n let tooltip = \"\";\r\n if (props.min !== null && props.min !== undefined) {\r\n tooltip += (tooltip === \"\" ? \"\" : \" \") + \"Min:\" + props.min;\r\n // props.label === \"Bonder Delivery Charge\" && (tooltip += \" (0 Will reset to the original cost for non-POA Suburbs/Postcodes)\"); // removed because we need to keep input components as generic KC 23/10/2023\r\n }\r\n if (props.max !== null && props.max !== undefined) tooltip += (tooltip === \"\" ? \"\" : \" \") + \"Max:\" + props.max;\r\n if (props.tooltip) tooltip += (tooltip === \"\" ? \"\" : \" \") + props.tooltip ? props.tooltip : \"\";\r\n\r\n if (props.label == \"Role Code\") {\r\n tooltip += \"\\n0: Dealer Standard\\n10: Dealer Admin\\n90: BBC Standard\\n91: BBC State Admin\\n99: BBC Super User\";\r\n }\r\n\r\n if (props.disabled && props.disabledTooltip) {\r\n tooltip = props.disabledTooltip ? props.disabledTooltip : tooltip;\r\n }\r\n\r\n let inputPropsStyle = props?.inputPropsStyle ? props.inputPropsStyle : {};\r\n\r\n // \r\n\r\n return (\r\n \r\n \r\n {props.startAdornment}\r\n ) : null,\r\n endAdornment: props.endAdornment ? (\r\n {props.endAdornment}
\r\n ) : null,\r\n }}\r\n onKeyPress={(e) => {\r\n if (e.key === \"Enter\" && !props.multiline) {\r\n let out = e;\r\n \r\n if (props.allCaps) {\r\n out = {};\r\n out.target = {};\r\n out.target.value = e.target.value.toUpperCase();\r\n }\r\n if (props.onEnter) props.onEnter(out);\r\n else e.target.blur();\r\n }\r\n if (props.onKeyPress) props.onKeyPress(e);\r\n }}\r\n onKeyUp={(e) => {\r\n if (e.key === \"Escape\") {\r\n setDisplayValue(null);\r\n }\r\n }}\r\n style={props.textFieldStyle ? props.textFieldStyle : { width: \"95%\" }}\r\n onFocus={(e) => {\r\n if (props?.onFocus) props.onFocus(e);\r\n }}\r\n onClick={props.onClick}\r\n onBlur={(e) => {\r\n let outValue = e.target.value;\r\n\r\n if (\r\n props.preValidate !== \"alpha\" &&\r\n (props.preValidate === \"numeric\" || props.max !== undefined || props.min !== undefined)\r\n ) {\r\n outValue = toNumber(outValue);\r\n if (props.allowZero && outValue === 0) {\r\n } else if (props.max !== undefined && Number(outValue) > Number(props.max))\r\n outValue = props.max;\r\n else if (props.min !== undefined && Number(outValue) < Number(props.min))\r\n outValue = props.min;\r\n }\r\n\r\n if (props.allCaps) outValue = outValue.toUpperCase();\r\n if (props.onBlur) props.onBlur(outValue);\r\n setDisplayValue(null);\r\n }}\r\n onChange={(e) => {\r\n let value = e.target.value;\r\n // if (props.preValidate===\"numeric\") {\r\n // if (value !== \"-\") value = value.replace(/^\\-?(\\d+\\.?\\d*|\\d*\\.?\\d+)$/gi, '')\r\n // }\r\n if (props.preValidate === \"alpha\") {\r\n value = value.replace(/[^([a-zA-Z)]/gi, \"\");\r\n }\r\n if (props.preValidate === \"alphaNumeric\") {\r\n value = value.replace(/[^\\w\\s]/gi, \"\");\r\n }\r\n if (props.preValidate === \"name\") {\r\n value = value.replace(/[^\\w\\s/'/-/(/)/^/®/©/>]/gi, \"\");\r\n }\r\n if (props.preValidate === \"numbersOnly\") {\r\n value = value.replace(/[^([0-9)]/gi, \"\");\r\n }\r\n\r\n if (\r\n props.preValidate !== \"alpha\" &&\r\n (props.preValidate === \"numeric\" || props.min || props.max)\r\n ) {\r\n //number only, including negative and decimal\r\n let has_dot_on_end = value.endsWith(\".\");\r\n if (value === \"-\") setDisplayValue(value);\r\n else {\r\n let dec = value?.split(\".\")?.[1];\r\n if (dec && toNumber(dec) === 0) setDisplayValue(value);\r\n else setDisplayValue(+toNumber(value) + (has_dot_on_end ? \".\" : \"\"));\r\n }\r\n } else {\r\n if (props.max) {\r\n if (value.length > props.max) value = value.substring(0, props.max);\r\n }\r\n setDisplayValue(value);\r\n }\r\n if (props.onChange) props.onChange(value);\r\n }}\r\n />\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport { Tooltip } from \"@mui/material\";\r\n\r\nconst StyledButton = withStyles((theme) => ({\r\n root: {\r\n font: theme.brand?.FIELDERS\r\n ? \"200 11pt \" + Palette.Fielders.FontFamilySecondary\r\n : \"400 14px \" + Palette.Lysaght.FontFamily,\r\n lineHeight: \"1.75\",\r\n padding: \"6px 20px\",\r\n minWidth: \"35px\",\r\n background: theme.brand?.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n color: \"white\",\r\n boxShadow: \"none\",\r\n width: \"fit-content\",\r\n maxwidth: \"200px\",\r\n selected: {\r\n background: theme.brand?.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n color: \"white !important\",\r\n },\r\n \"&:hover\": {\r\n color: \"white !important\",\r\n background: theme.brand?.FIELDERS\r\n ? Palette.Fielders.HoverButtonBlue + \" !important\"\r\n : Palette.Lysaght.LightBlue + \" !important\",\r\n },\r\n \"&:hover label\": {\r\n color: \"white\",\r\n },\r\n },\r\n disabled: {\r\n background: \"#FFFFFF00 !important\",\r\n color: Palette.Control.Grey + \" !important\",\r\n },\r\n}))(Button);\r\n\r\nconst StyledButtonSecondary = withStyles((theme) => ({\r\n root: {\r\n // fontSize: props.fielders ? \"11pt\" : \"16px\",\r\n // fontFamily: props.fielders\r\n // ? '\"Univers45\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif'\r\n // : 'Roboto,\"Univers45\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif',\r\n // fontWeight: props.fielders ? \"200\" : \"700\",\r\n font: theme.brand?.FIELDERS\r\n ? \"200 11pt \" + Palette.Fielders.FontFamilySecondary\r\n : \"400 14px \" + Palette.Lysaght.FontFamily,\r\n lineHeight: \"1.75\",\r\n padding: \"6px 20px\",\r\n minWidth: \"35px\",\r\n background: \"#FFFFFF00\",\r\n color: theme.brand?.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n boxShadow: \"none\",\r\n width: \"fit-content\",\r\n maxwidth: \"200px\",\r\n \"&:hover\": {\r\n color: theme.brand?.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.LightBlue,\r\n background: \"#FFFFFF00\",\r\n },\r\n \"&:hover label\": {\r\n color: theme.brand?.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.LightBlue,\r\n },\r\n //DES-474 - Added outline to secondary buttons\r\n border: \"1px solid #192E61\",\r\n padding: \"6px\",\r\n // '& .MuiToggleButton-root.Mui-selected': {\r\n // background: '#FFFFFF00 !important',\r\n // color: '#192E61',\r\n // }\r\n },\r\n // 'label': {\r\n // color: '#192E61',\r\n // '&:hover': {\r\n // color: 'white',\r\n // },\r\n // },\r\n // 'selected': {\r\n // background: '#192E61 !important',\r\n // color: 'white !important',\r\n // },\r\n // '& .MuiToggleButton-root.Mui-selected': {\r\n // background: '#192E61',\r\n // color: 'white',\r\n // },\r\n disabled: {\r\n background: \"white !important\",\r\n color: Palette.Control.Grey + \" !important\",\r\n },\r\n}))(Button);\r\n\r\nconst useStyles = makeStyles({\r\n tight: {\r\n fontSize: \"10pt\",\r\n padding: \"2px 10px\",\r\n },\r\n});\r\n\r\nexport default function BSL_Button(props) {\r\n //DES-662 - windows.fielders is not rendered early enough to use it consistantly\r\n // const fielders =\r\n // toUpper(useSelector((state) => state?.app?.user?.Brand)) === \"FIELDERS\"\r\n // ? true\r\n // : false;\r\n const fielders = window.FIELDERS;\r\n\r\n const classes = useStyles();\r\n\r\n if (props.secondary)\r\n return (\r\n \r\n (props.onClick ? props.onClick(e) : \"\")}\r\n variant=\"contained\"\r\n style={props.style ? props.style : {}}\r\n selected\r\n fielders={fielders}\r\n >\r\n {props.children ? props.children : props.label}\r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n (props.onClick ? props.onClick(e) : \"\")}\r\n variant=\"contained\"\r\n style={props.style ? props.style : {}}\r\n fielders={fielders}\r\n >\r\n {props.children ? props.children : props.label}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport BSL_Button from \"./BSL_Button\";\r\nimport BSL_TextInput from \"./BSL_TextInput\";\r\nimport Draggable from \"react-draggable\";\r\n\r\nfunction PaperComponent(props) {\r\n let drag_key = props?.[\"aria-describedby\"] ? props?.[\"aria-describedby\"].split(\" \")[0] : \"\";\r\n \r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n font: \"16px \" + theme.typography.fontFamily,\r\n color: Palette.Control.DarkGrey,\r\n whiteSpace: \"pre-wrap\",\r\n },\r\n}));\r\n\r\nexport function BSL_DialogData(props) {\r\n const { dialogData, dispatch } = props;\r\n if (!dialogData) return null;\r\n\r\n return (\r\n dispatch(dialogData.onClose)}\r\n button1Text={dialogData?.primaryActionText ? dialogData?.primaryActionText : \"OK\"}\r\n button1Click={() => {\r\n dispatch(dialogData.onClose);\r\n if (dialogData?.primaryAction) dispatch(dialogData.primaryAction);\r\n }}\r\n button2Text={dialogData?.secondaryActionText}\r\n button2Click={() => {\r\n dispatch(dialogData.onClose);\r\n if (dialogData?.secondaryAction) dispatch(dialogData.secondaryAction);\r\n }}\r\n >\r\n {dialogData.message}\r\n \r\n );\r\n}\r\n\r\nexport default function BSL_Dialog(props) {\r\n const classes = useStyles();\r\n const [inputText, setInputText] = React.useState(props?.inputValue ? props?.inputValue : \"\");\r\n const handleClose = () => {\r\n if (props.onClose) props.onClose();\r\n };\r\n\r\n let drag_key = props.id ? props.id.split(\" \")[0] + \" \" : \"\";\r\n\r\n return (\r\n \r\n \r\n {props.title && (\r\n \r\n {props.title}\r\n \r\n )}\r\n {(props.children || props.text || props.allowMultilineInput) && (\r\n \r\n {props.text && (\r\n \r\n {props.text}\r\n \r\n )}\r\n {props.allowMultilineInput && (\r\n {\r\n setInputText(value);\r\n if (props?.inputBlur) props.inputBlur(value);\r\n }}\r\n onChange={(value) => {\r\n setInputText(value);\r\n if (props?.inputOnChange) props.inputOnChange(value);\r\n }}\r\n />\r\n )}\r\n {props.children}\r\n \r\n )}\r\n \r\n {props.button4Text && (\r\n props.button4Click(inputText)}\r\n disabled={props.button4Disabled}\r\n secondary\r\n >\r\n {props.button4Text}\r\n \r\n )}\r\n {props.button3Text && (\r\n props.button3Click(inputText)}\r\n disabled={props.button3Disabled}\r\n secondary\r\n >\r\n {props.button3Text}\r\n \r\n )}\r\n {props.button2Text && (\r\n props.button2Click(inputText)}\r\n disabled={props.button2Disabled}\r\n secondary\r\n >\r\n {props.button2Text}\r\n \r\n )}\r\n {props.button1Text && (\r\n props.button1Click(inputText)}\r\n disabled={props.button1Disabled}\r\n color=\"primary\"\r\n >\r\n {props.button1Text}\r\n \r\n )}\r\n \r\n \r\n
\r\n );\r\n}\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\n// import { toUpper } from \"lodash\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport FilterSelect from \"react-select\";\r\n// import Input from \"@material-ui/core/Input\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport InputBase from \"@material-ui/core/InputBase\";\r\n// import { WindowsMotionController } from \"babylonjs\";\r\n// import InputLabel from \"@material-ui/core/InputLabel\";\r\nimport { useDispatch } from \"react-redux\";\r\n// import { useSelector, useDispatch } from \"react-redux\";\r\n// import FormControl from \"@material-ui/core/FormControl\";\r\nimport BSL_ControlContainer from \"./BSL_ControlContainer\";\r\nimport { Tooltip } from \"@material-ui/core\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\r\n// import Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst BSL_Input = withStyles((theme) => ({\r\n root: (props) => ({\r\n width: props.width ? props.width : \"100%\",\r\n \"label + &\": {\r\n marginTop: theme.spacing(3),\r\n },\r\n \"& img\": {\r\n width: \"32px\",\r\n height: \"12px\",\r\n paddingRight: \"2px\",\r\n },\r\n \"&.Mui-disabled\": {\r\n border: \"none\",\r\n },\r\n border: \"1px solid \" + (props.children ? Palette.Control.DarkBlueTrans : Palette.Lysaght.DarkBlue),\r\n \"&.Mui-focused\": {\r\n border: \"2px solid \" + (props.children ? Palette.Control.DarkBlueTrans : Palette.Lysaght.LightBlue),\r\n },\r\n \"&:hover\": {\r\n boxShadow: \"0px 0px 2px \" + (props.children ? Palette.Control.DarkBlueTrans : Palette.Lysaght.LightBlue),\r\n },\r\n }),\r\n input: (props) => ({\r\n width: \"100%\",\r\n borderRadius: 2,\r\n textAlign: \"start\",\r\n position: \"relative\",\r\n border: \"0px solid #6b8799\",\r\n padding: \"4px 26px 4px 12px\",\r\n marginTop: theme.brand.FIELDERS ? \"0px\" : \"2px\",\r\n // backgroundColor: theme.palette.background.paper,\r\n // Use the system font instead of the default Roboto font.\r\n transition: theme.transitions.create([\"border-color\", \"box-shadow\"]),\r\n font: theme.brand.FIELDERS\r\n ? \"400 14px \" + theme.typography.fontFamily\r\n : \"200 14px \" + theme.typography.fontFamily,\r\n \"&:focus\": {\r\n // borderRadius: 4,\r\n border: \"0px solid \" + (props.children ? Palette.Control.DarkBlueTrans : Palette.Lysaght.DarkBlue),\r\n boxShadow: \"0 0 0 0.2rem rgba(0,123,255,.25)\",\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"0px solid \" + (props.children ? Palette.Control.DarkBlueTrans : Palette.Lysaght.DarkBlue),\r\n },\r\n \"&.Mui-focused\": {\r\n border: \"0px solid \" + (props.children ? Palette.Control.DarkBlueTrans : Palette.Lysaght.DarkBlue),\r\n },\r\n }),\r\n}))(InputBase);\r\n\r\nexport const BSL_MenuItem = withStyles((theme) => ({\r\n root: {\r\n font: theme.brand.FIELDERS\r\n ? \"400 14px \" + theme.typography.fontFamily\r\n : \"200 14px \" + theme.typography.fontFamily,\r\n\r\n minHeight: \"32px\",\r\n padding: \"4px 14px 4px 24px\",\r\n \"&:hover\": {\r\n backgroundColor: Palette.Control.LightGrey,\r\n \"& .MuiListItemIcon-root, & .MuiListItemText-primary\": {\r\n // color: theme.palette.common.white,\r\n },\r\n },\r\n },\r\n}))(MenuItem);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n textShadow: \"none\",\r\n },\r\n input: {\r\n flex: \"1\",\r\n padding: \"4px 0px\",\r\n color: Palette.Control.DarkGrey,\r\n font: \"14px \" + theme.typography.fontFamily,\r\n },\r\n input_tight: {\r\n padding: \"2px 0px 0px 0px\",\r\n font: \"13px \" + theme.typography.fontFamily,\r\n },\r\n margin: {\r\n margin: \"2px 2px 0px 8px\",\r\n },\r\n menu_paper: {\r\n border: \"1px solid \" + Palette.Control.DarkBlueTrans,\r\n },\r\n thumbnail: {\r\n width: \"80px\",\r\n height: \"24px\",\r\n objectFit: \"contain\",\r\n paddingRight: \"10px\",\r\n },\r\n disabled: {\r\n color: Palette.Control.Grey,\r\n },\r\n}));\r\n\r\nconst FilterSelectStyles = (open) => ({\r\n dropdownIndicator: (base, state) => ({\r\n ...base,\r\n transition: \"all .2s ease\",\r\n transform: open ? \"rotate(180deg)\" : null,\r\n color: \"#767676\",\r\n }),\r\n singleValue: (provided) => ({ ...provided, color: \"#666\" }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n color: \"black\",\r\n backgroundColor: state.isSelected ? \"#ebebeb\" : state.isDisabled ? \"#f6f6f6\" : \"inherit\",\r\n \"&:hover\": { backgroundColor: state.isSelected ? \"#ebebeb\" : state.isDisabled ? \"#f6f6f6\" : \"#ebebeb\" },\r\n textAlign: state.isDisabled ? \"center\" : \"inherit\",\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n marginTop: 0,\r\n fontSize: 12,\r\n borderwidth: 10,\r\n overflow: \"hidden\",\r\n opacity: open ? 1 : 0,\r\n width: open ? \"100%\" : \"65%\",\r\n height: open ? \"300px\" : \"0px\",\r\n transition: \"all 0.2s ease-in-out\",\r\n visibility: open ? \"visible\" : \"hidden\",\r\n }),\r\n control: (provided, state) => ({\r\n ...provided,\r\n\r\n border: open\r\n ? \"2px solid \" + (window.brand === \"Fielders\" ? Palette.Control.DarkBlueTrans : Palette.Lysaght.LightBlue)\r\n : \"1px solid \" + (window.brand === \"Fielders\" ? Palette.Control.DarkBlueTrans : Palette.Lysaght.DarkBlue),\r\n\r\n \"&:hover\": {\r\n boxShadow: open\r\n ? `0px 0px 0px ${\r\n window.brand === \"Fielders\" ? Palette.Control.DarkBlueTrans : Palette.Lysaght.LightBlue\r\n }`\r\n : `0px 0px 2px ${\r\n window.brand === \"Fielders\" ? Palette.Control.DarkBlueTrans : Palette.Lysaght.LightBlue\r\n }`,\r\n },\r\n\r\n height: \"29px\",\r\n minHeight: \"29px\",\r\n borderRadius: \"0px\",\r\n background: \"#fff\",\r\n outlineOffset: \"-1px\",\r\n marginTop: \"0px\",\r\n }),\r\n valueContainer: (provided, state) => ({\r\n ...provided,\r\n height: \"29px\",\r\n padding: \"0 6px\",\r\n }),\r\n\r\n input: (provided, state) => ({\r\n ...provided,\r\n margin: \"0px\",\r\n }),\r\n indicatorSeparator: (state) => ({\r\n display: \"none\",\r\n }),\r\n indicatorsContainer: (provided, state) => ({\r\n ...provided,\r\n height: \"29px\",\r\n }),\r\n});\r\n\r\nexport function BSL_FilterSelect(props) {\r\n const classes = useStyles();\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleOpenMenu = (value) => {\r\n if (!props.isDisabled) {\r\n setOpen(value);\r\n } else if (open) {\r\n setOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n handleOpenMenu(!open)}>\r\n handleOpenMenu(false)}\r\n styles={FilterSelectStyles(open)}\r\n />\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default function BSL_Select(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const [age, setAge] = React.useState(\"\");\r\n const { label, items, value, valueKey = \"Key\", keyKey = \"Key\", displayKey = \"Display\", inputWidth } = props;\r\n\r\n let menu_items = [];\r\n if (props.placeHolder) {\r\n menu_items.push(\r\n \r\n {props.placeHolder} \r\n \r\n );\r\n }\r\n if (props.children) {\r\n menu_items = props.children;\r\n } else if (items && Array.isArray(items)) {\r\n for (let menuItem of items) {\r\n // \r\n // \r\n if (typeof menuItem === \"string\" || typeof menuItem === \"number\") {\r\n menu_items.push(\r\n \r\n {menuItem}\r\n \r\n );\r\n } else if (React.isValidElement(menuItem)) {\r\n menu_items.push(menuItem);\r\n } else if (typeof menuItem === \"object\") {\r\n if (menuItem.disabled) {\r\n menu_items.push(\r\n \r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }}\r\n >\r\n
\r\n {menuItem.Thumbnail ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n {menuItem[displayKey]}\r\n \r\n
\r\n \r\n );\r\n } else {\r\n menu_items.push(\r\n \r\n {menuItem.Thumbnail ? : \"\"}\r\n {menuItem[displayKey]}\r\n \r\n );\r\n }\r\n }\r\n }\r\n } else if (typeof items === \"object\") {\r\n for (let key in items) {\r\n menu_items.push(\r\n \r\n {items[key]?.name ? items[key]?.name : key}\r\n \r\n );\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n {window.FIELDERS}\r\n \r\n }\r\n inputProps={{\r\n classes: {\r\n root: classes.root,\r\n },\r\n }}\r\n style={props.selectStyle ? props.selectStyle : { background: \"white\" }}\r\n >\r\n {menu_items}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport ToggleButton from \"@material-ui/lab/ToggleButton\";\r\nimport ToggleButtonGroup from \"@material-ui/lab/ToggleButtonGroup\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport BSL_ControlContainer from \"./BSL_ControlContainer\";\r\nimport { Tooltip } from \"@material-ui/core\";\r\n\r\nconst BSL_ToggleButton = withStyles((theme) => ({\r\n root: {\r\n fontSize: theme.brand.FIELDERS ? \"14px\" : \"12px\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n fontWeight: theme.brand.FIELDERS ? \"200\" : \"600\",\r\n padding: \"4px 12px\",\r\n minWidth: \"35px\",\r\n color: theme.brand.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n borderRadius: theme.brand.FIELDERS ? \"4px\" : \"0px\",\r\n background: \"#00000000\",\r\n lineHeight: 1,\r\n \"&:hover\": {\r\n color: \"white !important\",\r\n background: theme.brand.FIELDERS\r\n ? Palette.Fielders.HoverButtonBlue + \" !important\"\r\n : Palette.Lysaght.LightBlue + \" !important\",\r\n },\r\n \"&:hover label\": {\r\n color: \"white\",\r\n },\r\n \"& .MuiToggleButton-root.Mui-selected\": {\r\n background: theme.brand.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n color: \"white\",\r\n },\r\n },\r\n label: {\r\n whiteSpace: \"nowrap\",\r\n },\r\n}))(ToggleButton);\r\n\r\nconst BSL_ToggleButtonTight = withStyles((theme) => ({\r\n root: {\r\n fontSize: theme.brand.FIELDERS ? \"12px\" : \"11px\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n fontWeight: theme.brand.FIELDERS ? \"200\" : \"600\",\r\n padding: \"2px 8px\",\r\n minWidth: \"35px\",\r\n background: \"#00000000\",\r\n lineHeight: 1,\r\n color: theme.brand.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.DarkBlue,\r\n height: \"24px\",\r\n borderRadius: theme.brand.FIELDERS ? \"4px\" : \"0px\",\r\n \"&:hover\": {\r\n color: \"white !important\",\r\n background: theme.brand.FIELDERS\r\n ? Palette.Fielders.HoverButtonBlue + \" !important\"\r\n : Palette.Lysaght.LightBlue + \" !important\",\r\n },\r\n \"&:hover label\": {\r\n color: \"white\",\r\n },\r\n \"& .MuiToggleButton-root.Mui-selected\": {\r\n color: theme.brand.FIELDERS ? Palette.FieldersBlue : Palette.Lysaght.LightBlue,\r\n color: \"white\",\r\n },\r\n },\r\n}))(ToggleButton);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n label: {\r\n flex: \"1\",\r\n font: \"16px \" + theme.typography.fontFamilySecondary,\r\n color: Palette.Control.DarkGrey,\r\n padding: \"4px 0px\",\r\n textAlign: \"start\",\r\n },\r\n label_tight: {\r\n font: \"14px \" + theme.typography.fontFamilySecondary,\r\n padding: \"6px 0px 6px 0px\",\r\n },\r\n subtitle: {\r\n flex: \"1\",\r\n font: \"13px \" + theme.typography.fontFamilySecondary,\r\n color: \"#6B8799\",\r\n textAlign: \"end\",\r\n padding: \"4px 0px\",\r\n },\r\n\r\n input: {\r\n padding: \"2px\",\r\n font: \"16px \" + theme.typography.fontFamilySecondary,\r\n padding: \"10px 8px\",\r\n border: \"1px solid #6B8799\",\r\n },\r\n textField: {\r\n borderRadius: \"0px\",\r\n },\r\n notchedOutline: {\r\n \"&:focus\": {\r\n borderWidth: \"1px\",\r\n borderColor: \"#002D62 !important\",\r\n },\r\n },\r\n disabled: {\r\n backgroundColor: Palette.Control.LightGrey,\r\n },\r\n button_group: {\r\n width: \"fit-content\",\r\n background: \"#ffffffcc\",\r\n margin: \"2px 2px 2px 0px\",\r\n padding: \"2px 2px 3px 2px\",\r\n border: \"1px solid \" + Palette.Control.DarkBlueTrans,\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n borderRadius: theme.brand.FIELDERS ? \"4px\" : \"0px\",\r\n },\r\n vertical: {\r\n flexDirection: \"column\",\r\n },\r\n button_vertical: {\r\n padding: \"2px\",\r\n },\r\n group_tight: {\r\n padding: \"1px 1px 2px 1px\",\r\n boxShadow: \"none\",\r\n margin: \"0px 2px 2px 0px\",\r\n flexWrap: \"wrap\",\r\n },\r\n selected: {\r\n \"& .MuiToggleButton-root.Mui-selected\": {\r\n background: theme.brand.FIELDERS\r\n ? Palette.FieldersBlue + \" !important\"\r\n : Palette.Lysaght.DarkBlue + \" !important\",\r\n color: \"white !important\",\r\n },\r\n },\r\n item_selected: {\r\n background: theme.brand.FIELDERS\r\n ? Palette.FieldersBlue + \" !important\"\r\n : Palette.Lysaght.DarkBlue + \" !important\",\r\n color: \"white !important\",\r\n },\r\n}));\r\n\r\nexport default function SegmentedButtonGroup(props) {\r\n const classes = useStyles();\r\n const fielders = window.FIELDERS;\r\n const [selected, setSelected] = React.useState(null);\r\n const handleAlignment = (event, newValue) => {\r\n if (newValue === null && props.items.length > 1 && !props.allowToggle) {\r\n //don't allow toggle off of currently selected value.\r\n if (props?.onClick) props.onClick(event, newValue ? newValue : props.value);\r\n return;\r\n }\r\n if (props.onChange) props.onChange(event, newValue);\r\n };\r\n const items = [];\r\n const valueKey = props.valueKey ? props.valueKey : \"Key\";\r\n const displayKey = props.displayKey ? props.displayKey : \"Display\";\r\n if (props.items) {\r\n let list = props.items;\r\n if (typeof list === \"object\" && !Array.isArray(list)) list = Object.keys(list);\r\n\r\n if (typeof list[Symbol.iterator] === \"function\")\r\n for (var item of list) {\r\n if (props.tight) {\r\n if (typeof item === \"string\" || typeof item === \"number\") {\r\n items.push(\r\n \r\n {item}\r\n \r\n );\r\n } else if (item.disabled || props.disabled) {\r\n items.push(\r\n \r\n \r\n \r\n {item[displayKey]}\r\n \r\n
\r\n \r\n );\r\n } else {\r\n items.push(\r\n \r\n \r\n {item[displayKey]}\r\n \r\n \r\n );\r\n }\r\n } else {\r\n if (typeof item === \"string\") {\r\n items.push(\r\n \r\n {item}\r\n \r\n );\r\n } else if (item.disabled || props.disabled) {\r\n items.push(\r\n \r\n \r\n {item[displayKey]}\r\n \r\n \r\n );\r\n } else {\r\n items.push(\r\n \r\n \r\n {item[displayKey]}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n {items}\r\n \r\n \r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Snackbar from \"@material-ui/core/Snackbar\";\r\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\r\nimport { CheckBoxOutlined, WarningOutlined } from \"@material-ui/icons\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n background: \"#313133\",\r\n color: \"white\",\r\n padding: \"8px\",\r\n borderRadius: \"5px\",\r\n boxShadow: \"5px 4px 10px #888888\",\r\n font: '14px \"Univers45\", sans-serif',\r\n textAlign: \"start\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n success: {\r\n background: \"#008200\",\r\n },\r\n warning: {\r\n background: \"#e79b36\",\r\n },\r\n error: {\r\n background: \"#EF4036\",\r\n },\r\n snackbar: {\r\n zIndex: \"10100\",\r\n },\r\n});\r\n\r\nexport default function Message(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [currentMessage, setCurrentMessage] = useState(null);\r\n\r\n useEffect(() => {\r\n if (props.open && props.message) {\r\n setCurrentMessage(props);\r\n }\r\n }, [props.open, props.message]);\r\n\r\n const handleClose = () => {\r\n setCurrentMessage(null);\r\n };\r\n\r\n return (\r\n \r\n {currentMessage && (\r\n \r\n {currentMessage.type === \"error\" && (\r\n
\r\n )}\r\n {currentMessage.type === \"warning\" && (\r\n
\r\n )}\r\n {currentMessage.type === \"success\" && (\r\n
\r\n )}\r\n
{currentMessage.message}
\r\n
\r\n )}\r\n \r\n );\r\n}\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\n\r\nimport PropTypes from \"prop-types\";\r\nimport BSL_Button from \"../BSL_Button\";\r\nimport { API_BASE } from \"../../AppConfig\";\r\nimport { deepCopy, fetchTimeout } from \"../Common\";\r\nimport { Dialog, makeStyles } from \"@material-ui/core\";\r\n\r\nexport const useUploadStyles = makeStyles({\r\n image: {\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n height: \"100px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n border: \"2px dotted #8585b1\",\r\n margin: \"00px\",\r\n justifyContent: \"center\",\r\n\r\n objectFit: \"contain\",\r\n \"&:hover\": {\r\n backgroundColor: \"#eeeeee69\",\r\n },\r\n },\r\n input: {\r\n display: \"none\",\r\n },\r\n import_image: {\r\n // width: '96%',\r\n marginLeft: \"5px\",\r\n marginTop: \"5px\",\r\n zIndex: \"10\",\r\n position: \"absolute\",\r\n textAlign: \"left\",\r\n alignItems: \"flex-end\",\r\n justifyContent: \"flex-start\",\r\n },\r\n closeButton: {\r\n position: \"absolute\",\r\n right: \"30px\",\r\n },\r\n});\r\n\r\nexport const uploadFile = ({ file, inputRef, props, setLoading, setFileinputKey, setImage }) => {\r\n if (!inputRef?.current?.files) return;\r\n if (inputRef.current.files[0].size > 1048000 * (props.sizeLimitMB ? props.sizeLimitMB : 8)) {\r\n if (props.onError)\r\n props.onError({\r\n type: \"warning\",\r\n message:\r\n \"Error: File is too large to attach. Max size = \" +\r\n (props.sizeLimitMB ? props.sizeLimitMB : 8) +\r\n \"MB\",\r\n });\r\n return;\r\n }\r\n\r\n var FR = new FileReader();\r\n\r\n FR.addEventListener(\"load\", function (e2) {\r\n setLoading(true);\r\n\r\n let api_url = API_BASE() + \"document/\" + props.documentFolder + \"/\" + props.documentSaveFilename;\r\n fetchTimeout(\r\n api_url,\r\n {\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n document_type: props.documentType,\r\n base_64: true,\r\n document_name: inputRef.current.files[0].name,\r\n document_save_name: props?.documentSaveFilename\r\n ? props?.documentSaveFilename\r\n : inputRef.current.files[0].name,\r\n document_data: e2.target.result,\r\n recompressImage: props.recompressImage ? props.recompressImage : false,\r\n resizeImageByMaxWidth: props.resizeImageByMaxWidth ? props.resizeImageByMaxWidth : 0,\r\n }),\r\n },\r\n 60000\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n e2.target.value = null;\r\n let filename = inputRef.current.files[0].name;\r\n setFileinputKey(Math.random().toString(36));\r\n if (json.Error) {\r\n throw json.Error;\r\n }\r\n setLoading(false);\r\n setImage(e2.target.result);\r\n if (props.onSuccess)\r\n props.onSuccess({\r\n type: \"success\",\r\n message: \"Image Successfuly imported\",\r\n filename: json.document_filename,\r\n });\r\n })\r\n .catch((e) => {\r\n setLoading(false);\r\n \r\n if (props.onError)\r\n props.onError({\r\n type: \"error\",\r\n message: \"Image failed to import\",\r\n });\r\n });\r\n });\r\n\r\n FR.readAsDataURL(file);\r\n};\r\n\r\nexport const SimpleDialog = (props) => {\r\n const classes = useUploadStyles();\r\n const { onClose, selectedValue, open, image_url, mainAction } = props;\r\n\r\n const handleClose = () => {\r\n onClose();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nuploadFile.propTypes = {\r\n file: PropTypes.object.isRequired,\r\n props: PropTypes.object.isRequired,\r\n setImage: PropTypes.func.isRequired,\r\n inputRef: PropTypes.object.isRequired,\r\n setLoading: PropTypes.func.isRequired,\r\n setFileinputKey: PropTypes.func.isRequired,\r\n};\r\n\r\nSimpleDialog.propTypes = {\r\n image_url: PropTypes.string.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n open: PropTypes.bool.isRequired,\r\n selectedValue: PropTypes.string,\r\n mainAction: PropTypes.func,\r\n};\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { SimpleDialog, uploadFile, useUploadStyles } from \".\";\r\nimport { API_BASE } from \"../../AppConfig\";\r\nimport BSL_ControlContainer from \"../BSL_ControlContainer\";\r\nimport BSL_Button from \"../BSL_Button\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport { CircularProgress, IconButton } from \"@material-ui/core\";\r\n\r\nexport const BSL_UploadDocument = (props) => {\r\n const classes = useUploadStyles();\r\n\r\n const [ts, setTs] = React.useState(Date.now());\r\n const [image, setImage] = React.useState(\r\n props.documentFilename ? API_BASE() + \"document/\" + props.documentFolder + \"/\" + props.documentFilename : null\r\n );\r\n const inputRef = React.useRef(null);\r\n const [loading, setLoading] = React.useState(false);\r\n const [fileinputKey, setFileinputKey] = React.useState(0);\r\n const [openImageView, setOpenImageView] = React.useState(false);\r\n\r\n if (!props.documentFolder) return NO DOCUMENT FOLDER PROVIDED
;\r\n\r\n return (\r\n \r\n \r\n \r\n uploadFile({ file: e.target.files[0], inputRef, props, setLoading, setFileinputKey, setImage })\r\n }\r\n />\r\n \r\n \r\n \r\n
\r\n {\r\n setLoading(false);\r\n setImage(null);\r\n if (props.onClear) props.onClear();\r\n }}\r\n >\r\n \r\n \r\n {\r\n if (image && !image.includes(\"none\")) setOpenImageView(true);\r\n else if (inputRef?.current?.click) inputRef.current.click();\r\n }}\r\n >\r\n {!loading ? {props.backgroundText}
: }\r\n \r\n setOpenImageView(false)} />\r\n \r\n );\r\n};\r\n\r\nexport default BSL_UploadDocument;\r\n","import React from \"react\";\r\n\r\nfunction SortedBusinessList({ businessList, offerings }) {\r\n let businessesSorted = [];\r\n // businessesSorted.push({ disabled: true, Key: \"[BBC]\", Display: \"[BBC Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status !== \"ARCHIVED\" && item.Type === \"BBC\")\r\n businessesSorted.push({\r\n Key: item.id,\r\n Display: item.id + \"-\" + item.Name,\r\n POA: item?.Offer?.Regions?.[0],\r\n State: GetStateFromPOA({ poa: item?.Offer?.Regions?.[0], offerings }),\r\n });\r\n }\r\n // businessesSorted.push({ disabled: true, Key: \"[Engineers]\", Display: \"[Engineers Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status !== \"ARCHIVED\" && item.Type === \"Engineer\")\r\n businessesSorted.push({\r\n Key: item.id,\r\n Display: item.id + \"-\" + item.Name,\r\n POA: item?.Offer?.Regions?.[0],\r\n State: GetStateFromPOA({ poa: item?.Offer?.Regions?.[0], offerings }),\r\n });\r\n }\r\n // businessesSorted.push({ disabled: true, Key: \"[Customers]\", Display: \"[Customers Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status !== \"ARCHIVED\" && (!item.Type || (item.Type !== \"Engineer\" && item.Type !== \"BBC\")))\r\n businessesSorted.push({\r\n Key: item.id,\r\n Display: item.id + \"-\" + item.Name,\r\n POA: item?.Offer?.Regions?.[0],\r\n State: GetStateFromPOA({ poa: item?.Offer?.Regions?.[0], offerings }),\r\n });\r\n }\r\n // businessesSorted.push({ disabled: true, Key: \"[Archived]\", Display: \"[Archived Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status === \"ARCHIVED\")\r\n businessesSorted.push({\r\n Key: item.id,\r\n Display: (\r\n \r\n {item.id + \"-\" + item.Name} \r\n \r\n ),\r\n POA: item?.Offer?.Regions?.[0],\r\n State: GetStateFromPOA({ poa: item?.Offer?.Regions?.[0], offerings }),\r\n });\r\n }\r\n\r\n \r\n return businessesSorted;\r\n}\r\n\r\nexport function GetStateFromPOA({ offerings, poa }) {\r\n if (\r\n offerings !== null &&\r\n poa != null &&\r\n offerings !== null &&\r\n offerings[window.brand] !== null &&\r\n offerings[window.brand][\"Regions\"] !== null &&\r\n offerings[window.brand][\"Regions\"][poa] !== null &&\r\n offerings[window.brand][\"Regions\"][poa]?.[\"region\"] !== null &&\r\n offerings[window.brand][\"Regions\"][poa]?.[\"region\"]?.[\"state\"] !== null\r\n ) {\r\n return offerings[window.brand][\"Regions\"][poa]?.[\"region\"]?.[\"state\"];\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\nexport default SortedBusinessList;\r\n","import { makeStyles } from \"@material-ui/core\";\r\nimport { Palette } from \"../../AppConfig\";\r\n\r\nexport const CustomStyles = {\r\n container: (provided) => ({\r\n ...provided,\r\n margin: \"2px 2px 0px 8px\",\r\n minWidth: \"240px\",\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n border: \"1px solid \" + Palette.Control.DarkBlueTrans,\r\n }),\r\n option: (provided) => ({\r\n ...provided,\r\n fontSize: \"14px !important\",\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n fontSize: \"14px !important\",\r\n }),\r\n // Add more styles as needed\r\n};\r\n\r\nexport const useStyles = makeStyles({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"650px\",\r\n },\r\n col_header: {\r\n backgroundColor: Palette.Control.FieldersDarkBlue,\r\n color: \"white\",\r\n fontSize: \"12px\",\r\n fontFamily: '\"Univers45\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif',\r\n fontWeight: \"200\",\r\n textAlign: \"center\",\r\n padding: \"5px 0px\",\r\n },\r\n row_header: {\r\n display: \"flex\",\r\n },\r\n row_style: {\r\n padding: \"0px 4px !important\",\r\n },\r\n\r\n row_cell: {\r\n textAlign: \"center\",\r\n display: \"flex\",\r\n },\r\n\r\n row_cell_finalPP: {\r\n paddingTop: \"8px\",\r\n font: \"400 14px 'canada-type-gibson', sans-serif\",\r\n textAlign: \"center\",\r\n },\r\n\r\n admin_drawer_root: {\r\n top: \"0px\",\r\n left: \"0px\",\r\n width: \"90%\",\r\n height: \"-webkit-fill-available\",\r\n display: \"flex\",\r\n overflow: \"hidden\",\r\n position: \"fixed\",\r\n textAlign: \"left\",\r\n borderLeft: \"3px solid #0000001f\",\r\n borderRadius: \"0px\",\r\n flexDirection: \"column\",\r\n backdropFilter: \"blur(4px)\",\r\n backgroundColor: \"#edf0f3e8\",\r\n paddingTop: \"103px\",\r\n },\r\n logo: {\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n height: \"100px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n border: \"2px dotted #8585b1\",\r\n margin: \"10px\",\r\n justifyContent: \"center\",\r\n\r\n objectFit: \"contain\",\r\n \"&:hover\": {\r\n backgroundColor: Palette.Control.LightGrey,\r\n },\r\n },\r\n input: {\r\n display: \"none\",\r\n },\r\n import_logo: {\r\n position: \"absolute\",\r\n left: \"0px\",\r\n width: \"96%\",\r\n textAlign: \"right\",\r\n height: \"111px\",\r\n display: \"flex\",\r\n alignItems: \"flex-end\",\r\n justifyContent: \"flex-start\",\r\n zIndex: 10,\r\n },\r\n});\r\n","import React from \"react\";\r\nimport SegmentedButtonGroup from \"../../components/SegmentedButtonGroup\";\r\nimport { deepCopy } from \"../../components/Common\";\r\n\r\nexport const getAddress = ({ BusinessDetails, isBillingAddress, props }) => {\r\n if (BusinessDetails.Address.Street === BusinessDetails.SalesForceData.Account.BillingAddress.street) {\r\n isBillingAddress = true;\r\n } else if (BusinessDetails.Address.Street === BusinessDetails.SalesForceData.Account.ShippingAddress.street) {\r\n isBillingAddress = false;\r\n }\r\n\r\n return (\r\n \r\n updateAddress(e, value, {\r\n BusinessDetails,\r\n props,\r\n })\r\n }\r\n helperText={\"*If these address details need to change please contact your Account Manager\"}\r\n />\r\n );\r\n};\r\n\r\nexport const updateAddress = (e, value, { BusinessDetails, props }) => {\r\n let val = value ? value : e;\r\n if (val?.target?.value) val = e?.target?.value;\r\n\r\n let newBusinessDetails = deepCopy(BusinessDetails);\r\n\r\n if (val === \"Billing Address\") {\r\n newBusinessDetails.Address.Street = BusinessDetails.SalesForceData.Account.BillingAddress.street;\r\n newBusinessDetails.Address.Suburb = BusinessDetails.SalesForceData.Account.BillingAddress.city;\r\n newBusinessDetails.Address.State = BusinessDetails.SalesForceData.Account.BillingAddress.state;\r\n newBusinessDetails.Address.PostCode = BusinessDetails.SalesForceData.Account.BillingAddress.postalCode;\r\n newBusinessDetails.Address.FormattedAddress =\r\n newBusinessDetails.Address.Street +\r\n \", \" +\r\n newBusinessDetails.Address.Suburb +\r\n \" \" +\r\n newBusinessDetails.Address.State +\r\n \", Australia\";\r\n } else if (val === \"Shipping Address\") {\r\n newBusinessDetails.Address.Street = BusinessDetails.SalesForceData.Account.ShippingAddress.street;\r\n newBusinessDetails.Address.Suburb = BusinessDetails.SalesForceData.Account.ShippingAddress.city;\r\n newBusinessDetails.Address.State = BusinessDetails.SalesForceData.Account.ShippingAddress.state;\r\n newBusinessDetails.Address.PostCode = BusinessDetails.SalesForceData.Account.ShippingAddress.postalCode;\r\n newBusinessDetails.Address.FormattedAddress =\r\n newBusinessDetails.Address.Street +\r\n \", \" +\r\n newBusinessDetails.Address.Suburb +\r\n \" \" +\r\n newBusinessDetails.Address.State +\r\n \", Australia\";\r\n }\r\n\r\n if (props.UpdateBusiness) props.UpdateBusiness(newBusinessDetails);\r\n};\r\n\r\nexport const updateNewUserBusiness =\r\n (param) =>\r\n (e, value, { BusinessDetails, props, validationSchema, checkJobStateValidationSchema, errorState }) => {\r\n let newBusinessDetails = deepCopy(BusinessDetails);\r\n let val =\r\n value !== undefined\r\n ? value\r\n : e && e.target && e.target.value !== undefined\r\n ? e.target.value\r\n : e !== null && e !== undefined\r\n ? e\r\n : null;\r\n\r\n // If parameter includes dot notation (indicating a nested property)\r\n if (param.includes(\".\")) {\r\n const keys = param.split(\".\"); // Split the nested keys\r\n let nestedObject = newBusinessDetails;\r\n\r\n // Traverse through the nested keys, creating nested objects if they don't exist\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n if (!nestedObject[keys[i]]) {\r\n // Create a new nested object if it doesn't exist\r\n nestedObject[keys[i]] = {};\r\n }\r\n nestedObject = nestedObject[keys[i]];\r\n }\r\n\r\n // Update the value of the nested property\r\n nestedObject[keys[keys.length - 1]] = val;\r\n } else {\r\n // If not a nested property, update the value directly\r\n newBusinessDetails[param] = val;\r\n\r\n // Additional logic for \"id\" parameter\r\n if (param === \"id\") {\r\n newBusinessDetails[\"Code\"] = val;\r\n }\r\n }\r\n\r\n // Call the UpdateBusiness function if provided\r\n if (props.UpdateBusiness) {\r\n props.UpdateBusiness(newBusinessDetails);\r\n }\r\n\r\n // Validate using customer validation schema\r\n if (validationSchema?.Distributor?.[param]) {\r\n let error = \"\";\r\n error = checkJobStateValidationSchema(validationSchema, \"Distributor\", null, param, val);\r\n let newErrorState = deepCopy(errorState);\r\n newErrorState[param] = error;\r\n\r\n // Additional validation logic for \"id\" parameter\r\n if (param === \"id\") {\r\n error = checkJobStateValidationSchema(validationSchema, \"Distributor\", null, \"Code\", val);\r\n newErrorState[\"Code\"] = error;\r\n }\r\n\r\n // Set the error state\r\n setErrorState(newErrorState);\r\n }\r\n };\r\n\r\nexport const setErrorState = ({ state, props }) => {\r\n if (props.SetErrorState) props.SetErrorState(state);\r\n};\r\n\r\nexport const updateMarkup = ({ key, param, value, BusinessDetails, props }) => {\r\n let newBusinessDetails = deepCopy(BusinessDetails);\r\n newBusinessDetails.MarkupStructure.Markups[key][param] = value;\r\n if (props.UpdateBusiness) props.UpdateBusiness(newBusinessDetails);\r\n};\r\n\r\nexport const deleteMarkup = ({ key, BusinessDetails, setShowMessage, setDeleteKey, props }) => {\r\n // Check to ensure there is aleast one markup\r\n\r\n if (Object.keys(BusinessDetails.MarkupStructure.Markups).length > 1) {\r\n let newBusinessDetails = deepCopy(BusinessDetails);\r\n // Change default markup if it was deleted or markup is null\r\n delete newBusinessDetails.MarkupStructure.Markups[key];\r\n\r\n // Check if default markup was deleted or doesn't exist in the list of markups, set to next markup available\r\n if (\r\n key === newBusinessDetails.MarkupStructure.MarkupDefault ||\r\n !Object.keys(newBusinessDetails.MarkupStructure.Markups).includes(\r\n newBusinessDetails.MarkupStructure.MarkupDefault\r\n )\r\n ) {\r\n let nextMarkup = Object.keys(newBusinessDetails.MarkupStructure.Markups)[0];\r\n newBusinessDetails.MarkupStructure.MarkupDefault = nextMarkup;\r\n setShowMessage({\r\n message: \"Default Markup was deleted or changed, default changed to: \" + nextMarkup,\r\n type: \"warning\",\r\n });\r\n }\r\n setDeleteKey(null);\r\n if (props.UpdateBusiness) props.UpdateBusiness(newBusinessDetails);\r\n } else {\r\n setDeleteKey(null);\r\n setShowMessage({ message: \"Please add another Markup before removing all Markups.\", type: \"error\" });\r\n }\r\n};\r\n\r\nexport const addMarkup = ({ key, props, seNewMarkup, BusinessDetails }) => {\r\n if (key === \"\") return;\r\n if (BusinessDetails.MarkupStructure.Markups[key]) return;\r\n let newBusinessDetails = deepCopy(BusinessDetails);\r\n newBusinessDetails.MarkupStructure.Markups[key] = {\r\n DisplayName: key,\r\n Material: 100,\r\n Installation: 100,\r\n PackingAndDel: 0,\r\n Commission: 0,\r\n };\r\n if (props.UpdateBusiness) props.UpdateBusiness(newBusinessDetails);\r\n seNewMarkup(\"\");\r\n};\r\n\r\nexport const updatePaymentStructure = ({ param, value, BusinessDetails, props }) => {\r\n const newBusinessDetails = deepCopy(BusinessDetails);\r\n newBusinessDetails.MarkupStructure.PaymentStructure[param] = value;\r\n\r\n const finalPaymentPercent = calcFinalProgressPaymentPercent(newBusinessDetails.MarkupStructure.PaymentStructure);\r\n newBusinessDetails.MarkupStructure.PaymentStructure[\"SupplyOnlyDeposit\"] = finalPaymentPercent;\r\n\r\n if (props.UpdateBusiness) props.UpdateBusiness(newBusinessDetails);\r\n};\r\n\r\nexport const calcFinalProgressPaymentPercent = (paymentStructure) => {\r\n const { Deposit = 0, Progress1 = 0, Progress2 = 0, Progress3 = 0 } = paymentStructure;\r\n\r\n if (\r\n typeof Deposit !== \"number\" ||\r\n typeof Progress1 !== \"number\" ||\r\n typeof Progress2 !== \"number\" ||\r\n typeof Progress3 !== \"number\"\r\n ) {\r\n return \"- \";\r\n }\r\n\r\n if (Deposit < 0 || Progress1 < 0 || Progress2 < 0 || Progress3 < 0) {\r\n return \"- \";\r\n }\r\n\r\n const percent = 100 - Deposit - Progress1 - Progress2 - Progress3;\r\n return percent <= 0 ? \"- \" : percent;\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useSelector } from \"react-redux\";\r\nimport {\r\n Box, Collapse, IconButton, Table, TableBody, TableCell,\r\n TableContainer, TableHead, TableRow, Paper, Tooltip, Button,\r\n Dialog, DialogActions, DialogContent, DialogTitle, FormControlLabel,\r\n TextField, FormControl, InputLabel, Select, MenuItem, Checkbox\r\n} from '@mui/material';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\r\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\r\nimport { deepCopy } from \"../../components/Common\";\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\n\r\nconst availableExtras = [\"Per 90mm PVC downpipe\", \"Per bolt to slab\", \"Zincalume roof\"];\r\nconst designTemplateTypes = [\"National Carport\"];\r\nconst linkableProductCodes = [\"LCDISC\"];\r\n\r\nconst headerStyles = {\r\n fontFamily: \"'canada-type-gibson', sans-serif\",\r\n fontSize: '13px',\r\n fontWeight: '400'\r\n};\r\n\r\nconst contentStyles = {\r\n fontFamily: \"'canada-type-gibson', sans-serif\",\r\n fontSize: '13px',\r\n fontWeight: '200'\r\n};\r\n\r\nconst theme = createTheme({\r\n components: {\r\n MuiTableCell: {\r\n styleOverrides: {\r\n root: {\r\n padding: '6px',\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\r\nconst CustomSelect = ({ label, name, value, onChange, options, disabled }) => (\r\n \r\n {label} \r\n \r\n {options.map(option => (\r\n {option} \r\n ))}\r\n \r\n \r\n);\r\n\r\nconst AddRowDialog = ({ open, onClose, onSave }) => {\r\n const config = useSelector((state) => state.config);\r\n const [newRow, setNewRow] = useState({\r\n DesignTemplateType: '',\r\n DesignTemplateName: '',\r\n BasePrice: '',\r\n LinkedProductCode: '',\r\n Extras: []\r\n });\r\n\r\n const designTemplateNames = {\r\n \"National Carport\": Object.getOwnPropertyNames(\r\n config?.design_options[\"National Carport\"]?.design_templates || {}\r\n )\r\n };\r\n\r\n const handleChange = event => {\r\n const { name, value } = event.target;\r\n setNewRow(prev => ({ ...prev, [name]: value }));\r\n };\r\n\r\n const handleSave = () => {\r\n onSave({ ...newRow, id: Date.now() });\r\n onClose();\r\n setNewRow({\r\n DesignTemplateType: '',\r\n DesignTemplateName: '',\r\n BasePrice: '',\r\n LinkedProductCode: '',\r\n Extras: []\r\n });\r\n };\r\n\r\n const isFormComplete = () => newRow.DesignTemplateType && newRow.DesignTemplateName && newRow.BasePrice > 0 && newRow.LinkedProductCode;\r\n\r\n return (\r\n \r\n Add New Row \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cancel \r\n Done \r\n \r\n \r\n );\r\n};\r\n\r\nconst EditDialog = ({ open, onClose, row, onSave }) => {\r\n const config = useSelector((state) => state.config);\r\n const [formData, setFormData] = useState(row);\r\n\r\n const designTemplateNames = {\r\n \"National Carport\": Object.getOwnPropertyNames(\r\n config?.design_options[\"National Carport\"]?.design_templates || {}\r\n )\r\n };\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData((prev) => ({ ...prev, [name]: value }));\r\n };\r\n\r\n const handleSubmit = () => {\r\n onSave(formData);\r\n onClose();\r\n };\r\n\r\n const isFormComplete = () => formData.DesignTemplateType && formData.DesignTemplateName && formData.BasePrice > 0 && formData.LinkedProductCode;\r\n\r\n return (\r\n \r\n Edit Base \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cancel \r\n Done \r\n \r\n \r\n );\r\n};\r\n\r\nconst AddExtraDialog = ({ open, onClose, onSave }) => {\r\n const [newExtra, setNewExtra] = useState({\r\n Description: '',\r\n Price: ''\r\n });\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setNewExtra((prev) => ({ ...prev, [name]: value }));\r\n };\r\n\r\n const handleSave = () => {\r\n onSave(newExtra);\r\n onClose();\r\n };\r\n\r\n const isFormComplete = () => newExtra.Description && newExtra.Price;\r\n\r\n return (\r\n \r\n Add New Extra \r\n \r\n \r\n \r\n \r\n \r\n Cancel \r\n Done \r\n \r\n \r\n );\r\n};\r\n\r\nconst EditExtraDialog = ({ open, onClose, row, extraId, onSave }) => {\r\n const [formData, setFormData] = useState(row.Extras.find((extra) => extra.id === extraId));\r\n\r\n const handleChange = (event) => {\r\n const { name, value } = event.target;\r\n setFormData((prev) => ({ ...prev, [name]: value }));\r\n };\r\n\r\n const handleSubmit = () => {\r\n onSave(formData);\r\n onClose();\r\n };\r\n\r\n const isFormComplete = () => formData.Description && formData.Price;\r\n\r\n return (\r\n \r\n Edit Extra \r\n \r\n \r\n \r\n \r\n \r\n Cancel \r\n Done \r\n \r\n \r\n );\r\n};\r\n\r\nconst Row = ({ row, onUpdate, onDelete, onAddExtra }) => {\r\n const [open, setOpen] = useState(false);\r\n const [editOpen, setEditOpen] = useState(false);\r\n const [addExtraOpen, setAddExtraOpen] = useState(false);\r\n const [editingExtra, setEditingExtra] = useState(false);\r\n const [targetExtraId, setTargetExtraId] = useState(null);\r\n\r\n const handleDelete = () => {\r\n onDelete(row.id);\r\n };\r\n\r\n const handleUpdate = (newData) => {\r\n onUpdate(newData);\r\n };\r\n\r\n const handleAddExtra = (newExtra) => {\r\n onAddExtra(row.id, { ...newExtra, id: Date.now() });\r\n setAddExtraOpen(false);\r\n };\r\n\r\n const handleEditExtra = (target) => {\r\n setTargetExtraId(target);\r\n setEditingExtra(true);\r\n };\r\n\r\n const saveEditedExtra = (updatedExtra) => {\r\n const updatedExtras = row.Extras.map((extra) =>\r\n extra.id === updatedExtra.id ? updatedExtra : extra\r\n );\r\n onUpdate({ ...row, Extras: updatedExtras });\r\n setEditingExtra(false);\r\n };\r\n\r\n return (\r\n \r\n *': { borderBottom: 'unset' } }}>\r\n \r\n setOpen(!open)}\r\n >\r\n {open ? : }\r\n \r\n \r\n \r\n {row.DesignTemplateType}\r\n \r\n {row.DesignTemplateName} \r\n {row.LinkedProductCode} \r\n {row.BasePrice} \r\n \r\n setEditOpen(true)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n onClick={() => setAddExtraOpen(true)}\r\n >\r\n Add Extra Price\r\n \r\n \r\n \r\n \r\n \r\n Description \r\n Price ($) \r\n Actions \r\n \r\n \r\n \r\n {row.Extras.map((extra) => (\r\n \r\n \r\n {extra.Description} \r\n {extra.Price} \r\n \r\n handleEditExtra(extra.id)}>\r\n \r\n \r\n {\r\n const updatedExtras = row.Extras.filter(\r\n (e) => e.id !== extra.id\r\n );\r\n onUpdate({ ...row, Extras: updatedExtras });\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {editOpen && (\r\n setEditOpen(false)}\r\n row={row}\r\n onSave={handleUpdate}\r\n />\r\n )}\r\n {addExtraOpen && (\r\n setAddExtraOpen(false)}\r\n onSave={handleAddExtra}\r\n />\r\n )}\r\n {editingExtra && (\r\n setEditingExtra(false)}\r\n row={row}\r\n extraId={targetExtraId}\r\n onSave={saveEditedExtra}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst FixedPriceKits = (props) => {\r\n const businessDetails = deepCopy(props.business);\r\n const [rows, setRows] = useState(businessDetails?.FixedPriceKits || []);\r\n const [addRowOpen, setAddRowOpen] = useState(false);\r\n\r\n const handleAddRow = (newRow) => {\r\n setRows((prevRows) => {\r\n const updatedRows = [...prevRows, newRow];\r\n businessDetails.FixedPriceKits = updatedRows;\r\n props.updateBusiness(businessDetails);\r\n return updatedRows;\r\n });\r\n };\r\n\r\n const handleRowUpdate = (newData) => {\r\n setRows((prevRows) => {\r\n const updatedRows = prevRows.map((row) => (row.id === newData.id ? newData : row));\r\n businessDetails.FixedPriceKits = updatedRows;\r\n props.updateBusiness(businessDetails);\r\n return updatedRows;\r\n });\r\n };\r\n\r\n const handleRowDelete = (id) => {\r\n setRows((prevRows) => {\r\n const updatedRows = prevRows.filter((row) => row.id !== id);\r\n businessDetails.FixedPriceKits = updatedRows;\r\n props.updateBusiness(businessDetails);\r\n return updatedRows;\r\n });\r\n };\r\n\r\n const handleAddExtra = (rowId, newExtra) => {\r\n setRows((prevRows) => {\r\n const updatedRows = prevRows.map((row) =>\r\n row.id === rowId\r\n ? { ...row, Extras: [...row.Extras, { ...newExtra, id: Math.random() }] }\r\n : row\r\n );\r\n businessDetails.FixedPriceKits = updatedRows;\r\n props.updateBusiness(businessDetails);\r\n return updatedRows;\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n setAddRowOpen(true)} startIcon={ }>\r\n Add Base Kit Price\r\n \r\n \r\n \r\n \r\n \r\n \r\n Design Type \r\n Design Name \r\n \r\n \r\n Linked To\r\n \r\n \r\n Price ($) \r\n Actions \r\n \r\n \r\n \r\n {rows.map((row) => (\r\n
\r\n ))}\r\n \r\n
\r\n \r\n {addRowOpen && (\r\n setAddRowOpen(false)}\r\n onSave={handleAddRow}\r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default FixedPriceKits;","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { deepCopy, toNumber, setNull } from \"../../components/Common\";\r\n\r\nimport BSL_Select from \"../../components/BSL_Select\";\r\nimport BSL_TextInput from \"../../components/BSL_TextInput\";\r\nimport * as BSL_Common from \"../../components/BSL_CommonControls\";\r\nimport { Grid, IconButton, LinearProgress, TextField } from \"@material-ui/core\";\r\nimport { checkJobStateValidationSchema } from \"../../redux_store/jobState\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport BSL_Dialog from \"../../components/BSL_Dialog\";\r\nimport SegmentedButtonGroup from \"../../components/SegmentedButtonGroup\";\r\nimport Message from \"../../components/Message\";\r\nimport BSL_UploadDocument from \"../../components/BSL_Upload/BSL_UploadDocument\";\r\nimport Select from \"react-select\";\r\nimport SortedBusinessList from \"./BusinessList\";\r\nimport { CustomStyles, useStyles } from \"./BusinessStyles\";\r\nimport {\r\n addMarkup,\r\n deleteMarkup,\r\n getAddress,\r\n setErrorState,\r\n updateMarkup,\r\n updateNewUserBusiness,\r\n updatePaymentStructure,\r\n} from \"./BusinessFunctions\";\r\nimport {\r\n InitaliseBusiness,\r\n InitaliseLoad,\r\n validateProgressPaymentPercentages,\r\n} from \"../component_effects/BusinessEffect\";\r\nimport FixedPriceKits from \"./FixedPriceKits\";\r\n\r\nexport default function ManageBusiness(props) {\r\n const classes = useStyles();\r\n const [deleteKey, setDeleteKey] = React.useState(null);\r\n const [deleteName, setDeleteName] = React.useState(null);\r\n const [newMarkup, seNewMarkup] = React.useState(\"\");\r\n const [loading, setLoading] = React.useState(true);\r\n const [showMessage, setShowMessage] = React.useState(false);\r\n const [intialise, setIntialise] = React.useState(false);\r\n const [businessList, setBusinessList] = React.useState([]);\r\n\r\n const validationSchema = useSelector((state) => state.config.validationSchema);\r\n const offerings = useSelector((state) => state.app.offerings);\r\n const BusinessDetails = deepCopy(props.BusinessDetails);\r\n const errorState = deepCopy(props.ErrorState);\r\n const customStyles = CustomStyles;\r\n const markups = BusinessDetails?.MarkupStructure?.Markups;\r\n const paymentStructure = BusinessDetails?.MarkupStructure?.PaymentStructure;\r\n\r\n let sourcePage = props.sourcePage;\r\n let isBillingAddress = true;\r\n\r\n // Use Effects\r\n InitaliseLoad({ intialise, setBusinessList, setLoading, setIntialise });\r\n\r\n InitaliseBusiness({\r\n intialise,\r\n setNull,\r\n BusinessDetails,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n setErrorState,\r\n props,\r\n setIntialise,\r\n });\r\n\r\n validateProgressPaymentPercentages({ disableSaveButton: props.setSaveButtonDisabled, paymentStructure });\r\n\r\n let customer_types = [];\r\n if (markups)\r\n for (let key in markups) {\r\n let item = markups[key];\r\n customer_types.push({ Key: key, Display: item?.DisplayName ? item.DisplayName : key });\r\n }\r\n\r\n let markup_rows = [];\r\n\r\n let input_style = { padding: \"0px\", margin: \"1px\" };\r\n\r\n for (let key in markups) {\r\n let markup = markups[key];\r\n markup_rows.push(\r\n \r\n \r\n \r\n {\r\n setDeleteName(markup?.DisplayName ? markup?.DisplayName : key);\r\n setDeleteKey(key);\r\n }}\r\n >\r\n \r\n \r\n \r\n updateMarkup({ key, param: \"DisplayName\", value: val, BusinessDetails, props })\r\n }\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n updateMarkup({ key, param: \"Material\", value: val, BusinessDetails, props })\r\n }\r\n />\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n \r\n updateMarkup({ key, param: \"Installation\", value: val, BusinessDetails, props })\r\n }\r\n />{\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n \r\n updateMarkup({ key, param: \"PackingAndDel\", value: val, BusinessDetails, props })\r\n }\r\n />{\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n \r\n updateMarkup({ key, param: \"Commission\", value: val, BusinessDetails, props })\r\n }\r\n />{\" \"}\r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n let businessesSorted = SortedBusinessList({ businessList, offerings });\r\n\r\n const updateOffer = (selectedOptions) => {\r\n const selected = selectedOptions.map((option) => {\r\n return { value: option.value, label: option.label, poa: option.poa, state: option.state };\r\n });\r\n\r\n // Check if Offer exists within BusinessDetails, if not, create an empty Offer object\r\n const newOffer = BusinessDetails.Offer ? { ...BusinessDetails.Offer } : {};\r\n\r\n // Update LinkedBusiness within the Offer object\r\n newOffer.LinkedBusiness = selected;\r\n\r\n // Update the LinkedBusiness property within the Offer object\r\n updateNewUserBusiness(\"Offer\")(\"\", newOffer, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n });\r\n\r\n // UPDATE Regions\r\n const regions = [\r\n ...new Set(\r\n businessesSorted\r\n .filter((e) => selected.some((sel) => sel.value === e.Key)) // Use some() instead of includes() to compare objects properly\r\n .map((business) => business.POA)\r\n .concat(BusinessDetails.POA)\r\n ),\r\n ].filter((region) => region !== undefined && region !== null && region !== \"undefined\");\r\n\r\n // Update the Regions property within the Offer object\r\n const updatedOffer = {\r\n ...newOffer,\r\n Regions: regions,\r\n };\r\n\r\n // Update the Offer object with the updated Regions property\r\n updateNewUserBusiness(\"Offer\")(\"\", updatedOffer, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n });\r\n };\r\n\r\n return (\r\n \r\n
\r\n Settings for {BusinessDetails.Name} (all users) \r\n\r\n {props.admin && (\r\n <>\r\n \r\n \r\n \r\n updateNewUserBusiness(\"Status\")(e, value, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n />\r\n \r\n updateNewUserBusiness(\"Type\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n />\r\n \r\n updateNewUserBusiness(\"EngineerOverride\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n />\r\n \r\n \r\n Linked Offering to Business License \r\n \r\n\r\n \r\n {loading ? (\r\n \r\n ) : (\r\n ({\r\n value: business.Key,\r\n label: business.Display,\r\n poa: business.POA,\r\n state: business.State,\r\n }))}\r\n value={BusinessDetails?.Offer?.LinkedBusiness?.map((selected) => ({\r\n value: selected.value,\r\n label: selected.label,\r\n poa: selected.poa,\r\n state: selected.state,\r\n }))}\r\n onChange={(selectedOptions) => {\r\n updateOffer(selectedOptions);\r\n }}\r\n styles={customStyles}\r\n />\r\n )}\r\n \r\n \r\n \r\n updateNewUserBusiness(\"id\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n error={errorState?.id}\r\n style={{ flex: 1 }}\r\n helperText={\"*changing is NOT recommended\"}\r\n />\r\n \r\n updateNewUserBusiness(\"Name\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n style={{ flex: 5 }}\r\n helperText={\"*sync with Salesforce\"}\r\n />\r\n \r\n updateNewUserBusiness(\"LYVESAccount\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n style={{ flex: 2 }}\r\n helperText={\"*sync with Salesforce\"}\r\n />\r\n \r\n \r\n \r\n updateNewUserBusiness(\"discount\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n error={errorState?.discount}\r\n style={{ flex: 1 }}\r\n InputProps={{\r\n style: {\r\n textAlign: \"right\",\r\n },\r\n }}\r\n />\r\n \r\n updateNewUserBusiness(\"DeliveryFee\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n error={errorState?.DeliveryFee}\r\n style={{ flex: 1 }}\r\n InputProps={{\r\n style: {\r\n textAlign: \"right\",\r\n },\r\n }}\r\n />\r\n \r\n updateNewUserBusiness(\"PackingFee\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n error={errorState?.PackingFee}\r\n style={{ flex: 1 }}\r\n InputProps={{\r\n style: {\r\n textAlign: \"right\",\r\n },\r\n }}\r\n />\r\n {\r\n let newBusinessDetails = deepCopy(BusinessDetails);\r\n newBusinessDetails.DistLevel = e.target.value;\r\n if (props.UpdateBusiness) props.UpdateBusiness(newBusinessDetails);\r\n }}\r\n style={{\r\n flex: \"none\",\r\n width: \"150px\",\r\n }}\r\n />\r\n \r\n \r\n \r\n Fixed Price Kits \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n >\r\n )}\r\n\r\n \r\n {\r\n updateNewUserBusiness(\"Logo\")(null, message.filename, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n });\r\n setShowMessage(message);\r\n }}\r\n onError={setShowMessage}\r\n onClear={() => {\r\n updateNewUserBusiness(\"Logo\")(null, \"\", {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n });\r\n }}\r\n documentFolder={\"BUS_\" + BusinessDetails.Code}\r\n documentFilename={BusinessDetails.Logo ? BusinessDetails.Logo : \"logo\"}\r\n documentType=\"logo\"\r\n sizeLimitMB={1}\r\n />\r\n \r\n \r\n \r\n updateNewUserBusiness(\"ABN\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n error={errorState?.ABN}\r\n />\r\n \r\n updateNewUserBusiness(\"BuildingLicence\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n error={errorState?.BuildingLicence}\r\n />\r\n \r\n\r\n \r\n \r\n updateNewUserBusiness(\"Email\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n helperText={\"*sync with Salesforce\"}\r\n />\r\n \r\n updateNewUserBusiness(\"Phone\")(e, val, {\r\n BusinessDetails,\r\n props,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n errorState,\r\n })\r\n }\r\n helperText={\"*sync with Salesforce\"}\r\n />\r\n \r\n\r\n {sourcePage === \"ManageUser\" && (\r\n <>\r\n Address for Quotes \r\n Billing Address \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Shipping Address \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getAddress({ BusinessDetails, isBillingAddress, props })}\r\n \r\n >\r\n )}\r\n\r\n Markups \r\n \r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n Name{\" \"}\r\n
\r\n \r\n \r\n Material
\r\n \r\n \r\n Installation
\r\n \r\n \r\n Pack & Del
\r\n \r\n \r\n \r\n {\" \"}\r\n Commission{\" \"}\r\n
\r\n \r\n \r\n {markup_rows}\r\n\r\n \r\n \r\n \r\n addMarkup({ key: val, props, seNewMarkup, BusinessDetails })}\r\n />\r\n
\r\n \r\n \r\n \r\n
\r\n {\r\n let newBusinessDetails = deepCopy(BusinessDetails);\r\n newBusinessDetails.MarkupStructure.MarkupDefault = e.target.value;\r\n if (props.UpdateBusiness) props.UpdateBusiness(newBusinessDetails);\r\n }}\r\n helperText={\r\n \"only applies to new jobs. If you want to change the markup on a current job, edit in the jobs 'edit details' page.\"\r\n }\r\n />\r\n\r\n Progress Payment Default % \r\n \r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n Deposit\r\n \r\n {\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n Progress 1 \r\n {\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n Progress 2 \r\n {\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n Progress 3 \r\n {\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n Final\r\n \r\n {\" \"}\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n updatePaymentStructure({ param: \"Deposit\", value, BusinessDetails, props })\r\n }\r\n />\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n \r\n updatePaymentStructure({\r\n param: \"Progress1\",\r\n value,\r\n BusinessDetails,\r\n props,\r\n })\r\n }\r\n />{\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n \r\n updatePaymentStructure({\r\n param: \"Progress2\",\r\n value,\r\n BusinessDetails,\r\n props,\r\n })\r\n }\r\n />{\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n \r\n updatePaymentStructure({\r\n param: \"Progress3\",\r\n value,\r\n BusinessDetails,\r\n props,\r\n })\r\n }\r\n />{\" \"}\r\n
\r\n \r\n \r\n {paymentStructure?.SupplyOnlyDeposit}%
\r\n \r\n \r\n \r\n
\r\n \r\n
setDeleteKey(null)}\r\n button1Text=\"Delete\"\r\n button1Click={() =>\r\n deleteMarkup({ key: deleteKey, BusinessDetails, setShowMessage, setDeleteKey, props })\r\n }\r\n button2Text=\"No\"\r\n button2Click={() => setDeleteKey(null)}\r\n >\r\n \r\n
Are you sure you would like to delete this markup ({deleteName})?
\r\n
\r\n \r\n
setShowMessage(null)}\r\n />\r\n \r\n );\r\n}\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable react-hooks/rules-of-hooks */\r\nimport React, { useEffect } from \"react\";\r\nimport { API_BASE } from \"../../AppConfig\";\r\nimport { fetchTimeout } from \"../../components/Common\";\r\n\r\nexport const InitaliseLoad = ({ intialise, setBusinessList, setLoading, setIntialise }) => {\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"business/\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setBusinessList(json);\r\n setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setBusinessList([]);\r\n });\r\n }\r\n }, [intialise]);\r\n};\r\n\r\nexport const InitaliseBusiness = ({\r\n intialise,\r\n setNull,\r\n BusinessDetails,\r\n validationSchema,\r\n checkJobStateValidationSchema,\r\n setErrorState,\r\n props,\r\n setIntialise,\r\n}) => {\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let newErrorState = setNull(BusinessDetails);\r\n for (let param in BusinessDetails) {\r\n if (validationSchema?.Distributor?.[param] && param === \"id\") {\r\n let error = \"\";\r\n error = checkJobStateValidationSchema(\r\n validationSchema,\r\n \"Distributor\",\r\n null,\r\n param,\r\n BusinessDetails[param]\r\n );\r\n newErrorState[param] = error;\r\n }\r\n }\r\n setErrorState({ state: newErrorState, props });\r\n \r\n setIntialise(true);\r\n }\r\n }, [intialise]);\r\n};\r\n\r\nexport const validateProgressPaymentPercentages = ({ disableSaveButton, paymentStructure }) => {\r\n useEffect(() => {\r\n const deposit = parseFloat(paymentStructure.SupplyOnlyDeposit);\r\n if (isNaN(deposit) || deposit < 0 || deposit > 100) {\r\n disableSaveButton(true);\r\n } else {\r\n disableSaveButton(false);\r\n }\r\n }, [paymentStructure.SupplyOnlyDeposit]);\r\n};","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { checkDoesObjectHaveContent, deepCopy, toNumber, setNull, deleteCookie } from \"../components/Common\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport { Grid, IconButton } from \"@material-ui/core\";\r\nimport { saveUserToWeb } from \"../redux_store/appState\";\r\nimport { checkJobStateValidationSchema } from \"../redux_store/jobState\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport ManageBusiness from \"./ManageBusiness/ManageBusiness\";\r\nimport Message from \"../components/Message\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n paddingRight: \"10px\",\r\n position: \"fixed\",\r\n right: \"0px\",\r\n top: \"0px\",\r\n height: \"100%\",\r\n width: \"500px\",\r\n borderRadius: \"0px\",\r\n textAlign: \"left\",\r\n display: \"flex\",\r\n backgroundColor: \"#edf0f3e8\",\r\n borderLeft: \"3px solid #0000001f\",\r\n backdropFilter: \"blur(4px)\",\r\n flexDirection: \"column\",\r\n overflow: \"auto\",\r\n },\r\n\r\n col_header: {\r\n backgroundColor: Palette.Control.FieldersDarkBlue,\r\n color: \"white\",\r\n fontSize: \"12px\",\r\n fontFamily: '\"Univers45\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif',\r\n fontWeight: \"200\",\r\n textAlign: \"center\",\r\n padding: \"5px 0px\",\r\n },\r\n\r\n row_header: {\r\n display: \"flex\",\r\n },\r\n\r\n row_style: {\r\n padding: \"0px 4px !important\",\r\n },\r\n\r\n row_cell: {\r\n textAlign: \"center\",\r\n display: \"flex\",\r\n },\r\n\r\n admin_drawer_root: {\r\n top: \"0px\",\r\n left: \"0px\",\r\n width: \"95%\",\r\n height: \"-webkit-fill-available\",\r\n display: \"flex\",\r\n overflow: \"hidden\",\r\n position: \"fixed\",\r\n textAlign: \"left\",\r\n borderLeft: \"3px solid #0000001f\",\r\n borderRadius: \"0px\",\r\n flexDirection: \"column\",\r\n backdropFilter: \"blur(4px)\",\r\n backgroundColor: \"#edf0f3e8\",\r\n },\r\n});\r\n\r\nexport const LogOut = ({ dispatch }) => {\r\n deleteCookie(\"CDS_token\");\r\n localStorage.clear();\r\n dispatch({\r\n type: \"LOG_OUT\",\r\n });\r\n localStorage.clear();\r\n setTimeout(function () {\r\n localStorage.clear();\r\n window.location.reload();\r\n }, 1000);\r\n};\r\n\r\nexport default function ManageUser(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const user = useSelector((state) => state?.app?.user);\r\n const validationSchema = useSelector((state) => state?.config?.validationSchema);\r\n const [newUser, setNewUser] = React.useState(null);\r\n const [errorState, setErrorState] = React.useState(null);\r\n const [showMessage, setShowMessage] = React.useState(false);\r\n const [deleteKey, setDeleteKey] = React.useState(null);\r\n const [deleteName, setDeleteName] = React.useState(null);\r\n const [newMarkup, seNewMarkup] = React.useState(\"\");\r\n const [adminDrawer, setAdminDrawer] = React.useState(null);\r\n const [saveButtonDisabled, setSaveButtonDisabled] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n setNewUser(user);\r\n\r\n let newErrorState = setNull(user);\r\n for (let param in user) {\r\n if (validationSchema?.Customer?.[param]) {\r\n let error = \"\";\r\n error = checkJobStateValidationSchema(validationSchema, \"Customer\", null, param, user[param]);\r\n newErrorState[param] = error;\r\n }\r\n }\r\n for (let param in user?.BusinessDetails) {\r\n if (validationSchema?.Distributor?.[param]) {\r\n let error = \"\";\r\n error = checkJobStateValidationSchema(\r\n validationSchema,\r\n \"Distributor\",\r\n null,\r\n param,\r\n user?.BusinessDetails?.[param]\r\n );\r\n newErrorState.BusinessDetails[param] = error;\r\n }\r\n }\r\n setErrorState(newErrorState);\r\n }, [user, props.open]); // eslint-disable-next-line react-hooks/exhaustive-deps\r\n\r\n const saveUser = () => {\r\n //check no errors\r\n let errors_has_content = checkDoesObjectHaveContent(errorState);\r\n\r\n if (errors_has_content) {\r\n setShowMessage({\r\n type: \"error\",\r\n message: \"Error: [\" + errors_has_content.key + \"] \" + errors_has_content.value,\r\n });\r\n return;\r\n }\r\n\r\n dispatch(saveUserToWeb(newUser, true, true));\r\n props.toggleDrawer();\r\n };\r\n\r\n const setErrorStateBusiness = (businessErrorState) => {\r\n let newErrorState = deepCopy(errorState);\r\n newErrorState.BusinessDetails = businessErrorState;\r\n setErrorState(newErrorState);\r\n };\r\n\r\n const updateNewUser = (param) => (e) => {\r\n let val = e;\r\n if (val?.target?.value !== undefined) val = val?.target?.value;\r\n\r\n let updateUser = deepCopy(newUser);\r\n updateUser[param] = val;\r\n setNewUser(updateUser);\r\n\r\n // validate using customer validation schema\r\n if (validationSchema?.Customer?.[param]) {\r\n let error = \"\";\r\n error = checkJobStateValidationSchema(validationSchema, \"Customer\", null, param, val);\r\n let newErrorState = deepCopy(errorState);\r\n newErrorState[param] = error;\r\n setErrorState(newErrorState);\r\n }\r\n };\r\n\r\n const updateNewUserBusiness = (param) => (e) => {\r\n let updateUser = deepCopy(newUser);\r\n let val = e;\r\n if (val?.target?.value !== undefined) val = val?.target?.value;\r\n updateUser.BusinessDetails[param] = val;\r\n setNewUser(updateUser);\r\n\r\n // validate using customer validation schema\r\n if (validationSchema?.Distributor?.[param]) {\r\n let error = \"\";\r\n error = checkJobStateValidationSchema(validationSchema, \"Distributor\", null, param, val);\r\n let newErrorState = deepCopy(errorState);\r\n newErrorState.BusinessDetails[param] = error;\r\n setErrorState(newErrorState);\r\n }\r\n };\r\n\r\n const setCurrentBusiness = (newBusinessDetails) => {\r\n let updateUser = deepCopy(newUser);\r\n updateUser.BusinessDetails = deepCopy(newBusinessDetails);\r\n setNewUser(updateUser);\r\n };\r\n\r\n const updateMarkup = (key, param, value) => {\r\n let updateUser = deepCopy(newUser);\r\n updateUser.BusinessDetails.MarkupStructure.Markups[key][param] = value;\r\n setNewUser(updateUser);\r\n };\r\n\r\n const deleteMarkup = (key) => {\r\n let updateUser = deepCopy(newUser);\r\n delete updateUser.BusinessDetails.MarkupStructure.Markups[key];\r\n setNewUser(updateUser);\r\n setDeleteKey(null);\r\n };\r\n\r\n const addMarkup = (key) => {\r\n if (key === \"\") return;\r\n if (newUser.BusinessDetails.MarkupStructure.Markups[key]) return;\r\n let updateUser = deepCopy(newUser);\r\n updateUser.BusinessDetails.MarkupStructure.Markups[key] = {\r\n DisplayName: key,\r\n Material: 100,\r\n Installation: 100,\r\n PackingAndDel: 0,\r\n Commission: 0,\r\n };\r\n setNewUser(updateUser);\r\n seNewMarkup(\"\");\r\n };\r\n\r\n const updatePaymentStructure = (param, value) => {\r\n let updateUser = deepCopy(newUser);\r\n updateUser.BusinessDetails.MarkupStructure.PaymentStructure[param] = value;\r\n setNewUser(updateUser);\r\n };\r\n\r\n const LoadAdminTool = (tool) => {\r\n if (tool === \"Colour List\") {\r\n setAdminDrawer(tool);\r\n }\r\n };\r\n\r\n if (!user || !newUser) return <>>;\r\n\r\n const markups = newUser.BusinessDetails.MarkupStructure.Markups;\r\n const paymentStructure = newUser.BusinessDetails.MarkupStructure.PaymentStructure;\r\n\r\n let customer_types = [];\r\n if (markups)\r\n for (let key in markups) {\r\n let item = markups[key];\r\n customer_types.push({\r\n Key: key,\r\n Display: item?.DisplayName ? item.DisplayName : key,\r\n });\r\n }\r\n\r\n let markup_rows = [];\r\n\r\n let input_style = { padding: \"0px\", margin: \"1px\" };\r\n\r\n for (let key in markups) {\r\n let markup = markups[key];\r\n markup_rows.push(\r\n \r\n \r\n \r\n {\r\n setDeleteName(markup?.DisplayName ? markup?.DisplayName : key);\r\n setDeleteKey(key);\r\n }}\r\n >\r\n \r\n \r\n updateMarkup(key, \"DisplayName\", val)}\r\n />\r\n
\r\n \r\n \r\n \r\n updateMarkup(key, \"Material\", val)}\r\n />\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n updateMarkup(key, \"Installation\", val)}\r\n />{\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n updateMarkup(key, \"PackingAndDel\", val)}\r\n />{\" \"}\r\n
\r\n \r\n \r\n \r\n {\" \"}\r\n updateMarkup(key, \"Commission\", val)}\r\n />{\" \"}\r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n\r\n
\r\n User Settings \r\n {user?.apiKey != null && (\r\n <>\r\n \r\n \r\n API KEY: {user?.apiKey} \r\n
\r\n \r\n >\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {toNumber(user?.Role) >= 9 && (\r\n
\r\n )}\r\n\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n LogOut({ dispatch })}\r\n secondary\r\n style={{\r\n alignSelf: \"center\",\r\n }}\r\n >\r\n Log Out\r\n \r\n \r\n\r\n
\r\n
\r\n setDeleteKey(null)}\r\n button1Text=\"Delete\"\r\n button1Click={() => deleteMarkup(deleteKey)}\r\n button2Text=\"No\"\r\n button2Click={() => setDeleteKey(null)}\r\n >\r\n \r\n
Are you sure you would like to delete this markup ({deleteName})?
\r\n
\r\n \r\n\r\n setShowMessage(null)}\r\n />\r\n \r\n );\r\n}","import React from \"react\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport { GetHTMLColour } from \"./Common\";\r\n\r\nfunction ColourChip(props) {\r\n let width = \"1rem\";\r\n if (props.width) width = props.width;\r\n\r\n var divStyle = {\r\n display: \"inline\",\r\n borderRadius: \"2px\",\r\n border: \"0px solid grey\",\r\n paddingLeft: width,\r\n minWidth: width,\r\n minHeight: width,\r\n background: \"#fff\",\r\n };\r\n\r\n if (props.style) divStyle = { ...divStyle, ...props.style };\r\n\r\n let colour = props.colour;\r\n if (colour && GetHTMLColour(props.colour)[0] == \"\")\r\n colour = colour.replace(\" TW\", \"\").replace(\" AM\", \"\").replace(\" LL\", \"\").replace(\" ST\", \"\").replace(\" HP\", \"\");\r\n\r\n var htmlcolours = GetHTMLColour(colour);\r\n // \r\n var top_bg_colour = GetHTMLColour(colour)[0];\r\n var bottom_bg2_colour = GetHTMLColour(colour)[1];\r\n var text_colour = htmlcolours[2];\r\n\r\n if (props.reverse) {\r\n let hold = bottom_bg2_colour;\r\n bottom_bg2_colour = top_bg_colour;\r\n top_bg_colour = hold;\r\n }\r\n\r\n if (top_bg_colour === bottom_bg2_colour) divStyle.background = top_bg_colour;\r\n else divStyle.background = \"linear-gradient(135deg, \" + top_bg_colour + \" 50%, \" + bottom_bg2_colour + \" 50%)\";\r\n\r\n if (top_bg_colour === \"#FFFFFF\" || bottom_bg2_colour === \"#FFFFFF\" || top_bg_colour === \"#FCFCFC\")\r\n divStyle.boxShadow = \"0px 0px 2px rgb(0 0 0 / 20%)\";\r\n // if (bg_colour === bg2_colour) $item_this.find(\".color_sq\").css(\"background\", bg_colour);\r\n // else $item_this.find(\".color_sq\").css(\"background\", \"linear-gradient(135deg, \" + bg_colour + \" 50%, \" + bg2_colour + \" 50%)\");\r\n\r\n return (\r\n \r\n (props.onClick ? props.onClick(e) : \"\")}\r\n >
\r\n \r\n );\r\n}\r\n\r\nexport default ColourChip;\r\n","import React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport { GetColourArray } from \"./Common\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport ColourChip from \"./ColourChip\";\r\n\r\nimport { ChromePicker } from \"react-color\";\r\n\r\nimport InputBase from \"@material-ui/core/InputBase\";\r\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\r\nimport BSL_ControlContainer from \"./BSL_ControlContainer\";\r\n\r\nconst BSL_Input = withStyles((theme) => ({\r\n root: {\r\n border: \"1px solid #6b8799\",\r\n width: \"100%\",\r\n \"label + &\": {\r\n marginTop: theme.spacing(3),\r\n },\r\n \"&.Mui-focused\": {\r\n border: \"2px solid \" + Palette.Control.DarkBlueTrans,\r\n },\r\n \"& .mini\": {\r\n display: \"none\",\r\n },\r\n \"& .chrome-picker\": {\r\n display: \"none\",\r\n },\r\n \"& .colour-chip\": {\r\n display: \"block\",\r\n },\r\n \"& .MuiTabs-root\": {\r\n display: \"none\",\r\n },\r\n \"&.Mui-disabled\": {\r\n opacity: 0.5,\r\n border: \"none\",\r\n },\r\n },\r\n input: {\r\n borderRadius: 2,\r\n position: \"relative\",\r\n backgroundColor: theme.palette.background.paper,\r\n border: \"0px solid #6b8799\",\r\n padding: \"4px 26px 4px 12px\",\r\n transition: theme.transitions.create([\"border-color\", \"box-shadow\"]),\r\n textAlign: \"start\",\r\n width: \"100%\",\r\n // Use the system font instead of the default Roboto font.\r\n font: \"200 14px \" + theme.typography.fontFamily,\r\n \"&:focus\": {\r\n // borderRadius: 4,\r\n border: \"0px solid #002D62\",\r\n boxShadow: \"0 0 0 0.2rem rgba(0,123,255,.25)\",\r\n },\r\n \"& .MuiOutlinedInput-notchedOutline\": {\r\n border: \"0px solid #002D62\",\r\n },\r\n \"&.Mui-focused\": {\r\n border: \"0px solid #002D62\",\r\n },\r\n },\r\n}))(InputBase);\r\n\r\nexport const BSL_MenuItem = withStyles((theme) => ({\r\n root: {\r\n font: \"14px \" + theme.typography.fontFamily,\r\n padding: \"4px 14px 4px 24px\",\r\n minHeight: \"32px\",\r\n\r\n \"&:hover\": {\r\n backgroundColor: Palette.Control.LightGrey,\r\n \"& .MuiListItemIcon-root, & .MuiListItemText-primary\": {\r\n // color: theme.palette.common.white,\r\n },\r\n },\r\n },\r\n}))(MenuItem);\r\n\r\nexport const ColourPicker_MenuItem = withStyles((theme) => ({\r\n root: {\r\n font: \"14px \" + theme.typography.fontFamily,\r\n padding: \"4px 14px 4px 24px\",\r\n flexDirection: \"column\",\r\n minHeight: '\"32px\"',\r\n \"&:hover\": {\r\n // backgroundColor: Palette.Control.LightGrey,\r\n \"& .MuiListItemIcon-root, & .MuiListItemText-primary\": {\r\n // color: theme.palette.common.white,\r\n },\r\n },\r\n \"& .colour-chip\": {\r\n display: \"none !important\",\r\n },\r\n },\r\n}))(MenuItem);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n textShadow: \"none\",\r\n },\r\n input: {\r\n flex: \"1\",\r\n font: \"14px \" + theme.typography.fontFamily,\r\n color: Palette.Control.DarkGrey,\r\n padding: \"4px 0px\",\r\n },\r\n input_tight: {\r\n font: \"13px \" + theme.typography.fontFamily,\r\n padding: \"2px 0px 0px 0px\",\r\n },\r\n margin: {\r\n margin: \"2px 2px 0px 8px\",\r\n },\r\n menu_paper: {\r\n border: \"1px solid \" + Palette.Control.DarkBlueTrans,\r\n // paddingLeft: \"17px\",\r\n \"& .chrome-picker\": {\r\n boxShadow: \"none !important\",\r\n },\r\n \"& .Mui-disabled\": {\r\n opacity: \"1\",\r\n cursor: \"auto\",\r\n pointerEvents: \"inherit\",\r\n backgroundColor: \"inherit\",\r\n boxShadow: \"none !important\",\r\n },\r\n \"& .MuiListItem-button:hover\": {\r\n backgroundColor: \"inherit\",\r\n },\r\n },\r\n thumbnail: {\r\n width: \"80px\",\r\n paddingRight: \"10px\",\r\n objectFit: \"contain\",\r\n height: \"24px\",\r\n },\r\n disabled: {\r\n color: Palette.Control.Grey,\r\n },\r\n}));\r\n\r\nfunction AddRegistered(colour) {\r\n if (!colour || !colour.includes) return colour;\r\n if (colour.includes(\"Basalt\")) colour = colour.replace(\"Basalt\", \"Basalt®\");\r\n if (colour.includes(\"Cove\")) colour = colour.replace(\"Cove\", \"Cove®\");\r\n if (colour.includes(\"Dune\")) colour = colour.replace(\"Dune\", \"Dune®\");\r\n if (colour.includes(\"Evening Haze\")) colour = colour.replace(\"Evening Haze\", \"Evening Haze®\");\r\n if (colour.includes(\"Gully\")) colour = colour.replace(\"Gully\", \"Gully®\");\r\n if (colour.includes(\"Ironstone\")) colour = colour.replace(\"Ironstone\", \"Ironstone®\");\r\n if (colour.includes(\"Jasper\")) colour = colour.replace(\"Jasper\", \"Jasper®\");\r\n if (colour.includes(\"Mangrove\")) colour = colour.replace(\"Mangrove\", \"Mangrove®\");\r\n if (colour.includes(\"Monument\")) colour = colour.replace(\"Monument\", \"Monument®\");\r\n if (colour.includes(\"Shale Grey\")) colour = colour.replace(\"Surfmist\", \"Surfmist™\");\r\n if (colour.includes(\"Surfmist\")) colour = colour.replaceAll(\"Surfmist\", \"Surfmist®\");\r\n if (colour.includes(\"Terrain\")) colour = colour.replace(\"Terrain\", \"Terrain®\");\r\n if (colour.includes(\"Wallaby\")) colour = colour.replace(\"Wallaby\", \"Wallaby®\");\r\n if (colour.includes(\"Windspray\")) colour = colour.replace(\"Windspray\", \"Windspray®\");\r\n if (colour.includes(\"Thredbo White\")) colour = colour.replace(\"Thredbo White\", \"Thredbo White®\");\r\n\r\n if (colour.includes(\"Classic Cream\")) colour = colour.replaceAll(\"Classic Cream\", \"Classic Cream™\");\r\n if (colour.includes(\"Cottage Green\")) colour = colour.replace(\"Cottage Green\", \"Cottage Green®\");\r\n if (colour.includes(\"Deep Ocean\")) colour = colour.replace(\"Deep Ocean\", \"Deep Ocean®\");\r\n if (colour.includes(\"Manor Red\")) colour = colour.replace(\"Manor Red\", \"Manor Red®\");\r\n if (colour.includes(\"Night Sky\")) colour = colour.replace(\"Night Sky\", \"Night Sky®\");\r\n if (colour.includes(\"Pale Eucalypt\")) colour = colour.replace(\"Pale Eucalypt\", \"Pale Eucalypt®\");\r\n if (colour.includes(\"Paperbark\")) colour = colour.replaceAll(\"Paperbark\", \"Paperbark®\");\r\n if (colour.includes(\"Woodland Grey\")) colour = colour.replace(\"Woodland Grey\", \"Woodland Grey®\");\r\n\r\n if (colour.includes(\"TBA\")) colour = \"UNDECIDED\";\r\n return colour;\r\n}\r\n\r\nexport default function BSL_ColourSelector(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const config = useSelector((state) => state.config);\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [color, setColor] = React.useState(props.value ? props.value : \"#ffffff\");\r\n const [collection_tab_index, setcollection_tab_index] = React.useState(0);\r\n\r\n const handleChange = (event) => {\r\n let new_colour = event.target.value;\r\n if (props.onChange) {\r\n let change = props.onChange;\r\n setTimeout(() => {\r\n \r\n // let new_colour = tinycolor(new_color.rgb);\r\n // );\r\n change(new_colour);\r\n }, 0);\r\n }\r\n };\r\n const handleChangeCustom = (colour) => {\r\n let new_colour = colour;\r\n setColor(new_colour.hex);\r\n if (props.onChange) {\r\n let change = props.onChange;\r\n setTimeout(() => {\r\n \r\n // let new_colour = tinycolor(new_color.rgb);\r\n // );\r\n change(new_colour.hex);\r\n }, 0);\r\n }\r\n };\r\n\r\n function hasSomeParentTheClass(element, classname) {\r\n if (!element) return false;\r\n if (element?.className && element?.className?.split && element?.className?.split(\" \").indexOf(classname) >= 0)\r\n return true;\r\n return element.parentNode && hasSomeParentTheClass(element.parentNode, classname);\r\n }\r\n\r\n const {\r\n label,\r\n value,\r\n style,\r\n dark,\r\n width,\r\n undecided,\r\n defaultColour,\r\n useUndecided = false,\r\n colourMatch,\r\n reverseColours = false,\r\n } = props;\r\n\r\n let selectedColour = props.value;\r\n if (undecided) selectedColour = \"TBA\";\r\n\r\n let menu_items = [];\r\n if (props.placeholder)\r\n menu_items.push(\r\n \r\n {props.placeholder}\r\n \r\n );\r\n\r\n // \r\n let colours = GetColourArray(props.colourList, config.colour_arrays);\r\n\r\n if (colours !== []) {\r\n // if (colours.length > 1 && useUndecided) {\r\n // if (defaultColour !== null) menu_items.push( UNDECIDED );\r\n // else menu_items.push(UNDECIDED );\r\n // }\r\n for (var colour of colours) {\r\n let colour_trim = colour.trim();\r\n let display_colour = colour_trim;\r\n let display_text = AddRegistered(colour_trim);\r\n\r\n if (colourMatch && colour_trim in colourMatch) {\r\n if (colours.includes(colourMatch[colour_trim])) {\r\n display_colour = colourMatch[colour_trim];\r\n display_text = display_text + \" (\" + AddRegistered(colourMatch[colour_trim]) + \")\";\r\n } else if (colourMatch[colour_trim].includes(\"/\")) {\r\n let single_colour = colourMatch[colour_trim].split(\"/\")[0];\r\n if (colours.includes(single_colour)) {\r\n display_colour = single_colour;\r\n display_text = display_text + \" (\" + AddRegistered(single_colour) + \")\";\r\n } else {\r\n single_colour = colourMatch[colour_trim].split(\"/\")[1];\r\n if (colours.includes(single_colour)) {\r\n display_colour = single_colour;\r\n display_text = display_text + \" (\" + AddRegistered(single_colour) + \")\";\r\n } else {\r\n // Not a valid colour from list, show colour as invalid option\r\n display_colour = \"TBA\";\r\n display_text = display_text + ` (${colourMatch[colour_trim]} - Not Valid)`;\r\n }\r\n }\r\n } else {\r\n // Not a valid colour from list, show colour as invalid option\r\n display_colour = \"TBA\";\r\n display_text = display_text + ` (${colourMatch[colour_trim]} - Not Valid)`;\r\n }\r\n }\r\n\r\n menu_items.push(\r\n \r\n \r\n {display_text} \r\n \r\n );\r\n }\r\n\r\n if (!colours.includes(selectedColour) && colours.includes(selectedColour + \"/Grey\")) {\r\n selectedColour = selectedColour + \"/Grey\";\r\n }\r\n }\r\n\r\n return (\r\n \r\n {props.custom_select && (\r\n {\r\n setOpen(true);\r\n }}\r\n onClose={(e) => {\r\n if (hasSomeParentTheClass(e.target, \"chrome-picker\")) return;\r\n if (hasSomeParentTheClass(e.target, \"color-picker\")) return;\r\n setOpen(false);\r\n if (props.onClose) {\r\n props.onClose(color);\r\n }\r\n }}\r\n open={open}\r\n input={ }\r\n >\r\n {\r\n e.stopPropagation();\r\n e.bubbles = false;\r\n }}\r\n >\r\n \r\n {/* setcollection_tab_index(newValue)}>\r\n \r\n \r\n */}\r\n \r\n {props.mini ? \"\" : colourHexToName(color)}\r\n \r\n \r\n )}\r\n {!props.custom_select && (\r\n }\r\n >\r\n {menu_items}\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nconst colours = {\r\n \"#f0f8ff\": \"AliceBlue\",\r\n \"#faebd7\": \"AntiqueWhite\",\r\n \"#faebd7\": \"Aqua\",\r\n \"#7fffd4\": \"Aquamarine\",\r\n \"#f0ffff\": \"Azure\",\r\n \"#f5f5dc\": \"Beige\",\r\n \"#ffe4c4\": \"Bisque\",\r\n \"#000000\": \"Black\",\r\n \"#ffebcd\": \"BlanchedAlmond\",\r\n \"#0000ff\": \"Blue\",\r\n \"#8a2be2\": \"BlueViolet\",\r\n \"#a52a2a\": \"Brown\",\r\n \"#deb887\": \"BurlyWood\",\r\n \"#5f9ea0\": \"CadetBlue\",\r\n \"#7fff00\": \"Chartreuse\",\r\n \"#d2691e\": \"Chocolate\",\r\n \"#ff7f50\": \"Coral\",\r\n \"#6495ed\": \"CornflowerBlue\",\r\n \"#fff8dc\": \"Cornsilk\",\r\n \"#dc143c\": \"Crimson\",\r\n \"#00ffff\": \"Cyan\",\r\n \"#00008b\": \"DarkBlue\",\r\n \"#008b8b\": \"DarkCyan\",\r\n \"#b8860b\": \"DarkGoldenRod\",\r\n \"#a9a9a9\": \"DarkGray\",\r\n \"#006400\": \"DarkGrey\",\r\n \"#006400\": \"DarkGreen\",\r\n \"#bdb76b\": \"DarkKhaki\",\r\n \"#8b008b\": \"DarkMagenta\",\r\n \"#556b2f\": \"DarkOliveGreen\",\r\n \"#ff8c00\": \"DarkOrange\",\r\n \"#9932cc\": \"DarkOrchid\",\r\n \"#8b0000\": \"DarkRed\",\r\n \"#e9967a\": \"DarkSalmon\",\r\n \"#8fbc8f\": \"DarkSeaGreen\",\r\n \"#483d8b\": \"DarkSlateBlue\",\r\n \"#2f4f4f\": \"DarkSlateGray\",\r\n \"#2f4f4f\": \"DarkSlateGrey\",\r\n \"#00ced1\": \"DarkTurquoise\",\r\n \"#9400d3\": \"DarkViolet\",\r\n \"#ff1493\": \"DeepPink\",\r\n \"#00bfff\": \"DeepSkyBlue\",\r\n \"#696969\": \"DimGray\",\r\n \"#696969\": \"DimGrey\",\r\n \"#1e90ff\": \"DodgerBlue\",\r\n \"#b22222\": \"FireBrick\",\r\n \"#fffaf0\": \"FloralWhite\",\r\n \"#228b22\": \"ForestGreen\",\r\n \"#228b22\": \"Fuchsia\",\r\n \"#dcdcdc\": \"Gainsboro\",\r\n \"#f8f8ff\": \"GhostWhite\",\r\n \"#ffd700\": \"Gold\",\r\n \"#daa520\": \"GoldenRod\",\r\n \"#808080\": \"Gray\",\r\n \"#adff2f\": \"Grey\",\r\n \"#008000\": \"Green\",\r\n \"#adff2f\": \"GreenYellow\",\r\n \"#f0fff0\": \"HoneyDew\",\r\n \"#ff69b4\": \"HotPink\",\r\n \"#cd5c5c\": \"IndianRed\",\r\n \"#4b0082\": \"Indigo\",\r\n \"#fffff0\": \"Ivory\",\r\n \"#f0e68c\": \"Khaki\",\r\n \"#e6e6fa\": \"Lavender\",\r\n \"#fff0f5\": \"LavenderBlush\",\r\n \"#7cfc00\": \"LawnGreen\",\r\n \"#fffacd\": \"LemonChiffon\",\r\n \"#add8e6\": \"LightBlue\",\r\n \"#f08080\": \"LightCoral\",\r\n \"#e0ffff\": \"LightCyan\",\r\n \"#fafad2\": \"LightGoldenRodYellow\",\r\n \"#fafad2\": \"LightGray\",\r\n \"#d3d3d3\": \"LightGrey\",\r\n \"#90ee90\": \"LightGreen\",\r\n \"#ffb6c1\": \"LightPink\",\r\n \"#ffa07a\": \"LightSalmon\",\r\n \"#20b2aa\": \"LightSeaGreen\",\r\n \"#87cefa\": \"LightSkyBlue\",\r\n \"#778899\": \"LightSlateGray\",\r\n \"#778899\": \"LightSlateGrey\",\r\n \"#b0c4de\": \"LightSteelBlue\",\r\n \"#ffffe0\": \"LightYellow\",\r\n \"#00ff00\": \"Lime\",\r\n \"#32cd32\": \"LimeGreen\",\r\n \"#faf0e6\": \"Linen\",\r\n \"#ff00ff\": \"Magenta\",\r\n \"#800000\": \"Maroon\",\r\n \"#66cdaa\": \"MediumAquaMarine\",\r\n \"#0000cd\": \"MediumBlue\",\r\n \"#ba55d3\": \"MediumOrchid\",\r\n \"#9370d8\": \"MediumPurple\",\r\n \"#3cb371\": \"MediumSeaGreen\",\r\n \"#7b68ee\": \"MediumSlateBlue\",\r\n \"#00fa9a\": \"MediumSpringGreen\",\r\n \"#48d1cc\": \"MediumTurquoise\",\r\n \"#c71585\": \"MediumVioletRed\",\r\n \"#191970\": \"MidnightBlue\",\r\n \"#f5fffa\": \"MintCream\",\r\n \"#ffe4e1\": \"MistyRose\",\r\n \"#ffe4b5\": \"Moccasin\",\r\n \"#ffdead\": \"NavajoWhite\",\r\n \"#000080\": \"Navy\",\r\n \"#fdf5e6\": \"OldLace\",\r\n \"#808000\": \"Olive\",\r\n \"#6b8e23\": \"OliveDrab\",\r\n \"#ffa500\": \"Orange\",\r\n \"#ff4500\": \"OrangeRed\",\r\n \"#da70d6\": \"Orchid\",\r\n \"#eee8aa\": \"PaleGoldenRod\",\r\n \"#98fb98\": \"PaleGreen\",\r\n \"#afeeee\": \"PaleTurquoise\",\r\n \"#d87093\": \"PaleVioletRed\",\r\n \"#ffefd5\": \"PapayaWhip\",\r\n \"#ffdab9\": \"PeachPuff\",\r\n \"#cd853f\": \"Peru\",\r\n \"#ffc0cb\": \"Pink\",\r\n \"#dda0dd\": \"Plum\",\r\n \"#b0e0e6\": \"PowderBlue\",\r\n \"#800080\": \"Purple\",\r\n \"#663399\": \"RebeccaPurple\",\r\n \"#ff0000\": \"Red\",\r\n \"#bc8f8f\": \"RosyBrown\",\r\n \"#4169e1\": \"RoyalBlue\",\r\n \"#8b4513\": \"SaddleBrown\",\r\n \"#fa8072\": \"Salmon\",\r\n \"#f4a460\": \"SandyBrown\",\r\n \"#2e8b57\": \"SeaGreen\",\r\n \"#fff5ee\": \"SeaShell\",\r\n \"#a0522d\": \"Sienna\",\r\n \"#c0c0c0\": \"Silver\",\r\n \"#87ceeb\": \"SkyBlue\",\r\n \"#6a5acd\": \"SlateBlue\",\r\n \"#708090\": \"SlateGray\",\r\n \"#708090\": \"SlateGrey\",\r\n \"#fffafa\": \"Snow\",\r\n \"#00ff7f\": \"SpringGreen\",\r\n \"#4682b4\": \"SteelBlue\",\r\n \"#d2b48c\": \"Tan\",\r\n \"#008080\": \"Teal\",\r\n \"#d8bfd8\": \"Thistle\",\r\n \"#ff6347\": \"Tomato\",\r\n \"#40e0d0\": \"Turquoise\",\r\n \"#ee82ee\": \"Violet\",\r\n \"#f5deb3\": \"Wheat\",\r\n \"#ffffff\": \"White\",\r\n \"#f5f5f5\": \"WhiteSmoke\",\r\n \"#ffff00\": \"Yellow\",\r\n \"#9acd32\": \"YellowGreen\",\r\n};\r\nfunction colourHexToName(colour) {\r\n if (typeof colours[colour.toLowerCase()] != \"undefined\") return colours[colour.toLowerCase()];\r\n\r\n return colour;\r\n}\r\n","import React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport { Chip, IconButton } from \"@material-ui/core\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport BSL_ColourSelector from \"../components/BSL_ColourSelector\";\r\nimport ColourChip from \"../components/ColourChip\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n overflow: \"auto\",\r\n height: \"90%\",\r\n },\r\n colour_array_row: {\r\n display: \"flex\",\r\n margin: \"3px 0px\",\r\n padding: \"3px 0px\",\r\n borderBottom: \"1px dotted grey\",\r\n },\r\n colour_array_row_header: {\r\n display: \"flex\",\r\n minWidth: \"300px\",\r\n },\r\n colour_array_row_content: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n flex: \"1\",\r\n },\r\n colour_row_content: {\r\n display: \"flex\",\r\n flexDirectio: \"column\",\r\n flex: \"1\",\r\n },\r\n label: { flex: \"none\", padding: \"0px\", margin: \"1px\" },\r\n});\r\n\r\nexport default function ManageColours(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n // const [password, setPassword] = React.useState(\"\");\r\n const config = useSelector((state) => state.config);\r\n window.config = config;\r\n let input_style = { padding: \"0px\", margin: \"1px\" };\r\n let list_input_style = { padding: \"0px\", margin: \"1px\", width: \"80%\" };\r\n\r\n const handleDelete = (chipToDelete) => () => {\r\n // setChipData((chips) => chips.filter((chip) => chip.key !== chipToDelete.key));\r\n };\r\n\r\n let colour_rows = [];\r\n let valid_colours = [];\r\n\r\n for (let colour_key in config.colour_map) {\r\n // let colous_csv = \"\";\r\n // for (let colour of config.colour_arrays[colour_array_key]) {\r\n // colous_csv += (colous_csv !== \"\" ? \", \" : \"\") + colour;\r\n // }\r\n valid_colours.push(colour_key);\r\n colour_rows.push(\r\n \r\n
\r\n {}}>\r\n \r\n \r\n updateMarkup(key, \"DisplayName\", val)}\r\n />\r\n
\r\n
\r\n dispatch(updateSiteParameters(\"ExistingStructure.RoofColour\", colour))}\r\n />\r\n dispatch(updateSiteParameters(\"ExistingStructure.RoofColour\", colour))}\r\n />\r\n dispatch(updateSiteParameters(\"ExistingStructure.RoofColour\", colour))}\r\n />\r\n\r\n updateMarkup(key, \"DisplayName\", val)}\r\n />\r\n updateMarkup(key, \"DisplayName\", val)}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n let colour_array_rows = [];\r\n\r\n for (let colour_array_key in config.colour_arrays) {\r\n let colours_chips = [];\r\n for (let colour of config.colour_arrays[colour_array_key]) {\r\n colours_chips.push(\r\n \r\n \r\n {colour}\r\n >\r\n }\r\n onDelete={handleDelete(colour)}\r\n />\r\n );\r\n }\r\n \r\n colour_array_rows.push(\r\n \r\n
\r\n {}}>\r\n \r\n \r\n {\r\n alert(\r\n \"warning: changing the name of an existing colour list is not recommeneded and may cause any linked product list or offering item to lose their colour references.\"\r\n );\r\n }}\r\n // onBlur={(val) => updateMarkup(key, \"DisplayName\", val)}\r\n />\r\n
\r\n
\r\n {colours_chips}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n
\r\n Manage Colour Lists \r\n {colour_array_rows}\r\n\r\n \r\n addMarkup(val)}\r\n />\r\n
\r\n \r\n
\r\n Manage Colours \r\n \r\n
\r\n
Main Colour
\r\n
Secondary Colour
\r\n
Contrast Colour
\r\n
Opacity
\r\n
Code
\r\n
\r\n {colour_rows}\r\n\r\n \r\n addMarkup(val)}\r\n />\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport {\r\n checkDoesObjectHaveContent,\r\n deepCopy,\r\n fetchTimeout,\r\n BaseURL,\r\n getCookie,\r\n setCookie,\r\n} from \"../components/Common\";\r\nimport { API_BASE } from \"../AppConfig\";\r\nimport BSL_Select from \"../components/BSL_Select\";\r\nimport ManageBusiness from \"../components_main/ManageBusiness/ManageBusiness\";\r\nimport { updateBusiness, loadUser } from \"../redux_store/appState\";\r\nimport { checkJobStateValidationSchema } from \"../redux_store/jobState\";\r\n\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { LinearProgress } from \"@material-ui/core\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport Message from \"../components/Message\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n height: \"90%\",\r\n overflow: \"auto\",\r\n },\r\n});\r\n\r\nexport default function ManageUsers(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [intialise, setIntialise] = React.useState(false);\r\n const [loading, setLoading] = React.useState(true);\r\n const [exporting, setExporting] = React.useState(false);\r\n const [currentBusinessId, setCurrentBusinessId] = React.useState(\"\");\r\n const [showDeleteBusiness, setShowDeleteBusiness] = React.useState(false);\r\n const [showArchiveBusiness, setShowArchiveBusiness] = React.useState(false);\r\n const [currentBusiness, setCurrentBusiness] = React.useState(null);\r\n const [currentBusinessUsers, setCurrentBusinessUsers] = React.useState(null);\r\n const [currentUserId, setCurrentUserId] = React.useState(null);\r\n const [currentUser, setCurrentUser] = React.useState(null);\r\n const [businessList, setBusinessList] = React.useState([]);\r\n const [allbusinessList, setAllBusinessList] = React.useState([]);\r\n const [errorStateBusiness, setErrorStateBusiness] = React.useState({});\r\n const [errorStateUser, setErrorStateUser] = React.useState({});\r\n const [showMessage, setShowMessage] = React.useState(false);\r\n const [showCodeGenerator, setShowCodeGenerator] = React.useState(false);\r\n const [businessName, setBusinessName] = React.useState(\"\");\r\n const [codeSuggestion, setCodeSuggestion] = React.useState(\"---\");\r\n const [saveButtonDisabled, setSaveButtonDisabled] = React.useState(false);\r\n\r\n const validationSchema = useSelector((state) => state.config.validationSchema);\r\n const user = useSelector((state) => state.app.user);\r\n\r\n let isAdmin = true;\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"business?isAdmin=\" + isAdmin;\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setAllBusinessList(json);\r\n setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setAllBusinessList([]);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"business/\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setBusinessList(json);\r\n setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setBusinessList([]);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n React.useEffect(() => {\r\n if ((window.debug && window.location.href.includes(\"static\")) || window.location.href.includes(\"use_cache\"))\r\n return;\r\n if (currentBusinessId) {\r\n let api_url = API_BASE() + \"business/\" + currentBusinessId;\r\n setLoading(true);\r\n setCurrentBusiness(null);\r\n setCurrentBusinessUsers(null);\r\n setCurrentUserId(null);\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setCurrentBusiness(json);\r\n\r\n //get users\r\n api_url = API_BASE() + \"users/\" + currentBusinessId;\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setCurrentBusinessUsers(json);\r\n setLoading(false);\r\n })\r\n .catch((e) => {\r\n \r\n });\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(false);\r\n });\r\n } else {\r\n setCurrentBusiness(null);\r\n }\r\n }, [currentBusinessId]);\r\n\r\n const archiveBusiness = () => {\r\n let archivedBusiness = deepCopy(currentBusiness);\r\n if (archivedBusiness.Status === \"ARCHIVED\") archivedBusiness.Status = \"ACTIVE\";\r\n else archivedBusiness.Status = \"ARCHIVED\";\r\n setCurrentBusiness(archivedBusiness);\r\n saveBusinessData(archivedBusiness);\r\n setShowArchiveBusiness(false);\r\n };\r\n\r\n const deleteBusiness = () => {\r\n let api_url = API_BASE() + \"business/\" + currentBusinessId;\r\n setLoading(true);\r\n fetchTimeout(api_url, {\r\n method: \"DELETE\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setLoading(false);\r\n setIntialise(false);\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(false);\r\n setIntialise(false);\r\n });\r\n setCurrentBusiness(null);\r\n setShowDeleteBusiness(false);\r\n };\r\n\r\n const saveBusiness = () => {\r\n saveBusinessData(currentBusiness);\r\n };\r\n const saveBusinessData = (businessData = null) => {\r\n if (currentBusinessId) {\r\n let errors_has_content = checkDoesObjectHaveContent(errorStateBusiness);\r\n\r\n if (errors_has_content) {\r\n setShowMessage({\r\n type: \"error\",\r\n message: \"Error: Business \" + errors_has_content.key + \" \" + errors_has_content.value,\r\n });\r\n return;\r\n }\r\n\r\n if (businessData === null) businessData = deepCopy(currentBusiness);\r\n\r\n let api_url = API_BASE() + \"business/\" + currentBusinessId;\r\n setLoading(true);\r\n fetchTimeout(api_url, {\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(businessData),\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setLoading(false);\r\n setCurrentBusinessId(businessData.id);\r\n setIntialise(false);\r\n if (currentBusinessId === user.BusinessDetails.id) {\r\n dispatch(updateBusiness(businessData));\r\n }\r\n setShowMessage({\r\n type: \"Success\",\r\n message: \"Success updating business details\",\r\n });\r\n })\r\n .catch((e) => {\r\n setShowMessage({\r\n type: \"error\",\r\n message: \"Error saving business details\",\r\n });\r\n\r\n setLoading(false);\r\n });\r\n }\r\n };\r\n\r\n const actUser = (email) => {\r\n let cds_token = getCookie(\"CDS_token\");\r\n let SF_user = email;\r\n\r\n if (cds_token && SF_user) {\r\n dispatch(loadUser(SF_user, \"cent2021\")).then((result) => {\r\n \r\n if (!result) {\r\n setTimeout(function () {\r\n dispatch(loadUser(SF_user, \"cent2021\")).then((result) => {\r\n \r\n if (!result) {\r\n alert(\"Error loading user 2\");\r\n } else if (result.Error) {\r\n alert(\"Error loading user 3\");\r\n }\r\n });\r\n }, 2000);\r\n } else if (result.Error) {\r\n alert(\"Error loading user\");\r\n }\r\n });\r\n }\r\n };\r\n\r\n const deleteUser = () => {};\r\n const saveUser = () => {\r\n if (currentUserId && currentUser) {\r\n let errors_has_content = checkDoesObjectHaveContent(errorStateUser);\r\n\r\n if (errors_has_content) {\r\n setShowMessage({\r\n type: \"error\",\r\n message: \"Error: User \" + errors_has_content.key + \" \" + errors_has_content.value,\r\n });\r\n return;\r\n }\r\n\r\n let api_url = API_BASE() + \"user/\" + btoa(currentUser.id);\r\n setLoading(true);\r\n fetchTimeout(api_url, {\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(currentUser),\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n //get users\r\n api_url = API_BASE() + \"users/\" + currentBusinessId;\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setCurrentBusinessUsers(json);\r\n setLoading(false);\r\n })\r\n .catch((e) => {\r\n \r\n setCurrentBusinessUsers(null);\r\n setLoading(false);\r\n });\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(false);\r\n });\r\n }\r\n };\r\n\r\n const updateNewUser = (param) => (e, value) => {\r\n let val = value ? value : e;\r\n if (val?.target?.value) val = e?.target?.value;\r\n\r\n let updateUser = deepCopy(currentUser);\r\n updateUser[param] = val;\r\n setCurrentUser(updateUser);\r\n\r\n // validate using customer validation schema\r\n if (validationSchema?.Customer?.[param]) {\r\n let error = \"\";\r\n error = checkJobStateValidationSchema(validationSchema, \"Customer\", null, param, val);\r\n let newErrorState = deepCopy(errorStateUser);\r\n newErrorState[param] = error;\r\n setErrorStateUser(newErrorState);\r\n }\r\n };\r\n\r\n const updateSuggestion = (name) => {\r\n setBusinessName(name);\r\n let name_trimmed = name.trim().toUpperCase();\r\n let split = name_trimmed.split(\" \");\r\n let first = name_trimmed.length > 0 ? name_trimmed[0] : \"X\";\r\n let second = name_trimmed.length > 1 ? name_trimmed[1] : \"X\";\r\n let third = name_trimmed.length > 2 ? name_trimmed[2] : \"X\";\r\n\r\n if (split.length > 2) {\r\n second = split[1][0];\r\n third = split[2][0];\r\n } else if (split.length > 1) {\r\n third = split[1][0];\r\n }\r\n\r\n let code = first + second + third;\r\n let taken = false;\r\n\r\n for (var item of allbusinessList) {\r\n if (item.id === code) taken = true;\r\n }\r\n\r\n if (taken) {\r\n let first = name_trimmed.length > 0 ? name_trimmed[0] : \"X\";\r\n let second = name_trimmed.length > 1 ? name_trimmed[1] : \"X\";\r\n let third = name_trimmed.length > 2 ? name_trimmed[2] : \"X\";\r\n code = first + second + third;\r\n taken = false;\r\n\r\n for (var item of allbusinessList) {\r\n if (item.id === code) taken = true;\r\n }\r\n\r\n if (taken) {\r\n let first = name_trimmed.length > 0 ? name_trimmed[0] : \"X\";\r\n let second = name_trimmed.length > 1 ? name_trimmed[1] : \"X\";\r\n let third = name_trimmed.length > 2 ? name_trimmed[2] : \"X\";\r\n code = first + second + third;\r\n taken = false;\r\n\r\n for (var item of allbusinessList) {\r\n if (item.id === code) taken = true;\r\n }\r\n\r\n if (taken) {\r\n let first = name_trimmed.length > 0 ? name_trimmed[0] : \"X\";\r\n let second = name_trimmed.length > 2 ? name_trimmed[2] : \"X\";\r\n let third = name_trimmed.length > 2 ? name_trimmed[name_trimmed.length - 1] : \"X\";\r\n code = first + second + third;\r\n taken = false;\r\n\r\n for (var item of allbusinessList) {\r\n if (item.id === code) taken = true;\r\n }\r\n\r\n if (taken) {\r\n let first = name_trimmed.length > 0 ? name_trimmed[0] : \"X\";\r\n let second = name_trimmed.length > 2 ? name_trimmed[2] : \"X\";\r\n let third = name_trimmed.length > 2 ? name_trimmed[name_trimmed.length - 1] : \"X\";\r\n\r\n if (split.length > 2) {\r\n second = split[1][0];\r\n third = split[2][split[2].length - 1];\r\n } else if (split.length > 1) {\r\n third = split[1][split[1].length - 1];\r\n }\r\n\r\n code = first + second + third;\r\n taken = false;\r\n\r\n for (var item of allbusinessList) {\r\n if (item.id === code) taken = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!taken) {\r\n setCodeSuggestion(code.toUpperCase());\r\n } else {\r\n setCodeSuggestion(\"---\");\r\n }\r\n };\r\n\r\n const exportUsers = () => {\r\n setExporting(true);\r\n const apiUrl = API_BASE() + \"users/all\";\r\n\r\n fetchTimeout(apiUrl, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n const csvData = jsonToCSV(json);\r\n const currentDate = new Date();\r\n const dateString = currentDate.toISOString().split(\"T\")[0];\r\n const filename = `user_data_${dateString}.csv`;\r\n setExporting(false);\r\n downloadCSV(csvData, filename);\r\n })\r\n .catch((e) => {\r\n setExporting(false);\r\n console.error(\"User export error\", e);\r\n });\r\n };\r\n\r\n function jsonToCSV(jsonData, headers) {\r\n // Use keys from the first object as headers if headers aren't provided\r\n if (!headers && jsonData.length > 0) {\r\n headers = Object.keys(jsonData[0]);\r\n }\r\n\r\n // Map the headers to a CSV string\r\n const csvRows = [\r\n headers.join(\",\"), // Join headers to create the first row\r\n ...jsonData.map((row) => headers.map((fieldName) => JSON.stringify(row[fieldName] || \"\")).join(\",\")), // Map each json object to a CSV row\r\n ];\r\n\r\n return csvRows.join(\"\\n\");\r\n }\r\n\r\n function downloadCSV(csvData, filename = \"export.csv\") {\r\n const blob = new Blob([csvData], { type: \"text/csv;charset=utf-8;\" });\r\n const link = document.createElement(\"a\");\r\n const url = URL.createObjectURL(blob);\r\n\r\n link.setAttribute(\"href\", url);\r\n link.setAttribute(\"download\", filename);\r\n link.style.visibility = \"hidden\";\r\n document.body.appendChild(link);\r\n\r\n link.click();\r\n\r\n document.body.removeChild(link);\r\n }\r\n\r\n React.useEffect(() => {\r\n if (currentUserId) {\r\n let api_url = API_BASE() + \"user/\" + btoa(currentUserId) + \"/cent2021\";\r\n setLoading(true);\r\n setCurrentUser(null);\r\n setErrorStateUser({});\r\n\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setCurrentUser(json);\r\n setLoading(false);\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(false);\r\n });\r\n } else {\r\n setCurrentUser(null);\r\n setErrorStateUser({});\r\n }\r\n }, [currentUserId]);\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"business?isAdmin=\" + isAdmin;\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setAllBusinessList(json);\r\n setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setAllBusinessList([]);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"business/\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setBusinessList(json);\r\n setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setBusinessList([]);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n let roleTypes = [\r\n { Key: 10, Display: \"Dealer Admin\" },\r\n { Key: 0, Display: \"Dealer Standard\" },\r\n ];\r\n\r\n if (currentBusiness) {\r\n if (user.Role >= 90 && currentBusiness.Type === \"BBC\") roleTypes.unshift({ Key: 90, Display: \"BBC Standard\" });\r\n if (user.Role >= 98 && currentBusiness.Type === \"BBC\")\r\n roleTypes.unshift({ Key: 91, Display: \"BBC State Admin\" });\r\n if (user.Role >= 99 && (currentBusiness.Type === \"Engineer\" || currentBusiness.Type === \"BBC\"))\r\n roleTypes.unshift({ Key: 99, Display: \"BBC Super\" });\r\n if (currentBusiness.Type === \"Engineer\") roleTypes = [{ Key: 92, Display: \"Engineer\" }];\r\n }\r\n\r\n let businessesSorted = [];\r\n businessesSorted.push({ disabled: true, Key: \"[BBC]\", Display: \"[BBC Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status !== \"ARCHIVED\" && item.Type === \"BBC\")\r\n businessesSorted.push({ Key: item.id, Display: item.id + \"-\" + item.Name });\r\n }\r\n\r\n businessesSorted.push({ disabled: true, Key: \"[Engineers]\", Display: \"[Engineers Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status !== \"ARCHIVED\" && item.Type === \"Engineer\")\r\n businessesSorted.push({ Key: item.id, Display: item.id + \"-\" + item.Name });\r\n }\r\n\r\n businessesSorted.push({ disabled: true, Key: \"[Customers]\", Display: \"[Customers Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status !== \"ARCHIVED\" && (!item.Type || (item.Type !== \"Engineer\" && item.Type !== \"BBC\")))\r\n businessesSorted.push({ Key: item.id, Display: item.id + \"-\" + item.Name });\r\n }\r\n\r\n businessesSorted.push({ disabled: true, Key: \"[Archived]\", Display: \"[Archived Licenses]\" });\r\n for (var item of businessList) {\r\n if (item.Status === \"ARCHIVED\")\r\n businessesSorted.push({\r\n Key: item.id,\r\n Display: (\r\n \r\n {item.id + \"-\" + item.Name} \r\n \r\n ),\r\n });\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n {\r\n setCurrentBusinessId(e.target.value);\r\n }}\r\n />\r\n\r\n setShowCodeGenerator(true)}\r\n style={{\r\n maxWidth: \"300px\",\r\n maxHeight: \"32px\",\r\n alignSelf: \"end\",\r\n marginLeft: \"72px\",\r\n marginBottom: \"7px\",\r\n }}\r\n />\r\n\r\n \r\n\r\n
\r\n \r\n {loading && }\r\n {currentBusiness && (\r\n \r\n \r\n \r\n \r\n \r\n {currentBusiness?.Status !== \"ARCHIVED\" && (\r\n \r\n )}\r\n setShowArchiveBusiness(true)}\r\n style={{ margin: \"10px\" }}\r\n />\r\n \r\n\r\n {loading && }\r\n \r\n\r\n \r\n Manage Users \r\n {\r\n return {\r\n Key: user.id,\r\n Display:\r\n user.FirstName + (user.LastName ? \" \" + user.LastName : \"\"),\r\n };\r\n })\r\n : []\r\n }\r\n onChange={(e, val) => {\r\n setCurrentUserId(val);\r\n }}\r\n />\r\n\r\n {currentUserId && currentUser && (\r\n \r\n Editing Details for{\" \"}\r\n {currentUser.FirstName +\r\n (currentUser.LastName ? \" \" + currentUser.LastName : \"\")}\r\n \r\n User Settings \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {currentUser.Role <= user.Role && (\r\n {\r\n let updateUser = deepCopy(currentUser);\r\n updateUser[\"Role\"] = val;\r\n updateUser[\"RoleName\"] = \"\";\r\n for (let role of roleTypes) {\r\n if (role.Key === val) updateUser[\"RoleName\"] = role.Display;\r\n }\r\n setCurrentUser(updateUser);\r\n }}\r\n helperText={\"*sync with Salesforce\"}\r\n />\r\n )}\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {user.Role >= 99 && (\r\n {\r\n actUser(currentUser.Email);\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n )}\r\n \r\n
setShowMessage(null)}\r\n />\r\n\r\n {showCodeGenerator && (\r\n setShowCodeGenerator(false)}\r\n button1Text={\"DONE\"}\r\n button1Click={() => setShowCodeGenerator(false)}\r\n >\r\n \r\n
updateSuggestion(value)}\r\n onChange={(value) => updateSuggestion(value)}\r\n />\r\n \r\n SUGGESTED CODE:\r\n
\r\n
\r\n {codeSuggestion}\r\n
\r\n
\r\n \r\n \r\n )}\r\n\r\n {currentBusiness && showArchiveBusiness && (\r\n setShowArchiveBusiness(false)}\r\n button1Text={currentBusiness?.Status === \"ARCHIVED\" ? \"ACTIVE\" : \"ARCHIVED\"}\r\n button1Click={() => archiveBusiness(currentBusinessId)}\r\n button2Text=\"No\"\r\n button2Click={() => setShowArchiveBusiness(false)}\r\n >\r\n \r\n
\r\n Are you sure you would like to{\" \"}\r\n {currentBusiness?.Status === \"ARCHIVED\" ? \"SET ACTIVE\" : \"ARCHIVE\"} this Business (\r\n {currentBusiness.Name})?\r\n
\r\n
\r\n \r\n )}\r\n\r\n {currentBusiness && showDeleteBusiness && (\r\n setShowDeleteBusiness(false)}\r\n button1Text=\"IRREVERSIBLY DELETE\"\r\n button1Click={() => deleteBusiness(currentBusinessId)}\r\n button2Text=\"No\"\r\n button2Click={() => setShowDeleteBusiness(false)}\r\n >\r\n \r\n
\r\n Are you sure you would like to IRREVERSIBLY DELETE this Business ({currentBusiness.Name})?\r\n
\r\n
\r\n \r\n )}\r\n \r\n );\r\n}","export const FIELDERS_ENGLOAD_JOBS = {\r\n FTLC01346: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.432191547259624,\r\n BeamResults: {\r\n \",\": \"0.331891409581977=Bending Moment\",\r\n \"FB2,\": \"0.0666914640573752=Vertical Shear\",\r\n \"R2,\": \"0.0125514272681507=Vertical Shear\",\r\n \"FB1,\": \"0.331891409581977=Bending Moment\",\r\n \"R1,\": \"0.0334704727150685=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C2: \"0.413=Deflection (20.6mm)\",\r\n C5: \"0.047=Deflection (2.4mm)\",\r\n C1: \"0.413=Deflection (20.6mm)\",\r\n C4: \"0.047=Deflection (2.4mm)\",\r\n C3: \"0.432=Deflection (21.6mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C3 CR=0.432 - Deflection (21.6mm)\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.432191547259624,\r\n FasciaMax: 0.331891409581977,\r\n NumRafters: 2,\r\n NumColumns: 5,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C3 CR=0.432 - Deflection (21.6mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.432191547259624,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C3 CR=0.432 - Deflection (21.6mm)\",\r\n RafterMax: 0.0334704727150685,\r\n NumFasciaBeams: 2,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.331891409581977,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 3140,\r\n total_compression_kn: 2.45441701250781,\r\n total_tension_kn: -1.57164051561914,\r\n max_strength: 0.0414263257212977,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.412685219040132,\r\n max_capacity_ratio: 0.412685219040132,\r\n max_capacity_ratio_limit_state: \"Deflection (20.6mm)\",\r\n },\r\n C5: {\r\n ref: \"C5\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"50x50x3.0\",\r\n embedment: 500,\r\n height: 1200,\r\n total_compression_kn: 0,\r\n total_tension_kn: 0,\r\n max_strength: 0,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0470202092307692,\r\n max_capacity_ratio: 0.0470202092307692,\r\n max_capacity_ratio_limit_state: \"Deflection (2.4mm)\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 3140,\r\n total_compression_kn: 2.69875146332781,\r\n total_tension_kn: -1.72809555985708,\r\n max_strength: 0.0458307863650412,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.412685219040132,\r\n max_capacity_ratio: 0.412685219040132,\r\n max_capacity_ratio_limit_state: \"Deflection (20.6mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"50x50x3.0\",\r\n embedment: 500,\r\n height: 1200,\r\n total_compression_kn: 0,\r\n total_tension_kn: 0,\r\n max_strength: 0,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0470202092307692,\r\n max_capacity_ratio: 0.0470202092307692,\r\n max_capacity_ratio_limit_state: \"Deflection (2.4mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 3186,\r\n total_compression_kn: 0.925556970682143,\r\n total_tension_kn: -0.592663278988393,\r\n max_strength: 0.0150492014302351,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.432191547259624,\r\n max_capacity_ratio: 0.432191547259624,\r\n max_capacity_ratio_limit_state: \"Deflection (21.6mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 43.0113310900011,\r\n BeamPointLoadPeakCalcs: [],\r\n ProcessedLoadData: {\r\n Beams: {\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3220,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3242.49,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"3302\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 5810,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 5820,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5820,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5820,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5950\",\r\n },\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3254,\r\n PointLoadData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK46\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 6.64,\r\n Bracket: \"BK46\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3267.96,\r\n Bracket: \"BK46\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"53.31\",\r\n FA_2: \"-53.31\",\r\n X: \"5931\",\r\n PARENT_LEN: \"3181\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 1254,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1276.29,\r\n Bracket: \"BK46\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1276.29,\r\n Bracket: \"BK2\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1276.29,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5918\",\r\n PARENT_LEN: \"3302\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 3140,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 3140,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 3186,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"50mm x 50mm x 3mm P/C\",\r\n Height: 1200,\r\n TopBracket: \"ECCP \",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n AreaIndex: 0,\r\n ColumnType: \"50mm x 50mm x 3mm P/C\",\r\n Height: 1200,\r\n TopBracket: \"ECCP \",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n FTNC00199: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.777755725902869,\r\n BeamResults: {\r\n \"P2,\": \"0.192485877686359=Deflection-W UP (-6.9mm)\",\r\n \"PO3,PO4,\": \"0.557271976990099=Bending Moment\",\r\n \"EB3,\": \"0.228833809075283=Vertical Shear\",\r\n \"EB2a,\": \"0.0701010727224954=Vertical Shear\",\r\n \"P3a,P3b,P4b,P4c,\": \"0.324860864279356=Deflection-W UP (-11.6mm)\",\r\n \"P3,\": \"0.324860864279356=Deflection-W UP (-11.6mm)\",\r\n \"EB3b,\": \"0.228833809075283=Vertical Shear\",\r\n \"EB3c,EB3d,EB3e,EB3f,EB3g,EB3h,\": \"0.00463831413073245=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.365523606367645=Deflection-W UP (-29.2mm)\",\r\n \"P1c,P2a,\": \"0.0017007347301949=Vertical Shear\",\r\n \"P3c,P4a,\": \"0.00287035163827081=Vertical Shear\",\r\n \"EB3a,EB3j,\": \"0.000724906908798373=Vertical Shear\",\r\n \"EB3i,\": \"0.228574041892383=Vertical Shear\",\r\n \"PO1,PO2,\": \"0.327277911791179=Bending Moment\",\r\n \"EB1b,\": \"0.0699806661416912=Vertical Shear\",\r\n \"P4,\": \"0.324860864279356=Deflection-W UP (-11.6mm)\",\r\n \",\": \"0.557271976990099=Bending Moment\",\r\n \"P1,\": \"0.192485877686359=Deflection-W UP (-6.9mm)\",\r\n \"EB1a,EB2b,\": \"0.069409295834998=Vertical Shear\",\r\n \"P1a,P1b,P2b,P2c,\": \"0.192485877686359=Deflection-W UP (-6.9mm)\",\r\n \"EB2,\": \"0.0701010727224954=Vertical Shear\",\r\n \"EB1,\": \"0.0699806661416912=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n PC4: \"0.778=Strength\",\r\n PC2: \"0.375=Strength\",\r\n PC3: \"0.778=Strength\",\r\n PC1: \"0.375=Strength\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = PC3 CR=0.778 - Strength\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.777755725902869,\r\n PurlinMax: 0.324860864279356,\r\n NumRafters: 3,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = PC3 CR=0.778 - Strength\",\r\n NumPurlins: 8,\r\n ColumnsMax: 0.777755725902869,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC3 CR=0.778 - Strength\",\r\n RafterMax: 0.557271976990099,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.228833809075283,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.557271976990099,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n PC4: {\r\n ref: \"PC4\",\r\n area: 0,\r\n type: \"Portal Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2204,\r\n total_compression_kn: 7.03296122048863,\r\n total_tension_kn: -6.75186391260564,\r\n max_strength: 0.777755725902869,\r\n max_deflection_mm: 50,\r\n max_deflection: 0,\r\n max_capacity_ratio: 0.777755725902869,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n PC2: {\r\n ref: \"PC2\",\r\n area: 0,\r\n type: \"Portal Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2204,\r\n total_compression_kn: 4.1873528575346,\r\n total_tension_kn: -4.07148193677389,\r\n max_strength: 0.374655012568961,\r\n max_deflection_mm: 50,\r\n max_deflection: 0,\r\n max_capacity_ratio: 0.374655012568961,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n PC3: {\r\n ref: \"PC3\",\r\n area: 0,\r\n type: \"Portal Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2204,\r\n total_compression_kn: 7.03152599705886,\r\n total_tension_kn: -6.75050786903078,\r\n max_strength: 0.777755725902869,\r\n max_deflection_mm: 50,\r\n max_deflection: 0,\r\n max_capacity_ratio: 0.777755725902869,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n PC1: {\r\n ref: \"PC1\",\r\n area: 0,\r\n type: \"Portal Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2204,\r\n total_compression_kn: 4.1873528575346,\r\n total_tension_kn: -4.07148193677389,\r\n max_strength: 0.374655012568961,\r\n max_deflection_mm: 50,\r\n max_deflection: 0,\r\n max_capacity_ratio: 0.374655012568961,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 16.3769503502313,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"PO1,PO2,\",\r\n BeamType: \"Portal Rafter\",\r\n Length: 7514,\r\n Column: \"I\",\r\n PointLoads: [\r\n {\r\n Name: \"P3a\",\r\n Location: 1812,\r\n },\r\n {\r\n Name: \"P1a\",\r\n Location: 3625,\r\n },\r\n {\r\n Name: \"P2c\",\r\n Location: 3893,\r\n },\r\n {\r\n Name: \"P4c\",\r\n Location: 5706,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PO3,PO4,\",\r\n BeamType: \"Portal Rafter\",\r\n Length: 7514,\r\n Column: \"J\",\r\n PointLoads: [\r\n {\r\n Name: \"P3a\",\r\n Location: 1812,\r\n },\r\n {\r\n Name: \"P3b\",\r\n Location: 1812,\r\n },\r\n {\r\n Name: \"P1a\",\r\n Location: 3625,\r\n },\r\n {\r\n Name: \"P1b\",\r\n Location: 3625,\r\n },\r\n {\r\n Name: \"P2b\",\r\n Location: 3893,\r\n },\r\n {\r\n Name: \"P2c\",\r\n Location: 3893,\r\n },\r\n {\r\n Name: \"P4b\",\r\n Location: 5706,\r\n },\r\n {\r\n Name: \"P4c\",\r\n Location: 5706,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR1,PR2,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 7134,\r\n Column: \"K\",\r\n PointLoads: [\r\n {\r\n Name: \"P3b\",\r\n Location: 1622,\r\n },\r\n {\r\n Name: \"P3c\",\r\n Location: 1622,\r\n },\r\n {\r\n Name: \"P1b\",\r\n Location: 3435,\r\n },\r\n {\r\n Name: \"P1c\",\r\n Location: 3435,\r\n },\r\n {\r\n Name: \"P2a\",\r\n Location: 3703,\r\n },\r\n {\r\n Name: \"P2b\",\r\n Location: 3703,\r\n },\r\n {\r\n Name: \"P4a\",\r\n Location: 5516,\r\n },\r\n {\r\n Name: \"P4b\",\r\n Location: 5516,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n PO1: {\r\n Name: \"PO1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3757,\r\n PointLoadData: {\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1812.95,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3625.9,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n PC1: {\r\n Name: \"PC1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 84.07,\r\n Bracket: \"CON3\",\r\n },\r\n PO2: {\r\n Name: \"PO2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3761.87,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"3762\",\r\n },\r\n },\r\n PO2: {\r\n Name: \"PO2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3757,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1948.92,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n PO1: {\r\n Name: \"PO1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n PC2: {\r\n Name: \"PC2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3677.8,\r\n Bracket: \"CON3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"3762\",\r\n },\r\n },\r\n PO3: {\r\n Name: \"PO3\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3757,\r\n PointLoadData: {\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1812.95,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3625.9,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n PC3: {\r\n Name: \"PC3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 84.07,\r\n Bracket: \"CON3\",\r\n },\r\n PO4: {\r\n Name: \"PO4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3761.87,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2853\",\r\n PARENT_LEN: \"3762\",\r\n },\r\n },\r\n PO4: {\r\n Name: \"PO4\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3757,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1948.92,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n PO3: {\r\n Name: \"PO3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n PC4: {\r\n Name: \"PC4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3677.8,\r\n Bracket: \"CON3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2853\",\r\n PARENT_LEN: \"3762\",\r\n },\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3567,\r\n PointLoadData: {\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1622.9,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3435.85,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK33\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3571.82,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5623\",\r\n PARENT_LEN: \"3572\",\r\n },\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3567,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1948.92,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3571.82,\r\n Bracket: \"BK33\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5623\",\r\n PARENT_LEN: \"3572\",\r\n },\r\n },\r\n IF1: {\r\n Name: \"IF1\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 7160,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"7170\",\r\n },\r\n },\r\n U1: {\r\n Name: \"U1\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 1568,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"1378\",\r\n },\r\n },\r\n U2: {\r\n Name: \"U2\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 1496,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5623\",\r\n PARENT_LEN: \"1306\",\r\n },\r\n },\r\n EB1: {\r\n Name: \"EB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 5700,\r\n PointLoadData: {\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5622.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n PC1: {\r\n Name: \"PC1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"BK21\",\r\n },\r\n PC3: {\r\n Name: \"PC3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2852.5,\r\n Bracket: \"BK21\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5705,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n U3: {\r\n Name: \"U3\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 5705,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 5700,\r\n PointLoadData: {\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 82.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n W1: {\r\n Name: \"W1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n PC4: {\r\n Name: \"PC4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2852.5,\r\n Bracket: \"BK21\",\r\n },\r\n PC2: {\r\n Name: \"PC2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5672.5,\r\n Bracket: \"BK21\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Wall\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5705\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n U4: {\r\n Name: \"U4\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 5705,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5705\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 7060,\r\n PointLoadData: {\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 178.59,\r\n Bracket: \"BK33\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 6891.41,\r\n Bracket: \"BK33\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n BK25_1: {\r\n Name: \"BK25_1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 132.5,\r\n Bracket: \"\",\r\n },\r\n BK25_2: {\r\n Name: \"BK25_2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 983.13,\r\n Bracket: \"\",\r\n },\r\n BK25_3: {\r\n Name: \"BK25_3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1833.75,\r\n Bracket: \"\",\r\n },\r\n BK25_4: {\r\n Name: \"BK25_4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2684.38,\r\n Bracket: \"\",\r\n },\r\n BK25_5: {\r\n Name: \"BK25_5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3535,\r\n Bracket: \"\",\r\n },\r\n BK25_6: {\r\n Name: \"BK25_6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 4385.63,\r\n Bracket: \"\",\r\n },\r\n BK25_7: {\r\n Name: \"BK25_7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5236.25,\r\n Bracket: \"\",\r\n },\r\n BK25_8: {\r\n Name: \"BK25_8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 6086.88,\r\n Bracket: \"\",\r\n },\r\n BK25_9: {\r\n Name: \"BK25_9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 6937.5,\r\n Bracket: \"\",\r\n },\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 7070,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 11,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5623\",\r\n PARENT_LEN: \"7070\",\r\n },\r\n },\r\n U5: {\r\n Name: \"U5\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 7070,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5623\",\r\n PARENT_LEN: \"7070\",\r\n },\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 5700,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PO1: {\r\n Name: \"PO1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PO3: {\r\n Name: \"PO3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2852.5,\r\n Bracket: \"\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5622.5,\r\n Bracket: \"\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5705,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 5700,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n W1: {\r\n Name: \"W1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 82.5,\r\n Bracket: \"\",\r\n },\r\n PO4: {\r\n Name: \"PO4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2852.5,\r\n Bracket: \"\",\r\n },\r\n PO2: {\r\n Name: \"PO2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5672.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Wall\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5705\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 5700,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PO1: {\r\n Name: \"PO1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PO3: {\r\n Name: \"PO3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2852.5,\r\n Bracket: \"\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5622.5,\r\n Bracket: \"\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5705,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 5700,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n W1: {\r\n Name: \"W1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 82.5,\r\n Bracket: \"\",\r\n },\r\n PO4: {\r\n Name: \"PO4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2852.5,\r\n Bracket: \"\",\r\n },\r\n PO2: {\r\n Name: \"PO2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5672.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Wall\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5705\",\r\n PARENT_LEN: \"5705\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n PC1: {\r\n Name: \"PC1\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2204,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC2: {\r\n Name: \"PC2\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2204,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC3: {\r\n Name: \"PC3\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2204,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC4: {\r\n Name: \"PC4\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2204,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n },\r\n },\r\n },\r\n FIRC00048: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.437205383179385,\r\n BeamResults: {\r\n \"R1,\": \"0.00400250414306986=Vertical Shear\",\r\n \"R2,\": \"0.00810633750495162=Vertical Shear\",\r\n \"FB1b,\": \"0.32592469014153=Bending Moment\",\r\n \"FB2b,FB2c,FB2d,FB2e,FB2f,FB2g,FB2h,FB2i,FB2j,FB2k,FB2l,FB2m,FB2n,FB2o,FB2p,FB2q,FB2r,FB2s,FB2t,FB2u,FB2v,FB2w,FB2x,FB2y,\":\r\n \"0.00794796344869488=Vertical Shear\",\r\n \"FB1d,FB1e,\": \"0.234530672998889=Bending Moment\",\r\n \"FB2a,\": \"0.016059688046573=Vertical Shear\",\r\n \"FB2z,\": \"0.0120946925384998=Vertical Shear\",\r\n \"FB1,\": \"0.350471800040829=Deflection-G (8.8mm)\",\r\n \"FB2,\": \"0.016059688046573=Vertical Shear\",\r\n \"FB1c,\": \"0.350471800040829=Deflection-G (8.8mm)\",\r\n \",\": \"0.350471800040829=Deflection-G (8.8mm)\",\r\n \"FB1a,\": \"0.00104706859438958=Vertical Shear\",\r\n \"R1a,\": \"0.000337764062706318=Vertical Shear\",\r\n \"R1b,\": \"0.00400250414306986=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C6: \"0.385=Deflection (19.3mm)\",\r\n C2: \"0.437=Deflection (21.9mm)\",\r\n C1: \"0.437=Deflection (21.9mm)\",\r\n C3: \"0.385=Deflection (19.3mm)\",\r\n C4: \"0.385=Deflection (19.3mm)\",\r\n C5: \"0.437=Deflection (21.9mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C1 CR=0.437 - Deflection (21.9mm)\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.437205383179385,\r\n FasciaMax: 0.350471800040829,\r\n NumRafters: 4,\r\n NumColumns: 6,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C1 CR=0.437 - Deflection (21.9mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.437205383179385,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.437 - Deflection (21.9mm)\",\r\n RafterMax: 0.00810633750495162,\r\n NumFasciaBeams: 9,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.350471800040829,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C6: {\r\n ref: \"C6\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 0,\r\n height: 2771,\r\n total_compression_kn: 2.02330153247268,\r\n total_tension_kn: -1.02528207189549,\r\n max_strength: 0.232648753349107,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.385267487367513,\r\n max_capacity_ratio: 0.385267487367513,\r\n max_capacity_ratio_limit_state: \"Deflection (19.3mm)\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 0,\r\n height: 2879,\r\n total_compression_kn: 1.28724072164094,\r\n total_tension_kn: -0.652292707206796,\r\n max_strength: 0.217372767208656,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.437205383179385,\r\n max_capacity_ratio: 0.437205383179385,\r\n max_capacity_ratio_limit_state: \"Deflection (21.9mm)\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 0,\r\n height: 2879,\r\n total_compression_kn: 0.024331509785175,\r\n total_tension_kn: -0.0123296801611188,\r\n max_strength: 0.168410555301712,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.437205383179385,\r\n max_capacity_ratio: 0.437205383179385,\r\n max_capacity_ratio_limit_state: \"Deflection (21.9mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 0,\r\n height: 2771,\r\n total_compression_kn: 2.42242434341099,\r\n total_tension_kn: -1.22753243150426,\r\n max_strength: 0.247194939218911,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.385267487367513,\r\n max_capacity_ratio: 0.385267487367513,\r\n max_capacity_ratio_limit_state: \"Deflection (19.3mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 0,\r\n height: 2771,\r\n total_compression_kn: 2.2414898955853,\r\n total_tension_kn: -1.13584622331102,\r\n max_strength: 0.240600712990309,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.385267487367513,\r\n max_capacity_ratio: 0.385267487367513,\r\n max_capacity_ratio_limit_state: \"Deflection (19.3mm)\",\r\n },\r\n C5: {\r\n ref: \"C5\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 0,\r\n height: 2879,\r\n total_compression_kn: 1.15407911619834,\r\n total_tension_kn: -0.584814773476244,\r\n max_strength: 0.212210173823207,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.437205383179385,\r\n max_capacity_ratio: 0.437205383179385,\r\n max_capacity_ratio_limit_state: \"Deflection (21.9mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0.14818909756245,\r\n BeamPointLoadPeakCalcs: [],\r\n ProcessedLoadData: {\r\n Beams: {\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1185,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1207.31,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"1332\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1185,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1207.31,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"24165\",\r\n PARENT_LEN: \"1332\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 24090,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 24099.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 6482.5,\r\n Bracket: \"BK\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 13167.5,\r\n Bracket: \"BK\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 18666,\r\n Bracket: \"BK\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 24099.5,\r\n Bracket: \"BK2\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 24099.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 8,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"24197\",\r\n },\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 24197,\r\n PointLoadData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 24164.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n BK25_27: {\r\n Name: \"BK25_27\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n BK25_26: {\r\n Name: \"BK25_26\",\r\n End: 0,\r\n Side: 0,\r\n Location: 960.65,\r\n Bracket: \"\",\r\n },\r\n BK25_25: {\r\n Name: \"BK25_25\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1888.81,\r\n Bracket: \"\",\r\n },\r\n BK25_24: {\r\n Name: \"BK25_24\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2816.96,\r\n Bracket: \"\",\r\n },\r\n BK25_23: {\r\n Name: \"BK25_23\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3745.12,\r\n Bracket: \"\",\r\n },\r\n BK25_22: {\r\n Name: \"BK25_22\",\r\n End: 0,\r\n Side: 0,\r\n Location: 4673.27,\r\n Bracket: \"\",\r\n },\r\n BK25_21: {\r\n Name: \"BK25_21\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5601.42,\r\n Bracket: \"\",\r\n },\r\n BK25_20: {\r\n Name: \"BK25_20\",\r\n End: 0,\r\n Side: 0,\r\n Location: 6529.58,\r\n Bracket: \"\",\r\n },\r\n BK25_19: {\r\n Name: \"BK25_19\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7457.73,\r\n Bracket: \"\",\r\n },\r\n BK25_18: {\r\n Name: \"BK25_18\",\r\n End: 0,\r\n Side: 0,\r\n Location: 8385.88,\r\n Bracket: \"\",\r\n },\r\n BK25_17: {\r\n Name: \"BK25_17\",\r\n End: 0,\r\n Side: 0,\r\n Location: 9314.04,\r\n Bracket: \"\",\r\n },\r\n BK25_16: {\r\n Name: \"BK25_16\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10242.19,\r\n Bracket: \"\",\r\n },\r\n BK25_15: {\r\n Name: \"BK25_15\",\r\n End: 0,\r\n Side: 0,\r\n Location: 11170.35,\r\n Bracket: \"\",\r\n },\r\n BK25_14: {\r\n Name: \"BK25_14\",\r\n End: 0,\r\n Side: 0,\r\n Location: 12098.5,\r\n Bracket: \"\",\r\n },\r\n BK25_13: {\r\n Name: \"BK25_13\",\r\n End: 0,\r\n Side: 0,\r\n Location: 13026.65,\r\n Bracket: \"\",\r\n },\r\n BK25_12: {\r\n Name: \"BK25_12\",\r\n End: 0,\r\n Side: 0,\r\n Location: 13954.81,\r\n Bracket: \"\",\r\n },\r\n BK25_11: {\r\n Name: \"BK25_11\",\r\n End: 0,\r\n Side: 0,\r\n Location: 14882.96,\r\n Bracket: \"\",\r\n },\r\n BK25_10: {\r\n Name: \"BK25_10\",\r\n End: 0,\r\n Side: 0,\r\n Location: 15811.12,\r\n Bracket: \"\",\r\n },\r\n BK25_9: {\r\n Name: \"BK25_9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 16739.27,\r\n Bracket: \"\",\r\n },\r\n BK25_8: {\r\n Name: \"BK25_8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 17667.42,\r\n Bracket: \"\",\r\n },\r\n BK25_7: {\r\n Name: \"BK25_7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 18595.58,\r\n Bracket: \"\",\r\n },\r\n BK25_6: {\r\n Name: \"BK25_6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 19523.73,\r\n Bracket: \"\",\r\n },\r\n BK25_5: {\r\n Name: \"BK25_5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 20451.88,\r\n Bracket: \"\",\r\n },\r\n BK25_4: {\r\n Name: \"BK25_4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 21380.04,\r\n Bracket: \"\",\r\n },\r\n BK25_3: {\r\n Name: \"BK25_3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 22308.19,\r\n Bracket: \"\",\r\n },\r\n BK25_2: {\r\n Name: \"BK25_2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 23236.35,\r\n Bracket: \"\",\r\n },\r\n BK25_1: {\r\n Name: \"BK25_1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 24164.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 27,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"24197\",\r\n PARENT_LEN: \"24197\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2879,\r\n TopBracket: \"\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"BK16\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2879,\r\n TopBracket: \"\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"BK16\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2771,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"BK16\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2771,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"BK16\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2879,\r\n TopBracket: \"\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"BK16\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2771,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"BK16\",\r\n },\r\n },\r\n },\r\n },\r\n ZAPC00248: {\r\n AttachmentBracketResults: {\r\n BK34D_4: \"0.155=Shear\",\r\n BK34D_3: \"0.195=Shear\",\r\n BK34D_2: \"0.195=Shear\",\r\n BK34D_1: \"0.155=Shear\",\r\n },\r\n MaxResultOverAll: 0.267090557202381,\r\n BeamResults: {\r\n \"P2,\": \"0.183199464790975=Deflection-W UP (-6.9mm)\",\r\n \"PR5,PR6,\": \"0.0748403384389872=End 1 (CON3)\",\r\n \"P1a,P1b,P2a,P2b,\": \"0.183199464790975=Deflection-W UP (-6.9mm)\",\r\n \"EB2a,\": \"0.104372517604592=Vertical Shear\",\r\n \"EB1a,EB1b,\": \"0.0504597533721347=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.0748403384389872=End 1 (CON3)\",\r\n \"EB2c,\": \"0.104372517604592=Vertical Shear\",\r\n \"EB2b,\": \"0.12651678299374=Vertical Shear\",\r\n \"P1,\": \"0.183199464790975=Deflection-W UP (-6.9mm)\",\r\n \"PR3,PR4,\": \"0.144737185077744=End 1 (CON3)\",\r\n \"EB2,\": \"0.12651678299374=Vertical Shear\",\r\n \"EB1,\": \"0.0504597533721347=Vertical Shear\",\r\n \",\": \"0.183199464790975=Deflection-W UP (-6.9mm)\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n PC2: \"0.267=Deflection (13.4mm)\",\r\n PC3: \"0.267=Deflection (13.4mm)\",\r\n PC1: \"0.267=Deflection (13.4mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {\r\n BK34D_4: {\r\n ref: \"BK34D_4\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.155295669505941,\r\n max_shear_kn: 1.21907100562164,\r\n max_uplift: 0.153724298319272,\r\n max_uplift_kn: -1.20673574180629,\r\n max_area_capacity: 0.263112786079079,\r\n area_m2_roofload: 2.32328590107826,\r\n max_capacity_ratio: 0.155295669505941,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2a\",\r\n },\r\n BK34D_3: {\r\n ref: \"BK34D_3\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.194804340526374,\r\n max_shear_kn: 1.52921407313204,\r\n max_uplift: 0.19283319781058,\r\n max_uplift_kn: -1.51374060281305,\r\n max_area_capacity: 0.331573389432785,\r\n area_m2_roofload: 2.92779302869149,\r\n max_capacity_ratio: 0.194804340526374,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2b\",\r\n },\r\n BK34D_2: {\r\n ref: \"BK34D_2\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.194804340526374,\r\n max_shear_kn: 1.52921407313204,\r\n max_uplift: 0.19283319781058,\r\n max_uplift_kn: -1.51374060281305,\r\n max_area_capacity: 0.331573389432785,\r\n area_m2_roofload: 2.92779302869149,\r\n max_capacity_ratio: 0.194804340526374,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2b\",\r\n },\r\n BK34D_1: {\r\n ref: \"BK34D_1\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.155295669505941,\r\n max_shear_kn: 1.21907100562164,\r\n max_uplift: 0.153724298319272,\r\n max_uplift_kn: -1.20673574180629,\r\n max_area_capacity: 0.263112786079079,\r\n area_m2_roofload: 2.32328590107826,\r\n max_capacity_ratio: 0.155295669505941,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2c\",\r\n },\r\n },\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34D_3\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.194804340526374,\r\n max_shear_kn: 1.52921407313204,\r\n max_uplift: 0.19283319781058,\r\n max_uplift_kn: -1.51374060281305,\r\n max_area_capacity: 0.331573389432785,\r\n area_m2_roofload: 2.92779302869149,\r\n max_capacity_ratio: 0.194804340526374,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2b\",\r\n },\r\n },\r\n maxResultOverAllText: \"Limiting Member = PC1 CR=0.267 - Deflection (13.4mm)\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.267090557202381,\r\n PurlinMax: 0.183199464790975,\r\n NumRafters: 3,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = PC1 CR=0.267 - Deflection (13.4mm)\",\r\n NumPurlins: 3,\r\n ColumnsMax: 0.267090557202381,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.267 - Deflection (13.4mm)\",\r\n RafterMax: 0.144737185077744,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.12651678299374,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.183199464790975,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n PC2: {\r\n ref: \"PC2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"1086510\",\r\n embedment: 500,\r\n height: 2424,\r\n total_compression_kn: 2.64484239205575,\r\n total_tension_kn: -2.69138183601997,\r\n max_strength: 0.188472978462863,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.267090557202381,\r\n max_capacity_ratio: 0.267090557202381,\r\n max_capacity_ratio_limit_state: \"Deflection (13.4mm)\",\r\n },\r\n PC3: {\r\n ref: \"PC3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"1086510\",\r\n embedment: 500,\r\n height: 2424,\r\n total_compression_kn: 1.41168530274909,\r\n total_tension_kn: -1.43851478256594,\r\n max_strength: 0.167087451630596,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.267090557202381,\r\n max_capacity_ratio: 0.267090557202381,\r\n max_capacity_ratio_limit_state: \"Deflection (13.4mm)\",\r\n },\r\n PC1: {\r\n ref: \"PC1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"1086510\",\r\n embedment: 500,\r\n height: 2424,\r\n total_compression_kn: 1.41168530274909,\r\n total_tension_kn: -1.43851478256594,\r\n max_strength: 0.167087451630596,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.267090557202381,\r\n max_capacity_ratio: 0.267090557202381,\r\n max_capacity_ratio_limit_state: \"Deflection (13.4mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 53.1961157685428,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"PR1,PR2,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 2951,\r\n Column: \"F\",\r\n PointLoads: [\r\n {\r\n Name: \"P1a\",\r\n Location: 1324,\r\n },\r\n {\r\n Name: \"P2b\",\r\n Location: 1592,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR3,PR4,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 2951,\r\n Column: \"G\",\r\n PointLoads: [\r\n {\r\n Name: \"P1a\",\r\n Location: 1324,\r\n },\r\n {\r\n Name: \"P1b\",\r\n Location: 1324,\r\n },\r\n {\r\n Name: \"P2a\",\r\n Location: 1592,\r\n },\r\n {\r\n Name: \"P2b\",\r\n Location: 1592,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR5,PR6,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 2951,\r\n Column: \"H\",\r\n PointLoads: [\r\n {\r\n Name: \"P1b\",\r\n Location: 1324,\r\n },\r\n {\r\n Name: \"P2a\",\r\n Location: 1592,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n PR1: {\r\n Name: \"PR1\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1456,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1324.61,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n PC1: {\r\n Name: \"PC1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 57.47,\r\n Bracket: \"CON3\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1460.58,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"1461\",\r\n },\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1495,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1499.89,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"1500\",\r\n },\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1456,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1324.61,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n PC2: {\r\n Name: \"PC2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 57.47,\r\n Bracket: \"CON3\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1460.58,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"3000\",\r\n PARENT_LEN: \"1461\",\r\n },\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1495,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1499.89,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"3000\",\r\n PARENT_LEN: \"1500\",\r\n },\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1456,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1324.61,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n PC3: {\r\n Name: \"PC3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 57.47,\r\n Bracket: \"CON3\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1460.58,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5968\",\r\n PARENT_LEN: \"1461\",\r\n },\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 1495,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1499.89,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5968\",\r\n PARENT_LEN: \"1500\",\r\n },\r\n },\r\n IF1: {\r\n Name: \"IF1\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 2835,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"2845\",\r\n },\r\n },\r\n U1: {\r\n Name: \"U1\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 746,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"556\",\r\n },\r\n },\r\n IF2: {\r\n Name: \"IF2\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 2835,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5968\",\r\n PARENT_LEN: \"2845\",\r\n },\r\n },\r\n U2: {\r\n Name: \"U2\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 746,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5968\",\r\n PARENT_LEN: \"556\",\r\n },\r\n },\r\n EB1: {\r\n Name: \"EB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 6000,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PC1: {\r\n Name: \"PC1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"BK21\",\r\n },\r\n PC2: {\r\n Name: \"PC2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"BK21\",\r\n },\r\n PC3: {\r\n Name: \"PC3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5967.5,\r\n Bracket: \"BK21\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"6000\",\r\n },\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 6000,\r\n PointLoadData: {\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"BK3\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"BK3\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5967.5,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumPointLoads: 3,\r\n SupportData: {\r\n BK34D_4: {\r\n Name: \"BK34D_4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 132.5,\r\n Bracket: \"\",\r\n },\r\n BK34D_3: {\r\n Name: \"BK34D_3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2044.17,\r\n Bracket: \"\",\r\n },\r\n BK34D_2: {\r\n Name: \"BK34D_2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3955.83,\r\n Bracket: \"\",\r\n },\r\n BK34D_1: {\r\n Name: \"BK34D_1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5867.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"6000\",\r\n PARENT_LEN: \"6000\",\r\n },\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 6000,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"\",\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5967.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"6000\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 6000,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5967.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"6000\",\r\n PARENT_LEN: \"6000\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n PC1: {\r\n Name: \"PC1\",\r\n AreaIndex: 0,\r\n ColumnType: \"1086510\",\r\n Height: 2424,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC2: {\r\n Name: \"PC2\",\r\n AreaIndex: 0,\r\n ColumnType: \"1086510\",\r\n Height: 2424,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC3: {\r\n Name: \"PC3\",\r\n AreaIndex: 0,\r\n ColumnType: \"1086510\",\r\n Height: 2424,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n },\r\n },\r\n },\r\n FTLC00440: {\r\n AttachmentBracketResults: {\r\n BK34S_10: \"0.071=Uplift\",\r\n BK34S_11: \"0.723=Uplift\",\r\n BK34S_14: \"0.278=Uplift\",\r\n BK34S_16: \"0.066=Uplift\",\r\n BK34S_12: \"1.407=Uplift\",\r\n BK34S_8: \"0.969=Uplift\",\r\n BK34S_9: \"0.103=Uplift\",\r\n BK34S_13: \"0.185=Uplift\",\r\n BK34S_15: \"0.154=Uplift\",\r\n BK34S_2: \"0.078=Uplift\",\r\n BK34S_1: \"0.078=Uplift\",\r\n BK34S_17: \"0.066=Uplift\",\r\n BK34S_3: \"0.832=Uplift\",\r\n BK34S_4: \"1.311=Uplift\",\r\n BK34S_5: \"0.078=Uplift\",\r\n BK34S_6: \"0.108=Uplift\",\r\n BK34S_7: \"0.837=Uplift\",\r\n },\r\n BeamResults: {\r\n \"EB2c,EB2e,EB2f,\": \"0.023786281395106=Vertical Shear\",\r\n \"EB2g,\": \"0.651209659903122=Vertical Shear\",\r\n \"P5,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"P2,\": \"0.229642409327166=Deflection-W UP (-9.0mm)\",\r\n \"P3,\": \"0.229642409327166=Deflection-W UP (-9.0mm)\",\r\n \"PR3,PR4,\": \"1.33667012551231=Vertical Shear\",\r\n \"EB2b,\": \"0.212798816589901=Vertical Shear\",\r\n \"R1,\": \"0.0446638837230308=Vertical Shear\",\r\n \"PO1,PO2,\": \"0.137538251526543=Bending Moment\",\r\n \"EB2d,\": \"1.33667012551231=Vertical Shear\",\r\n \"P9,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"EB1d,\": \"1.33538299969758=Vertical Shear\",\r\n \",\": \"1.33667012551231=Vertical Shear\",\r\n \"R2,\": \"0.0446638837230308=Vertical Shear\",\r\n \"P6,P10,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"EB1,\": \"1.33538299969758=Vertical Shear\",\r\n \"EB2a,\": \"0.00646584491746308=Deflection (0.1mm)\",\r\n \"EB3c,EB3d,EB3e,\": \"0.0220431678407992=Vertical Shear\",\r\n \"P8,P12,\": \"0.396243454680843=Deflection-W UP (-15.6mm)\",\r\n \"EB3a,\": \"0.120093033397122=Vertical Shear\",\r\n \"P8,\": \"0.396243454680843=Deflection-W UP (-15.6mm)\",\r\n \"EB1a,\": \"0.562226622644072=Vertical Shear\",\r\n \"P11,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"EB3b,\": \"0.120093033397122=Vertical Shear\",\r\n \"FB1b,\": \"0.150913211143877=Vertical Shear\",\r\n \"FB1,\": \"0.151412097792286=Vertical Shear\",\r\n \"P12,\": \"0.396243454680843=Deflection-W UP (-15.6mm)\",\r\n \"P10,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"P5,P9,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"EB3,\": \"0.120093033397122=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.619885946787031=Vertical Shear\",\r\n \"EB1b,EB1c,EB1e,EB1f,EB1g,\": \"0.0261089803162112=Vertical Shear\",\r\n \"P4,\": \"0.229642409327166=Deflection-W UP (-9.0mm)\",\r\n \"P1,P2,\": \"0.229642409327166=Deflection-W UP (-9.0mm)\",\r\n \"P3,P4,\": \"0.229642409327166=Deflection-W UP (-9.0mm)\",\r\n \"P7,P11,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"FB1a,\": \"0.151412097792286=Vertical Shear\",\r\n \"EB2,\": \"1.33667012551231=Vertical Shear\",\r\n \"P1,\": \"0.229642409327166=Deflection-W UP (-9.0mm)\",\r\n \"P6,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n \"P7,\": \"0.395865359806851=Deflection-W UP (-15.5mm)\",\r\n },\r\n ColumnResults: {\r\n C3: \"0.083=Base Connection\",\r\n C2: \"0.080=Strength\",\r\n PC2: \"0.114=Deflection (5.7mm)\",\r\n C1: \"0.083=Base Connection\",\r\n PC1: \"0.243=Strength\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB1: {\r\n ref: \"BK34S_4\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.58409862377251,\r\n max_shear_kn: 4.5851741966142,\r\n max_uplift: 1.31074513396554,\r\n max_uplift_kn: -10.2893493016295,\r\n max_area_capacity: 0.627671501092597,\r\n area_m2_roofload: 5.54233935464763,\r\n max_capacity_ratio: 1.31074513396554,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB1d\",\r\n },\r\n EB3: {\r\n ref: \"BK34S_14\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.120759628395478,\r\n max_shear_kn: 0.947963082904503,\r\n max_uplift: 0.277563707682047,\r\n max_uplift_kn: -2.17887510530407,\r\n max_area_capacity: 0.232135360655377,\r\n area_m2_roofload: 2.04975523458697,\r\n max_capacity_ratio: 0.277563707682047,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3a\",\r\n },\r\n EB2: {\r\n ref: \"BK34S_12\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.626883734822211,\r\n max_shear_kn: 4.92103731835435,\r\n max_uplift: 1.40721057174669,\r\n max_uplift_kn: -11.0466029882115,\r\n max_area_capacity: 0.670812754350665,\r\n area_m2_roofload: 5.92327662091637,\r\n max_capacity_ratio: 1.40721057174669,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2d\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 1.33667012551231,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 1.33667012551231,\r\n PurlinMax: 0.396243454680843,\r\n NumRafters: 3,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 18,\r\n ColumnsMax: 0.242662081123844,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.243 - Strength\",\r\n RafterMax: 1.33667012551231,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 1.33667012551231,\r\n JoinBeamMax: 0,\r\n OtherMax: 1.33667012551231,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 0.151412097792286,\r\n FasciaMax: 0.151412097792286,\r\n NumRafters: 2,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.0832178947080745,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.083 - Base Connection\",\r\n RafterMax: 0.0446638837230308,\r\n NumFasciaBeams: 3,\r\n JoinBeamMax: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 418.633691360872,\r\n },\r\n FGRC00073: {\r\n AttachmentBracketResults: {\r\n BK34S_10: \"0.399=Uplift\",\r\n BK34S_20: \"0.122=Uplift\",\r\n BK34S_6: \"0.614=Uplift\",\r\n BK34S_11: \"0.085=Uplift\",\r\n BK34S_14: \"0.127=Uplift\",\r\n BK34S_13: \"0.603=Uplift\",\r\n BK34S_16: \"0.024=Uplift\",\r\n BK34S_8: \"0.062=Uplift\",\r\n BK34S_18: \"0.024=Uplift\",\r\n BK34S_12: \"0.622=Uplift\",\r\n BK34S_15: \"0.024=Uplift\",\r\n BK34S_2: \"0.082=Uplift\",\r\n BK34S_1: \"0.540=Uplift\",\r\n BK34S_17: \"0.024=Uplift\",\r\n BK34S_3: \"0.399=Uplift\",\r\n BK34S_4: \"0.830=Uplift\",\r\n BK34S_5: \"0.062=Uplift\",\r\n BK34S_9: \"0.830=Uplift\",\r\n BK34S_7: \"0.614=Uplift\",\r\n BK34S_19: \"0.024=Uplift\",\r\n },\r\n MaxResultOverAll: 0.790053557255535,\r\n BeamResults: {\r\n \"EB2f,\": \"0.742964694631435=Vertical Shear\",\r\n \"EB3h,\": \"0.405715071722347=Vertical Shear\",\r\n \"EB3b,EB3c,EB3d,EB3e,EB3f,EB3g,\": \"0.00803289992359996=Vertical Shear\",\r\n \"P2,\": \"0.132478864487478=Deflection-W UP (-4.2mm)\",\r\n \"EB2i,\": \"0.742964694631435=Vertical Shear\",\r\n \"P3,\": \"0.213338866446758=Deflection-W UP (-6.8mm)\",\r\n \"PR9,PR10,\": \"0.411411760548377=Vertical Shear\",\r\n \"EB2c,\": \"0.742964694631435=Vertical Shear\",\r\n \",\": \"0.790053557255535=End 1 (CON3)\",\r\n \"EB2b,EB2d,EB2e,EB2g,EB2h,EB2j,\": \"0.0207092604787024=Vertical Shear\",\r\n \"EB3,\": \"0.405715071722347=Vertical Shear\",\r\n \"EB2,\": \"0.742964694631435=Vertical Shear\",\r\n \"EB1,\": \"0.0588482418475641=Vertical Shear\",\r\n \"EB2a,\": \"0.418082766103917=Vertical Shear\",\r\n \"P1a,P1b,P1c,P1d,P2a,P2b,P2c,P2d,\": \"0.132478864487478=Deflection-W UP (-4.2mm)\",\r\n \"P5,\": \"0.213338866446758=Deflection-W UP (-6.8mm)\",\r\n \"P8,\": \"0.213338866446758=Deflection-W UP (-6.8mm)\",\r\n \"EB2k,\": \"0.362852766672255=Vertical Shear\",\r\n \"PR7,PR8,\": \"0.790053557255535=End 1 (CON3)\",\r\n \"PR5,PR6,\": \"0.790053557255535=End 1 (CON3)\",\r\n \"PR1,PR2,\": \"0.585796670810423=Bending Moment\",\r\n \"P3a,P3b,P3c,P3d,P4a,P4b,P4c,P4d,P5a,P5b,P5c,P5d,P6a,P6b,P6c,P6d,P7a,P7b,P7c,P7d,P8a,P8b,P8c,P8d,\":\r\n \"0.213338866446758=Deflection-W UP (-6.8mm)\",\r\n \"EB3a,\": \"0.405451885533606=Vertical Shear\",\r\n \"PR3,PR4,\": \"0.790053557255535=End 1 (CON3)\",\r\n \"EB1a,EB1b,EB1c,EB1d,\": \"0.0588482418475641=Vertical Shear\",\r\n \"P4,\": \"0.213338866446758=Deflection-W UP (-6.8mm)\",\r\n \"P1,\": \"0.132478864487478=Deflection-W UP (-4.2mm)\",\r\n \"P6,\": \"0.213338866446758=Deflection-W UP (-6.8mm)\",\r\n \"P7,\": \"0.213338866446758=Deflection-W UP (-6.8mm)\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n PC4: \"0.415=Top Connection\",\r\n PC2: \"0.412=Top Connection\",\r\n PC3: \"0.415=Top Connection\",\r\n PC1: \"0.415=Top Connection\",\r\n },\r\n AttachmentBracketResultsDetailed: {\r\n BK34S_10: {\r\n ref: \"BK34S_10\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.239174433892574,\r\n max_shear_kn: 1.8775193060567,\r\n max_uplift: 0.399197316713021,\r\n max_uplift_kn: -3.13369893619722,\r\n max_area_capacity: 0.391365710863833,\r\n area_m2_roofload: 3.81972933803101,\r\n max_capacity_ratio: 0.399197316713021,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2c\",\r\n },\r\n BK34S_20: {\r\n ref: \"BK34S_20\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0729576838303831,\r\n max_shear_kn: 0.572717818068507,\r\n max_uplift: 0.12177100681157,\r\n max_uplift_kn: -0.955902403470822,\r\n max_area_capacity: 0.121872417480551,\r\n area_m2_roofload: 1.18947479461018,\r\n max_capacity_ratio: 0.12177100681157,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3h\",\r\n },\r\n BK34S_11: {\r\n ref: \"BK34S_11\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0510238739311793,\r\n max_shear_kn: 0.400537410359757,\r\n max_uplift: 0.0851620853873492,\r\n max_uplift_kn: -0.668522370290691,\r\n max_area_capacity: 0.0758713565396567,\r\n area_m2_roofload: 0.74050443982705,\r\n max_capacity_ratio: 0.0851620853873492,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2a\",\r\n },\r\n BK34S_14: {\r\n ref: \"BK34S_14\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.075817466168902,\r\n max_shear_kn: 0.595167109425881,\r\n max_uplift: 0.126544165118418,\r\n max_uplift_kn: -0.993371696179581,\r\n max_area_capacity: 0.126649550864798,\r\n area_m2_roofload: 1.23609961644043,\r\n max_capacity_ratio: 0.126544165118418,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3a\",\r\n },\r\n BK34S_9: {\r\n ref: \"BK34S_9\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.496999951226571,\r\n max_shear_kn: 3.90144961712858,\r\n max_uplift: 0.829524475953238,\r\n max_uplift_kn: -6.51176713623292,\r\n max_area_capacity: 0.8220512457654,\r\n area_m2_roofload: 8.0232201586703,\r\n max_capacity_ratio: 0.829524475953238,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2c\",\r\n },\r\n BK34S_3: {\r\n ref: \"BK34S_3\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.239174433892574,\r\n max_shear_kn: 1.8775193060567,\r\n max_uplift: 0.399197316713021,\r\n max_uplift_kn: -3.13369893619722,\r\n max_area_capacity: 0.391365710863833,\r\n area_m2_roofload: 3.81972933803101,\r\n max_capacity_ratio: 0.399197316713021,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2i\",\r\n },\r\n BK34S_16: {\r\n ref: \"BK34S_16\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0143219673519669,\r\n max_shear_kn: 0.11242744371294,\r\n max_uplift: 0.0239042728936682,\r\n max_uplift_kn: -0.187648542215295,\r\n max_area_capacity: 0.0239241803278689,\r\n area_m2_roofload: 0.2335,\r\n max_capacity_ratio: 0.0239042728936682,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3d\",\r\n },\r\n BK34S_8: {\r\n ref: \"BK34S_8\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0369228242951187,\r\n max_shear_kn: 0.289844170716682,\r\n max_uplift: 0.061626538188852,\r\n max_uplift_kn: -0.483768324782488,\r\n max_area_capacity: 0.0616778606557377,\r\n area_m2_roofload: 0.60197592,\r\n max_capacity_ratio: 0.061626538188852,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2e\",\r\n },\r\n BK34S_18: {\r\n ref: \"BK34S_18\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0143219673519669,\r\n max_shear_kn: 0.11242744371294,\r\n max_uplift: 0.0239042728936682,\r\n max_uplift_kn: -0.187648542215295,\r\n max_area_capacity: 0.0239241803278689,\r\n area_m2_roofload: 0.2335,\r\n max_capacity_ratio: 0.0239042728936682,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3f\",\r\n },\r\n BK34S_13: {\r\n ref: \"BK34S_13\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.361442861397143,\r\n max_shear_kn: 2.83732646196757,\r\n max_uplift: 0.603271085736627,\r\n max_uplift_kn: -4.73567802303252,\r\n max_area_capacity: 0.603773488779711,\r\n area_m2_roofload: 5.89282925048998,\r\n max_capacity_ratio: 0.603271085736627,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3a\",\r\n },\r\n BK34S_15: {\r\n ref: \"BK34S_15\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0143219673519669,\r\n max_shear_kn: 0.11242744371294,\r\n max_uplift: 0.0239042728936682,\r\n max_uplift_kn: -0.187648542215295,\r\n max_area_capacity: 0.0239241803278689,\r\n area_m2_roofload: 0.2335,\r\n max_capacity_ratio: 0.0239042728936682,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3c\",\r\n },\r\n BK34S_2: {\r\n ref: \"BK34S_2\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0494288035091915,\r\n max_shear_kn: 0.388016107547154,\r\n max_uplift: 0.0824998115729505,\r\n max_uplift_kn: -0.647623520847662,\r\n max_area_capacity: 0.0732068655885553,\r\n area_m2_roofload: 0.7144990081443,\r\n max_capacity_ratio: 0.0824998115729505,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2k\",\r\n },\r\n BK34S_1: {\r\n ref: \"BK34S_1\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.323467585011438,\r\n max_shear_kn: 2.53922054233979,\r\n max_uplift: 0.539887938182412,\r\n max_uplift_kn: -4.23812031473193,\r\n max_area_capacity: 0.530975904182881,\r\n area_m2_roofload: 5.18232482482492,\r\n max_capacity_ratio: 0.539887938182412,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2k\",\r\n },\r\n BK34S_17: {\r\n ref: \"BK34S_17\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0143219673519669,\r\n max_shear_kn: 0.11242744371294,\r\n max_uplift: 0.0239042728936682,\r\n max_uplift_kn: -0.187648542215295,\r\n max_area_capacity: 0.0239241803278689,\r\n area_m2_roofload: 0.2335,\r\n max_capacity_ratio: 0.0239042728936682,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3e\",\r\n },\r\n BK34S_12: {\r\n ref: \"BK34S_12\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.372702746424661,\r\n max_shear_kn: 2.92571655943359,\r\n max_uplift: 0.622064548801752,\r\n max_uplift_kn: -4.88320670809375,\r\n max_area_capacity: 0.613220951331373,\r\n area_m2_roofload: 5.9850364849942,\r\n max_capacity_ratio: 0.622064548801752,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2a\",\r\n },\r\n BK34S_4: {\r\n ref: \"BK34S_4\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.496999951226571,\r\n max_shear_kn: 3.90144961712858,\r\n max_uplift: 0.829524475953239,\r\n max_uplift_kn: -6.51176713623292,\r\n max_area_capacity: 0.8220512457654,\r\n area_m2_roofload: 8.02322015867031,\r\n max_capacity_ratio: 0.829524475953239,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2i\",\r\n },\r\n BK34S_5: {\r\n ref: \"BK34S_5\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0369228242951187,\r\n max_shear_kn: 0.289844170716682,\r\n max_uplift: 0.061626538188852,\r\n max_uplift_kn: -0.483768324782488,\r\n max_area_capacity: 0.0616778606557377,\r\n area_m2_roofload: 0.60197592,\r\n max_capacity_ratio: 0.061626538188852,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2h\",\r\n },\r\n BK34S_6: {\r\n ref: \"BK34S_6\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.368086988114255,\r\n max_shear_kn: 2.8894828566969,\r\n max_uplift: 0.614360555100914,\r\n max_uplift_kn: -4.82273035754218,\r\n max_area_capacity: 0.606708227189577,\r\n area_m2_roofload: 5.92147229737027,\r\n max_capacity_ratio: 0.614360555100914,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2f\",\r\n },\r\n BK34S_7: {\r\n ref: \"BK34S_7\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.368086988114255,\r\n max_shear_kn: 2.8894828566969,\r\n max_uplift: 0.614360555100914,\r\n max_uplift_kn: -4.82273035754218,\r\n max_area_capacity: 0.606708227189577,\r\n area_m2_roofload: 5.92147229737027,\r\n max_capacity_ratio: 0.614360555100914,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2f\",\r\n },\r\n BK34S_19: {\r\n ref: \"BK34S_19\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.0143219673519669,\r\n max_shear_kn: 0.11242744371294,\r\n max_uplift: 0.0239042728936682,\r\n max_uplift_kn: -0.187648542215295,\r\n max_area_capacity: 0.0239241803278689,\r\n area_m2_roofload: 0.2335,\r\n max_capacity_ratio: 0.0239042728936682,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3g\",\r\n },\r\n },\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB3: {\r\n ref: \"BK34S_13\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.361442861397143,\r\n max_shear_kn: 2.83732646196757,\r\n max_uplift: 0.603271085736627,\r\n max_uplift_kn: -4.73567802303252,\r\n max_area_capacity: 0.603773488779711,\r\n area_m2_roofload: 5.89282925048998,\r\n max_capacity_ratio: 0.603271085736627,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3a\",\r\n },\r\n EB2: {\r\n ref: \"BK34S_9\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.496999951226571,\r\n max_shear_kn: 3.90144961712858,\r\n max_uplift: 0.829524475953238,\r\n max_uplift_kn: -6.51176713623292,\r\n max_area_capacity: 0.8220512457654,\r\n area_m2_roofload: 8.0232201586703,\r\n max_capacity_ratio: 0.829524475953238,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2c\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.790053557255535,\r\n PurlinMax: 0.213338866446758,\r\n NumRafters: 5,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 10,\r\n ColumnsMax: 0.41539537339148,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.415 - Top Connection\",\r\n RafterMax: 0.790053557255535,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.742964694631435,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.790053557255535,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n PC4: {\r\n ref: \"PC4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2504,\r\n total_compression_kn: 3.29084953458021,\r\n total_tension_kn: -5.49263682798459,\r\n max_strength: 0.112096158672034,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0961439945411197,\r\n max_capacity_ratio: 0.41539537339148,\r\n max_capacity_ratio_limit_state: \"Top Connection\",\r\n },\r\n PC2: {\r\n ref: \"PC2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2504,\r\n total_compression_kn: 6.0831182641722,\r\n total_tension_kn: -10.1531106347103,\r\n max_strength: 0.158082372604832,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0961439945411197,\r\n max_capacity_ratio: 0.412211221917626,\r\n max_capacity_ratio_limit_state: \"Top Connection\",\r\n },\r\n PC3: {\r\n ref: \"PC3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2504,\r\n total_compression_kn: 6.0831182641722,\r\n total_tension_kn: -10.1531106347103,\r\n max_strength: 0.158082372604832,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0961439945411197,\r\n max_capacity_ratio: 0.41539537339148,\r\n max_capacity_ratio_limit_state: \"Top Connection\",\r\n },\r\n PC1: {\r\n ref: \"PC1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"1586510\",\r\n embedment: 500,\r\n height: 2504,\r\n total_compression_kn: 6.0831182641722,\r\n total_tension_kn: -10.1531106347103,\r\n max_strength: 0.158082372604832,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0961439945411197,\r\n max_capacity_ratio: 0.41539537339148,\r\n max_capacity_ratio_limit_state: \"Top Connection\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 489.679904494908,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"PR1,PR2,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 7846,\r\n Column: \"G\",\r\n PointLoads: [\r\n {\r\n Name: \"P7a\",\r\n Location: 709,\r\n },\r\n {\r\n Name: \"P5a\",\r\n Location: 1801,\r\n },\r\n {\r\n Name: \"P3a\",\r\n Location: 2892,\r\n },\r\n {\r\n Name: \"P1a\",\r\n Location: 3792,\r\n },\r\n {\r\n Name: \"P2d\",\r\n Location: 4059,\r\n },\r\n {\r\n Name: \"P4d\",\r\n Location: 4959,\r\n },\r\n {\r\n Name: \"P6d\",\r\n Location: 6050,\r\n },\r\n {\r\n Name: \"P8d\",\r\n Location: 7141,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR3,PR4,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 8284,\r\n Column: \"H\",\r\n PointLoads: [\r\n {\r\n Name: \"P7a\",\r\n Location: 900,\r\n },\r\n {\r\n Name: \"P7b\",\r\n Location: 900,\r\n },\r\n {\r\n Name: \"P5a\",\r\n Location: 1991,\r\n },\r\n {\r\n Name: \"P5b\",\r\n Location: 1991,\r\n },\r\n {\r\n Name: \"P3a\",\r\n Location: 3082,\r\n },\r\n {\r\n Name: \"P3b\",\r\n Location: 3082,\r\n },\r\n {\r\n Name: \"P1a\",\r\n Location: 3982,\r\n },\r\n {\r\n Name: \"P1b\",\r\n Location: 3982,\r\n },\r\n {\r\n Name: \"P2c\",\r\n Location: 4249,\r\n },\r\n {\r\n Name: \"P2d\",\r\n Location: 4249,\r\n },\r\n {\r\n Name: \"P4c\",\r\n Location: 5149,\r\n },\r\n {\r\n Name: \"P4d\",\r\n Location: 5149,\r\n },\r\n {\r\n Name: \"P6c\",\r\n Location: 6240,\r\n },\r\n {\r\n Name: \"P6d\",\r\n Location: 6240,\r\n },\r\n {\r\n Name: \"P8c\",\r\n Location: 7331,\r\n },\r\n {\r\n Name: \"P8d\",\r\n Location: 7331,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR5,PR6,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 8284,\r\n Column: \"I\",\r\n PointLoads: [\r\n {\r\n Name: \"P7b\",\r\n Location: 900,\r\n },\r\n {\r\n Name: \"P7c\",\r\n Location: 900,\r\n },\r\n {\r\n Name: \"P5b\",\r\n Location: 1991,\r\n },\r\n {\r\n Name: \"P5c\",\r\n Location: 1991,\r\n },\r\n {\r\n Name: \"P3b\",\r\n Location: 3082,\r\n },\r\n {\r\n Name: \"P3c\",\r\n Location: 3082,\r\n },\r\n {\r\n Name: \"P1b\",\r\n Location: 3982,\r\n },\r\n {\r\n Name: \"P1c\",\r\n Location: 3982,\r\n },\r\n {\r\n Name: \"P2b\",\r\n Location: 4249,\r\n },\r\n {\r\n Name: \"P2c\",\r\n Location: 4249,\r\n },\r\n {\r\n Name: \"P4b\",\r\n Location: 5149,\r\n },\r\n {\r\n Name: \"P4c\",\r\n Location: 5149,\r\n },\r\n {\r\n Name: \"P6b\",\r\n Location: 6240,\r\n },\r\n {\r\n Name: \"P6c\",\r\n Location: 6240,\r\n },\r\n {\r\n Name: \"P8b\",\r\n Location: 7331,\r\n },\r\n {\r\n Name: \"P8c\",\r\n Location: 7331,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR7,PR8,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 8284,\r\n Column: \"J\",\r\n PointLoads: [\r\n {\r\n Name: \"P7c\",\r\n Location: 900,\r\n },\r\n {\r\n Name: \"P7d\",\r\n Location: 900,\r\n },\r\n {\r\n Name: \"P5c\",\r\n Location: 1991,\r\n },\r\n {\r\n Name: \"P5d\",\r\n Location: 1991,\r\n },\r\n {\r\n Name: \"P3c\",\r\n Location: 3082,\r\n },\r\n {\r\n Name: \"P3d\",\r\n Location: 3082,\r\n },\r\n {\r\n Name: \"P1c\",\r\n Location: 3982,\r\n },\r\n {\r\n Name: \"P1d\",\r\n Location: 3982,\r\n },\r\n {\r\n Name: \"P2a\",\r\n Location: 4249,\r\n },\r\n {\r\n Name: \"P2b\",\r\n Location: 4249,\r\n },\r\n {\r\n Name: \"P4a\",\r\n Location: 5149,\r\n },\r\n {\r\n Name: \"P4b\",\r\n Location: 5149,\r\n },\r\n {\r\n Name: \"P6a\",\r\n Location: 6240,\r\n },\r\n {\r\n Name: \"P6b\",\r\n Location: 6240,\r\n },\r\n {\r\n Name: \"P8a\",\r\n Location: 7331,\r\n },\r\n {\r\n Name: \"P8b\",\r\n Location: 7331,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR9,PR10,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 8284,\r\n Column: \"K\",\r\n PointLoads: [\r\n {\r\n Name: \"P7d\",\r\n Location: 900,\r\n },\r\n {\r\n Name: \"P5d\",\r\n Location: 1991,\r\n },\r\n {\r\n Name: \"P3d\",\r\n Location: 3082,\r\n },\r\n {\r\n Name: \"P1d\",\r\n Location: 3982,\r\n },\r\n {\r\n Name: \"P2a\",\r\n Location: 4249,\r\n },\r\n {\r\n Name: \"P4a\",\r\n Location: 5149,\r\n },\r\n {\r\n Name: \"P6a\",\r\n Location: 6240,\r\n },\r\n {\r\n Name: \"P8a\",\r\n Location: 7331,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"EB3a,\",\r\n BeamType: \"Edge Beam\",\r\n Length: 1066.87,\r\n Column: \"N\",\r\n PointLoads: [\r\n {\r\n Name: \"EB1a\",\r\n Location: 0,\r\n },\r\n {\r\n Name: \"PR1\",\r\n Location: 178,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n PR1: {\r\n Name: \"PR1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3923,\r\n PointLoadData: {\r\n P7: {\r\n Name: \"P7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 709.95,\r\n Bracket: \"\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1801.15,\r\n Bracket: \"\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2892.35,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3792.35,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK33\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3928.32,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"158\",\r\n PARENT_LEN: \"3928\",\r\n },\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3923,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1035.97,\r\n Bracket: \"\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2127.17,\r\n Bracket: \"\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3218.37,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3928.32,\r\n Bracket: \"BK33\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"158\",\r\n PARENT_LEN: \"3928\",\r\n },\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4113,\r\n PointLoadData: {\r\n P7: {\r\n Name: \"P7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 900,\r\n Bracket: \"\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1991.2,\r\n Bracket: \"\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3082.4,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3982.4,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PC1: {\r\n Name: \"PC1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 84.07,\r\n Bracket: \"CON3\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4118.37,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2691\",\r\n PARENT_LEN: \"4118\",\r\n },\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4171,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1035.97,\r\n Bracket: \"\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2127.17,\r\n Bracket: \"\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3218.37,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4175.88,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2691\",\r\n PARENT_LEN: \"4176\",\r\n },\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4113,\r\n PointLoadData: {\r\n P7: {\r\n Name: \"P7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 900,\r\n Bracket: \"\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1991.2,\r\n Bracket: \"\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3082.4,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3982.4,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PC2: {\r\n Name: \"PC2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 84.07,\r\n Bracket: \"CON3\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4118.37,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5225\",\r\n PARENT_LEN: \"4118\",\r\n },\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4171,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1035.97,\r\n Bracket: \"\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2127.17,\r\n Bracket: \"\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3218.37,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4175.88,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5225\",\r\n PARENT_LEN: \"4176\",\r\n },\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4113,\r\n PointLoadData: {\r\n P7: {\r\n Name: \"P7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 900,\r\n Bracket: \"\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1991.2,\r\n Bracket: \"\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3082.4,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3982.4,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PC3: {\r\n Name: \"PC3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 84.07,\r\n Bracket: \"CON3\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4118.37,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"7759\",\r\n PARENT_LEN: \"4118\",\r\n },\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4171,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1035.97,\r\n Bracket: \"\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2127.17,\r\n Bracket: \"\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3218.37,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4175.88,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"7759\",\r\n PARENT_LEN: \"4176\",\r\n },\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4113,\r\n PointLoadData: {\r\n P7: {\r\n Name: \"P7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 900,\r\n Bracket: \"\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1991.2,\r\n Bracket: \"\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3082.4,\r\n Bracket: \"\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3982.4,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PC4: {\r\n Name: \"PC4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 84.07,\r\n Bracket: \"CON3\",\r\n },\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4118.37,\r\n Bracket: \"CON\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10293\",\r\n PARENT_LEN: \"4118\",\r\n },\r\n },\r\n PR10: {\r\n Name: \"PR10\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4171,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 135.97,\r\n Bracket: \"\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1035.97,\r\n Bracket: \"\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2127.17,\r\n Bracket: \"\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3218.37,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"CON\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4175.88,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10293\",\r\n PARENT_LEN: \"4176\",\r\n },\r\n },\r\n U1: {\r\n Name: \"U1\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 1618,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"158\",\r\n PARENT_LEN: \"1428\",\r\n },\r\n },\r\n IF1: {\r\n Name: \"IF1\",\r\n AreaIndex: 0,\r\n BeamType: \"1086510\",\r\n Length: 7830,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10293\",\r\n PARENT_LEN: \"7840\",\r\n },\r\n },\r\n U2: {\r\n Name: \"U2\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 1690,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10293\",\r\n PARENT_LEN: \"1500\",\r\n },\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 7730,\r\n PointLoadData: {\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 178.59,\r\n Bracket: \"BK33\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 7561.41,\r\n Bracket: \"BK33\",\r\n },\r\n },\r\n NumPointLoads: 3,\r\n SupportData: {\r\n BK34S_13: {\r\n Name: \"BK34S_13\",\r\n End: 0,\r\n Side: 0,\r\n Location: 132.5,\r\n Bracket: \"\",\r\n },\r\n BK34S_14: {\r\n Name: \"BK34S_14\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1066.87,\r\n Bracket: \"\",\r\n },\r\n BK34S_15: {\r\n Name: \"BK34S_15\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2001.25,\r\n Bracket: \"\",\r\n },\r\n BK34S_16: {\r\n Name: \"BK34S_16\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2935.62,\r\n Bracket: \"\",\r\n },\r\n BK34S_17: {\r\n Name: \"BK34S_17\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3870,\r\n Bracket: \"\",\r\n },\r\n BK34S_18: {\r\n Name: \"BK34S_18\",\r\n End: 0,\r\n Side: 0,\r\n Location: 4804.37,\r\n Bracket: \"\",\r\n },\r\n BK34S_19: {\r\n Name: \"BK34S_19\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5738.75,\r\n Bracket: \"\",\r\n },\r\n BK34S_20: {\r\n Name: \"BK34S_20\",\r\n End: 0,\r\n Side: 0,\r\n Location: 6673.12,\r\n Bracket: \"\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 7740,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 9,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"158\",\r\n PARENT_LEN: \"7740\",\r\n },\r\n },\r\n U3: {\r\n Name: \"U3\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 7740,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"158\",\r\n PARENT_LEN: \"7740\",\r\n },\r\n },\r\n EB1: {\r\n Name: \"EB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"BK\",\r\n },\r\n PC1: {\r\n Name: \"PC1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"BK21\",\r\n },\r\n PC2: {\r\n Name: \"PC2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"BK21\",\r\n },\r\n PC3: {\r\n Name: \"PC3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"BK21\",\r\n },\r\n PC4: {\r\n Name: \"PC4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"BK21\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"125\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n U4: {\r\n Name: \"U4\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"125\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 10200,\r\n PointLoadData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 2,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"BK3\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"BK3\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"BK3\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"BK3\",\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 5,\r\n SupportData: {\r\n BK34S_12: {\r\n Name: \"BK34S_12\",\r\n End: 0,\r\n Side: 0,\r\n Location: 132.5,\r\n Bracket: \"\",\r\n },\r\n BK34S_11: {\r\n Name: \"BK34S_11\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1035.68,\r\n Bracket: \"\",\r\n },\r\n BK34S_10: {\r\n Name: \"BK34S_10\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1938.86,\r\n Bracket: \"\",\r\n },\r\n BK34S_9: {\r\n Name: \"BK34S_9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2842.05,\r\n Bracket: \"\",\r\n },\r\n BK34S_8: {\r\n Name: \"BK34S_8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3745.23,\r\n Bracket: \"\",\r\n },\r\n BK34S_7: {\r\n Name: \"BK34S_7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 4648.41,\r\n Bracket: \"\",\r\n },\r\n BK34S_6: {\r\n Name: \"BK34S_6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5551.59,\r\n Bracket: \"\",\r\n },\r\n BK34S_5: {\r\n Name: \"BK34S_5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 6454.77,\r\n Bracket: \"\",\r\n },\r\n BK34S_4: {\r\n Name: \"BK34S_4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7357.95,\r\n Bracket: \"\",\r\n },\r\n BK34S_3: {\r\n Name: \"BK34S_3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 8261.14,\r\n Bracket: \"\",\r\n },\r\n BK34S_2: {\r\n Name: \"BK34S_2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 9164.32,\r\n Bracket: \"\",\r\n },\r\n BK34S_1: {\r\n Name: \"BK34S_1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10067.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 12,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10325\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n U5: {\r\n Name: \"U5\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10325\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"125\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10325\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"125\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10325\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"125\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10325\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"125\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n AreaIndex: 0,\r\n BeamType: \"656510\",\r\n Length: 10200,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2566.25,\r\n Bracket: \"\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5100,\r\n Bracket: \"\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7633.75,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10167.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10325\",\r\n PARENT_LEN: \"10200\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n PC1: {\r\n Name: \"PC1\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2504,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC2: {\r\n Name: \"PC2\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2504,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC3: {\r\n Name: \"PC3\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2504,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n PC4: {\r\n Name: \"PC4\",\r\n AreaIndex: 0,\r\n ColumnType: \"1586510\",\r\n Height: 2504,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n },\r\n },\r\n },\r\n OLLC01364: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.752162371063717,\r\n BeamResults: {\r\n \"P2,\": \"0.114297221916423=Bending Moment\",\r\n \"R1,\": \"0.752162371063717=Bending Moment\",\r\n \"FB2a,\": \"0.0591898503122063=Bending Moment\",\r\n \"FB2b,\": \"0.0589178684699296=Bending Moment\",\r\n \"P7,\": \"0.105485625990193=Bending Moment\",\r\n \"P6,\": \"0.105485625990193=Bending Moment\",\r\n \"P2,P3,P4,\": \"0.114297221916423=Bending Moment\",\r\n \"R3,\": \"0.449163193594891=Bending Moment\",\r\n \"P8,\": \"0.105485625990193=Bending Moment\",\r\n \"P3,\": \"0.114297221916423=Bending Moment\",\r\n \"FB2,\": \"0.0591898503122063=Bending Moment\",\r\n \"R2,\": \"0.368205684350325=Bending Moment\",\r\n \"FB1,\": \"0.692413783809702=Deflection-W UP (-55.4mm)\",\r\n \"P5,\": \"0.105485625990193=Bending Moment\",\r\n \"P4,\": \"0.114297221916423=Bending Moment\",\r\n \"P5,P6,P7,P8,\": \"0.105485625990193=Bending Moment\",\r\n \"P1,\": \"0.0827770184037114=Bending Moment\",\r\n \",\": \"0.752162371063717=Bending Moment\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C2: \"0.648=Deflection (32.4mm)\",\r\n C5: \"0.351=Deflection (17.6mm)\",\r\n C1: \"0.648=Deflection (32.4mm)\",\r\n C4: \"0.297=Deflection (14.9mm)\",\r\n C3: \"0.379=Deflection (19.0mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.752162371063717,\r\n PurlinMax: 0.114297221916423,\r\n FasciaMax: 0.692413783809702,\r\n NumRafters: 3,\r\n NumColumns: 5,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 10,\r\n ColumnsMax: 0.6475625412696701,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.648 - Deflection (32.4mm)\",\r\n RafterMax: 0.752162371063717,\r\n NumFasciaBeams: 4,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.752162371063717,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2952,\r\n total_compression_kn: 5.98750809275717,\r\n total_tension_kn: -4.57315670561961,\r\n max_strength: 0.108733993868453,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.6475625412696701,\r\n max_capacity_ratio: 0.6475625412696701,\r\n max_capacity_ratio_limit_state: \"Deflection (32.4mm)\",\r\n },\r\n C5: {\r\n ref: \"C5\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2421,\r\n total_compression_kn: 3.15048210417984,\r\n total_tension_kn: -2.06480565051474,\r\n max_strength: 0.0524825656331977,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.351100800804612,\r\n max_capacity_ratio: 0.351100800804612,\r\n max_capacity_ratio_limit_state: \"Deflection (17.6mm)\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2952,\r\n total_compression_kn: 6.1983966485739,\r\n total_tension_kn: -4.71051979509712,\r\n max_strength: 0.11311478220801,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.6475625412696701,\r\n max_capacity_ratio: 0.6475625412696701,\r\n max_capacity_ratio_limit_state: \"Deflection (32.4mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2294,\r\n total_compression_kn: 5.81967189946798,\r\n total_tension_kn: -3.81417542611041,\r\n max_strength: 0.100181091556136,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.297452870051428,\r\n max_capacity_ratio: 0.297452870051428,\r\n max_capacity_ratio_limit_state: \"Deflection (14.9mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2482,\r\n total_compression_kn: 3.25848855502018,\r\n total_tension_kn: -2.13559238175543,\r\n max_strength: 0.0544978669632731,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.379069859061082,\r\n max_capacity_ratio: 0.379069859061082,\r\n max_capacity_ratio_limit_state: \"Deflection (19.0mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 23.9615922837998,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"R1,\",\r\n BeamType: \"Rafter\",\r\n Length: 4635,\r\n Column: \"H\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 594,\r\n },\r\n {\r\n Name: \"P5\",\r\n Location: 594,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 1665,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 1665,\r\n },\r\n {\r\n Name: \"P3\",\r\n Location: 2736,\r\n },\r\n {\r\n Name: \"P7\",\r\n Location: 2736,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 3807,\r\n },\r\n {\r\n Name: \"P8\",\r\n Location: 3807,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R2,\",\r\n BeamType: \"Rafter\",\r\n Length: 4341,\r\n Column: \"I\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 299,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 1370,\r\n },\r\n {\r\n Name: \"P3\",\r\n Location: 2441,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 3512,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R3,\",\r\n BeamType: \"Rafter\",\r\n Length: 4929,\r\n Column: \"J\",\r\n PointLoads: [\r\n {\r\n Name: \"P5\",\r\n Location: 888,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 1959,\r\n },\r\n {\r\n Name: \"P7\",\r\n Location: 3030,\r\n },\r\n {\r\n Name: \"P8\",\r\n Location: 4101,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"4368\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"4368\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"4368\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4228,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4237.5,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"4368\",\r\n PARENT_LEN: \"4270\",\r\n },\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4635,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 594.42,\r\n Bracket: \"BK2\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 594.42,\r\n Bracket: \"BK2\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1665.29,\r\n Bracket: \"BK2\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1665.29,\r\n Bracket: \"BK2\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2736.16,\r\n Bracket: \"BK2\",\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2736.16,\r\n Bracket: \"BK2\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3807.02,\r\n Bracket: \"BK2\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3807.02,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 8,\r\n SupportData: {\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK57\",\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4679.3,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"3.89\",\r\n FA_2: \"-0.00\",\r\n X: \"4335\",\r\n PARENT_LEN: \"5088\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"150mm x 50mm x 5mm\",\r\n Length: 8530,\r\n PointLoadData: {\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK3\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4270,\r\n Bracket: \"BK3\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 8540,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumPointLoads: 3,\r\n SupportData: {\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 8540,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 8540,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"8670\",\r\n PARENT_LEN: \"8670\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4341,\r\n PointLoadData: {\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 299.93,\r\n Bracket: \"BK2\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1370.8,\r\n Bracket: \"BK2\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2441.66,\r\n Bracket: \"BK2\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3512.53,\r\n Bracket: \"BK2\",\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4384.81,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 6,\r\n SupportData: {\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK57\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK57\",\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4384.81,\r\n Bracket: \"BK3\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4384.81,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"3.89\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"5088\",\r\n },\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4929,\r\n PointLoadData: {\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 888.73,\r\n Bracket: \"BK2\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1959.6,\r\n Bracket: \"BK2\",\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3030.47,\r\n Bracket: \"BK2\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4101.33,\r\n Bracket: \"BK2\",\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 4973.61,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 6,\r\n SupportData: {\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK57\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK57\",\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4973.61,\r\n Bracket: \"BK3\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4973.61,\r\n Bracket: \"BK3\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"3.89\",\r\n FA_2: \"0.00\",\r\n X: \"8638\",\r\n PARENT_LEN: \"5088\",\r\n },\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 8546,\r\n PointLoadData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK57\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 4276.95,\r\n Bracket: \"BK57\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 8555.77,\r\n Bracket: \"BK57\",\r\n },\r\n },\r\n NumPointLoads: 3,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 4277.92,\r\n Bracket: \"BK\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 8555.77,\r\n Bracket: \"BK2\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 8555.77,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 5,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2\",\r\n PARENT_LEN: \"8690\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2952,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2952,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2482,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2294,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2421,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n CVSC00227: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.596806348730482,\r\n BeamResults: {\r\n \"R1b,\": \"0.00671368315554681=Deflection (0.1mm)\",\r\n \"PA1,\": \"0.0276135332679859=Vertical Shear\",\r\n \"R2,\": \"0.47759083261829=Bending Moment\",\r\n \"FB1,\": \"0.296300455580168=Bending Moment\",\r\n \",\": \"0.596806348730482=Bending Moment\",\r\n \"P1,\": \"0.596806348730482=Bending Moment\",\r\n \"R1,\": \"0.300917774380859=Vertical Shear\",\r\n \"R1a,\": \"0.300917774380859=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C2: \"0.449=Deflection (22.4mm)\",\r\n C1: \"0.542=Deflection (27.1mm)\",\r\n C4: \"0.446=Deflection (22.3mm)\",\r\n C3: \"0.472=Deflection (23.6mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.596806348730482,\r\n PurlinMax: 0.596806348730482,\r\n FasciaMax: 0.296300455580168,\r\n NumRafters: 4,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 1,\r\n ColumnsMax: 0.541947686952871,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.542 - Deflection (27.1mm)\",\r\n RafterMax: 0.47759083261829,\r\n NumFasciaBeams: 1,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.596806348730482,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 500,\r\n height: 2593,\r\n total_compression_kn: 1.65232500952187,\r\n total_tension_kn: -0.713951010414031,\r\n max_strength: 0.258017612343561,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.44869530792248,\r\n max_capacity_ratio: 0.44869530792248,\r\n max_capacity_ratio_limit_state: \"Deflection (22.4mm)\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 500,\r\n height: 2751,\r\n total_compression_kn: 0.322526068570075,\r\n total_tension_kn: -0.139359878482443,\r\n max_strength: 0.231098612356031,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.541947686952871,\r\n max_capacity_ratio: 0.541947686952871,\r\n max_capacity_ratio_limit_state: \"Deflection (27.1mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 500,\r\n height: 2588,\r\n total_compression_kn: 4.0736333781795,\r\n total_tension_kn: -1.76017106177505,\r\n max_strength: 0.336348902337914,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.445943144490854,\r\n max_capacity_ratio: 0.445943144490854,\r\n max_capacity_ratio_limit_state: \"Deflection (22.3mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"656510\",\r\n embedment: 500,\r\n height: 2635,\r\n total_compression_kn: 4.38951022738071,\r\n total_tension_kn: -1.896657887523,\r\n max_strength: 0.355483880987757,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.472285843029969,\r\n max_capacity_ratio: 0.472285843029969,\r\n max_capacity_ratio_limit_state: \"Deflection (23.6mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 147.203180131263,\r\n BeamPointLoadPeakCalcs: [],\r\n ProcessedLoadData: {\r\n Beams: {\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 6860,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6870,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"6935\",\r\n },\r\n },\r\n PA1: {\r\n Name: \"PA1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 1180,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1152.5,\r\n Bracket: \"BK\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"1250\",\r\n PARENT_LEN: \"1250\",\r\n },\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3363,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 985.03,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK46\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK46\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3221.39,\r\n Bracket: \"BK\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"10.99\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"4788\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 4705,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2333.22,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK46\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK46\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4727.18,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"10.99\",\r\n FA_2: \"0.00\",\r\n X: \"6968\",\r\n PARENT_LEN: \"4788\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 6978,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK46\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 6987.81,\r\n Bracket: \"BK46\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6987.81,\r\n Bracket: \"BK2\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6987.81,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"6\",\r\n PARENT_LEN: \"7131\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2751,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2593,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2635,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"656510\",\r\n Height: 2588,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON1\",\r\n },\r\n },\r\n },\r\n },\r\n FTLC01383: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.387344662083303,\r\n BeamResults: {\r\n \",\": \"0.158720742632126=Bending Moment\",\r\n \"FB1a,FB1b,FB1c,FB1d,\": \"0.158720742632126=Bending Moment\",\r\n \"FB1,\": \"0.158720742632126=Bending Moment\",\r\n \"R2,\": \"0.0438650925389323=Bending Moment\",\r\n \"R1,\": \"0.0438650925389323=Bending Moment\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C2: \"0.387=Deflection (19.4mm)\",\r\n C5: \"0.161=Deflection (8.1mm)\",\r\n C1: \"0.161=Deflection (8.1mm)\",\r\n C4: \"0.387=Deflection (19.4mm)\",\r\n C3: \"0.387=Deflection (19.4mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C2 CR=0.387 - Deflection (19.4mm)\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.387344662083303,\r\n FasciaMax: 0.158720742632126,\r\n NumRafters: 2,\r\n NumColumns: 5,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C2 CR=0.387 - Deflection (19.4mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.387344662083303,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C2 CR=0.387 - Deflection (19.4mm)\",\r\n RafterMax: 0.0438650925389323,\r\n NumFasciaBeams: 2,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.158720742632126,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2861,\r\n total_compression_kn: 3.60647806655675,\r\n total_tension_kn: -2.14199910356644,\r\n max_strength: 0.0617412454393867,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.387344662083303,\r\n max_capacity_ratio: 0.387344662083303,\r\n max_capacity_ratio_limit_state: \"Deflection (19.4mm)\",\r\n },\r\n C5: {\r\n ref: \"C5\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x3.5\",\r\n embedment: 500,\r\n height: 3019,\r\n total_compression_kn: 2.26861448983637,\r\n total_tension_kn: -1.34740045936472,\r\n max_strength: 0.0170099191156452,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.161409380041811,\r\n max_capacity_ratio: 0.161409380041811,\r\n max_capacity_ratio_limit_state: \"Deflection (8.1mm)\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x3.5\",\r\n embedment: 500,\r\n height: 3019,\r\n total_compression_kn: 2.26861448983637,\r\n total_tension_kn: -1.34740045936472,\r\n max_strength: 0.0170099191156452,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.161409380041811,\r\n max_capacity_ratio: 0.161409380041811,\r\n max_capacity_ratio_limit_state: \"Deflection (8.1mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2861,\r\n total_compression_kn: 3.60647806655675,\r\n total_tension_kn: -2.14199910356644,\r\n max_strength: 0.0617412454393867,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.387344662083303,\r\n max_capacity_ratio: 0.387344662083303,\r\n max_capacity_ratio_limit_state: \"Deflection (19.4mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2861,\r\n total_compression_kn: 3.60647806655675,\r\n total_tension_kn: -2.14199910356644,\r\n max_strength: 0.0617412454393867,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.387344662083303,\r\n max_capacity_ratio: 0.387344662083303,\r\n max_capacity_ratio_limit_state: \"Deflection (19.4mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 8.27490465049321,\r\n BeamPointLoadPeakCalcs: [],\r\n ProcessedLoadData: {\r\n Beams: {\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3808,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3830.35,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"3902\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 3808,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n W1: {\r\n Name: \"W1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3830.35,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Wall\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"14438\",\r\n PARENT_LEN: \"3902\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 14305,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 14315,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3556.25,\r\n Bracket: \"BK\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 7157.5,\r\n Bracket: \"BK\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10758.75,\r\n Bracket: \"BK\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 14315,\r\n Bracket: \"BK2\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 14315,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 7,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"14470\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"90mm x 90mm x 3.5mm P/C\",\r\n Height: 3019,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2861,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2861,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2861,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n AreaIndex: 0,\r\n ColumnType: \"90mm x 90mm x 3.5mm P/C\",\r\n Height: 3019,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n ZAPC00156: {\r\n AttachmentBracketResults: {},\r\n BeamResults: {\r\n \"P2,\": \"0.608955742735615=Deflection-W UP (-34.3mm)\",\r\n \"R1,\": \"0.196679145170348=Bending Moment\",\r\n \"PR1,PR2,\": \"0.189717978214426=Bending Moment\",\r\n \"PA1,\": \"0.0237771790639529=Vertical Shear\",\r\n \"R2,\": \"0.109833691851207=Bending Moment\",\r\n \"PB2,\": \"0.18615718930963=Vertical Shear\",\r\n \"PB1,\": \"0.184903554305561=Vertical Shear\",\r\n \"P3,\": \"0.573690560314817=Deflection-W UP (-32.3mm)\",\r\n \"CB1a,\": \"0.139363699042845=Vertical Shear\",\r\n \"FB1,\": \"0.151101899333926=Vertical Shear\",\r\n \"FB2,\": \"0.0359180010323579=Vertical Shear\",\r\n \"P4,\": \"0.573679286279516=Deflection-W UP (-32.3mm)\",\r\n \",\": \"0.608967016770916=Deflection-W UP (-34.3mm)\",\r\n \"P5,\": \"0.10164189313363=Vertical Shear\",\r\n \"P1,\": \"0.608967016770916=Deflection-W UP (-34.3mm)\",\r\n \"CB1c,\": \"0.140660759223092=Vertical Shear\",\r\n \"PR3,PR4,\": \"0.176769311426151=Bending Moment\",\r\n \"CB1,\": \"0.140660759223092=Vertical Shear\",\r\n \"CB1b,\": \"0.0109128384382936=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C2: \"0.390=Deflection (19.5mm)\",\r\n C1: \"0.390=Deflection (19.5mm)\",\r\n C4: \"0.767=Deflection (38.3mm)\",\r\n C3: \"0.884=Deflection (44.2mm)\",\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C3 CR=0.884 - Deflection (44.2mm)\",\r\n MaxResultOverAll: 0.88375321641488,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.608967016770916,\r\n PurlinMax: 0.608967016770916,\r\n FasciaMax: 0.140660759223092,\r\n NumRafters: 2,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 4,\r\n ColumnsMax: 0.389517103336075,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.390 - Deflection (19.5mm)\",\r\n RafterMax: 0.189717978214426,\r\n NumFasciaBeams: 5,\r\n EdgeBeamMax: 0.18615718930963,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.608967016770916,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 0.88375321641488,\r\n PurlinMax: 0.10164189313363,\r\n FasciaMax: 0.151101899333926,\r\n NumRafters: 2,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C3 CR=0.884 - Deflection (44.2mm)\",\r\n NumPurlins: 1,\r\n ColumnsMax: 0.88375321641488,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C3 CR=0.884 - Deflection (44.2mm)\",\r\n RafterMax: 0.196679145170348,\r\n NumFasciaBeams: 1,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.0237771790639529,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 39.7352865520077,\r\n },\r\n OLCC00019: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 1.1822164660377,\r\n BeamResults: {\r\n \",\": \"0.319778002690217=Bending Moment\",\r\n \"FB2a,FB2b,FB2c,FB2d,FB2e,FB2f,FB2g,FB2h,\": \"0.212361525813368=Bending Moment\",\r\n \"FB1,\": \"0.319778002690217=Bending Moment\",\r\n \"FB2,\": \"0.212361525813368=Bending Moment\",\r\n \"R2,\": \"0.018827140902226=Vertical Shear\",\r\n \"R1,\": \"0.018827140902226=Vertical Shear\",\r\n \"FB1a,FB1b,FB1c,FB1d,FB1e,FB1f,\": \"0.319778002690217=Bending Moment\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C1: \"0.141=Deflection (7.0mm)\",\r\n C4: \"0.402=Deflection (20.1mm)\",\r\n C2: \"0.155=Deflection (7.8mm)\",\r\n C5: \"0.501=Deflection (25.1mm)\",\r\n C8: \"0.112=Deflection (5.6mm)\",\r\n C9: \"0.124=Deflection (6.2mm)\",\r\n C6: \"0.549=Deflection (27.5mm)\",\r\n C13: \"0.124=Deflection (6.2mm)\",\r\n C11: \"0.112=Deflection (5.6mm)\",\r\n C10: \"0.124=Deflection (6.2mm)\",\r\n C3: \"1.182=Deflection (59.1mm)\",\r\n C12: \"0.112=Deflection (5.6mm)\",\r\n C15: \"0.124=Deflection (6.2mm)\",\r\n C14: \"0.124=Deflection (6.2mm)\",\r\n C16: \"0.124=Deflection (6.2mm)\",\r\n C7: \"0.124=Deflection (6.2mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C3 CR=1.182 - Deflection (59.1mm)\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.319778002690217,\r\n FasciaMax: 0.319778002690217,\r\n NumRafters: 1,\r\n NumColumns: 12,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.155038849495345,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C2 CR=0.155 - Deflection (7.8mm)\",\r\n RafterMax: 0.018827140902226,\r\n NumFasciaBeams: 2,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.319778002690217,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n JoinBeamMax: 0,\r\n NumRafters: 0,\r\n NumFasciaBeams: 0,\r\n AttachmentBracketsMaxText: \"\",\r\n ColumnsMaxText: \"Limiting Member = C3 CR=1.182 - Deflection (59.1mm)\",\r\n NumColumns: 1,\r\n MaxResult: 1.1822164660377,\r\n ColumnsMax: 1.1822164660377,\r\n MaxResultText: \"Limiting Member = C3 CR=1.182 - Deflection (59.1mm)\",\r\n NumPurlins: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 2: {\r\n MaxResult: 0.549485142395164,\r\n FasciaMax: 0.212361525813368,\r\n NumRafters: 1,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C6 CR=0.549 - Deflection (27.5mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.549485142395164,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C6 CR=0.549 - Deflection (27.5mm)\",\r\n RafterMax: 0.018827140902226,\r\n NumFasciaBeams: 2,\r\n JoinBeamMax: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2275,\r\n total_compression_kn: 2.08816294481027,\r\n total_tension_kn: -0.999699835732297,\r\n max_strength: 0.0341138762974948,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.140881143635549,\r\n max_capacity_ratio: 0.140881143635549,\r\n max_capacity_ratio_limit_state: \"Deflection (7.0mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 2,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2117,\r\n total_compression_kn: 3.73652387814454,\r\n total_tension_kn: -1.78884618007159,\r\n max_strength: 0.0620522299579341,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.402492117787144,\r\n max_capacity_ratio: 0.402492117787144,\r\n max_capacity_ratio_limit_state: \"Deflection (20.1mm)\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2345,\r\n total_compression_kn: 1.88128862054436,\r\n total_tension_kn: -0.900659562797729,\r\n max_strength: 0.0306918258563354,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.155038849495345,\r\n max_capacity_ratio: 0.155038849495345,\r\n max_capacity_ratio_limit_state: \"Deflection (7.8mm)\",\r\n },\r\n C5: {\r\n ref: \"C5\",\r\n area: 2,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2275,\r\n total_compression_kn: 2.08816294481027,\r\n total_tension_kn: -0.999699835732297,\r\n max_strength: 0.0341138762974948,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.501047830321121,\r\n max_capacity_ratio: 0.501047830321121,\r\n max_capacity_ratio_limit_state: \"Deflection (25.1mm)\",\r\n },\r\n C8: {\r\n ref: \"C8\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2117,\r\n total_compression_kn: 3.73652387814454,\r\n total_tension_kn: -1.78884618007159,\r\n max_strength: 0.0620522299579341,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.112275743759339,\r\n max_capacity_ratio: 0.112275743759339,\r\n max_capacity_ratio_limit_state: \"Deflection (5.6mm)\",\r\n },\r\n C9: {\r\n ref: \"C9\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2187,\r\n total_compression_kn: 3.32277522961272,\r\n total_tension_kn: -1.59076563420246,\r\n max_strength: 0.0550339575535693,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.124393100539053,\r\n max_capacity_ratio: 0.124393100539053,\r\n max_capacity_ratio_limit_state: \"Deflection (6.2mm)\",\r\n },\r\n C6: {\r\n ref: \"C6\",\r\n area: 2,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2345,\r\n total_compression_kn: 1.88128862054436,\r\n total_tension_kn: -0.900659562797729,\r\n max_strength: 0.0306918258563354,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.549485142395164,\r\n max_capacity_ratio: 0.549485142395164,\r\n max_capacity_ratio_limit_state: \"Deflection (27.5mm)\",\r\n },\r\n C13: {\r\n ref: \"C13\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2187,\r\n total_compression_kn: 3.32277522961272,\r\n total_tension_kn: -1.59076563420246,\r\n max_strength: 0.0550339575535693,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.124393100539053,\r\n max_capacity_ratio: 0.124393100539053,\r\n max_capacity_ratio_limit_state: \"Deflection (6.2mm)\",\r\n },\r\n C11: {\r\n ref: \"C11\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2117,\r\n total_compression_kn: 3.73652387814454,\r\n total_tension_kn: -1.78884618007159,\r\n max_strength: 0.0620522299579341,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.112275743759339,\r\n max_capacity_ratio: 0.112275743759339,\r\n max_capacity_ratio_limit_state: \"Deflection (5.6mm)\",\r\n },\r\n C10: {\r\n ref: \"C10\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2187,\r\n total_compression_kn: 3.32277522961272,\r\n total_tension_kn: -1.59076563420246,\r\n max_strength: 0.0550339575535693,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.124393100539053,\r\n max_capacity_ratio: 0.124393100539053,\r\n max_capacity_ratio_limit_state: \"Deflection (6.2mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 1,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2117,\r\n total_compression_kn: 3.73652387814454,\r\n total_tension_kn: -1.78884618007159,\r\n max_strength: 0.0620522299579341,\r\n max_deflection_mm: 50,\r\n max_deflection: 1.1822164660377,\r\n max_capacity_ratio: 1.1822164660377,\r\n max_capacity_ratio_limit_state: \"Deflection (59.1mm)\",\r\n },\r\n C12: {\r\n ref: \"C12\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2117,\r\n total_compression_kn: 3.73652387814454,\r\n total_tension_kn: -1.78884618007159,\r\n max_strength: 0.0620522299579341,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.112275743759339,\r\n max_capacity_ratio: 0.112275743759339,\r\n max_capacity_ratio_limit_state: \"Deflection (5.6mm)\",\r\n },\r\n C15: {\r\n ref: \"C15\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2187,\r\n total_compression_kn: 3.32277522961272,\r\n total_tension_kn: -1.59076563420246,\r\n max_strength: 0.0550339575535693,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.124393100539053,\r\n max_capacity_ratio: 0.124393100539053,\r\n max_capacity_ratio_limit_state: \"Deflection (6.2mm)\",\r\n },\r\n C14: {\r\n ref: \"C14\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2187,\r\n total_compression_kn: 3.32277522961272,\r\n total_tension_kn: -1.59076563420246,\r\n max_strength: 0.0550339575535693,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.124393100539053,\r\n max_capacity_ratio: 0.124393100539053,\r\n max_capacity_ratio_limit_state: \"Deflection (6.2mm)\",\r\n },\r\n C16: {\r\n ref: \"C16\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2187,\r\n total_compression_kn: 3.32277522961272,\r\n total_tension_kn: -1.59076563420246,\r\n max_strength: 0.0550339575535693,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.124393100539053,\r\n max_capacity_ratio: 0.124393100539053,\r\n max_capacity_ratio_limit_state: \"Deflection (6.2mm)\",\r\n },\r\n C7: {\r\n ref: \"C7\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"65x65x3.0\",\r\n embedment: 500,\r\n height: 2187,\r\n total_compression_kn: 3.32277522961272,\r\n total_tension_kn: -1.59076563420246,\r\n max_strength: 0.0550339575535693,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.124393100539053,\r\n max_capacity_ratio: 0.124393100539053,\r\n max_capacity_ratio_limit_state: \"Deflection (6.2mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 3.39993234192468,\r\n BeamPointLoadPeakCalcs: [],\r\n ProcessedLoadData: {\r\n Beams: {\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 1855,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1876.66,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1876.66,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1876.66,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"33\",\r\n PARENT_LEN: \"2001\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 2,\r\n BeamType: \"1586510\",\r\n Length: 1855,\r\n PointLoadData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1876.66,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1876.66,\r\n Bracket: \"BK2\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1876.66,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"13896\",\r\n PARENT_LEN: \"2001\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"1586510\",\r\n Length: 41694,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 41704,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C8: {\r\n Name: \"C8\",\r\n End: 0,\r\n Side: 0,\r\n Location: 6915.25,\r\n Bracket: \"BK\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 13895.5,\r\n Bracket: \"IBLC \",\r\n },\r\n C11: {\r\n Name: \"C11\",\r\n End: 0,\r\n Side: 0,\r\n Location: 20884.5,\r\n Bracket: \"BK\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 27873.5,\r\n Bracket: \"IBLC \",\r\n },\r\n C12: {\r\n Name: \"C12\",\r\n End: 0,\r\n Side: 0,\r\n Location: 34821.25,\r\n Bracket: \"BK\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 41704,\r\n Bracket: \"BK2\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 41704,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 9,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"13928\",\r\n },\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n AreaIndex: 2,\r\n BeamType: \"1586510\",\r\n Length: 41694,\r\n PointLoadData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 41704,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"BK2\",\r\n },\r\n C13: {\r\n Name: \"C13\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5164.25,\r\n Bracket: \"BK\",\r\n },\r\n C9: {\r\n Name: \"C9\",\r\n End: 0,\r\n Side: 0,\r\n Location: 10393.5,\r\n Bracket: \"BK\",\r\n },\r\n C14: {\r\n Name: \"C14\",\r\n End: 0,\r\n Side: 0,\r\n Location: 15622.75,\r\n Bracket: \"BK\",\r\n },\r\n C7: {\r\n Name: \"C7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 20852,\r\n Bracket: \"BK\",\r\n },\r\n C15: {\r\n Name: \"C15\",\r\n End: 0,\r\n Side: 0,\r\n Location: 26081.25,\r\n Bracket: \"BK\",\r\n },\r\n C10: {\r\n Name: \"C10\",\r\n End: 0,\r\n Side: 0,\r\n Location: 31310.5,\r\n Bracket: \"BK\",\r\n },\r\n C16: {\r\n Name: \"C16\",\r\n End: 0,\r\n Side: 0,\r\n Location: 36539.75,\r\n Bracket: \"BK\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 41704,\r\n Bracket: \"BK2\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 41704,\r\n Bracket: \"BK2\",\r\n },\r\n },\r\n NumSupports: 11,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"13928\",\r\n PARENT_LEN: \"13928\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2275,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2345,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 1,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2117,\r\n TopBracket: \"IBLC \",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 2,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2117,\r\n TopBracket: \"IBLC \",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n AreaIndex: 2,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2275,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n AreaIndex: 2,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2345,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C7: {\r\n Name: \"C7\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2187,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C8: {\r\n Name: \"C8\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2117,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C9: {\r\n Name: \"C9\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2187,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C10: {\r\n Name: \"C10\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2187,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C11: {\r\n Name: \"C11\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2117,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C12: {\r\n Name: \"C12\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2117,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C13: {\r\n Name: \"C13\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2187,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C14: {\r\n Name: \"C14\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2187,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C15: {\r\n Name: \"C15\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2187,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C16: {\r\n Name: \"C16\",\r\n AreaIndex: 0,\r\n ColumnType: \"65mm x 65mm x 3mm P/C\",\r\n Height: 2187,\r\n TopBracket: \"BK\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n BIGC00286: {\r\n AttachmentBracketResults: {\r\n BK34D_1: \"0.503=Uplift\",\r\n BK34D_8: \"0.508=Uplift\",\r\n BK34D_7: \"0.034=Uplift\",\r\n BK34D_6: \"0.036=Uplift\",\r\n BK34D_5: \"0.113=Uplift\",\r\n BK34D_4: \"0.113=Uplift\",\r\n BK34D_3: \"0.036=Uplift\",\r\n BK34D_2: \"0.039=Uplift\",\r\n },\r\n BeamResults: {\r\n \"EB3g,\": \"0.341252496404056=Vertical Shear\",\r\n \"EB1,\": \"0.525624007833364=Bending Moment\",\r\n \"P5a,P5b,P5c,P5d,P6a,P6b,P6c,P6d,\": \"0.0319074541102704=Bending Moment\",\r\n \"EB3a,\": \"0.338135872978319=Vertical Shear\",\r\n \"P2,\": \"0.0247999513933381=Bending Moment\",\r\n \"P3,\": \"0.038451817438406=Bending Moment\",\r\n \"EB2b,\": \"0.401949632426516=Bending Moment\",\r\n \"PR1,PR2,\": \"0.609188659447446=Deflection-W UP (-48.7mm)\",\r\n \"PO1,PO2,\": \"0.251395210132181=Bending Moment\",\r\n \"P7a,P7b,P9a,P9b,\": \"0.0232043042829216=Bending Moment\",\r\n \"P9,\": \"0.0232043042829216=Bending Moment\",\r\n \"EB1b,\": \"0.525624007833364=Bending Moment\",\r\n \"EB3b,EB3c,EB3e,EB3f,\": \"0.0122075652805063=Vertical Shear\",\r\n \",\": \"0.762183681102281=Deflection-W UP (-61.0mm)\",\r\n \"HR3,\": \"0.258142539821897=Vertical Shear\",\r\n \"EB2,\": \"0.526011549419634=Bending Moment\",\r\n \"HR1,\": \"0.16772700425012=Bending Moment\",\r\n \"EB3,\": \"0.341252496404056=Vertical Shear\",\r\n \"P3b,P3c,P4b,P4c,\": \"0.038451817438406=Bending Moment\",\r\n \"HR4,\": \"0.258258314685479=Vertical Shear\",\r\n \"EB2a,\": \"0.526011549419634=Bending Moment\",\r\n \"P5,\": \"0.0319074541102704=Bending Moment\",\r\n \"P8,\": \"0.0814279312179728=Deflection-W UP (-2.3mm)\",\r\n \"EB1a,\": \"0.401992718417=Bending Moment\",\r\n \"EB3d,\": \"0.103715239920421=Vertical Shear\",\r\n \"P8a,P8b,P10a,P10b,\": \"0.0814279312179728=Deflection-W UP (-2.3mm)\",\r\n \"JR1,\": \"0.244651414572905=Bending Moment\",\r\n \"JR2,\": \"0.244651414572905=Bending Moment\",\r\n \"P10,\": \"0.0814279312179728=Deflection-W UP (-2.3mm)\",\r\n \"P1a,P1b,P2a,P2b,\": \"0.0247999513933381=Bending Moment\",\r\n \"P3a,\": \"0.031013587919997=Vertical Shear\",\r\n \"P3d,\": \"0.0311048235716189=Vertical Shear\",\r\n \"PR3,PR4,\": \"0.762183681102281=Deflection-W UP (-61.0mm)\",\r\n \"HR2,\": \"0.167857447577813=Bending Moment\",\r\n \"P4a,\": \"0.031013587919997=Vertical Shear\",\r\n \"P4,\": \"0.038451817438406=Bending Moment\",\r\n \"HB1,\": \"0.373501031345328=Bending Moment\",\r\n \"P4d,\": \"0.0311048235716189=Vertical Shear\",\r\n \"P1,\": \"0.0247999513933381=Bending Moment\",\r\n \"P6,\": \"0.0319074541102704=Bending Moment\",\r\n \"P7,\": \"0.0232043042829216=Bending Moment\",\r\n },\r\n ColumnResults: {\r\n PC4: \"0.489=Deflection (24.5mm)\",\r\n PC2: \"0.326=Strength\",\r\n PC3: \"0.489=Deflection (24.5mm)\",\r\n PC1: \"0.326=Strength\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB3: {\r\n ref: \"BK34D_8\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.476885378758326,\r\n max_shear_kn: 3.74355022325286,\r\n max_uplift: 0.507748937324761,\r\n max_uplift_kn: -3.98582915799937,\r\n max_area_capacity: 0.743690554218798,\r\n area_m2_roofload: 7.25841980917547,\r\n max_capacity_ratio: 0.507748937324761,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3g\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.762183681102281,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.762183681102281,\r\n PurlinMax: 0.0814279312179728,\r\n NumColumns: 4,\r\n NumRafters: 3,\r\n HipRafterMax: 0.258258314685479,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 19,\r\n ColumnsMax: 0.489165699384517,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC3 CR=0.489 - Deflection (24.5mm)\",\r\n RafterMax: 0.762183681102281,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.526011549419634,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.762183681102281,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 193.761334177747,\r\n },\r\n FTNC00118: {\r\n AttachmentBracketResults: {\r\n BK34S_2: \"0.335=Uplift\",\r\n BK34S_3: \"0.293=Uplift\",\r\n BK34S_4: \"0.455=Uplift\",\r\n BK34S_5: \"0.602=Uplift\",\r\n BK34S_6: \"0.090=Uplift\",\r\n BK34S_7: \"0.382=Uplift\",\r\n BK34S_8: \"0.278=Uplift\",\r\n BK34S_9: \"0.268=Uplift\",\r\n BK34S_1: \"0.237=Uplift\",\r\n },\r\n BeamResults: {\r\n \"KP1,\": \"0.0181383551142143=Bending Moment\",\r\n \"EB4c,\": \"0.028338896765278=Vertical Shear\",\r\n \"P10c,\": \"0.037025906412473=Bending Moment\",\r\n \"EB3a,\": \"0.246634287650044=Vertical Shear\",\r\n \"P2,\": \"0.0529736866362429=Bending Moment\",\r\n \"P3,\": \"0.0529736866362429=Bending Moment\",\r\n \"PR3,PR4,\": \"0.193661507384104=Bending Moment\",\r\n \"EB4a,\": \"0.180052105160334=Vertical Shear\",\r\n \"EB2b,\": \"0.252505624255715=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.0855651996150157=Vertical Shear\",\r\n \"EB2c,\": \"0.252505624255715=Vertical Shear\",\r\n \"EB2d,\": \"0.159296893350007=Vertical Shear\",\r\n \"P9,\": \"0.410009423056073=Deflection-W UP (-17.7mm)\",\r\n \"PR9,PR10,\": \"0.281306729186725=Bending Moment\",\r\n \"EB1b,\": \"0.101680258661655=Vertical Shear\",\r\n \"RI1,\": \"0.0574350206752201=Vertical Shear\",\r\n \",\": \"0.886214753104699=Bending Moment\",\r\n \"HR1,\": \"0.11529652032559=Vertical Shear\",\r\n \"EB3,\": \"0.404896393089073=Bending Moment\",\r\n \"EB2,\": \"0.404710639193032=Vertical Shear\",\r\n \"EB1,\": \"0.886214753104699=Bending Moment\",\r\n \"EB2a,\": \"0.404710639193032=Vertical Shear\",\r\n \"P5,\": \"0.0529736866362429=Bending Moment\",\r\n \"EB4b,\": \"0.322577547900318=Vertical Shear\",\r\n \"P8,\": \"0.0411614104949971=Bending Moment\",\r\n \"P5,P6,\": \"0.0529736866362429=Bending Moment\",\r\n \"VR1,\": \"0.0791620278967358=Bending Moment\",\r\n \"VR2,\": \"0.0761283220985219=Bending Moment\",\r\n \"EB3b,\": \"0.404896393089073=Bending Moment\",\r\n \"EB4,\": \"0.322577547900318=Vertical Shear\",\r\n \"EB4d,\": \"0.188599177682554=Vertical Shear\",\r\n \"PR7,PR8,\": \"0.150027927559794=End 1 (CON3)\",\r\n \"EB1a,\": \"0.886214753104699=Bending Moment\",\r\n \"P10a,P10b,\": \"0.0863602448109876=Bending Moment\",\r\n \"PR5,PR6,\": \"0.193661507384104=Bending Moment\",\r\n \"P10,\": \"0.0863602448109876=Bending Moment\",\r\n \"KR1,\": \"0.0413010920111847=Vertical Shear\",\r\n \"P9b,\": \"0.0828402348693438=Bending Moment\",\r\n \"PR13,PR14,\": \"0.192445794933853=Bending Moment\",\r\n \"P9a,\": \"0.410009423056073=Deflection-W UP (-17.7mm)\",\r\n \"P4,\": \"0.0529736866362429=Bending Moment\",\r\n \"P1,P2,\": \"0.0529736866362429=Bending Moment\",\r\n \"P3,P4,\": \"0.0529736866362429=Bending Moment\",\r\n \"PR11,PR12,\": \"0.10517222158725=End 1 (CON3)\",\r\n \"KF1,\": \"0.182620379936203=Vertical Shear\",\r\n \"P1,\": \"0.0529736866362429=Bending Moment\",\r\n \"P6,\": \"0.0529736866362429=Bending Moment\",\r\n \"P7,\": \"0.0466135056822963=Bending Moment\",\r\n },\r\n ColumnResults: {\r\n PC4: \"0.103=Strength\",\r\n PC2: \"0.317=Deflection (15.8mm)\",\r\n PC3: \"0.099=Strength\",\r\n C1: \"0.108=Strength\",\r\n PC1: \"0.317=Deflection (15.8mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34S_5\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.376268852429011,\r\n max_shear_kn: 2.95371049156774,\r\n max_uplift: 0.602168186722881,\r\n max_uplift_kn: -4.72702026577462,\r\n max_area_capacity: 0.580219383251054,\r\n area_m2_roofload: 6.2881275659833,\r\n max_capacity_ratio: 0.602168186722881,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2a\",\r\n },\r\n EB4: {\r\n ref: \"BK34S_7\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.241603355360501,\r\n max_shear_kn: 1.89658633957993,\r\n max_uplift: 0.381777396160429,\r\n max_uplift_kn: -2.99695255985937,\r\n max_area_capacity: 0.25069809162878,\r\n area_m2_roofload: 2.71694056802691,\r\n max_capacity_ratio: 0.381777396160429,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB4b\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.886214753104699,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.886214753104699,\r\n PurlinMax: 0.0529736866362429,\r\n NumColumns: 2,\r\n NumRafters: 5,\r\n HipRafterMax: 0.11529652032559,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 11,\r\n ColumnsMax: 0.316750355463003,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.317 - Deflection (15.8mm)\",\r\n RafterMax: 0.193661507384104,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.886214753104699,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.886214753104699,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 0.410009423056073,\r\n PurlinMax: 0.410009423056073,\r\n NumRafters: 3,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 6,\r\n ColumnsMax: 0.108401527318521,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.108 - Strength\",\r\n RafterMax: 0.281306729186725,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.404896393089073,\r\n JoinBeamMax: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 152.374505064391,\r\n },\r\n DPPC01305: {\r\n AttachmentBracketResults: {\r\n BK34D_4: \"0.158=Shear\",\r\n BK34D_3: \"0.053=Shear\",\r\n BK34D_2: \"0.053=Shear\",\r\n BK34D_1: \"0.158=Shear\",\r\n },\r\n BeamResults: {\r\n \",\": \"0.499441523681063=Deflection-W UP (-30.3mm)\",\r\n \"FB1b,\": \"0.0166682647246832=Vertical Shear\",\r\n \"R2,\": \"0.0912542959568275=Vertical Shear\",\r\n \"FB1,\": \"0.106483905916764=Vertical Shear\",\r\n \"FB2a,FB2b,\": \"0.0178172195432002=Vertical Shear\",\r\n \"FB1a,\": \"0.106483905916764=Vertical Shear\",\r\n \"P2,\": \"0.499441523681063=Deflection-W UP (-30.3mm)\",\r\n \"FB1c,\": \"0.106483905916764=Vertical Shear\",\r\n \"P1,P2,\": \"0.499441523681063=Deflection-W UP (-30.3mm)\",\r\n \"P1,\": \"0.499441523681063=Deflection-W UP (-30.3mm)\",\r\n \"FB2,\": \"0.0178172195432002=Vertical Shear\",\r\n \"R1,\": \"0.0912542959568275=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C2: \"0.330=Deflection (16.5mm)\",\r\n C1: \"0.397=Deflection (19.8mm)\",\r\n C3: \"0.397=Deflection (19.8mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n FB1: {\r\n ref: \"BK34D_4\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.158437200141122,\r\n max_shear_kn: 1.24373202110781,\r\n max_uplift: 0.127276260439258,\r\n max_uplift_kn: -0.999118644448175,\r\n max_area_capacity: 0.206258495612992,\r\n area_m2_roofload: 2.6798135042518,\r\n max_capacity_ratio: 0.158437200141122,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"FB1a\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.499441523681063,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.499441523681063,\r\n PurlinMax: 0.499441523681063,\r\n FasciaMax: 0.106483905916764,\r\n NumRafters: 2,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 3,\r\n ColumnsMax: 0.39691480918861,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.397 - Deflection (19.8mm)\",\r\n RafterMax: 0.0912542959568275,\r\n NumFasciaBeams: 6,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.499441523681063,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 21.7598434494677,\r\n },\r\n FTLC00954: {\r\n AttachmentBracketResults: {\r\n BK34D_1: \"0.060=Shear\",\r\n BK34D_3: \"0.058=Shear\",\r\n BK34D_8: \"0.058=Shear\",\r\n BK34D_9: \"0.058=Shear\",\r\n BK34D_7: \"0.058=Shear\",\r\n BK34D_10: \"0.060=Shear\",\r\n BK34D_6: \"0.058=Shear\",\r\n BK34D_5: \"0.058=Shear\",\r\n BK34D_4: \"0.058=Shear\",\r\n BK34D_11: \"0.048=Shear\",\r\n BK34D_2: \"0.060=Shear\",\r\n },\r\n BeamResults: {\r\n \",\": \"0.0548116897860472=Vertical Shear\",\r\n \"FB1,\": \"0.04038163268387=Vertical Shear\",\r\n \"FB1j,\": \"0.04038163268387=Vertical Shear\",\r\n \"FB1b,FB1c,FB1d,FB1e,FB1f,FB1g,FB1h,FB1i,\": \"0.0194858247435459=Vertical Shear\",\r\n \"FB1a,\": \"0.0322930495869928=Vertical Shear\",\r\n \"FB2b,\": \"0.0542447222193831=Vertical Shear\",\r\n \"R2,\": \"0.0125514272681507=Vertical Shear\",\r\n \"FB2a,\": \"0.0548116897860472=Vertical Shear\",\r\n \"FB2,\": \"0.0548116897860472=Vertical Shear\",\r\n \"R1,\": \"0.0209190454469178=Vertical Shear\",\r\n \"FB2c,\": \"0.0548078530322894=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C2: \"0.086=Deflection (4.3mm)\",\r\n C1: \"0.086=Deflection (4.3mm)\",\r\n C4: \"0.082=Deflection (4.1mm)\",\r\n C3: \"0.084=Deflection (4.2mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n FB1: {\r\n ref: \"BK34D_1\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.0600837541079748,\r\n max_shear_kn: 0.471657469747602,\r\n max_uplift: 0.0293411356446444,\r\n max_uplift_kn: -0.230327914810458,\r\n max_area_capacity: 0.0688312501916642,\r\n area_m2_roofload: 0.894290018115197,\r\n max_capacity_ratio: 0.0600837541079748,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"FB1j\",\r\n },\r\n },\r\n maxResultOverAllText: \"Limiting Member = C1 CR=0.086 - Deflection (4.3mm)\",\r\n MaxResultOverAll: 0.0858635278750932,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.0858635278750932,\r\n FasciaMax: 0.0548116897860472,\r\n NumRafters: 2,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C1 CR=0.086 - Deflection (4.3mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.0858635278750932,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.086 - Deflection (4.3mm)\",\r\n RafterMax: 0.0209190454469178,\r\n NumFasciaBeams: 8,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.0548116897860472,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n },\r\n BIGC00504: {\r\n AttachmentBracketResults: {},\r\n BeamResults: {\r\n \",\": \"0.218252464215864=Bending Moment\",\r\n \"R4,\": \"0.0292866636256849=Vertical Shear\",\r\n \"R1,\": \"0.0313785681703767=Vertical Shear\",\r\n \"FB1,\": \"0.218252464215864=Bending Moment\",\r\n \"FB2,\": \"0.156931978985789=Bending Moment\",\r\n \"FB3,\": \"0.142745658293081=Bending Moment\",\r\n \"R2,\": \"0.0313785681703767=Vertical Shear\",\r\n \"R3,\": \"0.0292866636256849=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C6: \"0.152=Deflection (7.6mm)\",\r\n C2: \"0.299=Deflection (15.0mm)\",\r\n C1: \"0.299=Deflection (15.0mm)\",\r\n C3: \"0.128=Deflection (6.4mm)\",\r\n C4: \"0.128=Deflection (6.4mm)\",\r\n C5: \"0.152=Deflection (7.6mm)\",\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C1 CR=0.299 - Deflection (15.0mm)\",\r\n MaxResultOverAll: 0.299425847803341,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.299425847803341,\r\n FasciaMax: 0.218252464215864,\r\n NumRafters: 2,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C1 CR=0.299 - Deflection (15.0mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.299425847803341,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.299 - Deflection (15.0mm)\",\r\n RafterMax: 0.0313785681703767,\r\n NumFasciaBeams: 1,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.218252464215864,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 0.156931978985789,\r\n FasciaMax: 0.156931978985789,\r\n NumRafters: 2,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.15228408581878,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C5 CR=0.152 - Deflection (7.6mm)\",\r\n RafterMax: 0.0292866636256849,\r\n NumFasciaBeams: 2,\r\n JoinBeamMax: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 87.188834002521,\r\n },\r\n OLLC00215: {\r\n AttachmentBracketResults: {\r\n BK34S_2: \"1.004=Uplift\",\r\n BK34S_3: \"0.803=Uplift\",\r\n BK34S_4: \"0.059=Uplift\",\r\n BK34S_5: \"0.080=Uplift\",\r\n BK34S_6: \"0.735=Uplift\",\r\n BK34S_7: \"0.170=Uplift\",\r\n BK34S_8: \"0.045=Uplift\",\r\n BK34S_9: \"0.163=Uplift\",\r\n BK34S_10: \"0.835=Uplift\",\r\n BK34S_1: \"0.095=Uplift\",\r\n },\r\n BeamResults: {\r\n \"EB3a,\": \"0.549006685178466=Vertical Shear\",\r\n \"EB1f,\": \"0.0439379754752651=Vertical Shear\",\r\n \"P3,\": \"0.630496157553633=Deflection-W UP (-33.2mm)\",\r\n \"R1,\": \"0.0401989199550617=Bending Moment\",\r\n \"PO1,PO2,\": \"0.161425248960141=Bending Moment\",\r\n \"EB2a,EB2b,\": \"0.0880709748697254=Bending Moment\",\r\n \"EB1d,\": \"1.13565196033617=Vertical Shear\",\r\n \",\": \"1.1500627281247=Vertical Shear\",\r\n \"P3a,P3b,P4a,P4b,P5a,P5b,P6a,P6b,\": \"0.630496157553633=Deflection-W UP (-33.2mm)\",\r\n \"EB3,\": \"0.56143430808766=Vertical Shear\",\r\n \"EB2,\": \"0.0880709748697254=Bending Moment\",\r\n \"EB1,\": \"1.13565196033617=Vertical Shear\",\r\n \"P5,\": \"0.630496157553633=Deflection-W UP (-33.2mm)\",\r\n \"EB1a,\": \"0.493855624004176=Vertical Shear\",\r\n \"FB1b,\": \"0.712722079331308=Vertical Shear\",\r\n \"FB1,\": \"0.712722079331308=Vertical Shear\",\r\n \"P1a,P1b,P2a,P2b,\": \"0.448440259133694=Deflection-W UP (-23.6mm)\",\r\n \"PR1,PR2,\": \"0.549639456197954=Vertical Shear\",\r\n \"P4,\": \"0.630496157553633=Deflection-W UP (-33.2mm)\",\r\n \"PR3,PR4,\": \"1.1500627281247=Vertical Shear\",\r\n \"FB1a,\": \"0.139314825974673=Bending Moment\",\r\n \"EB1b,EB1c,EB1e,\": \"0.019667066485904=Vertical Shear\",\r\n \"EB3b,EB3c,\": \"0.0152730006560634=Vertical Shear\",\r\n \"P1,\": \"0.448440259133694=Deflection-W UP (-23.6mm)\",\r\n \"P6,\": \"0.630496157553633=Deflection-W UP (-33.2mm)\",\r\n \"P2,\": \"0.448440259133694=Deflection-W UP (-23.6mm)\",\r\n \"EB3d,\": \"0.56143430808766=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C2: \"0.313=Base Connection\",\r\n PC3: \"0.225=Strength\",\r\n C1: \"0.341=Base Connection\",\r\n PC2: \"0.225=Strength\",\r\n PC1: \"0.207=Strength\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB1: {\r\n ref: \"BK34S_2\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.695320683094241,\r\n max_shear_kn: 5.45826736228979,\r\n max_uplift: 1.00356842966787,\r\n max_uplift_kn: -7.87801217289276,\r\n max_area_capacity: 0.549351172928823,\r\n area_m2_roofload: 6.54551922544692,\r\n max_capacity_ratio: 1.00356842966787,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB1d\",\r\n },\r\n EB3: {\r\n ref: \"BK34S_10\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.58015068125225,\r\n max_shear_kn: 4.55418284783016,\r\n max_uplift: 0.835357034199219,\r\n max_uplift_kn: -6.55755271846387,\r\n max_area_capacity: 0.552859430534019,\r\n area_m2_roofload: 6.58732011481283,\r\n max_capacity_ratio: 0.835357034199219,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3d\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 1.1500627281247,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.712722079331308,\r\n FasciaMax: 0.712722079331308,\r\n NumRafters: 1,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.341028707378882,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.341 - Base Connection\",\r\n RafterMax: 0.0401989199550617,\r\n NumFasciaBeams: 3,\r\n JoinBeamMax: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 1.1500627281247,\r\n PurlinMax: 0.630496157553633,\r\n NumRafters: 3,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 8,\r\n ColumnsMax: 0.225435498497871,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC2 CR=0.225 - Strength\",\r\n RafterMax: 1.1500627281247,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 1.13565196033617,\r\n JoinBeamMax: 0,\r\n OtherMax: 1.1500627281247,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 121.7240664944,\r\n },\r\n FTLC00957: {\r\n AttachmentBracketResults: {\r\n BK34S_10: \"0.061=Shear\",\r\n BK34S_14: \"0.061=Shear\",\r\n BK34S_13: \"0.061=Shear\",\r\n BK34S_11: \"0.518=Shear\",\r\n BK34S_8: \"0.061=Shear\",\r\n BK34S_9: \"0.061=Shear\",\r\n BK34S_12: \"0.459=Shear\",\r\n BK34S_15: \"0.085=Shear\",\r\n BK34S_1: \"0.453=Shear\",\r\n BK34S_2: \"0.078=Shear\",\r\n BK34S_3: \"0.061=Shear\",\r\n BK34S_4: \"0.061=Shear\",\r\n BK34S_5: \"0.061=Shear\",\r\n BK34S_6: \"0.762=Shear\",\r\n BK34S_7: \"0.215=Shear\",\r\n },\r\n BeamResults: {\r\n \"P2,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"P5,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"PR1,PR2,\": \"0.231103134056322=End 1 (CON3)\",\r\n \"P1,P2,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"P6,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"EB1e,\": \"0.574840437815977=Vertical Shear\",\r\n \"EB1a,\": \"0.0364612487695212=Vertical Shear\",\r\n \"P3,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"EB1o,\": \"0.304461061260993=Vertical Shear\",\r\n \"PR5,PR6,\": \"0.460191625537853=End 1 (CON3)\",\r\n \"P5,P6,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"PO1,PO2,\": \"0.18515609454445=Bending Moment\",\r\n \"P4,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \",\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"EB1j,\": \"0.574840437815977=Vertical Shear\",\r\n \"EB1,\": \"0.574840437815977=Vertical Shear\",\r\n \"P1,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"PR3,PR4,\": \"0.460191625537853=End 1 (CON3)\",\r\n \"EB2a,EB2b,EB2c,\": \"0.157299757562326=Bending Moment\",\r\n \"P3,P4,\": \"0.606687688820215=Deflection-W UP (-37.2mm)\",\r\n \"EB1b,EB1c,EB1d,EB1f,EB1g,EB1h,EB1i,EB1k,EB1l,EB1m,EB1n,\": \"0.0204139651357438=Vertical Shear\",\r\n \"EB2,\": \"0.157299757562326=Bending Moment\",\r\n },\r\n ColumnResults: {\r\n PC5: \"0.306=Strength\",\r\n PC4: \"0.306=Strength\",\r\n PC2: \"0.413=Deflection (20.6mm)\",\r\n PC3: \"0.413=Deflection (20.6mm)\",\r\n PC1: \"0.413=Deflection (20.6mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB1: {\r\n ref: \"BK34S_6\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.762199321373497,\r\n max_shear_kn: 5.98326467278195,\r\n max_uplift: 0.496904201708555,\r\n max_uplift_kn: -3.90069798341216,\r\n max_area_capacity: 0.884562067946661,\r\n area_m2_roofload: 8.63332578315941,\r\n max_capacity_ratio: 0.762199321373497,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB1j\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.606687688820215,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.606687688820215,\r\n PurlinMax: 0.606687688820215,\r\n NumRafters: 4,\r\n NumColumns: 5,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 9,\r\n ColumnsMax: 0.412762981939513,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.413 - Deflection (20.6mm)\",\r\n RafterMax: 0.460191625537853,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.574840437815977,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.606687688820215,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 343.175472550666,\r\n },\r\n RHMC00004: {\r\n AttachmentBracketResults: {\r\n BK34D_8: \"0.949=Uplift\",\r\n BK34D_7: \"0.087=Uplift\",\r\n BK34D_6: \"0.054=Uplift\",\r\n BK34D_5: \"0.992=Uplift\",\r\n BK34D_4: \"0.992=Uplift\",\r\n BK34D_3: \"0.054=Uplift\",\r\n BK34D_2: \"0.084=Uplift\",\r\n BK34D_1: \"0.852=Uplift\",\r\n BK34S_1: \"0.937=Uplift\",\r\n BK34S_2: \"0.163=Uplift\",\r\n BK34S_3: \"0.043=Uplift\",\r\n BK34S_4: \"0.043=Uplift\",\r\n BK34S_5: \"0.043=Uplift\",\r\n BK34S_6: \"0.154=Uplift\",\r\n },\r\n BeamResults: {\r\n \"P2,\": \"0.305383731786782=Deflection-W UP (-13.0mm)\",\r\n \"P5,\": \"0.45138582081652=Deflection-W UP (-19.2mm)\",\r\n \"EB3,\": \"0.629544768119247=Vertical Shear\",\r\n \"P1a,P1b,P2a,P2b,\": \"0.305383731786782=Deflection-W UP (-13.0mm)\",\r\n \"EB2a,\": \"0.638094877315478=Vertical Shear\",\r\n \"P6,\": \"0.45138582081652=Deflection-W UP (-19.2mm)\",\r\n \"EB3f,\": \"0.625473616611214=Vertical Shear\",\r\n \"P3,\": \"0.45138582081652=Deflection-W UP (-19.2mm)\",\r\n \"P1,\": \"0.305383731786782=Deflection-W UP (-13.0mm)\",\r\n \"EB1a,EB1b,\": \"0.0665124114328896=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.843258146925965=Bending Moment\",\r\n \"EB3a,\": \"0.629544768119247=Vertical Shear\",\r\n \"PR5,PR6,\": \"0.640174864170743=Vertical Shear\",\r\n \"EB2d,\": \"1.26044003999227=Vertical Shear\",\r\n \"EB3b,EB3c,EB3d,EB3e,\": \"0.0143346701176644=Vertical Shear\",\r\n \"P4,\": \"0.45138582081652=Deflection-W UP (-19.2mm)\",\r\n \",\": \"1.26758848736188=Vertical Shear\",\r\n \"EB2b,EB2c,EB2e,EB2f,\": \"0.0182567792085585=Vertical Shear\",\r\n \"EB2g,\": \"0.572433031226992=Vertical Shear\",\r\n \"P3a,P3b,P4a,P4b,P5a,P5b,P6a,P6b,\": \"0.45138582081652=Deflection-W UP (-19.2mm)\",\r\n \"PR3,PR4,\": \"1.26758848736188=Vertical Shear\",\r\n \"EB2,\": \"1.26044003999227=Vertical Shear\",\r\n \"EB1,\": \"0.0665124114328896=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n PC1: \"0.522=Top Connection\",\r\n PC2: \"0.224=Top Connection\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34D_4\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.595733537048769,\r\n max_shear_kn: 4.67650826583283,\r\n max_uplift: 0.99204380638404,\r\n max_uplift_kn: -7.78754388011472,\r\n max_area_capacity: 0.58472166194292,\r\n area_m2_roofload: 5.7068834205629,\r\n max_capacity_ratio: 0.99204380638404,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2d\",\r\n },\r\n EB3: {\r\n ref: \"BK34S_1\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.553039194554455,\r\n max_shear_kn: 4.34135767725248,\r\n max_uplift: 0.936698457532841,\r\n max_uplift_kn: -7.3530828916328,\r\n max_area_capacity: 0.654351052420113,\r\n area_m2_roofload: 6.3864662716203,\r\n max_capacity_ratio: 0.936698457532841,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3a\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 1.26758848736188,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 1.26758848736188,\r\n PurlinMax: 0.45138582081652,\r\n NumRafters: 3,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 8,\r\n ColumnsMax: 0.521958671010961,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.522 - Top Connection\",\r\n RafterMax: 1.26758848736188,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 1.26044003999227,\r\n JoinBeamMax: 0,\r\n OtherMax: 1.26758848736188,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 131.181938334769,\r\n },\r\n CVSC00208: {\r\n AttachmentBracketResults: {\r\n BK34S_10: \"0.058=Shear\",\r\n BK34S_14: \"0.044=Shear\",\r\n BK34S_13: \"0.029=Shear\",\r\n BK34S_11: \"0.849=Shear\",\r\n BK34S_8: \"0.029=Shear\",\r\n BK34S_9: \"0.029=Shear\",\r\n BK34S_12: \"0.029=Shear\",\r\n BK34S_1: \"0.431=Shear\",\r\n BK34S_2: \"0.044=Shear\",\r\n BK34S_3: \"0.029=Shear\",\r\n BK34S_4: \"0.029=Shear\",\r\n BK34S_5: \"0.091=Shear\",\r\n BK34S_6: \"0.817=Shear\",\r\n BK34S_7: \"0.029=Shear\",\r\n },\r\n BeamResults: {\r\n \"P2,\": \"0.285002071111286=Deflection-W UP (-16.2mm)\",\r\n \"PR5,PR6,\": \"0.429188592514278=End 1 (CON3)\",\r\n \"EB2,\": \"0.0646222328537649=Bending Moment\",\r\n \"EB1b,EB1c,EB1d,EB1f,EB1g,EB1h,EB1i,EB1k,EB1l,EB1m,\": \"0.00965961972008604=Vertical Shear\",\r\n \"P3,\": \"0.40498110677117=Deflection-W UP (-23.1mm)\",\r\n \"EB1a,\": \"0.0197006815981955=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.215398268443147=End 1 (CON3)\",\r\n \"P1a,P1b,P1c,P2a,P2b,P2c,\": \"0.285002071111286=Deflection-W UP (-16.2mm)\",\r\n \"EB1j,\": \"0.571296417778155=Vertical Shear\",\r\n \"PO1,PO2,\": \"0.18515609454445=Bending Moment\",\r\n \"EB1n,\": \"0.289867754510192=Vertical Shear\",\r\n \"P4,\": \"0.40498110677117=Deflection-W UP (-23.1mm)\",\r\n \",\": \"0.571296417778155=Vertical Shear\",\r\n \"P3a,P3b,P3c,P4a,P4b,P4c,\": \"0.40498110677117=Deflection-W UP (-23.1mm)\",\r\n \"P1,\": \"0.285002071111286=Deflection-W UP (-16.2mm)\",\r\n \"PR3,PR4,\": \"0.429188592514278=End 1 (CON3)\",\r\n \"EB2a,EB2b,EB2c,\": \"0.0646222328537649=Bending Moment\",\r\n \"EB1,\": \"0.571296417778155=Vertical Shear\",\r\n \"EB1e,\": \"0.571296417778155=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n PC5: \"0.252=Strength\",\r\n PC4: \"0.252=Strength\",\r\n PC2: \"0.379=Deflection (19.0mm)\",\r\n PC3: \"0.379=Deflection (19.0mm)\",\r\n PC1: \"0.445=Deflection (22.2mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB1: {\r\n ref: \"BK34S_11\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.849434405810433,\r\n max_shear_kn: 6.6680600856119,\r\n max_uplift: 0.552621829023524,\r\n max_uplift_kn: -4.33808135783466,\r\n max_area_capacity: 0.738932723406566,\r\n area_m2_roofload: 8.00818338991866,\r\n max_capacity_ratio: 0.849434405810433,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB1e\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.571296417778155,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.571296417778155,\r\n PurlinMax: 0.40498110677117,\r\n NumRafters: 4,\r\n NumColumns: 5,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 6,\r\n ColumnsMax: 0.444908328777631,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.445 - Deflection (22.2mm)\",\r\n RafterMax: 0.429188592514278,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.571296417778155,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.571296417778155,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 274.846300170221,\r\n },\r\n BIGC00476: {\r\n AttachmentBracketResults: {\r\n BK34S_2: \"0.105=Shear\",\r\n BK34S_3: \"0.102=Shear\",\r\n BK34S_4: \"0.102=Shear\",\r\n BK34S_5: \"0.102=Shear\",\r\n BK34S_6: \"0.102=Shear\",\r\n BK34S_7: \"0.102=Shear\",\r\n BK34S_8: \"0.103=Shear\",\r\n BK34S_9: \"0.077=Shear\",\r\n BK34S_12: \"0.089=Shear\",\r\n BK34S_11: \"0.146=Shear\",\r\n BK34S_10: \"0.146=Shear\",\r\n BK34S_1: \"0.062=Shear\",\r\n },\r\n BeamResults: {\r\n \"JB1b,\": \"0.00103058215248288=Vertical Shear\",\r\n \"P12,\": \"0.0551071033527769=Vertical Shear\",\r\n \"FB1h,\": \"0.0450825895322899=Vertical Shear\",\r\n \"FB1i,\": \"0.0509616515872309=Vertical Shear\",\r\n \"P3,\": \"0.0450825895322899=Vertical Shear\",\r\n \"FB2c,\": \"0.0570110212930659=Vertical Shear\",\r\n \"FB2b,\": \"0.0551071033527769=Vertical Shear\",\r\n \"JB1a,\": \"0.0278257181170377=Vertical Shear\",\r\n \"P9,\": \"0.0223766221663283=Vertical Shear\",\r\n \"FB2d,\": \"0.00265910806983632=Vertical Shear\",\r\n \",\": \"0.71663921569891=Bending Moment\",\r\n \"FB1e,\": \"0.0450825895322899=Vertical Shear\",\r\n \"FB1f,\": \"0.0450825895322899=Vertical Shear\",\r\n \"FB1g,\": \"0.0450825895322899=Vertical Shear\",\r\n \"FB2a,\": \"0.0601501853644949=Vertical Shear\",\r\n \"P8,\": \"0.0450825895322899=Vertical Shear\",\r\n \"JB1,\": \"0.0278257181170377=Vertical Shear\",\r\n \"FB4,\": \"0.202847170209954=Bending Moment\",\r\n \"FB2,\": \"0.0601501853644949=Vertical Shear\",\r\n \"FB1b,\": \"0.050090795540969=Vertical Shear\",\r\n \"FB1,\": \"0.0509616515872309=Vertical Shear\",\r\n \"FB1c,\": \"0.0450825895322899=Vertical Shear\",\r\n \"FB3,\": \"0.71663921569891=Bending Moment\",\r\n \"FB1d,\": \"0.0450825895322899=Vertical Shear\",\r\n \"P13,\": \"0.0265746738304957=Vertical Shear\",\r\n \"P10,\": \"0.0551071033527769=Vertical Shear\",\r\n \"P11,\": \"0.0551071033527769=Vertical Shear\",\r\n \"P14,\": \"0.0279080987319785=Vertical Shear\",\r\n \"P15,\": \"0.0336707678530596=Vertical Shear\",\r\n \"P4,\": \"0.0450825895322899=Vertical Shear\",\r\n \"P5,\": \"0.0450825895322899=Vertical Shear\",\r\n \"FB1a,\": \"0.00302599531612022=Vertical Shear\",\r\n \"P1,\": \"0.0453520537865353=Vertical Shear\",\r\n \"P6,\": \"0.0450825895322899=Vertical Shear\",\r\n \"P2,\": \"0.0450825895322899=Vertical Shear\",\r\n \"P7,\": \"0.0450825895322899=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C2: \"0.271=Deflection (13.6mm)\",\r\n C1: \"0.176=Deflection (8.8mm)\",\r\n C4: \"0.023=Deflection (1.2mm)\",\r\n C3: \"0.203=Deflection (10.2mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n FB2: {\r\n ref: \"BK34S_10\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.146097334104289,\r\n max_shear_kn: 1.14686407271867,\r\n max_uplift: 0.0855269450301489,\r\n max_uplift_kn: -0.671386518486669,\r\n max_area_capacity: 0.184614142739074,\r\n area_m2_roofload: 2.39859924953742,\r\n max_capacity_ratio: 0.146097334104289,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"FB2c\",\r\n },\r\n FB1: {\r\n ref: \"BK34S_2\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.104710691823271,\r\n max_shear_kn: 0.821978930812677,\r\n max_uplift: 0.0612987611207535,\r\n max_uplift_kn: -0.481195274797915,\r\n max_area_capacity: 0.131505244015454,\r\n area_m2_roofload: 1.70858188287078,\r\n max_capacity_ratio: 0.104710691823271,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"FB1i\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.71663921569891,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.71663921569891,\r\n PurlinMax: 0.0453520537865353,\r\n FasciaMax: 0.71663921569891,\r\n NumRafters: 0,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 10,\r\n ColumnsMax: 0.271392525189041,\r\n ColumnsMaxText: \"Limiting Member = C2 CR=0.271 - Deflection (13.6mm)\",\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 3\",\r\n NumFasciaBeams: 11,\r\n JoinBeamMax: 0.0278257181170377,\r\n OtherMax: 0.71663921569891,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 0.203442124441331,\r\n PurlinMax: 0.0551071033527769,\r\n FasciaMax: 0.202847170209954,\r\n NumRafters: 0,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C3 CR=0.203 - Deflection (10.2mm)\",\r\n NumPurlins: 5,\r\n ColumnsMax: 0.203442124441331,\r\n ColumnsMaxText: \"Limiting Member = C3 CR=0.203 - Deflection (10.2mm)\",\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 3\",\r\n NumFasciaBeams: 6,\r\n JoinBeamMax: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 164.013291307906,\r\n },\r\n FTLC00189: {\r\n AttachmentBracketResults: {\r\n BK34D_1: \"0.249=Shear\",\r\n BK34D_9: \"0.249=Shear\",\r\n BK34D_8: \"0.061=Shear\",\r\n BK34D_7: \"0.474=Shear\",\r\n BK34D_6: \"0.025=Shear\",\r\n BK34D_5: \"0.500=Shear\",\r\n BK34D_4: \"0.025=Shear\",\r\n BK34D_3: \"0.474=Shear\",\r\n BK34D_2: \"0.061=Shear\",\r\n },\r\n BeamResults: {\r\n \"P2,\": \"0.039820045763835=Bending Moment\",\r\n \"PR5,PR6,\": \"0.336177304323318=Deflection-W UP (-17.4mm)\",\r\n \"EB1b,\": \"0.319163321223664=Vertical Shear\",\r\n \"P6,\": \"0.039820045763835=Bending Moment\",\r\n \"EB2a,EB2b,EB2c,EB2d,\": \"0.0178036826576412=Vertical Shear\",\r\n \"PR7,PR8,\": \"0.336177304323318=Deflection-W UP (-17.4mm)\",\r\n \"P3,\": \"0.039820045763835=Bending Moment\",\r\n \"PR9,PR10,\": \"0.149629342657004=End 2 (CON3)\",\r\n \"EB1a,\": \"0.167045090852304=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.149629342657004=End 2 (CON3)\",\r\n \"EB1g,\": \"0.319163321223664=Vertical Shear\",\r\n \"EB1h,\": \"0.167045234086205=Vertical Shear\",\r\n \"EB1c,EB1d,EB1f,\": \"0.00851112063591097=Vertical Shear\",\r\n \"P5,\": \"0.039820045763835=Bending Moment\",\r\n \"P4,\": \"0.039820045763835=Bending Moment\",\r\n \",\": \"0.336177304323318=Deflection-W UP (-17.4mm)\",\r\n \"P1a,P1b,P1c,P1d,P2a,P2b,P2c,P2d,P3a,P3b,P3c,P3d,P4a,P4b,P4c,P4d,P5a,P5b,P5c,P5d,P6a,P6b,P6c,P6d,\":\r\n \"0.039820045763835=Bending Moment\",\r\n \"P1,\": \"0.039820045763835=Bending Moment\",\r\n \"PR3,PR4,\": \"0.336177304323318=Deflection-W UP (-17.4mm)\",\r\n \"EB2,\": \"0.0178036826576412=Vertical Shear\",\r\n \"EB1,\": \"0.327677925393464=Vertical Shear\",\r\n \"EB1e,\": \"0.327677925393464=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n PC5: \"0.288=Deflection (14.4mm)\",\r\n PC4: \"0.288=Deflection (14.4mm)\",\r\n PC2: \"0.288=Deflection (14.4mm)\",\r\n PC3: \"0.288=Deflection (14.4mm)\",\r\n PC1: \"0.288=Deflection (14.4mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB1: {\r\n ref: \"BK34D_5\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.500215039187655,\r\n max_shear_kn: 3.9266880576231,\r\n max_uplift: 0.489423760671273,\r\n max_uplift_kn: -3.84197652126949,\r\n max_area_capacity: 0.628811695831341,\r\n area_m2_roofload: 5.55240727419074,\r\n max_capacity_ratio: 0.500215039187655,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB1e\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.336177304323318,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.336177304323318,\r\n PurlinMax: 0.039820045763835,\r\n NumRafters: 5,\r\n NumColumns: 5,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 7,\r\n ColumnsMax: 0.288487913355695,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.288 - Deflection (14.4mm)\",\r\n RafterMax: 0.336177304323318,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.327677925393464,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.336177304323318,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 189.877608385279,\r\n },\r\n RFOINC2081: {\r\n AttachmentBracketResults: {\r\n BK34S_4: \"0.095=Uplift\",\r\n BK34S_5: \"0.771=Uplift\",\r\n BK34S_1: \"0.065=Uplift\",\r\n BK34S_2: \"0.541=Uplift\",\r\n BK34S_3: \"1.087=Uplift\",\r\n },\r\n BeamResults: {\r\n \"P2,\": \"0.235666388852338=Deflection-W UP (-9.8mm)\",\r\n \"P5,\": \"0.342966863271844=Deflection-W UP (-14.3mm)\",\r\n \"P1a,P1b,P2a,P2b,\": \"0.235666388852338=Deflection-W UP (-9.8mm)\",\r\n \"EB2a,\": \"0.51836732412243=Vertical Shear\",\r\n \"P6,\": \"0.342966863271844=Deflection-W UP (-14.3mm)\",\r\n \"P3,\": \"0.342966863271844=Deflection-W UP (-14.3mm)\",\r\n \"P1,\": \"0.235666388852338=Deflection-W UP (-9.8mm)\",\r\n \"EB1a,EB1b,\": \"0.0611168159734028=Vertical Shear\",\r\n \"EB2b,EB2d,\": \"0.0253473952563376=Vertical Shear\",\r\n \"PR1,PR2,\": \"1.00195206874651=Vertical Shear\",\r\n \"EB2e,\": \"0.018426949778447=Vertical Shear\",\r\n \"PO1,PO2,\": \"0.182884311043412=Bending Moment\",\r\n \"EB2c,\": \"0.992767464803018=Vertical Shear\",\r\n \"P4,\": \"0.342966863271844=Deflection-W UP (-14.3mm)\",\r\n \",\": \"1.00195206874651=Vertical Shear\",\r\n \"P3a,P3b,P4a,P4b,P5a,P5b,P6a,P6b,\": \"0.342966863271844=Deflection-W UP (-14.3mm)\",\r\n \"PR3,PR4,\": \"0.505963520693571=Vertical Shear\",\r\n \"EB2,\": \"0.992767464803018=Vertical Shear\",\r\n \"EB1,\": \"0.0611168159734028=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n PC4: \"0.189=Deflection (9.5mm)\",\r\n PC2: \"0.217=Strength\",\r\n PC3: \"0.247=Strength\",\r\n PC1: \"0.217=Strength\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34S_3\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.763991198085901,\r\n max_shear_kn: 5.99733090497432,\r\n max_uplift: 1.08651730657033,\r\n max_uplift_kn: -8.52916085657709,\r\n max_area_capacity: 0.619246672686364,\r\n area_m2_roofload: 7.37832410505803,\r\n max_capacity_ratio: 1.08651730657033,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2c\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 1.00195206874651,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 1.00195206874651,\r\n PurlinMax: 0.342966863271844,\r\n NumRafters: 3,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 8,\r\n ColumnsMax: 0.246999419474575,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC3 CR=0.247 - Strength\",\r\n RafterMax: 1.00195206874651,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.992767464803018,\r\n JoinBeamMax: 0,\r\n OtherMax: 1.00195206874651,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 79.8840330239763,\r\n },\r\n OLLC00177: {\r\n AttachmentBracketResults: {\r\n BK34S_2: \"0.047=Shear\",\r\n BK34S_3: \"0.727=Shear\",\r\n BK34S_4: \"0.199=Shear\",\r\n BK34S_5: \"0.047=Shear\",\r\n BK34S_6: \"0.771=Shear\",\r\n BK34S_7: \"0.155=Shear\",\r\n BK34S_8: \"0.059=Shear\",\r\n BK34S_9: \"0.436=Shear\",\r\n BK34S_1: \"0.042=Shear\",\r\n },\r\n BeamResults: {\r\n \"P2,\": \"0.243832195000081=Deflection-W UP (-12.0mm)\",\r\n \"PR5,PR6,\": \"0.235799417036357=End 1 (CON3)\",\r\n \"EB2a,\": \"0.293020849029582=Vertical Shear\",\r\n \"EB1a,EB1b,EB1c,\": \"0.053718070996043=Bending Moment\",\r\n \"P3,\": \"0.357912186474798=Deflection-W UP (-17.6mm)\",\r\n \"PR1,PR2,\": \"0.469526947499107=End 1 (CON3)\",\r\n \"EB2b,EB2d,EB2e,EB2g,EB2h,\": \"0.0159405664995196=Vertical Shear\",\r\n \"P1a,P1b,P1c,P2a,P2b,P2c,\": \"0.243832195000081=Deflection-W UP (-12.0mm)\",\r\n \"EB2f,\": \"0.558511111508899=Vertical Shear\",\r\n \"PO1,PO2,\": \"0.18515609454445=Bending Moment\",\r\n \"EB2c,\": \"0.558511111508899=Vertical Shear\",\r\n \"P4,\": \"0.357912186474798=Deflection-W UP (-17.6mm)\",\r\n \",\": \"0.558511111508899=Vertical Shear\",\r\n \"P3a,P3b,P3c,P4a,P4b,P4c,\": \"0.357912186474798=Deflection-W UP (-17.6mm)\",\r\n \"EB2i,\": \"0.0125798944555255=Vertical Shear\",\r\n \"P1,\": \"0.243832195000081=Deflection-W UP (-12.0mm)\",\r\n \"PR3,PR4,\": \"0.469526947499107=End 1 (CON3)\",\r\n \"EB2,\": \"0.558511111508899=Vertical Shear\",\r\n \"EB1,\": \"0.053718070996043=Bending Moment\",\r\n },\r\n ColumnResults: {\r\n PC5: \"0.541=Deflection (27.1mm)\",\r\n PC4: \"0.541=Deflection (27.1mm)\",\r\n PC2: \"0.307=Strength\",\r\n PC3: \"0.541=Deflection (27.1mm)\",\r\n PC1: \"0.307=Strength\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34S_6\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.77133205365979,\r\n max_shear_kn: 6.05495662122935,\r\n max_uplift: 0.635873112630575,\r\n max_uplift_kn: -4.99160393415001,\r\n max_area_capacity: 0.8263018499774,\r\n area_m2_roofload: 7.29624533530045,\r\n max_capacity_ratio: 0.77133205365979,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2c\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.558511111508899,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.558511111508899,\r\n PurlinMax: 0.357912186474798,\r\n NumRafters: 4,\r\n NumColumns: 5,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 6,\r\n ColumnsMax: 0.541310695179258,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC3 CR=0.541 - Deflection (27.1mm)\",\r\n RafterMax: 0.469526947499107,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.558511111508899,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.558511111508899,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 249.787877506355,\r\n },\r\n OLLC00632: {\r\n AttachmentBracketResults: {\r\n BK34S_2: \"0.057=Uplift\",\r\n BK34S_3: \"0.041=Uplift\",\r\n BK34S_4: \"0.838=Uplift\",\r\n BK34S_5: \"0.041=Uplift\",\r\n BK34S_6: \"0.055=Uplift\",\r\n BK34S_7: \"0.376=Uplift\",\r\n BK34S_8: \"0.090=Uplift\",\r\n BK34S_9: \"0.081=Uplift\",\r\n BK34S_10: \"0.897=Uplift\",\r\n BK34S_1: \"0.410=Uplift\",\r\n },\r\n BeamResults: {\r\n \"P2,\": \"0.133544975847495=Deflection-W UP (-4.6mm)\",\r\n \"PR5,PR6,\": \"0.203213082886745=Bending Moment\",\r\n \"EB2d,\": \"0.549861879604363=Vertical Shear\",\r\n \"EB3,\": \"0.603056901096402=Vertical Shear\",\r\n \"P1a,P1b,P2a,P2b,\": \"0.133544975847495=Deflection-W UP (-4.6mm)\",\r\n \"EB2a,\": \"0.25245135115062=Vertical Shear\",\r\n \"P3,\": \"0.189592693209646=Deflection-W UP (-6.5mm)\",\r\n \"EB3c,\": \"0.603056901096402=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.201895522866568=End 1 (CON3)\",\r\n \"EB3a,\": \"0.256870204419104=Vertical Shear\",\r\n \"EB3b,\": \"0.0146650542271961=Vertical Shear\",\r\n \"P3a,P3b,P4a,P4b,\": \"0.189592693209646=Deflection-W UP (-6.5mm)\",\r\n \"EB2b,EB2c,EB2e,\": \"0.0136325889180047=Vertical Shear\",\r\n \"P4,\": \"0.189592693209646=Deflection-W UP (-6.5mm)\",\r\n \",\": \"0.991749940274788=Bending Moment\",\r\n \"EB2f,\": \"0.275431493341552=Vertical Shear\",\r\n \"P1,\": \"0.133544975847495=Deflection-W UP (-4.6mm)\",\r\n \"PR3,PR4,\": \"0.477304478731292=Bending Moment\",\r\n \"EB2,\": \"0.549861879604363=Vertical Shear\",\r\n \"EB1,\": \"0.991749940274788=Bending Moment\",\r\n },\r\n ColumnResults: {\r\n PC1: \"0.793=Base Connection\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34S_4\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.545523155053822,\r\n max_shear_kn: 4.2823567671725,\r\n max_uplift: 0.838422342973409,\r\n max_uplift_kn: -6.58161539234126,\r\n max_area_capacity: 0.449130716633626,\r\n area_m2_roofload: 5.35139248868965,\r\n max_capacity_ratio: 0.838422342973409,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2d\",\r\n },\r\n EB3: {\r\n ref: \"BK34S_10\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.588083383451736,\r\n max_shear_kn: 4.61645456009613,\r\n max_uplift: 0.897287210803309,\r\n max_uplift_kn: -7.04370460480598,\r\n max_area_capacity: 0.558968156962635,\r\n area_m2_roofload: 6.66010559020979,\r\n max_capacity_ratio: 0.897287210803309,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB3c\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.991749940274788,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.991749940274788,\r\n PurlinMax: 0.189592693209646,\r\n NumRafters: 3,\r\n NumColumns: 1,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 6,\r\n ColumnsMax: 0.792896971870795,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.793 - Base Connection\",\r\n RafterMax: 0.477304478731292,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.991749940274788,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.991749940274788,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 36.8049853459859,\r\n },\r\n FTLC00054: {\r\n AttachmentBracketResults: {\r\n BK34S_10: \"0.547=Shear\",\r\n BK34S_16: \"0.027=Shear\",\r\n BK34S_14: \"0.032=Shear\",\r\n BK34S_13: \"0.030=Shear\",\r\n BK34S_11: \"0.032=Shear\",\r\n BK34S_17: \"0.552=Shear\",\r\n BK34S_8: \"0.058=Shear\",\r\n BK34S_9: \"0.476=Shear\",\r\n BK34S_12: \"0.030=Shear\",\r\n BK34S_15: \"0.030=Shear\",\r\n BK34S_1: \"0.474=Shear\",\r\n BK34S_2: \"0.058=Shear\",\r\n BK34S_3: \"0.040=Shear\",\r\n BK34S_4: \"0.040=Shear\",\r\n BK34S_5: \"0.917=Shear\",\r\n BK34S_6: \"0.040=Shear\",\r\n BK34S_7: \"0.040=Shear\",\r\n },\r\n BeamResults: {\r\n \"EB2e,\": \"0.602706555170907=Vertical Shear\",\r\n \"EB3a,\": \"0.36736830582681=Vertical Shear\",\r\n \"P2,\": \"0.221721385842407=Deflection-W UP (-10.2mm)\",\r\n \"P3,\": \"0.221721385842407=Deflection-W UP (-10.2mm)\",\r\n \"PR3,PR4,\": \"0.506810612789899=End 1 (CON3)\",\r\n \"EB4a,\": \"0.0115210017341685=Vertical Shear\",\r\n \"EB2b,EB2c,EB2d,EB2f,EB2g,\": \"0.0135040864916949=Vertical Shear\",\r\n \"EB1b,\": \"0.355847304092642=Vertical Shear\",\r\n \",\": \"0.602706555170907=Vertical Shear\",\r\n \"EB4,\": \"0.3707327771429=Vertical Shear\",\r\n \"EB3,\": \"0.36736830582681=Vertical Shear\",\r\n \"EB2,\": \"0.602706555170907=Vertical Shear\",\r\n \"EB1,\": \"0.355847304092642=Vertical Shear\",\r\n \"EB2a,\": \"0.320024177719235=Vertical Shear\",\r\n \"P5,\": \"0.388513301848856=Deflection-W UP (-17.9mm)\",\r\n \"P8,\": \"0.388513301848856=Deflection-W UP (-17.9mm)\",\r\n \"EB1a,\": \"0.355847304092642=Vertical Shear\",\r\n \"EB4d,\": \"0.3707327771429=Vertical Shear\",\r\n \"EB3b,EB3c,EB3d,EB4b,EB4c,\": \"0.010041521221268=Vertical Shear\",\r\n \"PR5,PR6,\": \"0.308999116132015=Bending Moment\",\r\n \"EB2h,\": \"0.318590278116966=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.308999116132015=Bending Moment\",\r\n \"P4,\": \"0.221721385842407=Deflection-W UP (-10.2mm)\",\r\n \"P1,P2,\": \"0.221721385842407=Deflection-W UP (-10.2mm)\",\r\n \"P3,P4,\": \"0.221721385842407=Deflection-W UP (-10.2mm)\",\r\n \"P1,\": \"0.221721385842407=Deflection-W UP (-10.2mm)\",\r\n \"P6,\": \"0.388513301848856=Deflection-W UP (-17.9mm)\",\r\n \"P7,\": \"0.388513301848856=Deflection-W UP (-17.9mm)\",\r\n },\r\n ColumnResults: {\r\n PC1: \"0.351=Top Connection\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34S_5\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.916858636257221,\r\n max_shear_kn: 7.19734029461919,\r\n max_uplift: 0.894714949713541,\r\n max_uplift_kn: -7.0235123552513,\r\n max_area_capacity: 0.946450055552244,\r\n area_m2_roofload: 8.35715399052632,\r\n max_capacity_ratio: 0.916858636257221,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2e\",\r\n },\r\n EB3: {\r\n ref: \"BK34S_10\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.546606600262057,\r\n max_shear_kn: 4.29086181205715,\r\n max_uplift: 0.528580469827754,\r\n max_uplift_kn: -4.14935668814787,\r\n max_area_capacity: 0.599243061631996,\r\n area_m2_roofload: 5.29131623421053,\r\n max_capacity_ratio: 0.546606600262057,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB3a\",\r\n },\r\n EB4: {\r\n ref: \"BK34S_17\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.551612590704341,\r\n max_shear_kn: 4.33015883702907,\r\n max_uplift: 0.533437983281458,\r\n max_uplift_kn: -4.18748816875944,\r\n max_area_capacity: 0.604527456721122,\r\n area_m2_roofload: 5.3379774428475,\r\n max_capacity_ratio: 0.551612590704341,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB4d\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.602706555170907,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.602706555170907,\r\n PurlinMax: 0.388513301848856,\r\n NumRafters: 3,\r\n NumColumns: 1,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 10,\r\n ColumnsMax: 0.351223132009051,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.351 - Top Connection\",\r\n RafterMax: 0.506810612789899,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.602706555170907,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.602706555170907,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 88.2852596191127,\r\n },\r\n ZAPC00196: {\r\n AttachmentBracketResults: {},\r\n BeamResults: {\r\n \",\": \"0.23223361383502=Bending Moment\",\r\n \"R2,\": \"0.0292866636256849=Vertical Shear\",\r\n \"FB1,\": \"0.23223361383502=Bending Moment\",\r\n \"R1,\": \"0.0292866636256849=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C1: \"0.291=Base Connection\",\r\n C2: \"0.291=Base Connection\",\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C1 CR=0.291 - Base Connection\",\r\n MaxResultOverAll: 0.290707783322236,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.290707783322236,\r\n FasciaMax: 0.23223361383502,\r\n NumRafters: 2,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C1 CR=0.291 - Base Connection\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.290707783322236,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.291 - Base Connection\",\r\n RafterMax: 0.0292866636256849,\r\n NumFasciaBeams: 1,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.23223361383502,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 19.3329103319602,\r\n },\r\n CHRC00095: {\r\n AttachmentBracketResults: {\r\n BK34D_1: \"0.671=Uplift\",\r\n BK34D_10: \"0.512=Uplift\",\r\n BK34D_9: \"0.192=Uplift\",\r\n BK34D_8: \"0.514=Uplift\",\r\n BK34D_7: \"1.660=Uplift\",\r\n BK34D_6: \"0.183=Uplift\",\r\n BK34D_5: \"0.138=Uplift\",\r\n BK34D_4: \"1.343=Uplift\",\r\n BK34D_3: \"0.138=Uplift\",\r\n BK34D_2: \"0.160=Uplift\",\r\n },\r\n BeamResults: {\r\n \"EB4b,\": \"0.345411523491272=Vertical Shear\",\r\n \"EB2f,\": \"0.451261142925457=Vertical Shear\",\r\n \"EB3a,\": \"0.00611343087732029=Vertical Shear\",\r\n \"P2,\": \"0.708742468612818=Deflection-W UP (-34.0mm)\",\r\n \"EB2b,EB2c,EB2e,\": \"0.046475579198142=Vertical Shear\",\r\n \"P3,\": \"0.708742468612818=Deflection-W UP (-34.0mm)\",\r\n \"PR3,PR4,\": \"0.83795310050092=End 1 (CON3)\",\r\n \"EB4a,\": \"0.344076739087234=Vertical Shear\",\r\n \"EB2d,\": \"0.856328925649963=Vertical Shear\",\r\n \"PR9,PR10,\": \"0.252953874096862=End 1 (CON3)\",\r\n \"EB1b,\": \"0.162040983129025=Bending Moment\",\r\n \",\": \"1.11544946444939=Vertical Shear\",\r\n \"EB5,\": \"0.0696285469079208=Bending Moment\",\r\n \"EB4,\": \"0.345411523491272=Vertical Shear\",\r\n \"EB3,\": \"0.108104529344389=Bending Moment\",\r\n \"EB2,\": \"1.11544946444939=Vertical Shear\",\r\n \"EB1,\": \"0.164695117514634=Bending Moment\",\r\n \"EB2a,\": \"1.11544946444939=Vertical Shear\",\r\n \"P5,\": \"0.392228785319006=Deflection-W UP (-16.4mm)\",\r\n \"P5,P6,\": \"0.392228785319006=Deflection-W UP (-16.4mm)\",\r\n \"EB1a,\": \"0.164695117514634=Bending Moment\",\r\n \"EB3b,\": \"0.108104529344389=Bending Moment\",\r\n \"PR7,PR8,\": \"0.509794600522853=Vertical Shear\",\r\n \"PR5,PR6,\": \"0.724168841642028=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.421272838751338=End 1 (CON3)\",\r\n \"P4,\": \"0.708742468612818=Deflection-W UP (-34.0mm)\",\r\n \"P1,P2,\": \"0.708742468612818=Deflection-W UP (-34.0mm)\",\r\n \"P3,P4,\": \"0.708742468612818=Deflection-W UP (-34.0mm)\",\r\n \"HB1,\": \"0.123264137914224=Vertical Shear\",\r\n \"P1,\": \"0.708742468612818=Deflection-W UP (-34.0mm)\",\r\n \"P6,\": \"0.392228785319006=Deflection-W UP (-16.4mm)\",\r\n },\r\n ColumnResults: {\r\n PC4: \"0.671=Deflection (33.5mm)\",\r\n PC2: \"0.415=Deflection (20.8mm)\",\r\n PC3: \"0.280=Deflection (14.0mm)\",\r\n C1: \"0.231=Deflection (11.5mm)\",\r\n PC1: \"0.415=Deflection (20.8mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34D_7\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 1.1311916775069,\r\n max_shear_kn: 8.87985466842914,\r\n max_uplift: 1.65967512672215,\r\n max_uplift_kn: -13.0284497447689,\r\n max_area_capacity: 1.1065817279798,\r\n area_m2_roofload: 11.992579476981,\r\n max_capacity_ratio: 1.65967512672215,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2a\",\r\n },\r\n EB4: {\r\n ref: \"BK34D_8\",\r\n area: 0,\r\n type: \"BK34D\",\r\n max_shear: 0.341106726337926,\r\n max_shear_kn: 2.67768780175272,\r\n max_uplift: 0.513937145780644,\r\n max_uplift_kn: -4.03440659437806,\r\n max_area_capacity: 0.355663841154447,\r\n area_m2_roofload: 3.85450687851132,\r\n max_capacity_ratio: 0.513937145780644,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB4b\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 1.11544946444939,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 1.11544946444939,\r\n PurlinMax: 0.708742468612818,\r\n NumRafters: 3,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 6,\r\n ColumnsMax: 0.415227115568884,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.415 - Deflection (20.8mm)\",\r\n RafterMax: 0.83795310050092,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 1.11544946444939,\r\n JoinBeamMax: 0,\r\n OtherMax: 1.11544946444939,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 0.670626655501516,\r\n PurlinMax: 0.392228785319006,\r\n NumRafters: 2,\r\n NumColumns: 1,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = PC4 CR=0.671 - Deflection (33.5mm)\",\r\n NumPurlins: 3,\r\n ColumnsMax: 0.670626655501516,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC4 CR=0.671 - Deflection (33.5mm)\",\r\n RafterMax: 0.509794600522853,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.345411523491272,\r\n JoinBeamMax: 0,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 347.004670865453,\r\n },\r\n FTLC01022: {\r\n AttachmentBracketResults: {},\r\n BeamResults: {\r\n \",\": \"0.601155802416901=Bending Moment\",\r\n \"FB1,\": \"0.601155802416901=Bending Moment\",\r\n \"FB1a,FB1b,FB2a,FB2b,\": \"0.601155802416901=Bending Moment\",\r\n \"R2,\": \"0.0360435153050394=Vertical Shear\",\r\n \"FB2,\": \"0.601155802416901=Bending Moment\",\r\n \"R1,\": \"0.0360435153050394=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C6: \"0.345=Deflection (17.2mm)\",\r\n C2: \"0.358=Deflection (17.9mm)\",\r\n C1: \"0.358=Deflection (17.9mm)\",\r\n C3: \"0.416=Deflection (20.8mm)\",\r\n C4: \"0.416=Deflection (20.8mm)\",\r\n C5: \"0.294=Deflection (14.7mm)\",\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.601155802416901,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.601155802416901,\r\n FasciaMax: 0.601155802416901,\r\n NumRafters: 2,\r\n NumColumns: 6,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.41644913379072,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C3 CR=0.416 - Deflection (20.8mm)\",\r\n RafterMax: 0.0360435153050394,\r\n NumFasciaBeams: 3,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.601155802416901,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 7.07318863077327,\r\n },\r\n FTLC01014: {\r\n AttachmentBracketResults: {\r\n BK34S_2: \"0.052=Shear\",\r\n BK34S_3: \"0.034=Shear\",\r\n BK34S_4: \"0.034=Shear\",\r\n BK34S_5: \"0.052=Shear\",\r\n BK34S_6: \"0.529=Shear\",\r\n BK34S_1: \"0.529=Shear\",\r\n },\r\n BeamResults: {\r\n \"P4,\": \"0.809556528263548=Deflection-W UP (-51.6mm)\",\r\n \"PR1,PR2,\": \"0.292407880189892=End 1 (CON3)\",\r\n \"EB2e,\": \"0.355675305291517=Vertical Shear\",\r\n \"EB1,\": \"0.0880861000663864=Bending Moment\",\r\n \"PR3,PR4,\": \"0.292407880189892=End 1 (CON3)\",\r\n \",\": \"0.809556528263548=Deflection-W UP (-51.6mm)\",\r\n \"P2,\": \"0.553539421650422=Deflection-W UP (-35.3mm)\",\r\n \"EB2a,\": \"0.355675305291517=Vertical Shear\",\r\n \"P1,\": \"0.553539421650422=Deflection-W UP (-35.3mm)\",\r\n \"EB2,\": \"0.355675305291517=Vertical Shear\",\r\n \"P3,\": \"0.809556528263548=Deflection-W UP (-51.6mm)\",\r\n \"EB2b,EB2c,EB2d,\": \"0.011327446681708=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n PC1: \"0.316=Deflection (15.8mm)\",\r\n PC2: \"0.316=Deflection (15.8mm)\",\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"BK34S_6\",\r\n area: 0,\r\n type: \"BK34S\",\r\n max_shear: 0.529208607108907,\r\n max_shear_kn: 4.15428756580492,\r\n max_uplift: 0.468251573981552,\r\n max_uplift_kn: -3.67577485575518,\r\n max_area_capacity: 0.429559869107906,\r\n area_m2_roofload: 5.1182058404207,\r\n max_capacity_ratio: 0.529208607108907,\r\n max_capacity_ratio_limit_state: \"Shear\",\r\n max_input_member: \"EB2a\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.809556528263548,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.809556528263548,\r\n PurlinMax: 0.809556528263548,\r\n NumRafters: 2,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 4,\r\n ColumnsMax: 0.315578405814154,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = PC1 CR=0.316 - Deflection (15.8mm)\",\r\n RafterMax: 0.292407880189892,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.355675305291517,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.809556528263548,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 117.243916561775,\r\n },\r\n};\r\n\r\nexport const LYSAGHT_ENGLOAD_JOBS = {\r\n VDPL00040: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 999,\r\n BeamResults: {\r\n \",\": \"16.4931811734441=Vertical Shear\",\r\n \"FB1b,\": \"0.190425048673683=Bending Moment\",\r\n \"FB1c,\": \"16.4931811734441=Vertical Shear\",\r\n \"FB1,\": \"16.4931811734441=Vertical Shear\",\r\n \"FB1a,\": \"16.4931811734441=Vertical Shear\",\r\n \"R2,\": \"9.99=Error: Cantilever Backspan Invalid\",\r\n \"P1,\": \"0.416421798482224=Bending Moment\",\r\n \"R1,\": \"9.99=Error: Cantilever Backspan Invalid\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C1: \"999.000=Strength\",\r\n C2: \"999.000=Strength\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C1 CR=999.000 - Strength\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 999,\r\n PurlinMax: 0.416421798482224,\r\n FasciaMax: 16.4931811734441,\r\n NumRafters: 2,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C1 CR=999.000 - Strength\",\r\n NumPurlins: 1,\r\n ColumnsMax: 999,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=999.000 - Strength\",\r\n RafterMax: 9.99,\r\n NumFasciaBeams: 4,\r\n JoinBeamMax: 0,\r\n OtherMax: 16.4931811734441,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2301,\r\n total_compression_kn: 171.293387068646,\r\n total_tension_kn: -84.294379785771,\r\n max_strength: 999,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.115668201846262,\r\n max_capacity_ratio: 999,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2301,\r\n total_compression_kn: 171.293387068646,\r\n total_tension_kn: -84.294379785771,\r\n max_strength: 999,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.115668201846262,\r\n max_capacity_ratio: 999,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"R1,\",\r\n BeamType: \"Rafter\",\r\n Length: 4887,\r\n Column: \"F\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 2456,\r\n },\r\n {\r\n Name: \"WB1\",\r\n Location: 4887,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R2,\",\r\n BeamType: \"Rafter\",\r\n Length: 4887,\r\n Column: \"G\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 2456,\r\n },\r\n {\r\n Name: \"WB1\",\r\n Location: 4887,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 5000,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 4975,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 245,\r\n Bracket: \"HCC\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4755,\r\n Bracket: \"HCC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5000\",\r\n },\r\n },\r\n WB1: {\r\n Name: \"WB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 5000,\r\n PointLoadData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4975,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5000\",\r\n PARENT_LEN: \"5000\",\r\n },\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 4887,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2456.73,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n WB1: {\r\n Name: \"WB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4908.23,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"5003\",\r\n },\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 4890,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4900,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"4950\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 4887,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2456.73,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n WB1: {\r\n Name: \"WB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4908.23,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"4975\",\r\n PARENT_LEN: \"5003\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2301,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2301,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n LSBL00222: {\r\n AttachmentBracketResults: {\r\n UCE_1: \"0.500=Uplift\",\r\n UCE_4: \"0.500=Uplift\",\r\n UCE_2: \"0.820=Uplift\",\r\n UCE_3: \"0.820=Uplift\",\r\n },\r\n MaxResultOverAll: 0.514907648393385,\r\n BeamResults: {\r\n \"P2,\": \"0.0800332596662741=Vertical Shear\",\r\n \"R1,\": \"0.218254582298945=Bending Moment\",\r\n \"FB2b,\": \"0.0659794836801913=Vertical Shear\",\r\n \"P1,P2,\": \"0.0800332596662741=Vertical Shear\",\r\n \"P6,\": \"0.0800332596662741=Vertical Shear\",\r\n \"R2,\": \"0.349852786041602=Bending Moment\",\r\n \"P3,\": \"0.0800332596662741=Vertical Shear\",\r\n \"R3,\": \"0.349852786041602=Bending Moment\",\r\n \"FB2a,\": \"0.326301172375769=Vertical Shear\",\r\n \"P5,\": \"0.0800332596662741=Vertical Shear\",\r\n \"P5,P6,\": \"0.0800332596662741=Vertical Shear\",\r\n \"FB1,\": \"0.514907648393385=Bending Moment\",\r\n \"FB2,\": \"0.326301172375769=Vertical Shear\",\r\n \"P4,\": \"0.0800332596662741=Vertical Shear\",\r\n \",\": \"0.514907648393385=Bending Moment\",\r\n \"FB1c,\": \"0.23515284496323=Vertical Shear\",\r\n \"P1,\": \"0.0800332596662741=Vertical Shear\",\r\n \"R4,\": \"0.218254582298945=Bending Moment\",\r\n \"FB1a,\": \"0.23515284496323=Vertical Shear\",\r\n \"FB1b,\": \"0.514907648393385=Bending Moment\",\r\n \"P3,P4,\": \"0.0800332596662741=Vertical Shear\",\r\n \"FB2c,\": \"0.326301172375769=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C1: \"0.305=Deflection (15.3mm)\",\r\n C2: \"0.305=Deflection (15.3mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {\r\n UCE_1: {\r\n ref: \"UCE_1\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.150824983974443,\r\n max_shear_kn: 1.18397612419938,\r\n max_uplift: 0.500124048587314,\r\n max_uplift_kn: -3.92597378141042,\r\n max_area_capacity: 0.450199013092692,\r\n area_m2_roofload: 2.25549705559439,\r\n max_capacity_ratio: 0.500124048587314,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"FB2c\",\r\n },\r\n UCE_4: {\r\n ref: \"UCE_4\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.150824983974443,\r\n max_shear_kn: 1.18397612419938,\r\n max_uplift: 0.500124048587314,\r\n max_uplift_kn: -3.92597378141042,\r\n max_area_capacity: 0.450199013092692,\r\n area_m2_roofload: 2.25549705559439,\r\n max_capacity_ratio: 0.500124048587314,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"FB2a\",\r\n },\r\n UCE_2: {\r\n ref: \"UCE_2\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.24715342539212,\r\n max_shear_kn: 1.94015438932814,\r\n max_uplift: 0.819541752779332,\r\n max_uplift_kn: -6.43340275931776,\r\n max_area_capacity: 0.761358939583117,\r\n area_m2_roofload: 3.81440828731141,\r\n max_capacity_ratio: 0.819541752779332,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"FB2c\",\r\n },\r\n UCE_3: {\r\n ref: \"UCE_3\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.24715342539212,\r\n max_shear_kn: 1.94015438932814,\r\n max_uplift: 0.819541752779332,\r\n max_uplift_kn: -6.43340275931776,\r\n max_area_capacity: 0.761358939583117,\r\n area_m2_roofload: 3.81440828731141,\r\n max_capacity_ratio: 0.819541752779332,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"FB2a\",\r\n },\r\n },\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {\r\n FB2: {\r\n ref: \"UCE_3\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.24715342539212,\r\n max_shear_kn: 1.94015438932814,\r\n max_uplift: 0.819541752779332,\r\n max_uplift_kn: -6.43340275931776,\r\n max_area_capacity: 0.761358939583117,\r\n area_m2_roofload: 3.81440828731141,\r\n max_capacity_ratio: 0.819541752779332,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"FB2a\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.514907648393385,\r\n PurlinMax: 0.0800332596662741,\r\n FasciaMax: 0.514907648393385,\r\n NumRafters: 4,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 9,\r\n ColumnsMax: 0.305397023061597,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.305 - Deflection (15.3mm)\",\r\n RafterMax: 0.349852786041602,\r\n NumFasciaBeams: 8,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.514907648393385,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2523,\r\n total_compression_kn: 3.46854168093925,\r\n total_tension_kn: -11.5014174870334,\r\n max_strength: 0.0592879982242033,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.305397023061597,\r\n max_capacity_ratio: 0.305397023061597,\r\n max_capacity_ratio_limit_state: \"Deflection (15.3mm)\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2523,\r\n total_compression_kn: 3.46854168093925,\r\n total_tension_kn: -11.5014174870334,\r\n max_strength: 0.0592879982242033,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.305397023061597,\r\n max_capacity_ratio: 0.305397023061597,\r\n max_capacity_ratio_limit_state: \"Deflection (15.3mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"R1,\",\r\n BeamType: \"Rafter\",\r\n Length: 3811,\r\n Column: \"H\",\r\n PointLoads: [\r\n {\r\n Name: \"P3\",\r\n Location: 1289,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 2585,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R2,\",\r\n BeamType: \"Rafter\",\r\n Length: 3811,\r\n Column: \"I\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 1289,\r\n },\r\n {\r\n Name: \"P3\",\r\n Location: 1289,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 2585,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 2585,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R3,\",\r\n BeamType: \"Rafter\",\r\n Length: 3811,\r\n Column: \"J\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 1289,\r\n },\r\n {\r\n Name: \"P5\",\r\n Location: 1289,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 2585,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 2585,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R4,\",\r\n BeamType: \"Rafter\",\r\n Length: 3811,\r\n Column: \"K\",\r\n PointLoads: [\r\n {\r\n Name: \"P5\",\r\n Location: 1289,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 2585,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"FB1b,\",\r\n BeamType: \"Fascia Beam\",\r\n Length: 3310,\r\n Column: \"M\",\r\n PointLoads: [\r\n {\r\n Name: \"R2\",\r\n Location: 996,\r\n },\r\n {\r\n Name: \"R3\",\r\n Location: 2313,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"FB2a,\",\r\n BeamType: \"Fascia Beam\",\r\n Length: 1344.17,\r\n Column: \"O\",\r\n PointLoads: [\r\n {\r\n Name: \"R4\",\r\n Location: 25,\r\n },\r\n {\r\n Name: \"R3\",\r\n Location: 1341,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"FB2c,\",\r\n BeamType: \"Fascia Beam\",\r\n Length: 1344.17,\r\n Column: \"Q\",\r\n PointLoads: [\r\n {\r\n Name: \"R2\",\r\n Location: 2,\r\n },\r\n {\r\n Name: \"R1\",\r\n Location: 1319,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 4000,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1341.67,\r\n Bracket: \"FLUB\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2658.33,\r\n Bracket: \"FLUB\",\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3975,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 345,\r\n Bracket: \"HCC\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3655,\r\n Bracket: \"HCC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"4000\",\r\n },\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 4000,\r\n PointLoadData: {\r\n R4: {\r\n Name: \"R4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1341.67,\r\n Bracket: \"FLUB\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2658.33,\r\n Bracket: \"FLUB\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3975,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n BK34D_4: {\r\n Name: \"BK34D_4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 32.5,\r\n Bracket: \"\",\r\n },\r\n BK34D_3: {\r\n Name: \"BK34D_3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1344.17,\r\n Bracket: \"\",\r\n },\r\n BK34D_2: {\r\n Name: \"BK34D_2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2655.83,\r\n Bracket: \"\",\r\n },\r\n BK34D_1: {\r\n Name: \"BK34D_1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3967.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 4,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"4000\",\r\n PARENT_LEN: \"4000\",\r\n },\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 1257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"1367\",\r\n PARENT_LEN: \"1267\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 1257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"1367\",\r\n PARENT_LEN: \"1267\",\r\n },\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3811,\r\n PointLoadData: {\r\n P3: {\r\n Name: \"P3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1289.07,\r\n Bracket: \"FLUB\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2585.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3857.18,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"3940\",\r\n },\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 1257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"1292\",\r\n },\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 1257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"1292\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3811,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1289.07,\r\n Bracket: \"FLUB\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1289.07,\r\n Bracket: \"FLUB\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2585.67,\r\n Bracket: \"FLUB\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2585.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3857.18,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"1342\",\r\n PARENT_LEN: \"3940\",\r\n },\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3811,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1289.07,\r\n Bracket: \"FLUB\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1289.07,\r\n Bracket: \"FLUB\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2585.67,\r\n Bracket: \"FLUB\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2585.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3857.18,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"2658\",\r\n PARENT_LEN: \"3940\",\r\n },\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 1257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"2683\",\r\n PARENT_LEN: \"1292\",\r\n },\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 1257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"2683\",\r\n PARENT_LEN: \"1292\",\r\n },\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3811,\r\n PointLoadData: {\r\n P5: {\r\n Name: \"P5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1289.07,\r\n Bracket: \"FLUB\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2585.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3857.18,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"3975\",\r\n PARENT_LEN: \"3940\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2523,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2523,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n CANL00034: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.580871848579363,\r\n BeamResults: {\r\n \"P2,\": \"0.15419115007459=Bending Moment\",\r\n \"R1,\": \"0.323930880858296=Bending Moment\",\r\n \"FB2b,\": \"0.353189789182392=Bending Moment\",\r\n \"P1,P2,\": \"0.15419115007459=Bending Moment\",\r\n \"P6,\": \"0.15419115007459=Bending Moment\",\r\n \"R2,\": \"0.580871848579363=Bending Moment\",\r\n \"P3,\": \"0.15419115007459=Bending Moment\",\r\n \"R3,\": \"0.580871848579363=Bending Moment\",\r\n \"FB2a,\": \"0.159907827374544=Vertical Shear\",\r\n \"P5,\": \"0.15419115007459=Bending Moment\",\r\n \"P5,P6,\": \"0.15419115007459=Bending Moment\",\r\n \"FB1,\": \"0.362151960767942=Bending Moment\",\r\n \"FB2,\": \"0.353189789182392=Bending Moment\",\r\n \"P4,\": \"0.15419115007459=Bending Moment\",\r\n \",\": \"0.580871848579363=Bending Moment\",\r\n \"FB1d,\": \"0.159808960860944=Vertical Shear\",\r\n \"FB1c,\": \"0.362151960767942=Bending Moment\",\r\n \"P1,\": \"0.15419115007459=Bending Moment\",\r\n \"R4,\": \"0.323930880858296=Bending Moment\",\r\n \"FB1a,\": \"0.159808960860944=Vertical Shear\",\r\n \"FB1b,\": \"0.362151960767942=Bending Moment\",\r\n \"P3,P4,\": \"0.15419115007459=Bending Moment\",\r\n \"FB2d,\": \"0.159907827374544=Vertical Shear\",\r\n \"FB2c,\": \"0.353189789182392=Bending Moment\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C6: \"0.328=Deflection (16.4mm)\",\r\n C2: \"0.254=Deflection (12.7mm)\",\r\n C1: \"0.254=Deflection (12.7mm)\",\r\n C3: \"0.254=Deflection (12.7mm)\",\r\n C4: \"0.328=Deflection (16.4mm)\",\r\n C5: \"0.328=Deflection (16.4mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.580871848579363,\r\n PurlinMax: 0.15419115007459,\r\n FasciaMax: 0.362151960767942,\r\n NumRafters: 4,\r\n NumColumns: 6,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 9,\r\n ColumnsMax: 0.327895492356321,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n ColumnsMaxText: \"Limiting Member = C4 CR=0.328 - Deflection (16.4mm)\",\r\n RafterMax: 0.580871848579363,\r\n NumFasciaBeams: 10,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.580871848579363,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C6: {\r\n ref: \"C6\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2655,\r\n total_compression_kn: 5.32323855442386,\r\n total_tension_kn: -3.15950381850952,\r\n max_strength: 0.0931432122845014,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.327895492356321,\r\n max_capacity_ratio: 0.327895492356321,\r\n max_capacity_ratio_limit_state: \"Deflection (16.4mm)\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2445,\r\n total_compression_kn: 8.14891198154869,\r\n total_tension_kn: -4.83662685021029,\r\n max_strength: 0.146040594811503,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.25410907551958,\r\n max_capacity_ratio: 0.25410907551958,\r\n max_capacity_ratio_limit_state: \"Deflection (12.7mm)\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2445,\r\n total_compression_kn: 5.46815500189287,\r\n total_tension_kn: -3.24551613309246,\r\n max_strength: 0.0952916602408488,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.25410907551958,\r\n max_capacity_ratio: 0.25410907551958,\r\n max_capacity_ratio_limit_state: \"Deflection (12.7mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2445,\r\n total_compression_kn: 5.46815500189287,\r\n total_tension_kn: -3.24551613309246,\r\n max_strength: 0.0952916602408488,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.25410907551958,\r\n max_capacity_ratio: 0.25410907551958,\r\n max_capacity_ratio_limit_state: \"Deflection (12.7mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2655,\r\n total_compression_kn: 5.32323855442386,\r\n total_tension_kn: -3.15950381850952,\r\n max_strength: 0.0931432122845014,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.327895492356321,\r\n max_capacity_ratio: 0.327895492356321,\r\n max_capacity_ratio_limit_state: \"Deflection (16.4mm)\",\r\n },\r\n C5: {\r\n ref: \"C5\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2655,\r\n total_compression_kn: 7.87732288969371,\r\n total_tension_kn: -4.67543047247737,\r\n max_strength: 0.141948405847352,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.327895492356321,\r\n max_capacity_ratio: 0.327895492356321,\r\n max_capacity_ratio_limit_state: \"Deflection (16.4mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"R1,\",\r\n BeamType: \"Rafter\",\r\n Length: 5886,\r\n Column: \"H\",\r\n PointLoads: [\r\n {\r\n Name: \"P3\",\r\n Location: 1966,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 3951,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R2,\",\r\n BeamType: \"Rafter\",\r\n Length: 5886,\r\n Column: \"I\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 1966,\r\n },\r\n {\r\n Name: \"P3\",\r\n Location: 1966,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 3951,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 3951,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R3,\",\r\n BeamType: \"Rafter\",\r\n Length: 5886,\r\n Column: \"J\",\r\n PointLoads: [\r\n {\r\n Name: \"P1\",\r\n Location: 1966,\r\n },\r\n {\r\n Name: \"P5\",\r\n Location: 1966,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 3951,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 3951,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"R4,\",\r\n BeamType: \"Rafter\",\r\n Length: 5886,\r\n Column: \"K\",\r\n PointLoads: [\r\n {\r\n Name: \"P5\",\r\n Location: 1966,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 3951,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"3367\",\r\n PARENT_LEN: \"3267\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"3367\",\r\n PARENT_LEN: \"3267\",\r\n },\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 5886,\r\n PointLoadData: {\r\n P3: {\r\n Name: \"P3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1966.52,\r\n Bracket: \"FLUB\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3951.06,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5910.58,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"6004\",\r\n },\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"3292\",\r\n },\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"3292\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 5886,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1966.52,\r\n Bracket: \"FLUB\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1966.52,\r\n Bracket: \"FLUB\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3951.06,\r\n Bracket: \"FLUB\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3951.06,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5910.58,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"3342\",\r\n PARENT_LEN: \"6004\",\r\n },\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 5886,\r\n PointLoadData: {\r\n P1: {\r\n Name: \"P1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1966.52,\r\n Bracket: \"FLUB\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1966.52,\r\n Bracket: \"FLUB\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3951.06,\r\n Bracket: \"FLUB\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3951.06,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5910.58,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"6658\",\r\n PARENT_LEN: \"6004\",\r\n },\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"6683\",\r\n PARENT_LEN: \"3292\",\r\n },\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3257,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3266.67,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"6683\",\r\n PARENT_LEN: \"3292\",\r\n },\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 5886,\r\n PointLoadData: {\r\n P5: {\r\n Name: \"P5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1966.52,\r\n Bracket: \"FLUB\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3951.06,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5910.58,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"9975\",\r\n PARENT_LEN: \"6004\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 10000,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3341.67,\r\n Bracket: \"FLUB\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 6658.33,\r\n Bracket: \"FLUB\",\r\n },\r\n R4: {\r\n Name: \"R4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 9975,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 245,\r\n Bracket: \"HCC\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5000,\r\n Bracket: \"HCC\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 9755,\r\n Bracket: \"HCC\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"10000\",\r\n },\r\n },\r\n FB2: {\r\n Name: \"FB2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 10000,\r\n PointLoadData: {\r\n R4: {\r\n Name: \"R4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n R3: {\r\n Name: \"R3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3341.67,\r\n Bracket: \"FLUB\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6658.33,\r\n Bracket: \"FLUB\",\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 9975,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n C4: {\r\n Name: \"C4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 245,\r\n Bracket: \"HCC\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5000,\r\n Bracket: \"HCC\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 9755,\r\n Bracket: \"HCC\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"10000\",\r\n PARENT_LEN: \"10000\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2445,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2445,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2445,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2655,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2655,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2655,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n COFL00234: {\r\n AttachmentBracketResults: {\r\n UCF_1: \"1.569=Uplift\",\r\n UCF_3: \"0.284=Uplift\",\r\n UCF_2: \"0.485=Uplift\",\r\n UCF_5: \"0.284=Uplift\",\r\n UCF_4: \"2.337=Uplift\",\r\n UCF_7: \"1.569=Uplift\",\r\n UCF_6: \"0.485=Uplift\",\r\n },\r\n MaxResultOverAll: 3.69945281022885,\r\n BeamResults: {\r\n \"EB2f,\": \"1.19606927263525=Vertical Shear\",\r\n \"P12,\": \"0.454368072162197=Vertical Shear\",\r\n \"PR2,PR3,\": \"2.76110375835281=Bending Moment\",\r\n \"P2,\": \"0.245185728055267=Vertical Shear\",\r\n \"EB2b,EB2c,EB2e,\": \"0.108190500084291=Vertical Shear\",\r\n \"P3,\": \"0.245185728055267=Vertical Shear\",\r\n \"EB2d,\": \"1.67273295922724=Vertical Shear\",\r\n \"P9,\": \"0.0119346210324029=Vertical Shear\",\r\n \"EB1b,\": \"3.69945281022885=Bending Moment\",\r\n \"EB1c,\": \"0.378365317488419=Vertical Shear\",\r\n \"PR10,PR4,\": \"1.45110432980191=Bending Moment\",\r\n \",\": \"3.69945281022885=Bending Moment\",\r\n \"EB4,\": \"0.480966477253663=Deflection-W UP (-38.5mm)\",\r\n \"EB3,\": \"0.480966477253663=Deflection-W UP (-38.5mm)\",\r\n \"EB2,\": \"1.67273295922724=Vertical Shear\",\r\n \"EB1,\": \"3.69945281022885=Bending Moment\",\r\n \"EB2a,\": \"1.19606927263525=Vertical Shear\",\r\n \"P5,\": \"0.00644015045548544=Vertical Shear\",\r\n \"P8,\": \"0.00644015045548544=Vertical Shear\",\r\n \"P5,P6,\": \"0.00644015045548544=Vertical Shear\",\r\n \"EB1a,\": \"0.378365317488419=Vertical Shear\",\r\n \"PR7,PR8,\": \"0.182571053636198=Vertical Shear\",\r\n \"PR5,PR6,\": \"0.182571053636198=Vertical Shear\",\r\n \"P13,\": \"0.454368072162197=Vertical Shear\",\r\n \"P10,\": \"0.0119346210324029=Vertical Shear\",\r\n \"P11,\": \"0.454368072162197=Vertical Shear\",\r\n \"P16,\": \"0.0119346210324029=Vertical Shear\",\r\n \"P7,P8,\": \"0.00644015045548544=Vertical Shear\",\r\n \"P14,\": \"0.454368072162197=Vertical Shear\",\r\n \"P15,\": \"0.0119346210324029=Vertical Shear\",\r\n \"P4,\": \"0.245185728055267=Vertical Shear\",\r\n \"P1,P2,\": \"0.245185728055267=Vertical Shear\",\r\n \"P3,P4,\": \"0.245185728055267=Vertical Shear\",\r\n \"PR9,PR1,\": \"1.45110432980191=Bending Moment\",\r\n \"P1,\": \"0.245185728055267=Vertical Shear\",\r\n \"P6,\": \"0.00644015045548544=Vertical Shear\",\r\n \"P7,\": \"0.00644015045548544=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C1: \"0.622=Deflection (31.1mm)\",\r\n C2: \"0.622=Deflection (31.1mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {\r\n UCF_1: {\r\n ref: \"UCF_1\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.471190891230922,\r\n max_shear_kn: 3.69884849616274,\r\n max_uplift: 1.56936477810739,\r\n max_uplift_kn: -12.319513508143,\r\n max_area_capacity: 1.50078405742754,\r\n area_m2_roofload: 6.7460243381368,\r\n max_capacity_ratio: 1.56936477810739,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2f\",\r\n },\r\n UCF_3: {\r\n ref: \"UCF_3\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.0852352765802117,\r\n max_shear_kn: 0.669096921154662,\r\n max_uplift: 0.283887578063707,\r\n max_uplift_kn: -2.2285174878001,\r\n max_area_capacity: 0.277264484716351,\r\n area_m2_roofload: 1.2463038588,\r\n max_capacity_ratio: 0.283887578063707,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2e\",\r\n },\r\n UCF_2: {\r\n ref: \"UCF_2\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.145654375738533,\r\n max_shear_kn: 1.14338684954749,\r\n max_uplift: 0.485121532091012,\r\n max_uplift_kn: -3.80820402691444,\r\n max_area_capacity: 0.437089387687858,\r\n area_m2_roofload: 1.96471679765692,\r\n max_capacity_ratio: 0.485121532091012,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2f\",\r\n },\r\n UCF_5: {\r\n ref: \"UCF_5\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.0852431867012484,\r\n max_shear_kn: 0.6691590156048,\r\n max_uplift: 0.283913923788076,\r\n max_uplift_kn: -2.2287243017364,\r\n max_area_capacity: 0.277290215795328,\r\n area_m2_roofload: 1.24641952,\r\n max_capacity_ratio: 0.283913923788076,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2c\",\r\n },\r\n UCF_4: {\r\n ref: \"UCF_4\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.701593905307995,\r\n max_shear_kn: 5.50751215666776,\r\n max_uplift: 2.33675307400111,\r\n max_uplift_kn: -18.3435116309088,\r\n max_area_capacity: 2.24973402973974,\r\n area_m2_roofload: 10.1125544636801,\r\n max_capacity_ratio: 2.33675307400111,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2d\",\r\n },\r\n UCF_7: {\r\n ref: \"UCF_7\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.471190891230922,\r\n max_shear_kn: 3.69884849616274,\r\n max_uplift: 1.56936477810739,\r\n max_uplift_kn: -12.319513508143,\r\n max_area_capacity: 1.50078405742754,\r\n area_m2_roofload: 6.7460243381368,\r\n max_capacity_ratio: 1.56936477810739,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2a\",\r\n },\r\n UCF_6: {\r\n ref: \"UCF_6\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.145654375738533,\r\n max_shear_kn: 1.14338684954749,\r\n max_uplift: 0.485121532091012,\r\n max_uplift_kn: -3.80820402691444,\r\n max_area_capacity: 0.437089387687858,\r\n area_m2_roofload: 1.96471679765692,\r\n max_capacity_ratio: 0.485121532091012,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2a\",\r\n },\r\n },\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {\r\n EB2: {\r\n ref: \"UCF_4\",\r\n area: 0,\r\n type: \"UCE\",\r\n max_shear: 0.701593905307995,\r\n max_shear_kn: 5.50751215666776,\r\n max_uplift: 2.33675307400111,\r\n max_uplift_kn: -18.3435116309088,\r\n max_area_capacity: 2.24973402973974,\r\n area_m2_roofload: 10.1125544636801,\r\n max_capacity_ratio: 2.33675307400111,\r\n max_capacity_ratio_limit_state: \"Uplift\",\r\n max_input_member: \"EB2d\",\r\n },\r\n },\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 3.69945281022885,\r\n PurlinMax: 0.454368072162197,\r\n NumRafters: 5,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 20,\r\n ColumnsMax: 0.62191137447448,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.622 - Deflection (31.1mm)\",\r\n RafterMax: 2.76110375835281,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 3.69945281022885,\r\n JoinBeamMax: 0,\r\n OtherMax: 3.69945281022885,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 0,\r\n height: 2550,\r\n total_compression_kn: 9.34142368325488,\r\n total_tension_kn: -31.1128707678982,\r\n max_strength: 0.170351605659285,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.62191137447448,\r\n max_capacity_ratio: 0.62191137447448,\r\n max_capacity_ratio_limit_state: \"Deflection (31.1mm)\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 0,\r\n height: 2550,\r\n total_compression_kn: 9.34142368325488,\r\n total_tension_kn: -31.1128707678982,\r\n max_strength: 0.170351605659285,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.62191137447448,\r\n max_capacity_ratio: 0.62191137447448,\r\n max_capacity_ratio_limit_state: \"Deflection (31.1mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"PR2,PR3,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 7582,\r\n Column: \"Q\",\r\n PointLoads: [\r\n {\r\n Name: \"P11\",\r\n Location: 1782,\r\n },\r\n {\r\n Name: \"P13\",\r\n Location: 1782,\r\n },\r\n {\r\n Name: \"P1\",\r\n Location: 3628,\r\n },\r\n {\r\n Name: \"P3\",\r\n Location: 3628,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 3959,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 3959,\r\n },\r\n {\r\n Name: \"P12\",\r\n Location: 5804,\r\n },\r\n {\r\n Name: \"P14\",\r\n Location: 5804,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR5,PR6,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 7566,\r\n Column: \"R\",\r\n PointLoads: [\r\n {\r\n Name: \"P9\",\r\n Location: 1774,\r\n },\r\n {\r\n Name: \"P5\",\r\n Location: 3620,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 3951,\r\n },\r\n {\r\n Name: \"P10\",\r\n Location: 5796,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR7,PR8,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 7566,\r\n Column: \"S\",\r\n PointLoads: [\r\n {\r\n Name: \"P15\",\r\n Location: 1774,\r\n },\r\n {\r\n Name: \"P7\",\r\n Location: 3620,\r\n },\r\n {\r\n Name: \"P8\",\r\n Location: 3951,\r\n },\r\n {\r\n Name: \"P16\",\r\n Location: 5796,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR9,PR1,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 7539,\r\n Column: \"T\",\r\n PointLoads: [\r\n {\r\n Name: \"P9\",\r\n Location: 1739,\r\n },\r\n {\r\n Name: \"P11\",\r\n Location: 1739,\r\n },\r\n {\r\n Name: \"P1\",\r\n Location: 3584,\r\n },\r\n {\r\n Name: \"P5\",\r\n Location: 3584,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 3916,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 3916,\r\n },\r\n {\r\n Name: \"P10\",\r\n Location: 5761,\r\n },\r\n {\r\n Name: \"P12\",\r\n Location: 5761,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR10,PR4,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 7539,\r\n Column: \"U\",\r\n PointLoads: [\r\n {\r\n Name: \"P13\",\r\n Location: 1739,\r\n },\r\n {\r\n Name: \"P15\",\r\n Location: 1739,\r\n },\r\n {\r\n Name: \"P3\",\r\n Location: 3584,\r\n },\r\n {\r\n Name: \"P7\",\r\n Location: 3584,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 3916,\r\n },\r\n {\r\n Name: \"P8\",\r\n Location: 3916,\r\n },\r\n {\r\n Name: \"P14\",\r\n Location: 5761,\r\n },\r\n {\r\n Name: \"P16\",\r\n Location: 5761,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"EB1a,\",\r\n BeamType: \"Edge Beam\",\r\n Length: 155,\r\n Column: \"X\",\r\n PointLoads: [\r\n {\r\n Name: \"PR5\",\r\n Location: 25,\r\n },\r\n {\r\n Name: \"EB3\",\r\n Location: 25,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"EB1c,\",\r\n BeamType: \"Edge Beam\",\r\n Length: 155,\r\n Column: \"Z\",\r\n PointLoads: [\r\n {\r\n Name: \"PR7\",\r\n Location: 130,\r\n },\r\n {\r\n Name: \"EB4\",\r\n Location: 130,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"EB2a,\",\r\n BeamType: \"Edge Beam\",\r\n Length: 1048.33,\r\n Column: \"AA\",\r\n PointLoads: [\r\n {\r\n Name: \"PR8\",\r\n Location: 25,\r\n },\r\n {\r\n Name: \"EB4\",\r\n Location: 25,\r\n },\r\n {\r\n Name: \"PR4\",\r\n Location: 155,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"EB2f,\",\r\n BeamType: \"Edge Beam\",\r\n Length: 1048.33,\r\n Column: \"AD\",\r\n PointLoads: [\r\n {\r\n Name: \"PR1\",\r\n Location: 893,\r\n },\r\n {\r\n Name: \"PR6\",\r\n Location: 1023,\r\n },\r\n {\r\n Name: \"EB3\",\r\n Location: 1023,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n PR1: {\r\n Name: \"PR1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3791,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P10: {\r\n Name: \"P10\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n P12: {\r\n Name: \"P12\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"APEX15Z\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3796.39,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"155\",\r\n PARENT_LEN: \"3796\",\r\n },\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3791,\r\n PointLoadData: {\r\n P11: {\r\n Name: \"P11\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1782.97,\r\n Bracket: \"FLUB\",\r\n },\r\n P13: {\r\n Name: \"P13\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1782.97,\r\n Bracket: \"FLUB\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3628.07,\r\n Bracket: \"FLUB\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3628.07,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"RRC\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3796.39,\r\n Bracket: \"APEX15Z\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2880\",\r\n PARENT_LEN: \"3796\",\r\n },\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3791,\r\n PointLoadData: {\r\n P2: {\r\n Name: \"P2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P12: {\r\n Name: \"P12\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n P14: {\r\n Name: \"P14\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"APEX15Z\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3796.39,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2880\",\r\n PARENT_LEN: \"3796\",\r\n },\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"180\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"180\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3791,\r\n PointLoadData: {\r\n P4: {\r\n Name: \"P4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 1,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P14: {\r\n Name: \"P14\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n P16: {\r\n Name: \"P16\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"APEX15Z\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3796.39,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5605\",\r\n PARENT_LEN: \"3796\",\r\n },\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2905\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2905\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n PR5: {\r\n Name: \"PR5\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3783,\r\n PointLoadData: {\r\n P9: {\r\n Name: \"P9\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1774.96,\r\n Bracket: \"FLUB\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3620.06,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"GRBC\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 48.71,\r\n Bracket: \"GRBC\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3788.37,\r\n Bracket: \"APEX15Z\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"3788\",\r\n },\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3783,\r\n PointLoadData: {\r\n P6: {\r\n Name: \"P6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P10: {\r\n Name: \"P10\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"APEX15Z\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3788.37,\r\n Bracket: \"GRBC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"3788\",\r\n },\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"50\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"50\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3783,\r\n PointLoadData: {\r\n P15: {\r\n Name: \"P15\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1774.96,\r\n Bracket: \"FLUB\",\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3620.06,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"GRBC\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 48.71,\r\n Bracket: \"GRBC\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3788.37,\r\n Bracket: \"APEX15Z\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5735\",\r\n PARENT_LEN: \"3788\",\r\n },\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3783,\r\n PointLoadData: {\r\n P8: {\r\n Name: \"P8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P16: {\r\n Name: \"P16\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2013.41,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"APEX15Z\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3788.37,\r\n Bracket: \"GRBC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5735\",\r\n PARENT_LEN: \"3788\",\r\n },\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5630\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5630\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n U1: {\r\n Name: \"U1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL10011\",\r\n Length: 1640,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"1450\",\r\n },\r\n },\r\n U2: {\r\n Name: \"U2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL10011\",\r\n Length: 1640,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5735\",\r\n PARENT_LEN: \"1450\",\r\n },\r\n },\r\n EB1: {\r\n Name: \"EB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 5760,\r\n PointLoadData: {\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"GRBC\",\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2880,\r\n Bracket: \"RRC\",\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 1,\r\n Side: 0,\r\n Location: 5735,\r\n Bracket: \"GRBC\",\r\n },\r\n EB4: {\r\n Name: \"EB4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5735,\r\n Bracket: \"HCC15\",\r\n },\r\n },\r\n NumPointLoads: 5,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 155,\r\n Bracket: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5605,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5760\",\r\n },\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 5760,\r\n PointLoadData: {\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"GRBC\",\r\n },\r\n EB4: {\r\n Name: \"EB4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 155,\r\n Bracket: \"RRC\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2880,\r\n Bracket: \"RRC\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5605,\r\n Bracket: \"RRC\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5735,\r\n Bracket: \"GRBC\",\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5735,\r\n Bracket: \"HCC15\",\r\n },\r\n },\r\n NumPointLoads: 7,\r\n SupportData: {\r\n UCF_7: {\r\n Name: \"UCF_7\",\r\n End: 0,\r\n Side: 0,\r\n Location: 132.5,\r\n Bracket: \"\",\r\n },\r\n UCF_6: {\r\n Name: \"UCF_6\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1048.33,\r\n Bracket: \"\",\r\n },\r\n UCF_5: {\r\n Name: \"UCF_5\",\r\n End: 0,\r\n Side: 0,\r\n Location: 1964.17,\r\n Bracket: \"\",\r\n },\r\n UCF_4: {\r\n Name: \"UCF_4\",\r\n End: 0,\r\n Side: 0,\r\n Location: 2880,\r\n Bracket: \"\",\r\n },\r\n UCF_3: {\r\n Name: \"UCF_3\",\r\n End: 0,\r\n Side: 0,\r\n Location: 3795.83,\r\n Bracket: \"\",\r\n },\r\n UCF_2: {\r\n Name: \"UCF_2\",\r\n End: 0,\r\n Side: 0,\r\n Location: 4711.67,\r\n Bracket: \"\",\r\n },\r\n UCF_1: {\r\n Name: \"UCF_1\",\r\n End: 0,\r\n Side: 0,\r\n Location: 5627.5,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumSupports: 7,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5760\",\r\n PARENT_LEN: \"5760\",\r\n },\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 6890,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6900,\r\n Bracket: \"HCC15\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"6900\",\r\n },\r\n },\r\n EB4: {\r\n Name: \"EB4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 6890,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6900,\r\n Bracket: \"HCC15\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6900,\r\n Bracket: \"HCC15\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5735\",\r\n PARENT_LEN: \"6900\",\r\n },\r\n },\r\n P9: {\r\n Name: \"P9\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR5: {\r\n Name: \"PR5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"50\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n P10: {\r\n Name: \"P10\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR6: {\r\n Name: \"PR6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"130\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n P11: {\r\n Name: \"P11\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR9: {\r\n Name: \"PR9\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"180\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n P12: {\r\n Name: \"P12\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2855\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n P13: {\r\n Name: \"P13\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2905\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n P14: {\r\n Name: \"P14\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2665,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2675,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5580\",\r\n PARENT_LEN: \"2675\",\r\n },\r\n },\r\n P15: {\r\n Name: \"P15\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR10: {\r\n Name: \"PR10\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR7: {\r\n Name: \"PR7\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5630\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n P16: {\r\n Name: \"P16\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 70,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR8: {\r\n Name: \"PR8\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 80,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5710\",\r\n PARENT_LEN: \"80\",\r\n },\r\n },\r\n PR9: {\r\n Name: \"PR9\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3748,\r\n PointLoadData: {\r\n P9: {\r\n Name: \"P9\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1739.68,\r\n Bracket: \"FLUB\",\r\n },\r\n P11: {\r\n Name: \"P11\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1739.68,\r\n Bracket: \"FLUB\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3584.78,\r\n Bracket: \"FLUB\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3584.78,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 13.42,\r\n Bracket: \"RRC\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3753.09,\r\n Bracket: \"APEX15Z\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"155\",\r\n PARENT_LEN: \"3796\",\r\n },\r\n },\r\n PR10: {\r\n Name: \"PR10\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 3748,\r\n PointLoadData: {\r\n P13: {\r\n Name: \"P13\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1739.68,\r\n Bracket: \"FLUB\",\r\n },\r\n P15: {\r\n Name: \"P15\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1739.68,\r\n Bracket: \"FLUB\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3584.78,\r\n Bracket: \"FLUB\",\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3584.78,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n C2: {\r\n Name: \"C2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 13.42,\r\n Bracket: \"RRC\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3753.09,\r\n Bracket: \"APEX15Z\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"5605\",\r\n PARENT_LEN: \"3796\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2550,\r\n TopBracket: \"\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2550,\r\n TopBracket: \"\",\r\n GroundConnection: \"Bolt to Slab\",\r\n Embedment: 0,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"CON\",\r\n },\r\n },\r\n },\r\n },\r\n VDPL00060: {\r\n AttachmentBracketResults: {},\r\n BeamResults: {\r\n \"P2,\": \"0.0629322684411332=Vertical Shear\",\r\n \"P5,\": \"0.116306177997375=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.299751524335055=Collar Tie Tension\",\r\n \"P1,P2,\": \"0.0629322684411332=Vertical Shear\",\r\n \"EB3,\": \"0.185045951897145=Bending Moment\",\r\n \"P7,\": \"0.000598982237475728=Vertical Shear\",\r\n \"P6,\": \"0.116306177997375=Vertical Shear\",\r\n \"P8,\": \"0.00134771003432039=Vertical Shear\",\r\n \"P3,\": \"0.000598982237475728=Vertical Shear\",\r\n \"HR2,\": \"0.0261374821846921=Vertical Shear\",\r\n \"HR3,\": \"0.025415962941039=Vertical Shear\",\r\n \"HR1,\": \"0.025415962941039=Vertical Shear\",\r\n \"P4,\": \"0.00134771003432039=Vertical Shear\",\r\n \",\": \"0.520370948819248=Bending Moment\",\r\n \"P1,\": \"0.0629322684411332=Vertical Shear\",\r\n \"EB4,\": \"0.520370948819248=Bending Moment\",\r\n \"PR3,PR4,\": \"0.299751524335055=Collar Tie Tension\",\r\n \"EB2,\": \"0.185045951897145=Bending Moment\",\r\n \"EB1,\": \"0.520004669919848=Bending Moment\",\r\n \"HR4,\": \"0.0261374821846921=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C2: \"0.331=Deflection (16.5mm)\",\r\n C1: \"0.331=Deflection (16.5mm)\",\r\n C4: \"0.331=Deflection (16.5mm)\",\r\n C3: \"0.331=Deflection (16.5mm)\",\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n MaxResultOverAll: 0.520370948819248,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.520370948819248,\r\n PurlinMax: 0.116306177997375,\r\n NumColumns: 4,\r\n NumRafters: 2,\r\n HipRafterMax: 0.0261374821846921,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 9,\r\n ColumnsMax: 0.33095278055779,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.331 - Deflection (16.5mm)\",\r\n RafterMax: 0.299751524335055,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.520370948819248,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.520370948819248,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n },\r\n VDPL00030: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.310528694471773,\r\n BeamResults: {\r\n \"P2,\": \"0.0638924183955276=Vertical Shear\",\r\n \"P5,\": \"0.121769646421521=Vertical Shear\",\r\n \"PR1,PR2,\": \"0.197661990451708=Collar Tie Tension\",\r\n \"P1,P2,\": \"0.0638924183955276=Vertical Shear\",\r\n \"EB3,\": \"0.128784039778549=Bending Moment\",\r\n \"P7,\": \"0.0670535724713948=Vertical Shear\",\r\n \"P6,\": \"0.121769646421521=Vertical Shear\",\r\n \"P10,\": \"0.144318392141663=Vertical Shear\",\r\n \"P9,\": \"0.144318392141663=Vertical Shear\",\r\n \"P3,\": \"0.0670535724713948=Vertical Shear\",\r\n \"P8,\": \"0.0670535724713948=Vertical Shear\",\r\n \"EB5,\": \"0.128784039778549=Bending Moment\",\r\n \"HR2,\": \"0.310528694471773=Bending Moment\",\r\n \"HR3,\": \"0.310528694471773=Bending Moment\",\r\n \"HR1,\": \"0.310528694471773=Bending Moment\",\r\n \"P4,\": \"0.0670535724713948=Vertical Shear\",\r\n \",\": \"0.310528694471773=Bending Moment\",\r\n \"EB6,\": \"0.263540678817847=Bending Moment\",\r\n \"P1,\": \"0.0638924183955276=Vertical Shear\",\r\n \"EB4,\": \"0.26306183557879=Bending Moment\",\r\n \"PR3,PR4,\": \"0.197661990451708=Collar Tie Tension\",\r\n \"EB2,\": \"0.263540678817847=Bending Moment\",\r\n \"EB1,\": \"0.26306183557879=Bending Moment\",\r\n \"HR4,\": \"0.310528694471773=Bending Moment\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C6: \"0.300=Deflection (15.0mm)\",\r\n C2: \"0.300=Deflection (15.0mm)\",\r\n C1: \"0.300=Deflection (15.0mm)\",\r\n C3: \"0.300=Deflection (15.0mm)\",\r\n C4: \"0.300=Deflection (15.0mm)\",\r\n C5: \"0.300=Deflection (15.0mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.310528694471773,\r\n PurlinMax: 0.144318392141663,\r\n NumColumns: 6,\r\n NumRafters: 2,\r\n HipRafterMax: 0.310528694471773,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 11,\r\n ColumnsMax: 0.299974922820763,\r\n RATRETSTR: \"-1,-1,-1,-1,-1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.300 - Deflection (15.0mm)\",\r\n RafterMax: 0.197661990451708,\r\n NumFasciaBeams: 0,\r\n EdgeBeamMax: 0.263540678817847,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.310528694471773,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C6: {\r\n ref: \"C6\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"100x100x3.0\",\r\n embedment: 500,\r\n height: 3150,\r\n total_compression_kn: 5.15339797190625,\r\n total_tension_kn: -4.95475965650777,\r\n max_strength: 0.0409385199889117,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.299974922820763,\r\n max_capacity_ratio: 0.299974922820763,\r\n max_capacity_ratio_limit_state: \"Deflection (15.0mm)\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"100x100x3.0\",\r\n embedment: 500,\r\n height: 3150,\r\n total_compression_kn: 6.63256123431213,\r\n total_tension_kn: -6.24177306081472,\r\n max_strength: 0.0532378802107662,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.299974922820763,\r\n max_capacity_ratio: 0.299974922820763,\r\n max_capacity_ratio_limit_state: \"Deflection (15.0mm)\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"100x100x3.0\",\r\n embedment: 500,\r\n height: 3150,\r\n total_compression_kn: 5.14815211834822,\r\n total_tension_kn: -4.94982288679503,\r\n max_strength: 0.0408953478495071,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.299974922820763,\r\n max_capacity_ratio: 0.299974922820763,\r\n max_capacity_ratio_limit_state: \"Deflection (15.0mm)\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"100x100x3.0\",\r\n embedment: 500,\r\n height: 3150,\r\n total_compression_kn: 5.15339797190625,\r\n total_tension_kn: -4.95475965650777,\r\n max_strength: 0.0409385199889117,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.299974922820763,\r\n max_capacity_ratio: 0.299974922820763,\r\n max_capacity_ratio_limit_state: \"Deflection (15.0mm)\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"100x100x3.0\",\r\n embedment: 500,\r\n height: 3150,\r\n total_compression_kn: 5.14815211834822,\r\n total_tension_kn: -4.94982288679503,\r\n max_strength: 0.0408953478495071,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.299974922820763,\r\n max_capacity_ratio: 0.299974922820763,\r\n max_capacity_ratio_limit_state: \"Deflection (15.0mm)\",\r\n },\r\n C5: {\r\n ref: \"C5\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"100x100x3.0\",\r\n embedment: 500,\r\n height: 3150,\r\n total_compression_kn: 6.63256123431213,\r\n total_tension_kn: -6.24177306081472,\r\n max_strength: 0.0532378802107662,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.299974922820763,\r\n max_capacity_ratio: 0.299974922820763,\r\n max_capacity_ratio_limit_state: \"Deflection (15.0mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n BeamPointLoadPeakCalcs: [\r\n {\r\n BeamName: \"PR1,PR2,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 6542,\r\n Column: \"N\",\r\n PointLoads: [\r\n {\r\n Name: \"P3\",\r\n Location: 1533,\r\n },\r\n {\r\n Name: \"P5\",\r\n Location: 1533,\r\n },\r\n {\r\n Name: \"P1\",\r\n Location: 3107,\r\n },\r\n {\r\n Name: \"HR1\",\r\n Location: 3251,\r\n },\r\n {\r\n Name: \"HR2\",\r\n Location: 3295,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 3439,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 5014,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 5014,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"PR3,PR4,\",\r\n BeamType: \"Welded Rafter\",\r\n Length: 6542,\r\n Column: \"O\",\r\n PointLoads: [\r\n {\r\n Name: \"P5\",\r\n Location: 1533,\r\n },\r\n {\r\n Name: \"P7\",\r\n Location: 1533,\r\n },\r\n {\r\n Name: \"P1\",\r\n Location: 3107,\r\n },\r\n {\r\n Name: \"HR3\",\r\n Location: 3251,\r\n },\r\n {\r\n Name: \"HR4\",\r\n Location: 3295,\r\n },\r\n {\r\n Name: \"P2\",\r\n Location: 3439,\r\n },\r\n {\r\n Name: \"P6\",\r\n Location: 5014,\r\n },\r\n {\r\n Name: \"P8\",\r\n Location: 5014,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"HR1,\",\r\n BeamType: \"Hip Rafter\",\r\n Length: 4275,\r\n Column: \"R\",\r\n PointLoads: [\r\n {\r\n Name: \"P9\",\r\n Location: 2019,\r\n },\r\n {\r\n Name: \"P3\",\r\n Location: 2025,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"HR2,\",\r\n BeamType: \"Hip Rafter\",\r\n Length: 4275,\r\n Column: \"S\",\r\n PointLoads: [\r\n {\r\n Name: \"P9\",\r\n Location: 2019,\r\n },\r\n {\r\n Name: \"P4\",\r\n Location: 2025,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"HR3,\",\r\n BeamType: \"Hip Rafter\",\r\n Length: 4275,\r\n Column: \"T\",\r\n PointLoads: [\r\n {\r\n Name: \"P10\",\r\n Location: 2019,\r\n },\r\n {\r\n Name: \"P7\",\r\n Location: 2025,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"HR4,\",\r\n BeamType: \"Hip Rafter\",\r\n Length: 4275,\r\n Column: \"U\",\r\n PointLoads: [\r\n {\r\n Name: \"P10\",\r\n Location: 2019,\r\n },\r\n {\r\n Name: \"P8\",\r\n Location: 2025,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"EB3,\",\r\n BeamType: \"Edge Beam\",\r\n Length: 5790,\r\n Column: \"X\",\r\n PointLoads: [\r\n {\r\n Name: \"HR4\",\r\n Location: 0,\r\n },\r\n {\r\n Name: \"HR3\",\r\n Location: 5800,\r\n },\r\n ],\r\n },\r\n {\r\n BeamName: \"EB5,\",\r\n BeamType: \"Edge Beam\",\r\n Length: 5790,\r\n Column: \"Z\",\r\n PointLoads: [\r\n {\r\n Name: \"HR1\",\r\n Location: 0,\r\n },\r\n {\r\n Name: \"HR2\",\r\n Location: 5800,\r\n },\r\n ],\r\n },\r\n ],\r\n ProcessedLoadData: {\r\n Beams: {\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2990,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"3000\",\r\n PARENT_LEN: \"3000\",\r\n },\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2990,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"3000\",\r\n PARENT_LEN: \"3000\",\r\n },\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3271,\r\n PointLoadData: {\r\n P3: {\r\n Name: \"P3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1533.08,\r\n Bracket: \"FLUB\",\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1533.08,\r\n Bracket: \"FLUB\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 3107.59,\r\n Bracket: \"FLUB\",\r\n },\r\n HR1: {\r\n Name: \"HR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3251.48,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n EB1: {\r\n Name: \"EB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"RRC\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3275.9,\r\n Bracket: \"APEX20Z\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2975\",\r\n PARENT_LEN: \"3276\",\r\n },\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3271,\r\n PointLoadData: {\r\n HR2: {\r\n Name: \"HR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 24.42,\r\n Bracket: \"HRU\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1742.82,\r\n Bracket: \"FLUB\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1742.82,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"APEX20Z\",\r\n },\r\n EB6: {\r\n Name: \"EB6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3275.9,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2975\",\r\n PARENT_LEN: \"3276\",\r\n },\r\n },\r\n CT1: {\r\n Name: \"CT1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL10011\",\r\n Length: 2545,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"2975\",\r\n PARENT_LEN: \"2555\",\r\n },\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3271,\r\n PointLoadData: {\r\n P5: {\r\n Name: \"P5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1533.08,\r\n Bracket: \"FLUB\",\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1533.08,\r\n Bracket: \"FLUB\",\r\n },\r\n P1: {\r\n Name: \"P1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3107.59,\r\n Bracket: \"FLUB\",\r\n },\r\n HR3: {\r\n Name: \"HR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3251.48,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n EB2: {\r\n Name: \"EB2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"RRC\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3275.9,\r\n Bracket: \"APEX20Z\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"6025\",\r\n PARENT_LEN: \"3276\",\r\n },\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 3271,\r\n PointLoadData: {\r\n HR4: {\r\n Name: \"HR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 24.42,\r\n Bracket: \"HRU\",\r\n },\r\n P2: {\r\n Name: \"P2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 168.31,\r\n Bracket: \"FLUB\",\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1742.82,\r\n Bracket: \"FLUB\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1742.82,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumPointLoads: 4,\r\n SupportData: {\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"APEX20Z\",\r\n },\r\n EB4: {\r\n Name: \"EB4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3275.9,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"Connect\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"6025\",\r\n PARENT_LEN: \"3276\",\r\n },\r\n },\r\n CT2: {\r\n Name: \"CT2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL10011\",\r\n Length: 2545,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {},\r\n NumSupports: 0,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"6025\",\r\n PARENT_LEN: \"2555\",\r\n },\r\n },\r\n HR1: {\r\n Name: \"HR1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 4275,\r\n PointLoadData: {\r\n P9: {\r\n Name: \"P9\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2019.64,\r\n Bracket: \"HRU\",\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2025.48,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB5: {\r\n Name: \"EB5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4284.77,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-45.14\",\r\n X: \"68\",\r\n PARENT_LEN: \"4285\",\r\n },\r\n },\r\n HR2: {\r\n Name: \"HR2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 4275,\r\n PointLoadData: {\r\n P9: {\r\n Name: \"P9\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2019.64,\r\n Bracket: \"HRU\",\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2025.48,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB5: {\r\n Name: \"EB5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4284.77,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"45.14\",\r\n X: \"68\",\r\n PARENT_LEN: \"4285\",\r\n },\r\n },\r\n HR3: {\r\n Name: \"HR3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 4275,\r\n PointLoadData: {\r\n P10: {\r\n Name: \"P10\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2019.64,\r\n Bracket: \"HRU\",\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2025.48,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4284.77,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"45.14\",\r\n X: \"8932\",\r\n PARENT_LEN: \"4285\",\r\n },\r\n },\r\n HR4: {\r\n Name: \"HR4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 4275,\r\n PointLoadData: {\r\n P10: {\r\n Name: \"P10\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2019.64,\r\n Bracket: \"HRU\",\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2025.48,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n EB3: {\r\n Name: \"EB3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4284.77,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-45.14\",\r\n X: \"8932\",\r\n PARENT_LEN: \"4285\",\r\n },\r\n },\r\n P3: {\r\n Name: \"P3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 1441,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n HR1: {\r\n Name: \"HR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"HRU\",\r\n },\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1451.37,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"-44.86\",\r\n FA_2: \"0.00\",\r\n X: \"1499\",\r\n PARENT_LEN: \"1451\",\r\n },\r\n },\r\n P4: {\r\n Name: \"P4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 1441,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n HR2: {\r\n Name: \"HR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1451.37,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-44.86\",\r\n X: \"2950\",\r\n PARENT_LEN: \"1451\",\r\n },\r\n },\r\n P5: {\r\n Name: \"P5\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2990,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"3000\",\r\n PARENT_LEN: \"3000\",\r\n },\r\n },\r\n P6: {\r\n Name: \"P6\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2990,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3000,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"6000\",\r\n PARENT_LEN: \"3000\",\r\n },\r\n },\r\n P7: {\r\n Name: \"P7\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 1441,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n HR3: {\r\n Name: \"HR3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1451.37,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-44.86\",\r\n X: \"6050\",\r\n PARENT_LEN: \"1451\",\r\n },\r\n },\r\n P8: {\r\n Name: \"P8\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 1441,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n HR4: {\r\n Name: \"HR4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"HRU\",\r\n },\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1451.37,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"-44.86\",\r\n FA_2: \"0.00\",\r\n X: \"7501\",\r\n PARENT_LEN: \"1451\",\r\n },\r\n },\r\n P9: {\r\n Name: \"P9\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2979,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n HR2: {\r\n Name: \"HR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"HRU\",\r\n },\r\n HR1: {\r\n Name: \"HR1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2988.85,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"-45.14\",\r\n FA_2: \"-45.14\",\r\n X: \"1440\",\r\n PARENT_LEN: \"2989\",\r\n },\r\n },\r\n P10: {\r\n Name: \"P10\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2979,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n HR3: {\r\n Name: \"HR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"HRU\",\r\n },\r\n HR4: {\r\n Name: \"HR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2988.85,\r\n Bracket: \"HRU\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"-45.14\",\r\n FA_2: \"-45.14\",\r\n X: \"7560\",\r\n PARENT_LEN: \"2989\",\r\n },\r\n },\r\n EB1: {\r\n Name: \"EB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 4340,\r\n PointLoadData: {\r\n PR1: {\r\n Name: \"PR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 2875,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4350,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"9000\",\r\n },\r\n },\r\n EB2: {\r\n Name: \"EB2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 4340,\r\n PointLoadData: {\r\n PR3: {\r\n Name: \"PR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 1475,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n C2: {\r\n Name: \"C2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4350,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"9000\",\r\n },\r\n },\r\n EB3: {\r\n Name: \"EB3\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 5790,\r\n PointLoadData: {\r\n HR4: {\r\n Name: \"HR4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n HR3: {\r\n Name: \"HR3\",\r\n End: 1,\r\n Side: 0,\r\n Location: 5800,\r\n Bracket: \"H\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n C4: {\r\n Name: \"C4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5800,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"8975\",\r\n PARENT_LEN: \"5900\",\r\n },\r\n },\r\n EB4: {\r\n Name: \"EB4\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 4340,\r\n PointLoadData: {\r\n PR4: {\r\n Name: \"PR4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2875,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n C4: {\r\n Name: \"C4\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4350,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"9000\",\r\n PARENT_LEN: \"9000\",\r\n },\r\n },\r\n EB5: {\r\n Name: \"EB5\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 5790,\r\n PointLoadData: {\r\n HR1: {\r\n Name: \"HR1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"H\",\r\n },\r\n HR2: {\r\n Name: \"HR2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 5800,\r\n Bracket: \"H\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5800,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"5900\",\r\n },\r\n },\r\n EB6: {\r\n Name: \"EB6\",\r\n AreaIndex: 0,\r\n BeamType: \"FL20020\",\r\n Length: 4340,\r\n PointLoadData: {\r\n PR2: {\r\n Name: \"PR2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 1475,\r\n Bracket: \"RRC\",\r\n },\r\n },\r\n NumPointLoads: 1,\r\n SupportData: {\r\n C5: {\r\n Name: \"C5\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n End: 2,\r\n Side: 0,\r\n Location: 4350,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Beam\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"9000\",\r\n PARENT_LEN: \"9000\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 100mm x 3mm\",\r\n Height: 3150,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 100mm x 3mm\",\r\n Height: 3150,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 100mm x 3mm\",\r\n Height: 3150,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 100mm x 3mm\",\r\n Height: 3150,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C5: {\r\n Name: \"C5\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 100mm x 3mm\",\r\n Height: 3150,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n C6: {\r\n Name: \"C6\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 100mm x 3mm\",\r\n Height: 3150,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"1\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n COFL00162: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.439874434062836,\r\n BeamResults: {\r\n \",\": \"0.439874434062836=Deflection-W UP (-30.9mm)\",\r\n \"FB1b,\": \"0.439874434062836=Deflection-W UP (-30.9mm)\",\r\n \"FB1c,\": \"0.0534533867635363=Vertical Shear\",\r\n \"FB1,\": \"0.439874434062836=Deflection-W UP (-30.9mm)\",\r\n \"FB1a,\": \"0.0534533867635363=Vertical Shear\",\r\n \"R2,\": \"0.0370293417553398=Vertical Shear\",\r\n \"R1,\": \"0.0370293417553398=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C1: \"0.172=Deflection (8.6mm)\",\r\n C2: \"0.172=Deflection (8.6mm)\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.439874434062836,\r\n FasciaMax: 0.439874434062836,\r\n NumRafters: 2,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.171908440284653,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.172 - Deflection (8.6mm)\",\r\n RafterMax: 0.0370293417553398,\r\n NumFasciaBeams: 4,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.439874434062836,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"75x75x2.0\",\r\n embedment: 500,\r\n height: 2250,\r\n total_compression_kn: 2.86618671749163,\r\n total_tension_kn: -2.52791338582644,\r\n max_strength: 0.0648455885296742,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.171908440284653,\r\n max_capacity_ratio: 0.171908440284653,\r\n max_capacity_ratio_limit_state: \"Deflection (8.6mm)\",\r\n },\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"75x75x2.0\",\r\n embedment: 500,\r\n height: 2250,\r\n total_compression_kn: 2.86618671749163,\r\n total_tension_kn: -2.52791338582644,\r\n max_strength: 0.0648455885296742,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.171908440284653,\r\n max_capacity_ratio: 0.171908440284653,\r\n max_capacity_ratio_limit_state: \"Deflection (8.6mm)\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n BeamPointLoadPeakCalcs: [],\r\n ProcessedLoadData: {\r\n Beams: {\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 6000,\r\n PointLoadData: {\r\n R1: {\r\n Name: \"R1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 25,\r\n Bracket: \"\",\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 5975,\r\n Bracket: \"\",\r\n },\r\n },\r\n NumPointLoads: 2,\r\n SupportData: {\r\n C1: {\r\n Name: \"C1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 187.5,\r\n Bracket: \"HCC\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5812.5,\r\n Bracket: \"HCC\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"End Cap\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"6000\",\r\n },\r\n },\r\n R1: {\r\n Name: \"R1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2936,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n F1: {\r\n Name: \"F1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2957.04,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Fascia\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"25\",\r\n PARENT_LEN: \"3002\",\r\n },\r\n },\r\n R2: {\r\n Name: \"R2\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 2936,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n FB1: {\r\n Name: \"FB1\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"\",\r\n },\r\n F1: {\r\n Name: \"F1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2957.04,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 2,\r\n ExtraData: {\r\n END_STATE_1: \"To Beam\",\r\n END_STATE_2: \"To Fascia\",\r\n FA_1: \"0.00\",\r\n FA_2: \"-0.00\",\r\n X: \"5975\",\r\n PARENT_LEN: \"3002\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 75mm x 2mm\",\r\n Height: 2250,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 75mm x 2mm\",\r\n Height: 2250,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n COFL00008: {\r\n AttachmentBracketResults: {},\r\n BeamResults: {\r\n \"FB2b,\": \"0.35452381620764=Bending Moment\",\r\n \"FB1b,\": \"0.0227070731579725=Vertical Shear\",\r\n \"FB2a,\": \"0.378223243700814=Bending Moment\",\r\n \"SF1c,\": \"0.00908633021762683=Deflection (0.1mm)\",\r\n \"FB4d,\": \"0.343000514151386=Vertical Shear\",\r\n \"FB4b,FB4c,\": \"0.428281088700059=Bending Moment\",\r\n \"JB3,\": \"0.427822585736515=Bending Moment\",\r\n \"FB5b,\": \"0.204697736765852=Bending Moment\",\r\n \"R1,\": \"0.00918926766461662=Vertical Shear\",\r\n \"FB5c,\": \"0.193658980373008=Bending Moment\",\r\n \"FB5d,\": \"0.47453690703832=Deflection-W UP (-1.1mm)\",\r\n \"FB2c,\": \"0.443397785773498=Vertical Shear\",\r\n \"SF1,\": \"0.0477129610675682=Vertical Shear\",\r\n \"FB4a,\": \"0.00970529069134735=Vertical Shear\",\r\n \",\": \"0.625940483796912=Deflection-W UP (-50.1mm)\",\r\n \"FB3c,\": \"0.0299762102793294=Vertical Shear\",\r\n \"SF1b,\": \"0.0477129610675682=Vertical Shear\",\r\n \"FB3d,\": \"0.0405676959839953=Deflection (0.3mm)\",\r\n \"FB5a,\": \"0.318250216249308=Vertical Shear\",\r\n \"FB1,\": \"0.0227070731579725=Vertical Shear\",\r\n \"R1a,\": \"0.00224377118914649=Vertical Shear\",\r\n \"R1b,\": \"0.00918926766461662=Vertical Shear\",\r\n \"JB1,\": \"0.427822585736515=Bending Moment\",\r\n \"FB3a,\": \"0.625940483796912=Deflection-W UP (-50.1mm)\",\r\n \"FB4,\": \"0.428281088700059=Bending Moment\",\r\n \"FB5,\": \"0.47453690703832=Deflection-W UP (-1.1mm)\",\r\n \"FB3b,\": \"0.403488223518253=Bending Moment\",\r\n \"FB2,\": \"0.443397785773498=Vertical Shear\",\r\n \"FB1c,\": \"0.01026092851757=Deflection (0.1mm)\",\r\n \"FB3,\": \"0.625940483796912=Deflection-W UP (-50.1mm)\",\r\n \"JB2,\": \"0.425855470077597=Bending Moment\",\r\n \"FB1a,\": \"0.0114534461304217=Vertical Shear\",\r\n \"SF1a,\": \"0.00276746867318831=Vertical Shear\",\r\n },\r\n ColumnResults: {\r\n C11: \"0.727=Deflection (36.4mm)\",\r\n C6: \"0.272=Deflection (13.6mm)\",\r\n C2: \"0.498=Deflection (24.9mm)\",\r\n C1: \"0.498=Deflection (24.9mm)\",\r\n C3: \"0.516=Deflection (25.8mm)\",\r\n C9: \"0.803=Deflection (40.2mm)\",\r\n C12: \"0.498=Deflection (24.9mm)\",\r\n C4: \"0.272=Deflection (13.6mm)\",\r\n C8: \"0.727=Deflection (36.4mm)\",\r\n C7: \"0.822=Deflection (41.1mm)\",\r\n C5: \"0.272=Deflection (13.6mm)\",\r\n C10: \"0.822=Deflection (41.1mm)\",\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"Limiting Member = C7 CR=0.822 - Deflection (41.1mm)\",\r\n MaxResultOverAll: 0.822041595391665,\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.516124624569416,\r\n FasciaMax: 0.428281088700059,\r\n NumRafters: 7,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C3 CR=0.516 - Deflection (25.8mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.516124624569416,\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n ColumnsMaxText: \"Limiting Member = C3 CR=0.516 - Deflection (25.8mm)\",\r\n RafterMax: 0.0477129610675682,\r\n NumFasciaBeams: 4,\r\n JoinBeamMax: 0.427822585736515,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 1: {\r\n MaxResult: 0.47453690703832,\r\n FasciaMax: 0.47453690703832,\r\n NumRafters: 0,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.272289044503093,\r\n ColumnsMaxText: \"Limiting Member = C4 CR=0.272 - Deflection (13.6mm)\",\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n NumFasciaBeams: 5,\r\n JoinBeamMax: 0.425855470077597,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 2: {\r\n MaxResult: 0.822041595391665,\r\n FasciaMax: 0.443397785773498,\r\n NumRafters: 0,\r\n NumColumns: 2,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C7 CR=0.822 - Deflection (41.1mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.822041595391665,\r\n ColumnsMaxText: \"Limiting Member = C7 CR=0.822 - Deflection (41.1mm)\",\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n NumFasciaBeams: 4,\r\n JoinBeamMax: 0.427822585736515,\r\n AttachmentBracketsMax: -1,\r\n },\r\n 3: {\r\n MaxResult: 0.80302801105415,\r\n FasciaMax: 0.625940483796912,\r\n NumRafters: 0,\r\n NumColumns: 3,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"Limiting Member = C9 CR=0.803 - Deflection (40.2mm)\",\r\n NumPurlins: 0,\r\n ColumnsMax: 0.80302801105415,\r\n ColumnsMaxText: \"Limiting Member = C9 CR=0.803 - Deflection (40.2mm)\",\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 1\",\r\n NumFasciaBeams: 9,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.625940483796912,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n },\r\n COFL00154: {\r\n AttachmentBracketResults: {},\r\n MaxResultOverAll: 0.430452047222158,\r\n BeamResults: {\r\n \"P1a,P1b,\": \"0.430452047222158=Vertical Shear\",\r\n \"P1,\": \"0.430452047222158=Vertical Shear\",\r\n \"FB1,\": \"0.309972538061462=Vertical Shear\",\r\n \"FB1a,FB1b,\": \"0.309972538061462=Vertical Shear\",\r\n \",\": \"0.430452047222158=Vertical Shear\",\r\n },\r\n BeamResultsDetailed: {},\r\n ColumnResults: {\r\n C2: \"0.065=Strength\",\r\n C1: \"0.092=Strength\",\r\n C4: \"0.045=Strength\",\r\n C3: \"0.032=Strength\",\r\n },\r\n AttachmentBracketResultsDetailed: {},\r\n Errors: {\r\n max_beam_column_exceeded: false,\r\n max_col_column_exceeded: false,\r\n },\r\n BeamAttachmentBracketResults: {},\r\n maxResultOverAllText: \"\",\r\n AreaMaxResults: {\r\n 0: {\r\n MaxResult: 0.430452047222158,\r\n PurlinMax: 0.430452047222158,\r\n FasciaMax: 0.309972538061462,\r\n NumRafters: 0,\r\n NumColumns: 4,\r\n AttachmentBracketsMaxText: \"\",\r\n MaxResultText: \"\",\r\n NumPurlins: 2,\r\n ColumnsMax: 0.0918167748573923,\r\n ColumnsMaxText: \"Limiting Member = C1 CR=0.092 - Strength\",\r\n RATRETSTR: \"-1.0000000,-1.0000000,-1.0000000,-1.0000000,-1.0000000,Type 4\",\r\n NumFasciaBeams: 2,\r\n JoinBeamMax: 0,\r\n OtherMax: 0.430452047222158,\r\n AttachmentBracketsMax: -1,\r\n },\r\n },\r\n ColumnResultsDetailed: {\r\n C2: {\r\n ref: \"C2\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2161,\r\n total_compression_kn: 3.81437037124517,\r\n total_tension_kn: -6.38543428406612,\r\n max_strength: 0.0650500108995632,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0144721318989594,\r\n max_capacity_ratio: 0.0650500108995632,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n C1: {\r\n ref: \"C1\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2293,\r\n total_compression_kn: 5.29693225546472,\r\n total_tension_kn: -8.86731217277646,\r\n max_strength: 0.0918167748573923,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.018345504672899,\r\n max_capacity_ratio: 0.0918167748573923,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n C4: {\r\n ref: \"C4\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2293,\r\n total_compression_kn: 2.64846612773236,\r\n total_tension_kn: -4.43365608638823,\r\n max_strength: 0.0447563923112156,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.018345504672899,\r\n max_capacity_ratio: 0.0447563923112156,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n C3: {\r\n ref: \"C3\",\r\n area: 0,\r\n type: \"Column\",\r\n member_size: \"90x90x2.0\",\r\n embedment: 500,\r\n height: 2161,\r\n total_compression_kn: 1.90718518562258,\r\n total_tension_kn: -3.19271714203306,\r\n max_strength: 0.0319711670014292,\r\n max_deflection_mm: 50,\r\n max_deflection: 0.0144721318989594,\r\n max_capacity_ratio: 0.0319711670014292,\r\n max_capacity_ratio_limit_state: \"Strength\",\r\n },\r\n },\r\n \"BeamResults.TestValueChecksum\": 0,\r\n BeamPointLoadPeakCalcs: [],\r\n ProcessedLoadData: {\r\n Beams: {\r\n P1: {\r\n Name: \"P1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 5845,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n F2: {\r\n Name: \"F2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C1: {\r\n Name: \"C1\",\r\n End: 2,\r\n Side: 0,\r\n Location: 2925,\r\n Bracket: \"FLUB\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n End: 2,\r\n Side: 0,\r\n Location: 5805,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Fascia\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5850\",\r\n },\r\n },\r\n FB1: {\r\n Name: \"FB1\",\r\n AreaIndex: 0,\r\n BeamType: \"FL15015\",\r\n Length: 6445,\r\n PointLoadData: {},\r\n NumPointLoads: 0,\r\n SupportData: {\r\n W2: {\r\n Name: \"W2\",\r\n End: 1,\r\n Side: 0,\r\n Location: 0,\r\n Bracket: \"FLUB\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n End: 2,\r\n Side: 0,\r\n Location: 3225,\r\n Bracket: \"FLUB\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n End: 2,\r\n Side: 0,\r\n Location: 6405,\r\n Bracket: \"FLUB\",\r\n },\r\n },\r\n NumSupports: 3,\r\n ExtraData: {\r\n END_STATE_1: \"To Wall\",\r\n END_STATE_2: \"End Cap\",\r\n FA_1: \"0.00\",\r\n FA_2: \"0.00\",\r\n X: \"00\",\r\n PARENT_LEN: \"5850\",\r\n },\r\n },\r\n },\r\n Cols: {\r\n C1: {\r\n Name: \"C1\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2293,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C2: {\r\n Name: \"C2\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2161,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C3: {\r\n Name: \"C3\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2161,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n C4: {\r\n Name: \"C4\",\r\n AreaIndex: 0,\r\n ColumnType: \"SHS 90mm x 2mm\",\r\n Height: 2293,\r\n TopBracket: \"\",\r\n GroundConnection: \"Concrete In\",\r\n Embedment: 500,\r\n ExternalConnector: \"0\",\r\n BaseConnector: \"\",\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport const FIELDERS_BOM_JOBS = {\r\n FIRC00048: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Surfmist/Surfmist\",\r\n Area: \"1\",\r\n Qty: \"79 x 1392\",\r\n Length: \"1392\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 24197\",\r\n Length: \"24197\",\r\n CodeBase: \"FG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO656Z\",\r\n Desc: \"65X65 Pop Square Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO656Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPP6565ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DP656\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DP656\",\r\n Desc: \"65X65 Downpipe ** 1800mm\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 1800\",\r\n Length: \"1800\",\r\n CodeBase: \"DP656\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DP6565**18\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\"},{\"Code\":\"ST656\",\"Qty\":\"=(Length/1200)\"}]}',\r\n PromptCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL22\",\r\n Desc: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 1332 (Cent 310 Deck Barge Capping)\",\r\n Length: \"1332\",\r\n CodeBase: \"CFL22\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL22**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL47\",\r\n Desc: \"Cen CFL47 Barge Cap C-Deck Freespan **H**\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 24197 (Carport 108 Barge Capping)\",\r\n Length: \"24197\",\r\n CodeBase: \"CFL47\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(290mm width cut (CFL47))\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL47**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB108\",\r\n Desc: \"Cen Box Beam 108x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 6497 (Back Fascia Beam)|2 x 5601 (Back Fascia Beam)|1 x 6685 (Fascia Beam)|1 x 6478 (Fascia Beam)|1 x 5499 (Fascia Beam)|1 x 5429 (Fascia Beam)|1 x 1185 (Left Rafter)|1 x 1185 (Right Rafter)\",\r\n Length: \"6497\",\r\n CodeBase: \"BB108\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9510865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"BB65\",\r\n Desc: \"Cen Box Beam 65x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"3 x 2979 (Post on Slab (Beam to Side))|3 x 2871 (Post on Slab (Under Beam))\",\r\n Length: \"2979\",\r\n CodeBase: \"BB65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"AltIndex=BB656575\",\r\n Image_b64: null,\r\n PromptTextCodes: \"AltIndex=BB656575\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"6 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Back Fascia Beam) \",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Back Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK16RHS6565G\",\r\n Desc: \"Cen BK16 Galv Internal Slab Conn to suit 65x65 SHS \",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"6 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK16RHS6565G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK16PS65GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"4\",\"Colour\":\"Area.PostColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK210865\",\r\n Desc: \"Cen BK2 10865 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Fascia Beam Fixed to 65mm Post)|1 (For Left Rafter Fixed to 65mm Post)|1 (For Right Rafter Fixed to 65mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK210865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB108**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK25G\",\r\n Desc: \"Cen BK25D RSBFD Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"27\",\r\n Length: \"\",\r\n CodeBase: \"BK25G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"; Step out 125mm\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK25DGA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BNW1090\",\"Qty\":\"2\"},{\"Code\":\"BNW1060Z\",\"Qty\":\"2\"},{\"Code\":\"BK2164G\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON510865G\",\r\n Desc: \"Cen CON5 10865 300 Beam Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"3 (For Back Fascia Beam)|3 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"CON510865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON5108GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"16\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n ZAPC00248: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CO42DSS\",\r\n Desc: \"Corr S-Rib 0.42BMT DS **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark/Paperbark\",\r\n Area: \"1\",\r\n Qty: \"16 x 1583\",\r\n Length: \"1583\",\r\n CodeBase: \"CO42DSS\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CO42**H**CS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*4)+7)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"},\"Qty\":\"=Qty*6\",\"Colour\":\"Area.RoofSheetColour\"}]}',\r\n PromptCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Image_b64: null,\r\n PromptTextCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"FCTZ\",\r\n Desc: \"FCTZ Gutter Capping (Zinc only)\",\r\n Use: \"\",\r\n Colour: \"Zinc\",\r\n Area: \"1\",\r\n Qty: \"3 x 2400 (Gutter Capping/finish @6000mm)\",\r\n Length: \"2400\",\r\n CodeBase: \"FCTZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(FCTZ)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FCTL5SZL2400\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"Length=2400 AltIndex=FCTZ_INTERNAL\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=2400 AltIndex=FCTZ_INTERNAL\",\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 x 6000\",\r\n Length: \"6000\",\r\n CodeBase: \"FG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1|1 (Gutter Capping)\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1|1 (Gutter Capping)\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"2 x 2220\",\r\n Length: \"2220\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2220mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL01\",\r\n Desc: \"Cen CFL01 Barge Cap **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark/Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 x 1592 (Corrugated - C/Bond D/S 0.42 (No Foot Traffic) Barge Capping)\",\r\n Length: \"1592\",\r\n CodeBase: \"CFL01\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL01**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL06\",\r\n Desc: \"Cen CFL06 Gable Infil Flash **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 x 3445 (Infill Trim Flashing)\",\r\n Length: \"3445\",\r\n CodeBase: \"CFL06\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL06**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL51\",\r\n Desc: \"Cen CFL51 Ridge Cap **H** @@\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 6300\",\r\n Length: \"6300\",\r\n CodeBase: \"CFL51\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL51**H**@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"=(Length/380) + 2\"}\\n]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB108\",\r\n Desc: \"Cen Box Beam 108x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"3 x 1555 (Portal Rafter (No Post))|3 x 1516 (Portal Rafter (Standard))\",\r\n Length: \"1555\",\r\n CodeBase: \"BB108\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"2\",\r\n Fielders_Code: \"CBB9510865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"-20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20108=Rafter no post 20 Deg 108 Section\",\r\n HolePunchingRecommend: \"RNP20108=Rafter no post 20 Deg 108 Section\",\r\n Section: \"1086510\",\r\n CutLength: \"1555\",\r\n FinishLength: \"1495\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`3`1555`1495`0.0`20.0`-20.0`0.0`0.0`PUNCH_STYLE=RNP20108=Rafter no post 20 Deg 108 Section`234`1321`0`0`Paperbark` 2`1086510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20108=Portal Rafter 20 Deg 108 section\",\r\n HolePunchingRecommend: \"P20108=Portal Rafter 20 Deg 108 section\",\r\n Section: \"1086510\",\r\n CutLength: \"1516\",\r\n FinishLength: \"1456\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`3`1516`1456`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20108=Portal Rafter 20 Deg 108 section`278`1003`234`114`Paperbark` 1`1086510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"-20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20108=Rafter no post 20 Deg 108 Section\",\r\n HolePunchingRecommend: \"RNP20108=Rafter no post 20 Deg 108 Section\",\r\n Section: \"1086510\",\r\n CutLength: \"1555\",\r\n FinishLength: \"1495\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`3`1555`1495`0.0`20.0`-20.0`0.0`0.0`PUNCH_STYLE=RNP20108=Rafter no post 20 Deg 108 Section`234`1321`0`0`Paperbark` 2`1086510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20108=Portal Rafter 20 Deg 108 section\",\r\n HolePunchingRecommend: \"P20108=Portal Rafter 20 Deg 108 section\",\r\n Section: \"1086510\",\r\n CutLength: \"1516\",\r\n FinishLength: \"1456\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`3`1516`1456`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20108=Portal Rafter 20 Deg 108 section`278`1003`234`114`Paperbark` 1`1086510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 6000 (Attachment Beam (Back))|1 x 6000 (Perimeter Beam (Front))\",\r\n Length: \"6000\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB65\",\r\n Desc: \"Cen Box Beam 65x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 x 2865 (Gable Infill Beam)|2 x 1000 (Portal Strut)|2 x 6000 (Purlin T1)\",\r\n Length: \"2865\",\r\n CodeBase: \"BB65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"3\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"656510\",\r\n CutLength: \"2865\",\r\n FinishLength: \"2835\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB65`Cen Box Beam 65x65x0.95BMT **`Gable Infill Beam`Paperbark - PB``1`2`2865`2835`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Paperbark` 3`656510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"0.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN=NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN=NO PUNCHING\",\r\n Section: \"656510\",\r\n CutLength: \"1000\",\r\n FinishLength: \"746\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB65`Cen Box Beam 65x65x0.95BMT **`Portal Strut`Paperbark - PB``1`2`1000`746`0.0`0.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN=NO PUNCHING`0`0`0`0`Paperbark` 4`656510`0`0\",\r\n },\r\n 2: null,\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"AltIndex=BB656575\",\r\n Image_b64: null,\r\n PromptTextCodes: \"AltIndex=BB656575\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"656510\",\r\n CutLength: \"2865\",\r\n FinishLength: \"2835\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB65`Cen Box Beam 65x65x0.95BMT **`Gable Infill Beam`Paperbark - PB``1`2`2865`2835`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Paperbark` 3`656510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"0.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN=NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN=NO PUNCHING\",\r\n Section: \"656510\",\r\n CutLength: \"1000\",\r\n FinishLength: \"746\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB65`Cen Box Beam 65x65x0.95BMT **`Portal Strut`Paperbark - PB``1`2`1000`746`0.0`0.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN=NO PUNCHING`0`0`0`0`Paperbark` 4`656510`0`0\",\r\n },\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"BB108\",\r\n Desc: \"Cen Box Beam 108x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"3 x 3054 (Post in Ground (Standard) (Under Beam))\",\r\n Length: \"3054\",\r\n CodeBase: \"BB108\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"5\",\r\n Fielders_Code: \"CBB9510865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST108=Post 108 section\",\r\n HolePunchingRecommend: \"POST108=Post 108 section\",\r\n Section: \"1086510\",\r\n CutLength: \"3054\",\r\n FinishLength: \"3024\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Paperbark - PB``1`3`3054`3024`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST108=Post 108 section`158`278`2776`0`Paperbark` 5`1086510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST108=Post 108 section\",\r\n HolePunchingRecommend: \"POST108=Post 108 section\",\r\n Section: \"1086510\",\r\n CutLength: \"3054\",\r\n FinishLength: \"3024\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Paperbark - PB``1`3`3054`3024`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST108=Post 108 section`158`278`2776`0`Paperbark` 5`1086510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS108\",\r\n Desc: \"Cen 108X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS108\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS210865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Strut)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK310865-S\",\r\n Desc: \"Cen BK3 10865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"3 (For Portal Rafter (No Post))\",\r\n Length: \"\",\r\n CodeBase: \"BK310865\",\r\n CodeAppend: \"-S.20DEG UP\",\r\n DescAppend: \"20 Degrees Up\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"CNBK3CB108@@**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-20.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-20.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK336565\",\r\n Desc: \"Cen BK33 6565 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 (For Gable Infill Beam)\",\r\n Length: \"\",\r\n CodeBase: \"BK336565\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK33C65@@**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK36\",\r\n Desc: \"Cen BK36 Top Gable End Strut **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Strut)\",\r\n Length: \"\",\r\n CodeBase: \"BK36\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK36CT**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK38\",\r\n Desc: \"Cen BK38 Rafter Bracket Sleeve **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n CodeBase: \"BK38\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK38**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Use\":\"BK38 Fix\",\"Qty\":\"2\"},{\"Code\":\"10X90\",\"Qty\":\"2\",\"Colour\":\"Area.BeamColour\",\"Use\":\"BK38 Fix\"},{\"Code\":\"TS1232B8100\",\"Qty\":\"3\",\"Colour\":\"Area.BeamColour\",\"Use\":\"BK38 Fix\"},{\"Code\":\"BK34RB15G\",\"Conditions\":{\"Use\":\"=*15 Degrees*\"}},{\"Code\":\"BK34RB175G\",\"Conditions\":{\"Use\":\"=*17.5 Degrees*\"}},{\"Code\":\"BK34RB20G\",\"Conditions\":{\"Use\":\"=*20 Degrees*\"}},{\"Code\":\"BK34RB225G\",\"Conditions\":{\"Use\":\"=*22.5 Degrees*\"}},{\"Code\":\"BK34RB25G\",\"Conditions\":{\"Use\":\"=*25 Degrees*\"}},{\"Code\":\"BK34RB275G\",\"Conditions\":{\"Use\":\"=*27.5 Degrees*\"}},{\"Code\":\"BK34RB30G\",\"Conditions\":{\"Use\":\"=*30 Degrees*\"}}]}',\r\n PromptCodes: \"$$=38.62\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=38.62\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK88158\",\r\n Desc: \"Cen BK88 158 Box Beam Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (End Cap for Attachment Beam (Back))|2 (End Cap for Perimeter Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"BK88158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK88158SE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Use\":\"Beam End Cap Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON110865G\",\r\n Desc: \"Cen CON1 10865 Galv Inground Connector\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON110865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON1108GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"10X120\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON210865G\",\r\n Desc: \"Cen CON2 10865-@@ Ridge Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"3 (For Portal Rafter (No Post))\",\r\n Length: \"\",\r\n CodeBase: \"CON210865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON2108GA@@\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Use\":\"Con2 Fix\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Use\":\"Con2 Fix\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"4\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON310865G\",\r\n Desc: \"Cen CON3 10865-@@ Eaves Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"3 (For Portal Rafter (Standard))\",\r\n Length: \"\",\r\n CodeBase: \"CON310865G\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON3108GA@@\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"10X90\",\r\n Desc: \"Cen Bolt Nut G4.6 10X90 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"3 (Attachment Beam (Back) Fix)|3 (Perimeter Beam (Front) Fix)\",\r\n Length: \"\",\r\n CodeBase: \"10X90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BN1090**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"TS1495100B8P\",\r\n Desc: \"BF 14-10X95 H/H Tek No Neo B8 Plain (Pkt 100)\",\r\n Use: \"\",\r\n Colour: \"Plain\",\r\n Area: \"1\",\r\n Qty: \"12 (Purlin T1 Fix)\",\r\n Length: \"\",\r\n CodeBase: \"TS1495100B8P\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHBF1495N100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"14x90 Hex Screw(s)\" AltIndex=TS1495,TS1495P',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"14x90 Hex Screw(s)\" AltIndex=TS1495,TS1495P',\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"COCOVER\",\r\n Desc: \"Corrugated Cover Sheet Only (Metal)\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"\",\r\n Qty: \"2 x 1583 (Sheet Cover Sheet)\",\r\n Length: \"1583\",\r\n CodeBase: \"COCOVER\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PACCSSLM\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"$$=1\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=1\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"FCD2412\",\r\n Desc: \"2400 X 1200 6.00mm Fibre Cement Sheet Plain\",\r\n Use: \"\",\r\n Colour: \"Plain\",\r\n Area: \"1\",\r\n Qty: \"2 (Infill-Plain Smooth)\",\r\n Length: \"\",\r\n CodeBase: \"FCD2412\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNFCSH\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TSW1022\",\"Qty\":\"30\",\"Use\":\"Infill Fix\"},{\"Code\":\"STK05\",\"Qty\":\"1\",\"Use\":\"Infill Fix\"},{\"Code\":\"BK30G\",\"Qty\":\"3\",\"Use\":\"Infill Support\",\"Conditions\":{\"Use\":\"=*Infill*\"},\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n FTLC00440: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CO42DSS\",\r\n Desc: \"Corr S-Rib 0.42BMT DS **H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey/Paperbark\",\r\n Area: \"1\",\r\n Qty: \"14 x 2525\",\r\n Length: \"2525\",\r\n CodeBase: \"CO42DSS\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CO42**H**CS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*4)+7)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"},\"Qty\":\"=Qty*6\",\"Colour\":\"Area.RoofSheetColour\"}]}',\r\n PromptCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Image_b64: null,\r\n PromptTextCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey/Paperbark\",\r\n Area: \"2\",\r\n Qty: \"19 x 2051 (B/C Fixed)\",\r\n Length: \"2051\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POLYCARBONATE ROOFING\",\r\n Code: \"PSCSC\",\r\n Desc: \"Ampelite Solasafe Corrugated Polycarbonate Sheet **\",\r\n Use: \"\",\r\n Colour: \"Smooth Cream\",\r\n Area: \"1\",\r\n Qty: \"4 x 2700 (/finish @2525mm)\",\r\n Length: \"2700\",\r\n CodeBase: \"PSCSC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PCCO**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"CLEARFIX\",\"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Fielders\"}},{\"Code\":\"BK30G\",\"Qty\":\"3\",\"Use\":\"Infill Support\",\"Conditions\":{\"Use\":\"=*Infill*\",\"Brand\":\"=Fielders\"}},{\"Code\":\"CPCB36\",\"Conditions\":{\"Brand\":\"=Fielders\"},\"Qty\":\"=(((Length/900)+1)*1000)/25000\"},{\"Code\":\"FT50MP\",\"Qty\":\"=((Area.NumInternalPurlins*4)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=((Area.NumInternalPurlins*2)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"WG\",\"Qty\":\"=((Area.NumInternalPurlins*6)+4)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FR64\",\"Qty\":\"=Qty*6\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"WASHM\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Area.DesignType\":\"=Flat Roof\"},\"Qty\":\"=Qty*6\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*9)+2)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT50MP\",\"Qty\":\"=((Area.NumInternalPurlins*4)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=((Area.NumInternalPurlins*2)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"WGFG\",\"Qty\":\"=((Area.NumInternalPurlins*2)+8)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT30M\",\"Qty\":\"=6*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*9)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=12*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"COFILL\",\"Length\":\"915\",\"Conditions\":{\"Brand\":\"=Lysaght\"}}]}',\r\n PromptCodes:\r\n \"SL=1800(201300)|2100(201300)|2400(201300)|2700(201300)|3000(201300)|3600(201300)|4200(201300)|4800(201300)|5400(201300)|6000(201300)\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=1800(201300)|2100(201300)|2400(201300)|2700(201300)|3000(201300)|3600(201300)|4200(201300)|4800(201300)|5400(201300)|6000(201300)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POLYCARBONATE ROOFING\",\r\n Code: \"PSCD\",\r\n Desc: \"C-Dek 310 Polycarbonate (1.50mm Thick) Sheet\",\r\n Use: \"\",\r\n Colour: \"Opal\",\r\n Area: \"2\",\r\n Qty: \"2 x 2500 (B/C Fixed/finish @2051mm)\",\r\n Length: \"2500\",\r\n CodeBase: \"PSCD\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PCSCDK310OP\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"CLEARFIX\",\"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\",\"Colour\":\"Plain\"},{\"Code\":\"BK30G\",\"Qty\":\"3\",\"Use\":\"Infill Support\",\"Conditions\":{\"Use\":\"=*Infill*\"}}]}',\r\n PromptCodes:\r\n \"SL=1000(206000)|1500(206000)|2000(206000)|2500(206000)|3000(206000)|3500(206000)|4000(206000)|4500(206000)|5000(206000)|5500(206000)|6000(206000)|6500(206000)|7000(206000)|7500(206000)|8000(206000)\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=1000(206000)|1500(206000)|2000(206000)|2500(206000)|3000(206000)|3500(206000)|4000(206000)|4500(206000)|5000(206000)|5500(206000)|6000(206000)|6500(206000)|7000(206000)|7500(206000)|8000(206000)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (Box Gutter) \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 (Box Gutter)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FL\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"D115\",\r\n Desc: \"115 D/Quad Gutter **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 1990\",\r\n Length: \"1990\",\r\n CodeBase: \"D115\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DQG42115**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"SCTF\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"DGUB\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"D115LSE\",\r\n Desc: \"115 D/Quad Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"D115LSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DQG115SEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"D115\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"D115RSE\",\r\n Desc: \"115 D/Quad Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"D115RSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DQG115SER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"D115\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"FL354\",\r\n Desc: \"Single sided Flashing 350 X 0.55 ** 4 Bend\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 5800 (A1-Box Gutter)|1 x 4510 (A1-Box Gutter)\",\r\n Length: \"5800\",\r\n CodeBase: \"FL354\",\r\n CodeAppend: \"\",\r\n DescAppend: \"200mm\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CF55**3504\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1016100B8\",\\n \"Qty\":\"=(2*(Length/1000))+2\", \\n \"Use\":\"Box Gutter Fix\", \\n \"Conditions\":{\"Use\":\"=Box Gutter\"}}\\n]}',\r\n PromptCodes: \"DISABLED=GIL|MEN|MAR|GAW|NOA|MIN|LSB|EMU\",\r\n Image_b64: null,\r\n PromptTextCodes: \"DISABLED=GIL|MEN|MAR|GAW|NOA|MIN|LSB|EMU\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: \",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"2\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"2\",\r\n Qty: \"1 x 6460|1 x 2251\",\r\n Length: \"6460\",\r\n CodeBase: \"FG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"2\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"2\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"1 x 2300\",\r\n Length: \"2300\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2300mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"2\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"2\",\r\n Qty: \"1 x 2035\",\r\n Length: \"2035\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2035mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL01\",\r\n Desc: \"Cen CFL01 Barge Cap **H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey/Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 x 2557 (Corrugated - C/Bond D/S 0.42 (Non-Trafficable) Barge Capping)\",\r\n Length: \"2557\",\r\n CodeBase: \"CFL01\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL01**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL06\",\r\n Desc: \"Cen CFL06 Gable Infil Flash **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 5260 (Infill Trim Flashing)\",\r\n Length: \"5260\",\r\n CodeBase: \"CFL06\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL06**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL2420\",\r\n Desc: \"Cen CFL24 20 degree Freespan Beam Attachment Gloss H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 x 3218 (Fascia Flashing)\",\r\n Length: \"3218\",\r\n CodeBase: \"CFL2420\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL2420H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"@@=20\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=20\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL40PB\",\r\n Desc: \"Cen CFL40 @@ Downlight Flash 65X65 HG Paperbark\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 3218 (A1-Downlight Flashing 40)|1 x 3217 (A1-Downlight Flashing 40)\",\r\n Length: \"3218\",\r\n CodeBase: \"CFL40PB\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(CFL40)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL40HPB@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL51\",\r\n Desc: \"Cen CFL51 Ridge Cap **H** @@\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 6800\",\r\n Length: \"6800\",\r\n CodeBase: \"CFL51\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL51**H**@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"=(Length/380) + 2\"}\\n]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB108\",\r\n Desc: \"Cen Box Beam 108x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 4846 (Gable Infill Beam)\",\r\n Length: \"4846\",\r\n CodeBase: \"BB108\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"7\",\r\n Fielders_Code: \"CBB9510865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1086510\",\r\n CutLength: \"4846\",\r\n FinishLength: \"4816\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Gable Infill Beam`Paperbark - PB``1`1`4846`4816`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Paperbark` 7`1086510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1086510\",\r\n CutLength: \"4846\",\r\n FinishLength: \"4816\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Gable Infill Beam`Paperbark - PB``1`1`4846`4816`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Paperbark` 7`1086510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 6495 (A1-Attachment Beam (Back))|1 x 6500 (A1-Attachment Beam (Front))|1 x 4550 (A1-Attachment Beam (Left))|1 x 2539 (A1-Portal Rafter (No Post))|1 x 2539 (A1-Portal Rafter (No Post))|1 x 2481 (A1-Portal Rafter (Standard))|1 x 2550 (A1-Portal Rafter (Standard))|1 x 2550 (A1-Portal Rafter (Width Attached))|1 x 2550 (A1-Portal Rafter (Width Attached))\",\r\n Length: \"6495\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-20.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section\",\r\n HolePunchingRecommend: \"RNP20158=Rafter no post 20 Deg 158 Section\",\r\n Section: \"1586510\",\r\n CutLength: \"2539\",\r\n FinishLength: \"2479\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`1`2539`2479`0.0`-20.0`20.0`0.0`0.0`PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section`253`2286`0`0`Paperbark` 3`1586510`0`0\",\r\n },\r\n 4: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"-20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section\",\r\n HolePunchingRecommend: \"RNP20158=Rafter no post 20 Deg 158 Section\",\r\n Section: \"1586510\",\r\n CutLength: \"2539\",\r\n FinishLength: \"2479\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`1`2539`2479`0.0`20.0`-20.0`0.0`0.0`PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section`253`2286`0`0`Paperbark` 4`1586510`0`0\",\r\n },\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2481\",\r\n FinishLength: \"2421\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`1`2481`2421`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`1891`253`133`Paperbark` 5`1586510`0`0\",\r\n },\r\n 6: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"35.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2550\",\r\n FinishLength: \"2490\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`1`2550`2490`0.0`20.0`35.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`1960`253`133`Paperbark` 6`1586510`0`0\",\r\n },\r\n 7: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"70.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2550\",\r\n FinishLength: \"2490\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`2550`2490`0.0`70.0`20.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`2298`24`0`Paperbark` 1`1586510`0`0\",\r\n },\r\n 8: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"70.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2550\",\r\n FinishLength: \"2490\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`2550`2490`0.0`20.0`70.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`2298`24`0`Paperbark` 2`1586510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-20.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section\",\r\n HolePunchingRecommend: \"RNP20158=Rafter no post 20 Deg 158 Section\",\r\n Section: \"1586510\",\r\n CutLength: \"2539\",\r\n FinishLength: \"2479\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`1`2539`2479`0.0`-20.0`20.0`0.0`0.0`PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section`253`2286`0`0`Paperbark` 3`1586510`0`0\",\r\n },\r\n 4: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"-20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section\",\r\n HolePunchingRecommend: \"RNP20158=Rafter no post 20 Deg 158 Section\",\r\n Section: \"1586510\",\r\n CutLength: \"2539\",\r\n FinishLength: \"2479\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`1`2539`2479`0.0`20.0`-20.0`0.0`0.0`PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section`253`2286`0`0`Paperbark` 4`1586510`0`0\",\r\n },\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2481\",\r\n FinishLength: \"2421\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`1`2481`2421`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`1891`253`133`Paperbark` 5`1586510`0`0\",\r\n },\r\n 6: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"35.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2550\",\r\n FinishLength: \"2490\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`1`2550`2490`0.0`20.0`35.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`1960`253`133`Paperbark` 6`1586510`0`0\",\r\n },\r\n 7: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"70.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2550\",\r\n FinishLength: \"2490\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`2550`2490`0.0`70.0`20.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`2298`24`0`Paperbark` 1`1586510`0`0\",\r\n },\r\n 8: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"70.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2550\",\r\n FinishLength: \"2490\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`2550`2490`0.0`20.0`70.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`2298`24`0`Paperbark` 2`1586510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB65\",\r\n Desc: \"Cen Box Beam 65x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 1044 (A1-Portal Strut)|1 x 1042 (A1-Portal Strut)|6 x 3143 (A1-Purlin T1)|2 x 3142 (A1-Purlin T1)|2 x 3143 (A1-Ridge Purlin)|2 x 3142 (A1-Ridge Purlin)\",\r\n Length: \"1044\",\r\n CodeBase: \"BB65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"AltIndex=BB656575\",\r\n Image_b64: null,\r\n PromptTextCodes: \"AltIndex=BB656575\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"1 x 6060 (A2-Fascia Beam)|1 x 1916 (A2-Left Rafter)|1 x 1910 (A2-Right Rafter)\",\r\n Length: \"6060\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 3204 (A1-Post in Ground (Freespan) (Under Beam))|1 x 3204 (A1-Post in Ground (Freespan) (Under Beam))\",\r\n Length: \"3204\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"8\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158F=Post 158 section Freespan\",\r\n HolePunchingRecommend: \"POST158F=Post 158 section Freespan\",\r\n Section: \"1586510\",\r\n CutLength: \"3204\",\r\n FinishLength: \"3174\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Freespan) (Under Beam)`Paperbark - PB`Hand Drill Outside Edge Only: Hole A`1`1`3204`3174`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158F=Post 158 section Freespan`315`435`2769`0`Paperbark` 8`1586510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158F=Post 158 section Freespan\",\r\n HolePunchingRecommend: \"POST158F=Post 158 section Freespan\",\r\n Section: \"1586510\",\r\n CutLength: \"3204\",\r\n FinishLength: \"3174\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Freespan) (Under Beam)`Paperbark - PB`Hand Drill Outside Edge Only: Hole A`1`1`3204`3174`0.0`-35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158F=Post 158 section Freespan`315`435`2769`0`Paperbark` 9`1586510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158F=Post 158 section Freespan\",\r\n HolePunchingRecommend: \"POST158F=Post 158 section Freespan\",\r\n Section: \"1586510\",\r\n CutLength: \"3204\",\r\n FinishLength: \"3174\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Freespan) (Under Beam)`Paperbark - PB`Hand Drill Outside Edge Only: Hole A`1`1`3204`3174`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158F=Post 158 section Freespan`315`435`2769`0`Paperbark` 8`1586510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158F=Post 158 section Freespan\",\r\n HolePunchingRecommend: \"POST158F=Post 158 section Freespan\",\r\n Section: \"1586510\",\r\n CutLength: \"3204\",\r\n FinishLength: \"3174\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Freespan) (Under Beam)`Paperbark - PB`Hand Drill Outside Edge Only: Hole A`1`1`3204`3174`0.0`-35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158F=Post 158 section Freespan`315`435`2769`0`Paperbark` 9`1586510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS158\",\r\n Desc: \"Cen 158X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS215865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"BB65\",\r\n Desc: \"Cen Box Beam 65x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"2 x 2885 (A2-Post in Ground (Beam to Side))|1 x 2727 (A2-Post in Ground (Under Beam))\",\r\n Length: \"2885\",\r\n CodeBase: \"BB65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"AltIndex=BB656575\",\r\n Image_b64: null,\r\n PromptTextCodes: \"AltIndex=BB656575\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 (For Attachment Beam (Back) Fixed to 158mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (A1-For Portal Strut)|16 (A1-For Purlin T1)|8 (A1-For Ridge Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK27158\",\r\n Desc: \"Cen BK27 15865 Corner Connector **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 (A1-For Attachment Beam (Back))|1 (A1-For Attachment Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"BK27158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK27CC158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"12\"},{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK315865-S\",\r\n Desc: \"Cen BK3 15865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Rafter (No Post))\",\r\n Length: \"\",\r\n CodeBase: \"BK315865\",\r\n CodeAppend: \"-S.20DEG UP\",\r\n DescAppend: \"20 Degrees Up\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"CNBK3CB158@@**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-20.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-20.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK3310865\",\r\n Desc: \"Cen BK33 10865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Gable Infill Beam)\",\r\n Length: \"\",\r\n CodeBase: \"BK3310865\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK33C108@@**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"14\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK3315865\",\r\n Desc: \"Cen BK33 15865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"BK3315865\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK33C158@@**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"14\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK34S25G\",\r\n Desc: \"Cen Bk34S RSF Single 25Deg Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"17\",\r\n Length: \"\",\r\n CodeBase: \"BK34S25G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK34SRSF250GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BNW1060Z\",\"Use\":\"BK34 Fix\",\"Qty\":\"4\"},{\"Code\":\"BK2164G\",\"Use\":\"BK34 Fix\",\"Qty\":\"2\",\"Conditions\":{\"DescAppend\":\"!=*Riser*\"}},{\"Code\":\"10X90\",\"Qty\":\"2\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"$$=62.70\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=62.70\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK36\",\r\n Desc: \"Cen BK36 Top Gable End Strut **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Strut)\",\r\n Length: \"\",\r\n CodeBase: \"BK36\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK36CT**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK88158\",\r\n Desc: \"Cen BK88 158 Box Beam Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 (End Cap for Attachment Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"BK88158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK88158SE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Use\":\"Beam End Cap Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"2 (A2-For Fascia Beam Fixed to 65mm Post)|1 (A2-For Left Rafter)|1 (A2-For Left Rafter Fixed to 65mm Post)|1 (A2-For Right Rafter Fixed to 65mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK22L15865\",\r\n Desc: \"Cen BK22L-15865 Long Brkt With Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"1 (For Right Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"BK22L15865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK22L158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"1 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26DEG\",\r\n Desc: \"BK26 Verandah Fascia Support Brkt Double End Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"2\",\r\n Qty: \"7 (Rafter Bracket)\",\r\n Length: \"\",\r\n CodeBase: \"BK26DEG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(fixed to Timber Fascia)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK26FSGA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BNW1060Z\",\"Use\":\"Rafter Bracket Fix\",\"Qty\":\"3\",\"Conditions\":{\"Brand\":\"=Fielders\"}},{\"Code\":\"BNW1020\",\"Qty\":\"1\",\"Use\":\"Steel Fascia Fix\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Use\":\"=*Steel*\"}},{\"Code\":\"10X50P\",\"Qty\":\"1\",\"Use\":\"Timber Fascia Fix\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Use\":\"=*Timber*\"}},{\"Code\":\"FBH60NYG\",\"Qty\":\"3\",\"Use\":\"Rafter Bracket Fix\",\"Conditions\":{\"Brand\":\"=Lysaght\"}},{\"Code\":\"FBH20NYG\",\"Use\":\"Steel Fascia\",\"Qty\":\"1\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Use\":\"=*Steel*\"}},{\"Code\":\"FBH5010NYG\",\"Use\":\"Timber Fascia Fix\",\"Qty\":\"1\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Use\":\"=*Timber*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON115865G\",\r\n Desc: \"Cen CON1 15865 Galv Inground Connnector\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON115865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON1158GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"10X170\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON215865G\",\r\n Desc: \"Cen CON2 15865-@@ Ridge Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"1 (A1-For Portal Rafter (No Post))|1 (A1-For Portal Rafter (Standard))|1 (A1-For Portal Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"CON215865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON2158GA@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Use\":\"Con2 Fix\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Use\":\"Con2 Fix\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"4\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON315865FSG\",\r\n Desc: \"Cen CON3 15865-@@ Eaves Con Freespan Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Rafter (Standard))\",\r\n Length: \"\",\r\n CodeBase: \"CON315865FSG\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON3158FGA@@\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON16565\",\r\n Desc: \"Cen CON1 6565 Galv Inground Connector\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"2\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON16565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON165GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"10X90\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"10X90\",\r\n Desc: \"Cen Bolt Nut G4.6 10X90 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"3 (A1-Attachment Beam (Back) Fix)|3 (A1-Attachment Beam (Front) Fix)\",\r\n Length: \"\",\r\n CodeBase: \"10X90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BN1090**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"COCOVER\",\r\n Desc: \"Corrugated Cover Sheet Only (Metal)\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"\",\r\n Qty: \"2 x 2525 (Sheet Cover Sheet)\",\r\n Length: \"2525\",\r\n CodeBase: \"COCOVER\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PACCSSLM\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"$$=1\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=1\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"FCD2412\",\r\n Desc: \"2400 X 1200 6.00mm Fibre Cement Sheet Plain\",\r\n Use: \"\",\r\n Colour: \"Plain\",\r\n Area: \"1\",\r\n Qty: \"2 (Infill-Plain Smooth)\",\r\n Length: \"\",\r\n CodeBase: \"FCD2412\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNFCSH\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TSW1022\",\"Qty\":\"30\",\"Use\":\"Infill Fix\"},{\"Code\":\"STK05\",\"Qty\":\"1\",\"Use\":\"Infill Fix\"},{\"Code\":\"BK30G\",\"Qty\":\"3\",\"Use\":\"Infill Support\",\"Conditions\":{\"Use\":\"=*Infill*\"},\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"BC5075\",\r\n Desc: \"50mm Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"\",\r\n Qty: \"1 x 7500 (6200mm(Back Channel))|1 x 7500 (1991mm(Back Channel))\",\r\n Length: \"7500\",\r\n CodeBase: \"BC5075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BKCCDK50H**7500\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"Length=7500\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=7500\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"BCC75\",\r\n Desc: \"7500LM 25mm Back Channel Corro **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"\",\r\n Qty: \"1 x 7500 (6440mm(Back Channel))|1 x 7500 (6440mm(Back Channel))\",\r\n Length: \"7500\",\r\n CodeBase: \"BCC75\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BKCSRB25**7500\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"Length=7500\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=7500\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n ],\r\n FTLC01346: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Monument/Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 x 3362|1 x 3323|1 x 3092|1 x 2861|1 x 2630|1 x 2399|1 x 2168|1 x 1937|1 x 1706|11 x 3362 (B/C Fixed)\",\r\n Length: \"3362\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 5950\",\r\n Length: \"5950\",\r\n CodeBase: \"FG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"1 x 2890\",\r\n Length: \"2890\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2890mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL22\",\r\n Desc: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 3302 (Cent 310 Deck Barge Capping)|1 x 3181 (Cent 310 Deck Barge Capping)|1 x 1401 (Cent 310 Deck Barge Capping)\",\r\n Length: \"3302\",\r\n CodeBase: \"CFL22\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL22**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"SLATS\",\r\n Code: \"FS70CC\",\r\n Desc: \"Fielders Slat 70mm X 0.35 (L/M) Classic Cream\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"15 x 2666 (Slat)\",\r\n Length: \"2666\",\r\n CodeBase: \"FS70CC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FFS70FDO\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FSR70BK\",\"Qty\":\"2\",\"Use\":\"Slat Retainer\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"SLATS\",\r\n Code: \"FSS50CC\",\r\n Desc: \"Fielders Split Slat 50mm (2Pce) Classic Cream\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 1190 (Slat Split)\",\r\n Length: \"1190\",\r\n CodeBase: \"FSS50CC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FFSS502PFDONS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"SLATS\",\r\n Code: \"FSS50EBCC\",\r\n Desc: \"Fielders Split Slat 50mm End Bracket Classic Cream \",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (Slat Split End Bracket)\",\r\n Length: \"\",\r\n CodeBase: \"FSS50EBCC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FFSSEB50FDO\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FSS50CC\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"SLATS\",\r\n Code: \"PFPMCC\",\r\n Desc: \"MkII Panel Fence Post (Spec P/M) Classic Cream\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 1200 (Slat Post)\",\r\n Length: \"1200\",\r\n CodeBase: \"PFPMCC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FMKIIPFDO\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1016100B8\",\"Qty\":\"4\",\"Use\":\"Slat Post Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"SLATS\",\r\n Code: \"PFRMCC\",\r\n Desc: \"MkII Panel Fence Top/Bot Rail (P/M) Classic Cream\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 2666 (Slat Rail)\",\r\n Length: \"2666\",\r\n CodeBase: \"PFRMCC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FMKIIRFDO\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Night Sky\",\r\n Area: \"1\",\r\n Qty: \"1 x 3314 (Cutout Beam A)|1 x 5810 (Fascia Beam)|1 x 3220 (Left Rafter)|1 x 1254 (Right Rafter)\",\r\n Length: \"3314\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Top\",\r\n LeftAngle: \"53.5\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"3314\",\r\n FinishLength: \"3254\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Cutout Beam A`Night Sky - NS``1`1`3314`3254`0.0`0.0`1.0`53.5`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Night Sky` 1`1586510`0`0\",\r\n },\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Top\",\r\n LeftAngle: \"53.5\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"3314\",\r\n FinishLength: \"3254\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Cutout Beam A`Night Sky - NS``1`1`3314`3254`0.0`0.0`1.0`53.5`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Night Sky` 1`1586510`0`0\",\r\n },\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Night Sky\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS100\",\r\n Desc: \"Post Steel 100x100x2mm H**\",\r\n Use: \"\",\r\n Colour: \"Night Sky\",\r\n Area: \"1\",\r\n Qty: \"2 x 1800 (Post in Ground (Under Beam))\",\r\n Length: \"1800\",\r\n CodeBase: \"PS100\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PS100H**4000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"SHS65653\",\r\n Desc: \"SHS 65 X 65 X 3.00mm Allgal **\",\r\n Use: \"\",\r\n Colour: \"Night Sky\",\r\n Area: \"1\",\r\n Qty: \"1 x 3786 (Post in Ground (Beam to Side))|2 x 3740 (Post in Ground (Beam to Side))\",\r\n Length: \"3786\",\r\n CodeBase: \"SHS65653\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHS65653**80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: ECCP 12 1 (For Post)\",\r\n Use: \"\",\r\n Colour: \"Night Sky\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS100\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Night Sky\",\r\n Area: \"1\",\r\n Qty: \"2 (For Fascia Beam Fixed to 65mm Post)|1 (For Left Rafter)|1 (For Left Rafter Fixed to 65mm Post)|2 (For Right Rafter Fixed to 65mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK46158S\",\r\n Desc: \"Cen BK46 15865 Beam To Beam Conn. ** Non Standard\",\r\n Use: \"\",\r\n Colour: \"Night Sky\",\r\n Area: \"1\",\r\n Qty: \"2 (For Cutout Beam A)\",\r\n Length: \"\",\r\n CodeBase: \"BK46158S\",\r\n CodeAppend: \".15865.37DEG RH\",\r\n DescAppend: \"158x65 37 Degrees Right Hand\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"CNBK46NS158**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"-37.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"-37.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"TSW1016B8100\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Use: \"\",\r\n Colour: \"Plain\",\r\n Area: \"1\",\r\n Qty: \"30 (Slat Split Fix)\",\r\n Length: \"\",\r\n CodeBase: \"TSW1016B8100\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n Children: null,\r\n \"Parent Item\": \"FSS50EBCC\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"BC5075\",\r\n Desc: \"50mm Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"\",\r\n Qty: \"1 x 7500 (3400mm(Back Channel))\",\r\n Length: \"7500\",\r\n CodeBase: \"BC5075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BKCCDK50H**7500\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"Length=7500\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=7500\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n FTNC00199: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CO42\",\r\n Desc: \"Corr S-Rib 0.42BMT **\",\r\n Use: \"\",\r\n Colour: \"Deep Ocean\",\r\n Area: \"1\",\r\n Qty: \"14 x 3884\",\r\n Length: \"3884\",\r\n CodeBase: \"CO42\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CO42**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*4)+7)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Qty\":\"=Qty*6\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POLYCARBONATE ROOFING\",\r\n Code: \"PSC\",\r\n Desc: \"Ampelite Solasafe Corrugated Polycarbonate Sheet **\",\r\n Use: \"\",\r\n Colour: \"Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 4200 (/finish @3884mm)\",\r\n Length: \"4200\",\r\n CodeBase: \"PSC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PCCO**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"CLEARFIX\",\"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Fielders\"}},{\"Code\":\"BK30G\",\"Qty\":\"3\",\"Use\":\"Infill Support\",\"Conditions\":{\"Use\":\"=*Infill*\",\"Brand\":\"=Fielders\"}},{\"Code\":\"CPCB36\",\"Conditions\":{\"Brand\":\"=Fielders\"},\"Qty\":\"=(((Length/900)+1)*1000)/25000\"},{\"Code\":\"FT50MP\",\"Qty\":\"=((Area.NumInternalPurlins*4)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=((Area.NumInternalPurlins*2)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"WG\",\"Qty\":\"=((Area.NumInternalPurlins*6)+4)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FR64\",\"Qty\":\"=Qty*6\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"WASHM\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Area.DesignType\":\"=Flat Roof\"},\"Qty\":\"=Qty*6\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*9)+2)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT50MP\",\"Qty\":\"=((Area.NumInternalPurlins*4)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=((Area.NumInternalPurlins*2)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"WGFG\",\"Qty\":\"=((Area.NumInternalPurlins*2)+8)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT30M\",\"Qty\":\"=6*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*9)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=12*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"COFILL\",\"Length\":\"915\",\"Conditions\":{\"Brand\":\"=Lysaght\"}}]}',\r\n PromptCodes:\r\n \"SL=1800(201300)|2100(201300)|2400(201300)|2700(201300)|3000(201300)|3600(201300)|4200(201300)|4800(201300)|5400(201300)|6000(201300)|6300(201300)|7200(201300)|8100(201300)\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=1800(201300)|2100(201300)|2400(201300)|2700(201300)|3000(201300)|3600(201300)|4200(201300)|4800(201300)|5400(201300)|6000(201300)|6300(201300)|7200(201300)|8100(201300)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POLYCARBONATE ROOFING\",\r\n Code: \"TW101050\",\r\n Desc: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 2LM **\",\r\n Use: \"\",\r\n Colour: \"Metallic Grey\",\r\n Area: \"1\",\r\n Qty: \"4 x 1414 (Infill-Twin Wall 1050 Infill)\",\r\n Length: \"1414\",\r\n CodeBase: \"TW101050\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PCLTTW1010**20\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TWHB\",\"Use\":\"Twinwall Fix\",\"Qty\":\"=(Length/6000)*0.5\"},{\"Code\":\"TWST\",\"Use\":\"Twinwall Fix\",\"Qty\":\"=Length/25000\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2 x 5705\",\r\n Length: \"5705\",\r\n CodeBase: \"FG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO656Z\",\r\n Desc: \"65X65 Pop Square Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"PO656Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPP6565ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DP656\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DP656\",\r\n Desc: \"65X65 Downpipe ** 1800mm\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"3 x 1800\",\r\n Length: \"1800\",\r\n CodeBase: \"DP656\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DP6565**18\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\"},{\"Code\":\"ST656\",\"Qty\":\"=(Length/1200)\"}]}',\r\n PromptCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL01\",\r\n Desc: \"Cen CFL01 Barge Cap **H**\",\r\n Use: \"\",\r\n Colour: \"Deep Ocean/Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 3893 (Corrugated - C/Bond 0.42 (No Foot Traffic) Barge Capping)\",\r\n Length: \"3893\",\r\n CodeBase: \"CFL01\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL01**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL06\",\r\n Desc: \"Cen CFL06 Gable Infil Flash **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"1 x 7770 (Infill Trim Flashing)\",\r\n Length: \"7770\",\r\n CodeBase: \"CFL06\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL06**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: CFL4504 (Downlight Flashing 39)\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"1 x 2820 (Downlight Flashing 39)|1 x 2770 (Downlight Flashing 39)\",\r\n Length: \"2820\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(CFL39)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL51\",\r\n Desc: \"Cen CFL51 Ridge Cap **H** @@\",\r\n Use: \"\",\r\n Colour: \"Deep Ocean\",\r\n Area: \"1\",\r\n Qty: \"1 x 6005\",\r\n Length: \"6005\",\r\n CodeBase: \"CFL51\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL51**H**@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"=(Length/380) + 2\"}\\n]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: FL25 (Wall Flashing)\",\r\n Use: \"\",\r\n Colour: \"Deep Ocean/Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 3895 (Wall Flashing)\",\r\n Length: \"3895\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB108\",\r\n Desc: \"Cen Box Beam 108x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"1 x 7190 (Gable Infill Beam)\",\r\n Length: \"7190\",\r\n CodeBase: \"BB108\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"5\",\r\n Fielders_Code: \"CBB9510865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1086510\",\r\n CutLength: \"7190\",\r\n FinishLength: \"7160\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Gable Infill Beam`Wallaby - WB``1`1`7190`7160`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Wallaby` 5`1086510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1086510\",\r\n CutLength: \"7190\",\r\n FinishLength: \"7160\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Gable Infill Beam`Wallaby - WB``1`1`7190`7160`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Wallaby` 5`1086510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"1 x 7060 (Attachment Beam (Right))|1 x 5700 (Perimeter Beam (Back))|1 x 5700 (Perimeter Beam (Front))|2 x 3817 (Portal Rafter (Standard))|2 x 3817 (Portal Rafter (Standard))|1 x 3627 (Portal Rafter (Width Attached))|1 x 3627 (Portal Rafter (Width Attached))\",\r\n Length: \"7060\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3817\",\r\n FinishLength: \"3757\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Wallaby - WB``1`2`3817`3757`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`3226`253`133`Wallaby` 1`1586510`0`0\",\r\n },\r\n 4: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"35.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3817\",\r\n FinishLength: \"3757\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Wallaby - WB``1`2`3817`3757`0.0`20.0`35.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`3226`253`133`Wallaby` 2`1586510`0`0\",\r\n },\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"70.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3627\",\r\n FinishLength: \"3567\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Wallaby - WB``1`1`3627`3567`0.0`70.0`20.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3374`0`0`Wallaby` 3`1586510`0`0\",\r\n },\r\n 6: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"70.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3627\",\r\n FinishLength: \"3567\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Wallaby - WB``1`1`3627`3567`0.0`20.0`70.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3374`0`0`Wallaby` 4`1586510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3817\",\r\n FinishLength: \"3757\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Wallaby - WB``1`2`3817`3757`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`3226`253`133`Wallaby` 1`1586510`0`0\",\r\n },\r\n 4: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"35.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3817\",\r\n FinishLength: \"3757\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Wallaby - WB``1`2`3817`3757`0.0`20.0`35.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`3226`253`133`Wallaby` 2`1586510`0`0\",\r\n },\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"70.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3627\",\r\n FinishLength: \"3567\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Wallaby - WB``1`1`3627`3567`0.0`70.0`20.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3374`0`0`Wallaby` 3`1586510`0`0\",\r\n },\r\n 6: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"70.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3627\",\r\n FinishLength: \"3567\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Wallaby - WB``1`1`3627`3567`0.0`20.0`70.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3374`0`0`Wallaby` 4`1586510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB65\",\r\n Desc: \"Cen Box Beam 65x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"1 x 7070 (On Top Purlin)|2 x 5705 (On Top Purlin)|1 x 1568 (Portal Strut)|1 x 1496 (Portal Strut)|4 x 5700 (Purlin T1)\",\r\n Length: \"7070\",\r\n CodeBase: \"BB65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"AltIndex=BB656575\",\r\n Image_b64: null,\r\n PromptTextCodes: \"AltIndex=BB656575\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2 x 2834 (Post in Ground (Standard) (Under Beam))|2 x 2834 (Post in Ground (Standard) (Under Beam))\",\r\n Length: \"2834\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"6\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158=Post 158 section\",\r\n HolePunchingRecommend: \"POST158=Post 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2834\",\r\n FinishLength: \"2804\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Wallaby - WB``1`2`2834`2804`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158=Post 158 section`218`338`2496`0`Wallaby` 6`1586510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158=Post 158 section\",\r\n HolePunchingRecommend: \"POST158=Post 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2834\",\r\n FinishLength: \"2804\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Wallaby - WB``1`2`2834`2804`0.0`-35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158=Post 158 section`218`338`2496`0`Wallaby` 7`1586510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158=Post 158 section\",\r\n HolePunchingRecommend: \"POST158=Post 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2834\",\r\n FinishLength: \"2804\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Wallaby - WB``1`2`2834`2804`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158=Post 158 section`218`338`2496`0`Wallaby` 6`1586510`0`0\",\r\n },\r\n 1: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158=Post 158 section\",\r\n HolePunchingRecommend: \"POST158=Post 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"2834\",\r\n FinishLength: \"2804\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Wallaby - WB``1`2`2834`2804`0.0`-35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158=Post 158 section`218`338`2496`0`Wallaby` 7`1586510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS158\",\r\n Desc: \"Cen 158X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS215865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2 (For Attachment Beam (Right))|1 (For Perimeter Beam (Back))|1 (For Perimeter Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK25G\",\r\n Desc: \"Cen BK25D RSBFD Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"9\",\r\n Length: \"\",\r\n CodeBase: \"BK25G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"; Height 65mm; Step out 50mm\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK25DGA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BNW1090\",\"Qty\":\"2\"},{\"Code\":\"BNW1060Z\",\"Qty\":\"2\"},{\"Code\":\"BK2164G\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Strut)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK3310865\",\r\n Desc: \"Cen BK33 10865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2 (For Gable Infill Beam)\",\r\n Length: \"\",\r\n CodeBase: \"BK3310865\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK33C108@@**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"14\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK3315865\",\r\n Desc: \"Cen BK33 15865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"BK3315865\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK33C158@@**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"14\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK36\",\r\n Desc: \"Cen BK36 Top Gable End Strut **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Strut)\",\r\n Length: \"\",\r\n CodeBase: \"BK36\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK36CT**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK88158\",\r\n Desc: \"Cen BK88 158 Box Beam Stop End **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"1 (End Cap for Perimeter Beam (Back))|1 (End Cap for Perimeter Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"BK88158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK88158SE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Use\":\"Beam End Cap Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK8865\",\r\n Desc: \"Cen BK88 65 Box Beam Stop End **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"6 (End Cap for On Top Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"BK8865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK8865SE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Use\":\"Beam End Cap Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON115865G\",\r\n Desc: \"Cen CON1 15865 Galv Inground Connnector\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON115865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON1158GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"10X170\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON215865G\",\r\n Desc: \"Cen CON2 15865-@@ Ridge Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Rafter (Standard))|1 (For Portal Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"CON215865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON2158GA@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Use\":\"Con2 Fix\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Use\":\"Con2 Fix\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"4\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON315865G\",\r\n Desc: \"Cen CON3 15865-@@ Eaves Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"4 (For Portal Rafter (Standard))\",\r\n Length: \"\",\r\n CodeBase: \"CON315865G\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON3158GA@@\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"10X90\",\r\n Desc: \"Cen Bolt Nut G4.6 10X90 **\",\r\n Use: \"\",\r\n Colour: \"Wallaby\",\r\n Area: \"1\",\r\n Qty: \"3 (Perimeter Beam (Back) Fix)|3 (Perimeter Beam (Front) Fix)\",\r\n Length: \"\",\r\n CodeBase: \"10X90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BN1090**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"TS1495100B8P\",\r\n Desc: \"BF 14-10X95 H/H Tek No Neo B8 Plain (Pkt 100)\",\r\n Use: \"\",\r\n Colour: \"Plain\",\r\n Area: \"1\",\r\n Qty: \"13 (On Top Purlin Fix)|24 (Purlin T1 Fix)\",\r\n Length: \"\",\r\n CodeBase: \"TS1495100B8P\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHBF1495N100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"14x90 Hex Screw(s)\" AltIndex=TS1495,TS1495P',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"14x90 Hex Screw(s)\" AltIndex=TS1495,TS1495P',\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"COCOVER\",\r\n Desc: \"Corrugated Cover Sheet Only (Metal)\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"\",\r\n Qty: \"2 x 3884 (Sheet Cover Sheet)\",\r\n Length: \"3884\",\r\n CodeBase: \"COCOVER\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PACCSSLM\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"$$=1\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=1\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n FGRC00073: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CO42DSS\",\r\n Desc: \"Corr S-Rib 0.42BMT DS **H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey/Paperbark\",\r\n Area: \"1\",\r\n Qty: \"28 x 4241\",\r\n Length: \"4241\",\r\n CodeBase: \"CO42DSS\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CO42**H**CS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*4)+7)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"},\"Qty\":\"=Qty*6\",\"Colour\":\"Area.RoofSheetColour\"}]}',\r\n PromptCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Image_b64: null,\r\n PromptTextCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POLYCARBONATE ROOFING\",\r\n Code: \"PSCHR1IN\",\r\n Desc: \"Ampelite HR1 Corrugated Polycarbonate Sheet **\",\r\n Use: \"\",\r\n Colour: \"Pearl Ice\",\r\n Area: \"1\",\r\n Qty: \"7 x 1800 (Infill-Poly HR1 Corrugated Infill/finish @1536mm)|7 x 1800 (Infill-Poly HR1 Corrugated Infill/finish @1409mm)\",\r\n Length: \"1800\",\r\n CodeBase: \"PSCHR1IN\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PCHR1CO**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1016100B8\",\"Qty\":\"=10*Qty\",\"Conditions\":{\"Brand\":\"=Fielders\"},\"Colour\":\"Area.BeamColour\"},{\"Code\":\"RI43100\",\"Qty\":\"=10*Qty\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Brand\":\"=Fielders\"}},{\"Code\":\"FT20M\",\"Qty\":\"=10*Qty\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Brand\":\"=Lysaght\"}},{\"Code\":\"FR72\",\"Qty\":\"=10*Qty\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Brand\":\"=Lysaght\"}}]}',\r\n PromptCodes:\r\n \"SL=1800(204000)|2100(204000)|2400(204000)|2700(204000)|3000(204000)|3600(204000)|4200(204000)|4800(204000)|5400(204000)|6000(204000)|6300(204000)|7200(204000)|8100(204000)\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=1800(204000)|2100(204000)|2400(204000)|2700(204000)|3000(204000)|3600(204000)|4200(204000)|4800(204000)|5400(204000)|6000(204000)|6300(204000)|7200(204000)|8100(204000)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (Box Gutter) \",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (Box Gutter)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FL\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"FL354\",\r\n Desc: \"Single sided Flashing 350 X 0.55 ** 4 Bend\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 10200 (Box Gutter)\",\r\n Length: \"10200\",\r\n CodeBase: \"FL354\",\r\n CodeAppend: \"\",\r\n DescAppend: \"200mm\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CF55**3504\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1016100B8\",\\n \"Qty\":\"=(2*(Length/1000))+2\", \\n \"Use\":\"Box Gutter Fix\", \\n \"Conditions\":{\"Use\":\"=Box Gutter\"}}\\n]}',\r\n PromptCodes: \"DISABLED=GIL|MEN|MAR|GAW|NOA|MIN|LSB|EMU\",\r\n Image_b64: null,\r\n PromptTextCodes: \"DISABLED=GIL|MEN|MAR|GAW|NOA|MIN|LSB|EMU\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"OG115SEL\",\r\n Desc: \"OG 115 Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OG115SEL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"OGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\",\"Conditions\":{\"Brand\":\"=Fielders\"}},{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\",\"Conditions\":{\"Brand\":\"=Lysaght\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"OG115SL\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"OG115SER\",\r\n Desc: \"OG 115 Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OG115SER\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"OGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\",\"Conditions\":{\"Brand\":\"=Fielders\"}},{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\",\"Conditions\":{\"Brand\":\"=Lysaght\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"OG115SL\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"OG115SL\",\r\n Desc: \"OG 115 Gutter Slotted 0.42 \",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 10200\",\r\n Length: \"10200\",\r\n CodeBase: \"OG115SL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"OGS42**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"OG115OS\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\",\"Use\":\"Gutter Clip\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"2 x 2300\",\r\n Length: \"2300\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2300mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL01\",\r\n Desc: \"Cen CFL01 Barge Cap **H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey/Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 x 4249 (Corrugated - C/Bond D/S 0.42 (Non-Trafficable) Barge Capping)\",\r\n Length: \"4249\",\r\n CodeBase: \"CFL01\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL01**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL06\",\r\n Desc: \"Cen CFL06 Gable Infil Flash **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 8440 (Infill Trim Flashing)\",\r\n Length: \"8440\",\r\n CodeBase: \"CFL06\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL06**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL12\",\r\n Desc: \"Cen CFL12 Ver Pitch Sect B/Flash **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 7940 (Infill Flashing)\",\r\n Length: \"7940\",\r\n CodeBase: \"CFL12\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL12**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: CFL4504 (Downlight Flashing 39)\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 x 2534 (Downlight Flashing 39)\",\r\n Length: \"2534\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(CFL39)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL51\",\r\n Desc: \"Cen CFL51 Ridge Cap **H** @@\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 10500\",\r\n Length: \"10500\",\r\n CodeBase: \"CFL51\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL51**H**@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"=(Length/380) + 2\"}\\n]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB108\",\r\n Desc: \"Cen Box Beam 108x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 7860 (Gable Infill Beam)\",\r\n Length: \"7860\",\r\n CodeBase: \"BB108\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"5\",\r\n Fielders_Code: \"CBB9510865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1086510\",\r\n CutLength: \"7860\",\r\n FinishLength: \"7830\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Gable Infill Beam`Paperbark - PB``1`1`7860`7830`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Paperbark` 5`1086510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-70.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1086510\",\r\n CutLength: \"7860\",\r\n FinishLength: \"7830\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB108`Cen Box Beam 108x65x0.95BMT **`Gable Infill Beam`Paperbark - PB``1`1`7860`7830`0.0`-70.0`0.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Paperbark` 5`1086510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 5552 (Attachment Beam (Back))|1 x 4648 (Attachment Beam (Back))|1 x 7730 (Attachment Beam (Left))|2 x 5100 (Perimeter Beam (Front))|4 x 4231 (Portal Rafter (No Post))|4 x 4173 (Portal Rafter (Standard))|1 x 3983 (Portal Rafter (Width Attached))|1 x 3983 (Portal Rafter (Width Attached))\",\r\n Length: \"5552\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"-20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section\",\r\n HolePunchingRecommend: \"RNP20158=Rafter no post 20 Deg 158 Section\",\r\n Section: \"1586510\",\r\n CutLength: \"4231\",\r\n FinishLength: \"4171\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`4`4231`4171`0.0`20.0`-20.0`0.0`0.0`PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section`253`3978`0`0`Paperbark` 4`1586510`0`0\",\r\n },\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"4173\",\r\n FinishLength: \"4113\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`4`4173`4113`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`3583`253`133`Paperbark` 3`1586510`0`0\",\r\n },\r\n 6: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"70.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3983\",\r\n FinishLength: \"3923\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`3983`3923`0.0`70.0`20.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3731`0`0`Paperbark` 1`1586510`0`0\",\r\n },\r\n 7: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"70.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3983\",\r\n FinishLength: \"3923\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`3983`3923`0.0`20.0`70.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3731`0`0`Paperbark` 2`1586510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"-20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section\",\r\n HolePunchingRecommend: \"RNP20158=Rafter no post 20 Deg 158 Section\",\r\n Section: \"1586510\",\r\n CutLength: \"4231\",\r\n FinishLength: \"4171\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (No Post)`Paperbark - PB``1`4`4231`4171`0.0`20.0`-20.0`0.0`0.0`PUNCH_STYLE=RNP20158=Rafter no post 20 Deg 158 Section`253`3978`0`0`Paperbark` 4`1586510`0`0\",\r\n },\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section\",\r\n HolePunchingRecommend: \"P20158=Portal Rafter 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"4173\",\r\n FinishLength: \"4113\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Standard)`Paperbark - PB``1`4`4173`4113`0.0`35.0`20.0`0.0`0.0`PUNCH_STYLE=P20158=Portal Rafter 20 Deg 158 section`338`3583`253`133`Paperbark` 3`1586510`0`0\",\r\n },\r\n 6: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"70.0\",\r\n RightAngle: \"20.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3983\",\r\n FinishLength: \"3923\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`3983`3923`0.0`70.0`20.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3731`0`0`Paperbark` 1`1586510`0`0\",\r\n },\r\n 7: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"20.0\",\r\n RightAngle: \"70.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n HolePunchingRecommend: \"PRWA20158=Portal Rafter Width Attached 20 Deg 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3983\",\r\n FinishLength: \"3923\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Portal Rafter (Width Attached)`Paperbark - PB``1`1`3983`3923`0.0`20.0`70.0`0.0`0.0`PUNCH_STYLE=PRWA20158=Portal Rafter Width Attached 20 Deg 158 section`253`3731`0`0`Paperbark` 2`1586510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB65\",\r\n Desc: \"Cen Box Beam 65x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 7740 (On Top Purlin)|4 x 5100 (On Top Purlin)|1 x 1690 (Portal Strut)|1 x 1618 (Portal Strut)|16 x 5100 (Purlin T1)\",\r\n Length: \"7740\",\r\n CodeBase: \"BB65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"AltIndex=BB656575\",\r\n Image_b64: null,\r\n PromptTextCodes: \"AltIndex=BB656575\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 x 3134 (Post in Ground (Standard) (Under Beam))\",\r\n Length: \"3134\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"6\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158=Post 158 section\",\r\n HolePunchingRecommend: \"POST158=Post 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3134\",\r\n FinishLength: \"3104\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Paperbark - PB``1`4`3134`3104`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158=Post 158 section`218`338`2796`0`Paperbark` 6`1586510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Code`Description`Item Use`Colour`Extra Information`Area`Num`Cut Length`Finish Length`X Rotation`Angle 1`Angle 2`Flat Angle 1`Flat Angle 2`Hole A`Hole B`Hole C`Hole D`Hole E`Colour ID`CL ID`Section`End Angle D1`End Angle D2\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"35.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=POST158=Post 158 section\",\r\n HolePunchingRecommend: \"POST158=Post 158 section\",\r\n Section: \"1586510\",\r\n CutLength: \"3134\",\r\n FinishLength: \"3104\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Post in Ground (Standard) (Under Beam)`Paperbark - PB``1`4`3134`3104`0.0`35.0`0.0`0.0`0.0`PUNCH_STYLE=POST158=Post 158 section`218`338`2796`0`Paperbark` 6`1586510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS158\",\r\n Desc: \"Cen 158X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS215865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Strut)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK27158\",\r\n Desc: \"Cen BK27 15865 Corner Connector **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 (For Attachment Beam (Back))|1 (For Perimeter Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"BK27158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK27CC158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"12\"},{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK315865-S\",\r\n Desc: \"Cen BK3 15865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"4 (For Portal Rafter (No Post))\",\r\n Length: \"\",\r\n CodeBase: \"BK315865\",\r\n CodeAppend: \"-S.20DEG UP\",\r\n DescAppend: \"20 Degrees Up\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"CNBK3CB158@@**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-20.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-20.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK3310865\",\r\n Desc: \"Cen BK33 10865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Gable Infill Beam)\",\r\n Length: \"\",\r\n CodeBase: \"BK3310865\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK33C108@@**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"14\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB108\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK3315865\",\r\n Desc: \"Cen BK33 15865 @@ ** \",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"BK3315865\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK33C158@@**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"14\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK34S20G\",\r\n Desc: \"Cen BK34S RSF Single 20Deg Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"20\",\r\n Length: \"\",\r\n CodeBase: \"BK34S20G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK34SRSF200GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BNW1060Z\",\"Use\":\"BK34 Fix\",\"Qty\":\"4\"},{\"Code\":\"BK2164G\",\"Use\":\"BK34 Fix\",\"Qty\":\"2\",\"Conditions\":{\"DescAppend\":\"!=*Riser*\"}},{\"Code\":\"10X90\",\"Qty\":\"2\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"$$=62.70\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=62.70\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK36\",\r\n Desc: \"Cen BK36 Top Gable End Strut **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 (For Portal Strut)\",\r\n Length: \"\",\r\n CodeBase: \"BK36\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK36CT**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK88158\",\r\n Desc: \"Cen BK88 158 Box Beam Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 (End Cap for Attachment Beam (Back))|1 (End Cap for Perimeter Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"BK88158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK88158SE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Use\":\"Beam End Cap Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK8865\",\r\n Desc: \"Cen BK88 65 Box Beam Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"6 (End Cap for On Top Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"BK8865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK8865SE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Use\":\"Beam End Cap Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON115865G\",\r\n Desc: \"Cen CON1 15865 Galv Inground Connnector\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON115865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON1158GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"10X170\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON215865G\",\r\n Desc: \"Cen CON2 15865-@@ Ridge Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"4 (For Portal Rafter (No Post))|1 (For Portal Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"CON215865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON2158GA@@\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Use\":\"Con2 Fix\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Use\":\"Con2 Fix\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"4\"}]}',\r\n PromptCodes: \"@@=15|20|25|30\",\r\n Image_b64: null,\r\n PromptTextCodes: \"@@=15|20|25|30\",\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON315865G\",\r\n Desc: \"Cen CON3 15865-@@ Eaves Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"4 (For Portal Rafter (Standard))\",\r\n Length: \"\",\r\n CodeBase: \"CON315865G\",\r\n CodeAppend: \".20DEG\",\r\n DescAppend: \"20 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON3158GA@@\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BHSS1025SL\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.RafterColour\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON515865G\",\r\n Desc: \"Cen CON5 15865 300 Beam Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"1 (For Attachment Beam (Back))|1 (For Perimeter Beam (Front))\",\r\n Length: \"\",\r\n CodeBase: \"CON515865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON5158GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"16\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON56565G\",\r\n Desc: \"Cen CON5 6565 300 Beam Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"2 (For On Top Purlin)|8 (For Purlin T1)\",\r\n Length: \"\",\r\n CodeBase: \"CON56565G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON565GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"16\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"10X90\",\r\n Desc: \"Cen Bolt Nut G4.6 10X90 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"5 (Attachment Beam (Back) Fix)|5 (Perimeter Beam (Front) Fix)\",\r\n Length: \"\",\r\n CodeBase: \"10X90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BN1090**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"TS1495100B8P\",\r\n Desc: \"BF 14-10X95 H/H Tek No Neo B8 Plain (Pkt 100)\",\r\n Use: \"\",\r\n Colour: \"Plain\",\r\n Area: \"1\",\r\n Qty: \"21 (On Top Purlin Fix)|80 (Purlin T1 Fix)\",\r\n Length: \"\",\r\n CodeBase: \"TS1495100B8P\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHBF1495N100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"14x90 Hex Screw(s)\" AltIndex=TS1495,TS1495P',\r\n Image_b64: null,\r\n PromptTextCodes: 'Desc=\"14x90 Hex Screw(s)\" AltIndex=TS1495,TS1495P',\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"COCOVER\",\r\n Desc: \"Corrugated Cover Sheet Only (Metal)\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"\",\r\n Qty: \"2 x 4241 (Sheet Cover Sheet)\",\r\n Length: \"4241\",\r\n CodeBase: \"COCOVER\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PACCSSLM\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"$$=1\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=1\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n OLLC01364: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CO42DSS\",\r\n Desc: \"Corr S-Rib 0.42BMT DS **H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream/Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"3 x 5450|1 x 5421|1 x 5369|1 x 5265|1 x 5161|1 x 5109\",\r\n Length: \"5450\",\r\n CodeBase: \"CO42DSS\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CO42**H**CS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*4)+7)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1245B8100\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"},\"Qty\":\"=Qty*6\",\"Colour\":\"Area.RoofSheetColour\"}]}',\r\n PromptCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Image_b64: null,\r\n PromptTextCodes: \"DISABLED=LSB|GIL|GAW|WAN|NOA|KEW|EMU|NUN|LAU|MAR|MIN|CAM\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POLYCARBONATE ROOFING\",\r\n Code: \"PSC\",\r\n Desc: \"Ampelite Solasafe Corrugated Polycarbonate Sheet **\",\r\n Use: \"\",\r\n Colour: \"Opal\",\r\n Area: \"1\",\r\n Qty: \"2 x 6000 (/finish @5450mm)|1 x 5400 (/finish @5317mm)|1 x 5400 (/finish @5213mm)\",\r\n Length: \"6000\",\r\n CodeBase: \"PSC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PCCO**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"CLEARFIX\",\"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Fielders\"}},{\"Code\":\"BK30G\",\"Qty\":\"3\",\"Use\":\"Infill Support\",\"Conditions\":{\"Use\":\"=*Infill*\",\"Brand\":\"=Fielders\"}},{\"Code\":\"CPCB36\",\"Conditions\":{\"Brand\":\"=Fielders\"},\"Qty\":\"=(((Length/900)+1)*1000)/25000\"},{\"Code\":\"FT50MP\",\"Qty\":\"=((Area.NumInternalPurlins*4)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=((Area.NumInternalPurlins*2)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"WG\",\"Qty\":\"=((Area.NumInternalPurlins*6)+4)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FR64\",\"Qty\":\"=Qty*6\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"WASHM\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Area.DesignType\":\"=Flat Roof\"},\"Qty\":\"=Qty*6\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*9)+2)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT50MP\",\"Qty\":\"=((Area.NumInternalPurlins*4)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=((Area.NumInternalPurlins*2)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"WGFG\",\"Qty\":\"=((Area.NumInternalPurlins*2)+8)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT30M\",\"Qty\":\"=6*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*9)+2)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=12*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"COFILL\",\"Length\":\"915\",\"Conditions\":{\"Brand\":\"=Lysaght\"}}]}',\r\n PromptCodes:\r\n \"SL=1800(201300)|2100(201300)|2400(201300)|2700(201300)|3000(201300)|3600(201300)|4200(201300)|4800(201300)|5400(201300)|6000(201300)|6300(201300)|7200(201300)|8100(201300)\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=1800(201300)|2100(201300)|2400(201300)|2700(201300)|3000(201300)|3600(201300)|4200(201300)|4800(201300)|5400(201300)|6000(201300)|6300(201300)|7200(201300)|8100(201300)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"DG\",\r\n Desc: \"125 D Gutter **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 8690\",\r\n Length: \"8690\",\r\n CodeBase: \"DG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DG55125**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DGUB125\",\"Use\":\"Gutter Strap\",\"Qty\":\"=(Length/900)+2\"},{\"Code\":\"SCTF\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+2\"},{\"Code\":\"RI43100\",\"Qty\":\"12\",\"Colour\":\"Area.RoofSheetColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"DGLSE\",\r\n Desc: \"125 D Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"DGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DG125SEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"DGRSE\",\r\n Desc: \"125 D Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"DGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DG125SER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO656Z\",\r\n Desc: \"65X65 Pop Square Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO656Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPP6565ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DP656\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DP656\",\r\n Desc: \"65X65 Downpipe ** 1800mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 1800\",\r\n Length: \"1800\",\r\n CodeBase: \"DP656\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DP6565**18\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\"},{\"Code\":\"ST656\",\"Qty\":\"=(Length/1200)\"}]}',\r\n PromptCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL01\",\r\n Desc: \"Cen CFL01 Barge Cap **H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 5390 (Corrugated - C/Bond D/S 0.42 (Non-Trafficable) Barge Capping)|1 x 4796 (Corrugated - C/Bond D/S 0.42 (Non-Trafficable) Barge Capping)\",\r\n Length: \"5390\",\r\n CodeBase: \"CFL01\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL01**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL17\",\r\n Desc: \"Cen CFL17 Barge (Corro) O/Hang **H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 8670 (Corrugated - C/Bond D/S 0.42 (Non-Trafficable) Back OH Barge Capping)\",\r\n Length: \"8670\",\r\n CodeBase: \"CFL17\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL17**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: CFL24 (Fascia Flashing)\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 8690 (Fascia Flashing)\",\r\n Length: \"8690\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \".6DEG\",\r\n DescAppend: \"6 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 8530 (Back Fascia Beam)|1 x 8546 (Cutout Beam A)|1 x 4665 (Rafter)|1 x 4371 (Left Rafter)|4 x 4228 (Left Purlin)|1 x 4959 (Right Rafter)|4 x 4228 (Right Purlin)\",\r\n Length: \"8530\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-6.0\",\r\n RightAngle: \"6.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4665\",\r\n FinishLength: \"4635\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Intermediate Beam`Classic Cream - CC``1`1`4665`4635`0.0`-6.0`6.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Classic Cream` 1`1586510`0`0\",\r\n },\r\n 3: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-6.0\",\r\n RightAngle: \"6.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4371\",\r\n FinishLength: \"4341\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Left Intermediate Beam`Classic Cream - CC``1`1`4371`4341`0.0`-6.0`6.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Classic Cream` 2`1586510`0`0\",\r\n },\r\n 4: null,\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-6.0\",\r\n RightAngle: \"6.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4959\",\r\n FinishLength: \"4929\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Right Intermediate Beam`Classic Cream - CC``1`1`4959`4929`0.0`-6.0`6.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Classic Cream` 3`1586510`0`0\",\r\n },\r\n 6: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"RHS150505G\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-6.0\",\r\n RightAngle: \"6.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4665\",\r\n FinishLength: \"4635\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Intermediate Beam`Classic Cream - CC``1`1`4665`4635`0.0`-6.0`6.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Classic Cream` 1`1586510`0`0\",\r\n },\r\n 3: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-6.0\",\r\n RightAngle: \"6.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4371\",\r\n FinishLength: \"4341\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Left Intermediate Beam`Classic Cream - CC``1`1`4371`4341`0.0`-6.0`6.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Classic Cream` 2`1586510`0`0\",\r\n },\r\n 4: null,\r\n 5: {\r\n CutPlane: \"Front\",\r\n LeftAngle: \"-6.0\",\r\n RightAngle: \"6.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4959\",\r\n FinishLength: \"4929\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Right Intermediate Beam`Classic Cream - CC``1`1`4959`4929`0.0`-6.0`6.0`0.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Classic Cream` 3`1586510`0`0\",\r\n },\r\n 6: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"MSJ.RHS150505G\",\r\n Desc: \"RHS 150 X 50 X 5.00mm Allgal (exceeds max stock length of 8000mm)\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"1 x 8530 (Back Fascia Beam)\",\r\n Length: \"8530\",\r\n CodeBase: \"MSJ.RHS150505G\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (exceeds max stock length of 8000mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"RHS150505GA80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"Length=8000 DisableNesting=1\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=8000 DisableNesting=1\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"5 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"SHS65653\",\r\n Desc: \"SHS 65 X 65 X 3.00mm Allgal **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 3552 (Post in Ground (Beam to Side))|1 x 3082 (Post in Ground (Beam to Side))|1 x 3021 (Post in Ground (Beam to Side))|1 x 2894 (Post in Ground (Under Beam))\",\r\n Length: \"3552\",\r\n CodeBase: \"SHS65653\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHS65653**80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Back Fascia Beam Fixed to 65mm Post)|2 (For Cutout Beam A Fixed to 65mm Post)|8 (For Left Purlin)|8 (For Right Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK315865NSCD-S\",\r\n Desc: \"Cen BK3 15865 ** Non Standard\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 (For Rafter)|1 (For Left Rafter Fixed to 65mm Post)|1 (For Right Rafter Fixed to 65mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK315865NSCD\",\r\n CodeAppend: \"-S.6DEG DOWN\",\r\n DescAppend: \"6 Degrees Down\",\r\n \"CL ID\": \"2\",\r\n Fielders_Code: \"CNBK3CB158NS**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"6.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK3\",\r\n Angle1: \"6.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 2: {\r\n BracketType: \"BK3\",\r\n Angle1: \"6.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"6.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK3\",\r\n Angle1: \"6.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 2: {\r\n BracketType: \"BK3\",\r\n Angle1: \"6.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK576565\",\r\n Desc: \"Cen BK57 Compound Bracket *Non Std* **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 (For Rafter)|1 (For Left Rafter)|1 (For Right Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"BK5715865\",\r\n CodeAppend: \"(TO BEAM)-S.15865.6DEG UP .4DEG RH\",\r\n DescAppend: \"158x65 6 Degrees Up 4 Degrees Right Hand\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"CNBK57NS65**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK57\",\r\n Angle1: \"4.00\",\r\n Angle2: \"-6.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK57\",\r\n Angle1: \"4.00\",\r\n Angle2: \"-6.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 2: {\r\n BracketType: \"BK57\",\r\n Angle1: \"4.00\",\r\n Angle2: \"-6.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK57\",\r\n Angle1: \"4.00\",\r\n Angle2: \"-6.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK57\",\r\n Angle1: \"4.00\",\r\n Angle2: \"-6.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 2: {\r\n BracketType: \"BK57\",\r\n Angle1: \"4.00\",\r\n Angle2: \"-6.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"COCOVER\",\r\n Desc: \"Corrugated Cover Sheet Only (Metal)\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"\",\r\n Qty: \"2 x 5450 (Sheet Cover Sheet)\",\r\n Length: \"5450\",\r\n CodeBase: \"COCOVER\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PACCSSLM\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"$$=1\",\r\n Image_b64: null,\r\n PromptTextCodes: \"$$=1\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n CVSC00227: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Surfmist/Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 x 3804|1 x 3744|1 x 3684|1 x 3623|4 x 4849 (B/C Fixed)|1 x 4833 (B/C Fixed)|1 x 4713 (B/C Fixed)|1 x 4652 (B/C Fixed)|1 x 4592 (B/C Fixed)|1 x 4472 (B/C Fixed)|1 x 4411 (B/C Fixed)|1 x 4351 (B/C Fixed)|1 x 4231 (B/C Fixed)|1 x 4170 (B/C Fixed)|1 x 4110 (B/C Fixed)|1 x 3990 (B/C Fixed)\",\r\n Length: \"3804\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POLYCARBONATE ROOFING\",\r\n Code: \"PSCD\",\r\n Desc: \"C-Dek 310 Polycarbonate (1.50mm Thick) Sheet\",\r\n Use: \"\",\r\n Colour: \"Opal\",\r\n Area: \"1\",\r\n Qty: \"1 x 5000 (B/C Fixed/finish @4773mm)|1 x 5000 (B/C Fixed/finish @4532mm)|1 x 4500 (B/C Fixed/finish @4291mm)|1 x 4500 (B/C Fixed/finish @4050mm)\",\r\n Length: \"5000\",\r\n CodeBase: \"PSCD\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PCSCDK310OP\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"CLEARFIX\",\"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\",\"Colour\":\"Plain\"},{\"Code\":\"BK30G\",\"Qty\":\"3\",\"Use\":\"Infill Support\",\"Conditions\":{\"Use\":\"=*Infill*\"}}]}',\r\n PromptCodes:\r\n \"SL=1000(206000)|1500(206000)|2000(206000)|2500(206000)|3000(206000)|3500(206000)|4000(206000)|4500(206000)|5000(206000)|5500(206000)|6000(206000)|6500(206000)|7000(206000)|7500(206000)|8000(206000)\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=1000(206000)|1500(206000)|2000(206000)|2500(206000)|3000(206000)|3500(206000)|4000(206000)|4500(206000)|5000(206000)|5500(206000)|6000(206000)|6500(206000)|7000(206000)|7500(206000)|8000(206000)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FGS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FGS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGS\",\r\n Desc: \"Fascia Gutter Slotted **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 7131\",\r\n Length: \"7131\",\r\n CodeBase: \"FGS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGFS55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO656Z\",\r\n Desc: \"65X65 Pop Square Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO656Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPP6565ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DP656\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DP656\",\r\n Desc: \"65X65 Downpipe ** 1800mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 1800\",\r\n Length: \"1800\",\r\n CodeBase: \"DP656\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DP6565**18\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\"},{\"Code\":\"ST656\",\"Qty\":\"=(Length/1200)\"}]}',\r\n PromptCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL22\",\r\n Desc: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 x 4788 (Cent 310 Deck Barge Capping)|1 x 3302 (Cent 310 Deck Barge Capping)|1 x 1250 (Cent 310 Deck Barge Capping)\",\r\n Length: \"4788\",\r\n CodeBase: \"CFL22\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL22**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Mangrove\",\r\n Area: \"1\",\r\n Qty: \"1 x 6978 (Cutout Beam A)|1 x 3393 (Left Rafter)|1 x 1180 (Partial Attachment Beam)|1 x 6860 (Purlin)|1 x 4735 (Right Rafter)\",\r\n Length: \"6978\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: {\r\n CutPlane: \"Top\",\r\n LeftAngle: \"-11.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"3393\",\r\n FinishLength: \"3363\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Left Intermediate Beam`Mangrove - MM``1`1`3393`3363`0.0`-2.0`0.0`-11.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Mangrove` 1`1586510`0`0\",\r\n },\r\n 2: null,\r\n 3: null,\r\n 4: {\r\n CutPlane: \"Top\",\r\n LeftAngle: \"-11.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4735\",\r\n FinishLength: \"4705\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Right Intermediate Beam`Mangrove - MM``1`1`4735`4705`0.0`-2.0`2.0`-11.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Mangrove` 2`1586510`0`0\",\r\n },\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: {\r\n CutPlane: \"Top\",\r\n LeftAngle: \"-11.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"3393\",\r\n FinishLength: \"3363\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Left Intermediate Beam`Mangrove - MM``1`1`3393`3363`0.0`-2.0`0.0`-11.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Mangrove` 1`1586510`0`0\",\r\n },\r\n 2: null,\r\n 3: null,\r\n 4: {\r\n CutPlane: \"Top\",\r\n LeftAngle: \"-11.0\",\r\n RightAngle: \"0.0\",\r\n CompoundAngle: \"0.0\",\r\n HolePunching: \"PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING\",\r\n HolePunchingRecommend: \"PLAIN_CUT=CUTS with NO PUNCHING\",\r\n Section: \"1586510\",\r\n CutLength: \"4735\",\r\n FinishLength: \"4705\",\r\n LeftHeelCut: \"0\",\r\n RightHeelCut: \"0\",\r\n \"CL DATA\":\r\n \"BB158`Cen Box Beam 158x65x0.95BMT **`Right Intermediate Beam`Mangrove - MM``1`1`4735`4705`0.0`-2.0`2.0`-11.0`0.0`PUNCH_STYLE=PLAIN_CUT=CUTS with NO PUNCHING`0`0`0`0`Mangrove` 2`1586510`0`0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"BB65\",\r\n Desc: \"Cen Box Beam 65x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Mangrove\",\r\n Area: \"1\",\r\n Qty: \"1 x 3351 (Post in Ground (Beam to Side))|1 x 3235 (Post in Ground (Beam to Side))|1 x 3188 (Post in Ground (Beam to Side))|1 x 3193 (Post in Ground (Under Beam))\",\r\n Length: \"3351\",\r\n CodeBase: \"BB65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"AltIndex=BB656575\",\r\n Image_b64: null,\r\n PromptTextCodes: \"AltIndex=BB656575\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Mangrove\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Mangrove\",\r\n Area: \"1\",\r\n Qty: \"2 (For Cutout Beam A Fixed to 65mm Post)|1 (For Left Rafter)|1 (For Partial Attachment Beam Fixed to 65mm Post)|2 (For Purlin)|1 (For Right Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Mangrove\",\r\n Area: \"1\",\r\n Qty: \"1 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK46158S\",\r\n Desc: \"Cen BK46 15865 Beam To Beam Conn. ** Non Standard\",\r\n Use: \"\",\r\n Colour: \"Mangrove\",\r\n Area: \"1\",\r\n Qty: \"1 (For Left Rafter)|1 (For Right Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"BK46158S\",\r\n CodeAppend: \".15865.79DEG RH\",\r\n DescAppend: \"158x65 79 Degrees Right Hand\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"CNBK46NS158**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"-79.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK46\",\r\n Angle1: \"-79.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"-79.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK46\",\r\n Angle1: \"-79.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK88158\",\r\n Desc: \"Cen BK88 158 Box Beam Stop End **\",\r\n Use: \"\",\r\n Colour: \"Mangrove\",\r\n Area: \"1\",\r\n Qty: \"1 (End Cap for Partial Attachment Beam)\",\r\n Length: \"\",\r\n CodeBase: \"BK88158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK88158SE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Use\":\"Beam End Cap Fix\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON16565\",\r\n Desc: \"Cen CON1 6565 Galv Inground Connector\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON16565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON165GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"10X90\",\"Colour\":\"Area.PostColour\",\"Qty\":\"2\"},{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.PostColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB65\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"BC5075\",\r\n Desc: \"50mm Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"\",\r\n Qty: \"1 x 7500 (5750mm(Back Channel))\",\r\n Length: \"7500\",\r\n CodeBase: \"BC5075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BKCCDK50H**7500\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"Length=7500\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=7500\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n FTLC01383: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Monument/Surfmist\",\r\n Area: \"1\",\r\n Qty: \"47 x 3962 (B/C Fixed)\",\r\n Length: \"3962\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 14470\",\r\n Length: \"14470\",\r\n CodeBase: \"FG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"2 x 2769\",\r\n Length: \"2769\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2769mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL22\",\r\n Desc: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 3902 (Cent 310 Deck Barge Capping)\",\r\n Length: \"3902\",\r\n CodeBase: \"CFL22\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL22**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 7153 (Fascia Beam)|1 x 3808 (Left Rafter)|1 x 3808 (Right Rafter)\",\r\n Length: \"7153\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS90\",\r\n Desc: \"Post Shoe to suit 90mm SHS Post\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PS2P9090H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS909035\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"SHS65653\",\r\n Desc: \"SHS 65 X 65 X 3.00mm Allgal **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"3 x 3461 (Post in Ground (Under Beam))\",\r\n Length: \"3461\",\r\n CodeBase: \"SHS65653\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHS65653**80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"SHS909035\",\r\n Desc: \"SHS 89 X 89 X 3.50mm Allgal **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 3619 (Post in Ground (Beam to Side))\",\r\n Length: \"3619\",\r\n CodeBase: \"SHS909035\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHS898935**80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Fascia Beam Fixed to 65mm Post)|1 (For Left Rafter)|1 (For Left Rafter Fixed to 65mm Post)|1 (For Right Rafter)|1 (For Right Rafter Fixed to 65mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON515865G\",\r\n Desc: \"Cen CON5 15865 300 Beam Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"1 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"CON515865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON5158GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"16\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"BC5075\",\r\n Desc: \"50mm Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"\",\r\n Qty: \"1 x 7500 (6970mm(Back Channel*1*))|1 x 7500 (7500mm(Back Channel*1*))\",\r\n Length: \"7500\",\r\n CodeBase: \"BC5075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BKCCDK50H**7500\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"Length=7500\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=7500\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n ],\r\n OLCC00019: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark/Paperbark\",\r\n Area: \"1\",\r\n Qty: \"44 x 2361|1 x 2361 (A1-B/C Fixed)\",\r\n Length: \"2361\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark/Paperbark\",\r\n Area: \"2\",\r\n Qty: \"43 x 2361|3 x 2361 (A2-B/C Fixed)\",\r\n Length: \"2361\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark/Paperbark\",\r\n Area: \"3\",\r\n Qty: \"44 x 2361|1 x 2361 (A3-B/C Fixed)\",\r\n Length: \"2361\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CDK42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"TS1220100B8\",\"Qty\":\"=Qty*3\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"!=*B/C Fixed*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 41834\",\r\n Length: \"41834\",\r\n CodeBase: \"FG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"JSTRAP\",\"Use\":\"Gutter Clip\",\"Qty\":\"=(Length/900)+1\"},{\"Code\":\"SCTF\",\"Qty\":\"=(Length/900)+1\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"FG\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"1 x 2025\",\r\n Length: \"2025\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2025mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"2\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"2\",\r\n Qty: \"1 x 2025\",\r\n Length: \"2025\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2025mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PO90SWZ\",\r\n Desc: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"3\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO90SWZ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"8\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PVC90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"PVC90\",\r\n Desc: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"3\",\r\n Qty: \"1 x 2025\",\r\n Length: \"2025\",\r\n CodeBase: \"PVC90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2025mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH6000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"=(Length/1200)\",\"Use\":\"Downpipe Fix\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"ST90\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=6000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=6000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL22\",\r\n Desc: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 13928 (A1-Cent 310 Deck Back OH Barge Capping)|1 x 2301 (A1-Cent 310 Deck Barge Capping)\",\r\n Length: \"13928\",\r\n CodeBase: \"CFL22\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL22**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL22\",\r\n Desc: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"1 x 13978 (Cent 310 Deck Back OH Barge Capping)\",\r\n Length: \"13978\",\r\n CodeBase: \"CFL22\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL22**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CFL22\",\r\n Desc: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"3\",\r\n Qty: \"1 x 13928 (A3-Cent 310 Deck Back OH Barge Capping)|1 x 2301 (A3-Cent 310 Deck Barge Capping)\",\r\n Length: \"13928\",\r\n CodeBase: \"CFL22\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCFL22**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"2 x 5229 (A1-Back Fascia Beam)|1 x 5159 (A1-Back Fascia Beam)|1 x 6980 (A1-Fascia Beam)|1 x 6910 (A1-Fascia Beam)|1 x 1855 (A1-Left Rafter)\",\r\n Length: \"5229\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"2 x 5229 (A2-Back Fascia Beam)|2 x 6989 (A2-Fascia Beam)\",\r\n Length: \"5229\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158x65x0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"3\",\r\n Qty: \"2 x 5229 (A3-Back Fascia Beam)|1 x 5159 (A3-Back Fascia Beam)|1 x 6948 (A3-Fascia Beam)|1 x 6878 (A3-Fascia Beam)|1 x 1855 (A3-Right Rafter)\",\r\n Length: \"5229\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"BK2164G\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Use\":\"=*Wall Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"12 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"SHS65653\",\r\n Desc: \"SHS 65 X 65 X 3.00mm Allgal **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 x 2945 (A1-Post in Ground (Beam to Side))|1 x 2875 (A1-Post in Ground (Beam to Side))|7 x 2787 (A1-Post in Ground (Under Beam))|3 x 2717 (A1-Post in Ground (Under Beam))\",\r\n Length: \"2945\",\r\n CodeBase: \"SHS65653\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHS65653**80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"1 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"SHS65653\",\r\n Desc: \"SHS 65 X 65 X 3.00mm Allgal **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"1 x 2717 (Post in Ground (Under Beam))\",\r\n Length: \"2717\",\r\n CodeBase: \"SHS65653\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHS65653**80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"3\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS26565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"SHS65653\",\r\n Desc: \"SHS 65 X 65 X 3.00mm Allgal **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"3\",\r\n Qty: \"1 x 2945 (A3-Post in Ground (Beam to Side))|1 x 2875 (A3-Post in Ground (Beam to Side))|1 x 2717 (A3-Post in Ground (Under Beam))\",\r\n Length: \"2945\",\r\n CodeBase: \"SHS65653\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHS65653**80\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: IBLC 23 1 (For Post)\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"2\",\r\n Qty: \"1 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: IBLC 23 1 (For Post)\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"3\",\r\n Qty: \"1 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"1 (A1-For Back Fascia Beam Fixed to 65mm Post)|1 (A1-For Fascia Beam Fixed to 65mm Post)|2 (A1-For Left Rafter Fixed to 65mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26565\",\r\n Desc: \"Cen BK2 6565 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"1\",\r\n Qty: \"10 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK26565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB65**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"},{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\",\"Conditions\":{\"Use\":\"=*Post Under Beam*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"SHS65653\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"3\",\r\n Qty: \"1 (A3-For Back Fascia Beam Fixed to 65mm Post)|1 (A3-For Fascia Beam Fixed to 65mm Post)|2 (A3-For Right Rafter Fixed to 65mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK2CB158**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON515865G\",\r\n Desc: \"Cen CON5 15865 300 Beam Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"3 (A1-For Back Fascia Beam)|1 (A1-For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"CON515865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON5158GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"16\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON515865G\",\r\n Desc: \"Cen CON5 15865 300 Beam Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"2\",\r\n Qty: \"2 (A2-For Back Fascia Beam)|2 (A2-For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"CON515865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON5158GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"16\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON515865G\",\r\n Desc: \"Cen CON5 15865 300 Beam Con Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"3\",\r\n Qty: \"2 (A3-For Back Fascia Beam)|2 (A3-For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"CON515865G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON5158GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8N\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"16\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"BC5075\",\r\n Desc: \"50mm Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Paperbark\",\r\n Area: \"\",\r\n Qty: \"1 x 7500 (2301mm(Back Channel)//2301mm(Back Channel)//2301mm(Back Channel))|1 x 7500 (2301mm(Back Channel))\",\r\n Length: \"7500\",\r\n CodeBase: \"BC5075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BKCCDK50H**7500\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"Length=7500\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=7500\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n ],\r\n};\r\n\r\nexport const LYSAGHT_BOM_JOBS = {\r\n LSBL00222: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS6DS\",\r\n Desc: \"Custom Orb 0.42BMT DS\",\r\n Use: \"\",\r\n Colour: \"Classic Cream/Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"6 x 4763\",\r\n Length: \"4763\",\r\n CodeBase: \"RS6DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CO42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT45MR\",\"Use\":\"Roof Fix\",\"Qty\":\"=((Area.NumInternalPurlins*5)+5)*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*5\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Area.DesignType\":\"=Flat Roof\",\"Use\":\"!=*B/C Fixed*\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"COFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Length\":\"915\"},{\"Code\":\"FT50_WCE\",\"Qty\":\"=((Area.NumInternalPurlins*5)+5)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT50_WCE\",\"Qty\":\"=Qty*5\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FR64\",\"Qty\":\"=Qty*4\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Use\":\"Stitching\"},{\"Code\":\"FR64\",\"Qty\":\"=Qty*8\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"},\"Use\":\"Stitching\"},{\"Code\":\"FT45MR\",\"Qty\":\"=((Area.NumInternalPurlins*5)+7)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*6\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"COFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"},\"Length\":\"915\"},{\"Code\":\"FT50_WCE\",\"Qty\":\"=((Area.NumInternalPurlins*5)+7)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Qty\":\"=Qty*6\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Code\":\"FT35_WCB\"}]}',\r\n PromptCodes: \"REDIRECT_GIL=RS6DSS\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_GIL=RS6DSS\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"EMGEC\",\r\n Desc: \"Emline Gutter Corner External\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"EMGEC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"EMGEC**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"12\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GSESL\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GUTTER_NOT_FOUND\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"6\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GUTTER_NOT_FOUND\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSESL\",\r\n Desc: \"Emline Gutter 0.42 Slotted **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 5167\",\r\n Length: \"5167\",\r\n CodeBase: \"GSESL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"EMGS42**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"EMGGPB\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"},{\"Code\":\"STUD19Q\",\"Conditions\":{\"Use\":\"=*Overhang*\",\"Area.RoofSheet\":\"!=*Bondor*\"},\"Colour\":\"Plain\"},{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Use\":\"=*Overhang*\",\"Area.RoofSheet\":\"!=*Bondor*\"}}]}',\r\n PromptCodes: \"MAX_LM=8700 CutExtra=150 ExtraLM=100\",\r\n Image_b64: null,\r\n PromptTextCodes: \"MAX_LM=8700 CutExtra=150 ExtraLM=100\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: GUTTER_NOT_FOUND\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 4263\",\r\n Length: \"4263\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DP90\",\r\n Desc: \"PVC Stormwater Pipe 90mm DIA 3LM\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"1 x 2229\",\r\n Length: \"2229\",\r\n CodeBase: \"DP90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2229mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH3000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"2\"},{\"Code\":\"FR72\",\"Qty\":\"4\",\"Colour\":\"Surfmist\"},{\"Code\":\"EL9090Q\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=3000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=3000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL90Z\",\r\n Desc: \"Downpipe Outlet Round 90mm Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OL90Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DP90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"LBARGECO\",\r\n Desc: \"L Barge Custom Orb **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 4643 (CUSTOM ORB - C/Bond D/S 0.42 (No Foot Traffic) Barge Capping)\",\r\n Length: \"4643\",\r\n CodeBase: \"LBARGECO\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL61**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/400)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"ExtraLM=165\",\r\n Image_b64: null,\r\n PromptTextCodes: \"ExtraLM=165\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N2004000\",\r\n Desc: \"Post Steel 90x90x2mm notched FL200 H** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"2 x 3123 (Post in Ground (Notched))\",\r\n Length: \"3123\",\r\n CodeBase: \"PS90N200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Notched (finish 3123mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90200H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90200\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Slab*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209205)|4000(209207)|5000(209209)|6000(209213) SL_EMU=3000(209205)|4000(209207) SL_NUN=3000(209205)|4000(209207) SL_GIL=3000(209205)|4000(209207)|4500(209203) REDIRECT_NUN=PS90N200V\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB200\",\r\n Desc: \"Connector Beam FL200 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"4 (For Rafter)|4 (For Left Purlin)|4 (For Purlin)|4 (For Right Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB20050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC20\",\r\n Desc: \"Beam Corner Connector FL200 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"2 (For Back Fascia Beam)|2 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"HCC20\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC20H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 x 9000 (4000mm(Fascia Beam)//4000mm(Back Fascia Beam))|1 x 9000 (3811mm(Right Rafter)//3811mm(Left Rafter))|1 x 9000 (3811mm(Rafter)//3811mm(Rafter))|1 x 9000 (1257mm(Right Purlin)//1257mm(Right Purlin)//1257mm(Purlin)//1257mm(Purlin)//1257mm(Left Purlin)//1257mm(Left Purlin))\",\r\n Length: \"9000\",\r\n CodeBase: \"BS200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_DUB=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_EMU=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_KEW=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) REDIRECT_GIL=BS200L REDIRECT_NUN=BS200L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_DUB=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_EMU=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_KEW=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) REDIRECT_GIL=BS200L REDIRECT_NUN=BS200L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n ],\r\n VDPL00030: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS3\",\r\n Desc: \"Spandek 0.42BMT **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"9 x 3312|8 x 3285|10 x 3285\",\r\n Length: \"3312\",\r\n CodeBase: \"RS3\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SD42**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*4)+8)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*4\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FR64\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Qty\":\"=((Length/2000)+1)*Qty\",\"Use\":\"Stitching\"},{\"Code\":\"WGFG\",\"Qty\":\"=((Length/2000)+1)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FR64\",\"Qty\":\"=((Length/1200)+1)*Qty\",\"Use\":\"Stitching\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"WGFG\",\"Qty\":\"=((Length/1200)+1)*Qty\",\"Use\":\"Stitching\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"RCFILL3\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Use\":\"Profile Foam\",\"Length\":\"800\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*4)+8)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT50_WCB\",\"Qty\":\"=Qty*4\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT65MR\",\"Qty\":\"=5*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT45MR\",\"Qty\":\"=(Area.NumInternalPurlins*4)*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT20MN\",\"Qty\":\"=5*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL3\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"},\"Length\":\"800\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*4)+5)*Qty\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT35_WCB\",\"Qty\":\"=5*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GQ\",\r\n Desc: \"Quad Gutter Hi-Front 115 .42mm **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 9530|2 x 6530\",\r\n Length: \"9530\",\r\n CodeBase: \"GQ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"QGHF115**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"QIGPB\",\"Qty\":\"=(Length/900)+1\",\"Use\":\"Gutter Clip\",\"Conditions\":{\"POP\":\"=LSB\"}},{\"Code\":\"QS15\",\"Qty\":\"=(Length/900)+1\",\"Use\":\"Gutter Clip\",\"Conditions\":{\"POP\":\"=EMU\"}},{\"Code\":\"QS15\",\"Qty\":\"=(Length/900)+1\",\"Use\":\"Gutter Clip\",\"Conditions\":{\"POP\":\"=NUN\"}},{\"Code\":\"FLRQ\",\"Use\":\"Nord Flashing\",\"Colour\":\"Area.GutterColour\",\"Conditions\":{\"Area.DesignType\":\"=Flat Roof\",\"Area.RoofSheet\":\"=*Flatdek*\"}}]}',\r\n PromptCodes: \"MAX_LM=8700 CutExtra=150 ExtraLM=100\",\r\n Image_b64: null,\r\n PromptTextCodes: \"MAX_LM=8700 CutExtra=150 ExtraLM=100\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"QEC\",\r\n Desc: \"Gutter Quad Profile No1 (High Front) - External Corner\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n CodeBase: \"QEC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"QGHF115CEC**90\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"12\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GQ\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075Z\",\r\n Desc: \"Downpipe Outlet 100 x 75 Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"OL10075Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPP10075ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR64M\",\"Qty\":\"6\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100751800\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 1800mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 1800\",\r\n Length: \"1800\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=1800\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 2400\",\r\n Length: \"2400\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CRIDGE\",\r\n Desc: \"Contemporary Ridge Cap\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4 x 4809|1 x 3300\",\r\n Length: \"4809\",\r\n CodeBase: \"CRIDGE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL08**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/600)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/400)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS100L\",\r\n Desc: \"Firmlok 100x1.1mm Hi Gloss **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 2545 (Collar Tie)\",\r\n Length: \"2545\",\r\n CodeBase: \"BS100L\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL10011H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 4275 (Hip Rafter)|2 x 4275 (Hip Rafter)\",\r\n Length: \"4275\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 2990 (Purlin HL3)|2 x 1441 (Purlin HL3 LH)\",\r\n Length: \"2990\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 1441 (Purlin HL3 RH)|2 x 2979 (Purlin HW3)\",\r\n Length: \"1441\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 2990 (Ridge Purlin)\",\r\n Length: \"2990\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200L\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 5790 (Attachment Beam (Left))|1 x 5790 (Attachment Beam (Right))\",\r\n Length: \"5790\",\r\n CodeBase: \"BS200L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200L\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 4340 (Perimeter Beam (Back))|2 x 4340 (Perimeter Beam (Front))\",\r\n Length: \"4340\",\r\n CodeBase: \"BS200L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200L\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 3293 (Gable Rafter (No Post w Collar Tie))|2 x 3293 (Gable Rafter (No Post w Collar Tie))\",\r\n Length: \"3293\",\r\n CodeBase: \"BS200L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS100T34000\",\r\n Desc: \"Post Steel 100x100x3mm ** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"6 x 3750 (Post in Ground (Freespan) (Beam to Side))\",\r\n Length: \"3750\",\r\n CodeBase: \"PS100T3\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 3750mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PS1003H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Slab*\"}},{\"Code\":\"FBH160NYG\",\"Qty\":\"2\",\"Use\":\"Post Behind Fix\",\"Conditions\":{\"Use\":\"=*Behind Beam*\"}},{\"Code\":\"FBH11010NYG\",\"Qty\":\"1\",\"Use\":\"Post Beam Side Fix\",\"Conditions\":{\"Use\":\"=*Beam to Side*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(181033)|4000(181034)|5000(181035)|6000(181036) SL_NUN=3000(181033)|4000(181034) SL_GIL=4000(181034) SL_WAN=4000(181034) SL_EMU=4000(181034)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HRU15R\",\r\n Desc: \"Hip Rafter Single Purlin Connector Right FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Purlin HL3 LH)\",\r\n Length: \"\",\r\n CodeBase: \"HRU15R\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHRU15RH**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HRU15L\",\r\n Desc: \"Hip Rafter Single Purlin Connector Left FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Purlin HL3 RH)\",\r\n Length: \"\",\r\n CodeBase: \"HRU15L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHRU15LH**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HRU15\",\r\n Desc: 'Hip Rafter \"U\" Connector FL150 H**',\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Purlin HW3)|2 (For Purlin HW3)\",\r\n Length: \"\",\r\n CodeBase: \"HRU15\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHRU15H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"18\",\"Colour\":\"Area.BeamColour\",\"Use\":\"Tek\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"6 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS100T3\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"CTC10\",\r\n Desc: \"Collar Tie Connector FL100 H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4 (For Collar Tie)\",\r\n Length: \"\",\r\n CodeBase: \"CTC10\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHICTC10H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"14\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS100\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4 (For Purlin HL3)|2 (For Purlin HL3 LH)|2 (For Purlin HL3 RH)|4 (For Ridge Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB200\",\r\n Desc: \"Connector Beam FL200 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Attachment Beam (Left) Fixed to 100mm Post)|2 (For Attachment Beam (Right) Fixed to 100mm Post)|4 (For Perimeter Beam (Back) Fixed to 100mm Post)|4 (For Perimeter Beam (Front) Fixed to 100mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB20050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"H150C\",\r\n Desc: \"Hip to Corner Connector FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4 (For Hip Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"H150C\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"2\",\r\n Fielders_Code: \"LHIH150CH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"45.00\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"12\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"45.00\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HRU15(TO BEAM)-S\",\r\n Desc: 'Hip Rafter \"U\" Connector FL150 H**',\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Hip Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"HRU15\",\r\n CodeAppend: \"(TO BEAM)-S.15050.16DEG DOWN .45DEG LH\",\r\n DescAppend: \"150x50 16 Degrees Down 45 Degrees Left Hand\",\r\n \"CL ID\": \"3\",\r\n Fielders_Code: \"LHIHRU15H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK57\",\r\n Angle1: \"-45.00\",\r\n Angle2: \"16.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"18\",\"Colour\":\"Area.BeamColour\",\"Use\":\"Tek\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK57\",\r\n Angle1: \"-45.00\",\r\n Angle2: \"16.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HRU15(TO BEAM)-S\",\r\n Desc: 'Hip Rafter \"U\" Connector FL150 H**',\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Hip Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"HRU15\",\r\n CodeAppend: \"(TO BEAM)-S.15050.16DEG DOWN .45DEG RH\",\r\n DescAppend: \"150x50 16 Degrees Down 45 Degrees Right Hand\",\r\n \"CL ID\": \"4\",\r\n Fielders_Code: \"LHIHRU15H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK57\",\r\n Angle1: \"45.00\",\r\n Angle2: \"16.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"18\",\"Colour\":\"Area.BeamColour\",\"Use\":\"Tek\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK57\",\r\n Angle1: \"45.00\",\r\n Angle2: \"16.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"RRC20P-S\",\r\n Desc: \"Rafter To Rail Connector For FL200 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4 (For Gable Rafter (No Post w Collar Tie))\",\r\n Length: \"\",\r\n CodeBase: \"RRC20P\",\r\n CodeAppend: \"-S.23DEG UP\",\r\n DescAppend: \"22.5 Degrees Up\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"LHIRRC20PH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-23.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH70NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Fixed*\"}},{\"Code\":\"FBH11010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*90*\"}},{\"Code\":\"FBH11010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*100*\"}},{\"Code\":\"FBH13010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*125*\"}},{\"Code\":\"FBH150NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*140*\"}},{\"Code\":\"FBH160NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*150*\"}},{\"Code\":\"FBH190NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*175*\"}},{\"Code\":\"FT32MS\",\"Qty\":\"4\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"},{\"Code\":\"FT20M\",\"Qty\":\"6\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-23.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"APEX20Z\",\r\n Desc: \"Firmlok Apex Connector 200mm Zinc\",\r\n Use: \"\",\r\n Colour: \"Zinc\",\r\n Area: \"1\",\r\n Qty: \"2 (For Gable Rafter (No Post w Collar Tie))\",\r\n Length: \"\",\r\n CodeBase: \"APEX20Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"22.5 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLAB200ZL225\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"24\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n ],\r\n COFL00234: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"SSIP50\",\r\n Desc: \"Bondor Solarspan Plain 50mm Thick Insulated Panel ****\",\r\n Use: \"\",\r\n Colour: \"Manor Red/Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"7 x 3848 (; Left to Right)|7 x 3848 (; Right to Left)\",\r\n Length: \"3848\",\r\n CodeBase: \"SSIP50\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Cut back foam 60mm for Fascia Flashing\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"IRSS50****\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"SSTS14125\",\"Use\":\"Roof Fix\",\"Qty\":\"=(Qty*4)+5\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT125_WCE\",\"Qty\":\"=(Qty*4)+5\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Use\":\"Roof Fix\"},{\"Code\":\"SSTS14125\",\"Qty\":\"=Qty*4\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Use\":\"!=*B/C Fixed*\",\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Use\":\"Roof Fix\"},{\"Code\":\"FT125_WCE\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Use\":\"!=*B/C Fixed*\",\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Qty\":\"=Qty*4\",\"Use\":\"Roof Fix\"},{\"Code\":\"RC8FILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Use\":\"=*B/C Fixed*\"},\"Length\":\"1000\"},{\"Code\":\"SSTS14125\",\"Qty\":\"=(Qty*8)+5\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT125_WCE\",\"Qty\":\"=(Qty*8)+5\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"SSTS14125\",\"Qty\":\"=Qty*8\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT125_WCE\",\"Qty\":\"=Qty*8\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"RC8FILL\",\"Length\":\"1000\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"MIN_LM=1800 ReverseColCode=1\",\r\n Image_b64: null,\r\n PromptTextCodes: \"MIN_LM=1800 ReverseColCode=1\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GS\",\r\n Desc: \"Sheerline Gutter .55mm\",\r\n Use: \"\",\r\n Colour: \"Pale Eucalypt\",\r\n Area: \"1\",\r\n Qty: \"1 x 6020\",\r\n Length: \"6020\",\r\n CodeBase: \"GS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSV\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075\",\r\n Desc: \"Pop 100 x 75 Zincalume/90mm Round\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OL10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPUZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Pale Eucalypt\",\r\n Area: \"1\",\r\n Qty: \"1 x 2292\",\r\n Length: \"2292\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2292mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CRIDGE\",\r\n Desc: \"Contemporary Ridge Cap\",\r\n Use: \"\",\r\n Colour: \"Manor Red\",\r\n Area: \"1\",\r\n Qty: \"1 x 6320\",\r\n Length: \"6320\",\r\n CodeBase: \"CRIDGE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL08**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/600)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/400)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"IP50FOFG\",\r\n Desc: \"Gable Insulated Panel Fascia Overhang Flashing to suit 50mm Panel **\",\r\n Use: \"\",\r\n Colour: \"Pale Eucalypt\",\r\n Area: \"1\",\r\n Qty: \"1 x 6020 (SolarSpan 50 (Non-trafficable) - CYCLONIC SPANS IP50FOFG Flashing)\",\r\n Length: \"6020\",\r\n CodeBase: \"IP50FOFG\",\r\n CodeAppend: \".22DEG\",\r\n DescAppend: \"22 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"IPGOF50**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"RI43100\",\"Qty\":\"=((Length/600)*2)+4\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"RI43100\",\"Qty\":\"=((Length/450)*2)+4\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FR72\",\"Qty\":\"=((Length/600)*2)+4\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FR72\",\"Qty\":\"=((Length/450)*2)+4\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"MAX_LM=6200 ExtraLM=200\",\r\n Image_b64: null,\r\n PromptTextCodes: \"MAX_LM=6200 ExtraLM=200\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"IP50SBF5R\",\r\n Desc: \"Insulated Panel Side Barge Flashing to suit 5 Rib 50mm Panel **\",\r\n Use: \"\",\r\n Colour: \"Manor Red\",\r\n Area: \"1\",\r\n Qty: \"4 x 3873 (SolarSpan 50 (Non-trafficable) - CYCLONIC SPANS Barge Capping)\",\r\n Length: \"3873\",\r\n CodeBase: \"IP50SBF5R\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"IP5RSBF50**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"TS1220100B8\",\"Qty\":\"=(Length/600)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"RI43100\",\"Qty\":\"=(Length/600)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"TS1220100B8\",\"Qty\":\"=(Length/450)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"RI43100\",\"Qty\":\"=(Length/450)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Fielders\",\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/600)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FR72\",\"Qty\":\"=(Length/600)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/450)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FR72\",\"Qty\":\"=(Length/450)+2\",\"Colour\":\"Area.FlashingColour\",\"Conditions\":{\"Brand\":\"=Lysaght\",\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"MAX_LM=6200 ExtraLM=200\",\r\n Image_b64: null,\r\n PromptTextCodes: \"MAX_LM=6200 ExtraLM=200\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"CON90\",\r\n Desc: \"Connector Post 90mm Aluminium\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHICON90\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"SA7510G\",\"Qty\":\"2\",\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"4\",\"Use\":\"Teks\",\"Colour\":\"Area.PostColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N1503000\",\r\n Desc: \"Post Steel 90x90x2mm notched FL150 H** 3000mm\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 x 2650 (Post on Slab (Freespan) (Notched))\",\r\n Length: \"2650\",\r\n CodeBase: \"PS90N150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Notched (finish 2650mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90150H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90150\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Conditions\":{\"Use\":\"!=*Slab*\"},\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"Length=3000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209155)|4000(209157)|5000(209160)|6000(209162) SL_EMU=3000(209155)|4000(209157) SL_NUN=3000(209155)|4000(209157) REDIRECT_NUN=PS90N150V REDIRECT_GIL=PS90N200\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"CON100G\",\r\n Desc: \"Vertical Strut Apex Connector FL100 H**\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Infill Strut)\",\r\n Length: \"\",\r\n CodeBase: \"CON100G\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHICON100GH**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"6\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS100\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB100\",\r\n Desc: \"Connector Beam FL100 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Infill Strut)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB100\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB10050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS100\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"16 (For Purlin T1)|16 (For Ridge Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"GRBC15\",\r\n Desc: \"Gable Rafter Beam Connector FL150 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"4 (For Gable Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"GRBC15\",\r\n CodeAppend: \".22DEG\",\r\n DescAppend: \"22.5 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIGRBC15H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FWH22\",\"Qty\":\"5\",\"Colour\":\"Area.RafterColour\"},{\"Code\":\"FT20M\",\"Qty\":\"5\",\"Colour\":\"Area.RafterColour\"},{\"Code\":\"FT30M\",\"Qty\":\"8\",\"Colour\":\"Plain\"},{\"Code\":\"FBH160NYG\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.FasciaBeam\":\"=FL15015\"}},{\"Code\":\"FBH220NYG\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.FasciaBeam\":\"=FL20020\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC15\",\r\n Desc: \"Beam Corner Connector FL150 **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"2 (For Attachment Beam (Left))|2 (For Attachment Beam (Right))\",\r\n Length: \"\",\r\n CodeBase: \"HCC15\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC15H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"9\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"RRC15-S\",\r\n Desc: \"Beam Connector Rafter to Side Rail FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"4 (For Gable Rafter)|2 (For Gable Rafter Fixed to 90mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"RRC15\",\r\n CodeAppend: \"-S.22DEG UP\",\r\n DescAppend: \"22 Degrees Up\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"LHIRRC15H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-22.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-22.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket `Width `Depth `Angle 1 `Angle 2 `Angle 3 `Colour ID `Num `BL ID `Length 1 `Length 2 `ftt `Bracket Name `Drawing Name `Material `Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Fixed*\"}},{\"Code\":\"FBH9010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*75*\"}},{\"Code\":\"FBH11010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*90*\"}},{\"Code\":\"FBH11010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*100*\"}},{\"Code\":\"FBH13010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*125*\"}},{\"Code\":\"FBH150NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*140*\"}},{\"Code\":\"FBH160NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*150*\"}},{\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*175*\"},\"Code\":\"FBH190NYG\"},{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-22.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n 1: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-22.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"UCF\",\r\n Desc: 'Universal Connector Bracket \"F\" **',\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"7 (Fixed to Fascia (22.5 Degrees); Height 65mm; Step out 125mm)\",\r\n Length: \"\",\r\n CodeBase: \"UCF\",\r\n CodeAppend: \".22DEG\",\r\n DescAppend: \"22 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIUCFH**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT75MR\",\"Colour\":\"Area.BeamColour\"},{\"Code\":\"FT32MS\",\"Colour\":\"Area.BeamColour\"},{\"Code\":\"UCEG\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*Fascia*\"}},{\"Code\":\"UCL\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Use\":\"=*Wall*\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"APEX15Z\",\r\n Desc: \"Firmlok Apex Connector 150mm Zinc\",\r\n Use: \"\",\r\n Colour: \"Zinc\",\r\n Area: \"1\",\r\n Qty: \"3 (For Gable Rafter)|2 (For Gable Rafter (Width Attached))\",\r\n Length: \"\",\r\n CodeBase: \"APEX15Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"22.5 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLAB150ZL225\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"24\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS100\",\r\n Desc: \"Firmlok 100x1.1mm Hi Gloss **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 4000 (1640mm(Infill Strut)//1640mm(Infill Strut))\",\r\n Length: \"4000\",\r\n CodeBase: \"BS100\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL10011H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=4000(100113)|5000(100113)|6100(100113)|9000(100113) SL_DUB=3000(100113)|4000(100113)|5000(100113)|6100(100113)|7500(100113)|9000(100113) SL_EMU=4000(100113)|5000(100113)|6100(100113)|7500(100113) SL_KEW=4000(100113)|5000(100113)|6100(100113)|7500(100113)|9000(100113) REDIRECT_GIL=BS100L REDIRECT_NUN=BS100L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=4000(100113)|5000(100113)|6100(100113)|9000(100113) SL_DUB=3000(100113)|4000(100113)|5000(100113)|6100(100113)|7500(100113)|9000(100113) SL_EMU=4000(100113)|5000(100113)|6100(100113)|7500(100113) SL_KEW=4000(100113)|5000(100113)|6100(100113)|7500(100113)|9000(100113) REDIRECT_GIL=BS100L REDIRECT_NUN=BS100L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss H**\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 4000 (2665mm(Purlin T1))|1 x 4000 (3834mm(Gable Rafter))|1 x 4000 (3834mm(Gable Rafter))|1 x 4000 (3834mm(Gable Rafter))|1 x 4000 (3834mm(Gable Rafter))|1 x 4000 (3988mm(Gable Rafter (Width Attached)))|1 x 4000 (3988mm(Gable Rafter (Width Attached)))|1 x 4000 (3988mm(Gable Rafter (Width Attached)))|1 x 4000 (3988mm(Gable Rafter (Width Attached)))|1 x 7500 (6890mm(Attachment Beam (Left)))|1 x 7500 (3791mm(Gable Rafter)//2665mm(Ridge Purlin))|1 x 7500 (3791mm(Gable Rafter)//2665mm(Ridge Purlin))|1 x 9000 (70mm(Ridge Purlin)//70mm(Ridge Purlin)//70mm(Ridge Purlin)//70mm(Ridge Purlin)//70mm(Purlin T1)//70mm(Purlin T1)//70mm(Purlin T1)//70mm(Purlin T1)//6890mm(Attachment Beam (Right)))|1 x 9000 (5760mm(Perimeter Beam (Front))//2665mm(Ridge Purlin))|1 x 9000 (5760mm(Attachment Beam (Back))//2665mm(Ridge Purlin))|1 x 9000 (2665mm(Purlin T1)//2665mm(Purlin T1)//2665mm(Purlin T1))\",\r\n Length: \"4000\",\r\n CodeBase: \"BS150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n },\r\n },\r\n {\r\n Add: null,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSSEP\",\r\n Desc: \"Sheerline Gutter Stop Ends ** (pair) \",\r\n Use: \"\",\r\n Colour: \"Pale Eucalypt\",\r\n Area: \"\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: null,\r\n CodeAppend: null,\r\n DescAppend: \" (1xGSSEL,1xGSSER)\",\r\n \"CL ID\": null,\r\n Fielders_Code: \"SGSEP**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": null,\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n VDPL00040: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS3\",\r\n Desc: \"Spandek 0.42BMT **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"8 x 5063 (B/C Fixed)\",\r\n Length: \"5063\",\r\n CodeBase: \"RS3\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SD42**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*4)+8)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*4\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FR64\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Qty\":\"=((Length/2000)+1)*Qty\",\"Use\":\"Stitching\"},{\"Code\":\"WGFG\",\"Qty\":\"=((Length/2000)+1)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FR64\",\"Qty\":\"=((Length/1200)+1)*Qty\",\"Use\":\"Stitching\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"WGFG\",\"Qty\":\"=((Length/1200)+1)*Qty\",\"Use\":\"Stitching\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"RCFILL3\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Use\":\"Profile Foam\",\"Length\":\"800\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*4)+8)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT50_WCB\",\"Qty\":\"=Qty*4\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT65MR\",\"Qty\":\"=5*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT45MR\",\"Qty\":\"=(Area.NumInternalPurlins*4)*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT20MN\",\"Qty\":\"=5*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL3\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"},\"Length\":\"800\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*4)+5)*Qty\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT35_WCB\",\"Qty\":\"=5*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"RCRS3USH\",\r\n Desc: \"Spandek Receiver Channel 1.2 mm Shale Grey\",\r\n Use: \"\",\r\n Colour: \"Shale Grey\",\r\n Area: \"\",\r\n Qty: \"1 x 5000 (Back Channel)\",\r\n Length: \"5000\",\r\n CodeBase: \"RCRS3USH\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SDRCU12SH####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR64\",\"Qty\":\"50\"},{\"Code\":\"RCFOAM2\",\"Qty\":\"=Length/6100\",\"Colour\":\"Plain\"},{\"Code\":\"SA7510G\",\"Qty\":\"=(Length/600)+1\",\"Use\":\"Brick Wall\",\"Conditions\":{\"Use\":\"=*Brick*\"}},{\"Code\":\"CS7510G\",\"Qty\":\"=(Length/600)+1\",\"Use\":\"Timber Wall\",\"Conditions\":{\"Use\":\"=*Timber Frame*\"}}]}',\r\n PromptCodes:\r\n \"SL_LSB=4500(50165)|6100(50165) SL_EMU=4500(50165)|5500(50165)|6100(50165) REDIRECT_GIL=BC3075\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL_LSB=4500(50165)|6100(50165) SL_EMU=4500(50165)|5500(50165)|6100(50165) REDIRECT_GIL=BC3075\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSV\",\r\n Desc: \"Sheerline Gutter .42mm **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 5000\",\r\n Length: \"5000\",\r\n CodeBase: \"GSV\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG42**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSSEL\",\r\n Desc: \"Sheerline Gutter Stop End **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"GSSEL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SGSEFA**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"PAIR_EMU=GSSEP\",\r\n Image_b64: null,\r\n PromptTextCodes: \"PAIR_EMU=GSSEP\",\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSSER\",\r\n Desc: \"Sheerline Gutter Stop Ends ** \",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"GSSER\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SGSEFAP**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"PAIR_EMU=GSSEP\",\r\n Image_b64: null,\r\n PromptTextCodes: \"PAIR_EMU=GSSEP\",\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075Z\",\r\n Desc: \"Downpipe Outlet 100 x 75 Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OL10075Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPP10075ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR64M\",\"Qty\":\"6\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 2051\",\r\n Length: \"2051\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2051mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"LBARGESD\",\r\n Desc: \"L Barge Spandek **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 5003 (SPANDEK 0.42 (No Foot Traffic) Barge Capping)\",\r\n Length: \"5003\",\r\n CodeBase: \"LBARGESD\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL63**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/400)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"ExtraLM=165\",\r\n Image_b64: null,\r\n PromptTextCodes: \"ExtraLM=165\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 5000 (Fascia Beam)|1 x 4887 (Left Rafter)\",\r\n Length: \"5000\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 4890 (Purlin)|1 x 4887 (Right Rafter)\",\r\n Length: \"4890\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 5000 (Wall Beam Fixed to Blank)\",\r\n Length: \"5000\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N150V3000\",\r\n Desc: \"Post Steel 90x90x2mm ** (notch for FL150 on-site) 3000mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 2901 (Post in Ground (Notched))\",\r\n Length: \"2901\",\r\n CodeBase: \"PS90N150V\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Notched (finish 2901mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90150H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90150\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Conditions\":{\"Use\":\"!=*Slab*\"},\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"Length=3000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209155)|4000(209157)|5000(209160)|6000(209162) SL_EMU=3000(209155)|4000(209157) SL_NUN=3000(209155)|4000(209157)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC15\",\r\n Desc: \"Beam Corner Connector FL150 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Fascia Beam)|2 (For Wall Beam Fixed to Blank)\",\r\n Length: \"\",\r\n CodeBase: \"HCC15\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC15H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"9\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n ],\r\n VDPL00060: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS3\",\r\n Desc: \"Spandek 0.42BMT **\",\r\n Use: \"\",\r\n Colour: \"Basalt\",\r\n Area: \"1\",\r\n Qty: \"18 x 1656|10 x 3285\",\r\n Length: \"1656\",\r\n CodeBase: \"RS3\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SD42**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*4)+8)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*4\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FR64\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Qty\":\"=((Length/2000)+1)*Qty\",\"Use\":\"Stitching\"},{\"Code\":\"WGFG\",\"Qty\":\"=((Length/2000)+1)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FR64\",\"Qty\":\"=((Length/1200)+1)*Qty\",\"Use\":\"Stitching\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"WGFG\",\"Qty\":\"=((Length/1200)+1)*Qty\",\"Use\":\"Stitching\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"RCFILL3\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Use\":\"Profile Foam\",\"Length\":\"800\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*4)+8)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT50_WCB\",\"Qty\":\"=Qty*4\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT65MR\",\"Qty\":\"=5*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT45MR\",\"Qty\":\"=(Area.NumInternalPurlins*4)*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT20MN\",\"Qty\":\"=5*Qty\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL3\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"},\"Length\":\"800\"},{\"Code\":\"FT50_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*4)+5)*Qty\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"FT35_WCB\",\"Qty\":\"=5*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GQ\",\r\n Desc: \"Quad Gutter Hi-Front 115 .42mm **\",\r\n Use: \"\",\r\n Colour: \"Basalt\",\r\n Area: \"1\",\r\n Qty: \"4 x 6530\",\r\n Length: \"6530\",\r\n CodeBase: \"GQ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"QGHF115**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"QIGPB\",\"Qty\":\"=(Length/900)+1\",\"Use\":\"Gutter Clip\",\"Conditions\":{\"POP\":\"=LSB\"}},{\"Code\":\"QS15\",\"Qty\":\"=(Length/900)+1\",\"Use\":\"Gutter Clip\",\"Conditions\":{\"POP\":\"=EMU\"}},{\"Code\":\"QS15\",\"Qty\":\"=(Length/900)+1\",\"Use\":\"Gutter Clip\",\"Conditions\":{\"POP\":\"=NUN\"}},{\"Code\":\"FLRQ\",\"Use\":\"Nord Flashing\",\"Colour\":\"Area.GutterColour\",\"Conditions\":{\"Area.DesignType\":\"=Flat Roof\",\"Area.RoofSheet\":\"=*Flatdek*\"}}]}',\r\n PromptCodes: \"MAX_LM=8700 CutExtra=150 ExtraLM=100\",\r\n Image_b64: null,\r\n PromptTextCodes: \"MAX_LM=8700 CutExtra=150 ExtraLM=100\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"QEC\",\r\n Desc: \"Gutter Quad Profile No1 (High Front) - External Corner\",\r\n Use: \"\",\r\n Colour: \"Basalt\",\r\n Area: \"1\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n CodeBase: \"QEC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"QGHF115CEC**90\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"12\",\"Colour\":\"Area.GutterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GQ\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DP90\",\r\n Desc: \"PVC Stormwater Pipe 90mm DIA 3LM\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"2 x 2600\",\r\n Length: \"2600\",\r\n CodeBase: \"DP90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2600mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP90WH3000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP90S\",\"Qty\":\"2\"},{\"Code\":\"FR72\",\"Qty\":\"4\",\"Colour\":\"Surfmist\"},{\"Code\":\"EL9090Q\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=3000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=3000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL90Z\",\r\n Desc: \"Downpipe Outlet Round 90mm Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"OL90Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR90ZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DP90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"RA751\",\r\n Desc: \"Dutch Flashing 1\",\r\n Use: \"\",\r\n Colour: \"Basalt\",\r\n Area: \"1\",\r\n Qty: \"2 x 3150 (Dutch Gable Flashing A)\",\r\n Length: \"3150\",\r\n CodeBase: \"RA751\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL26**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FWH22\",\"Qty\":\"=(Length/250)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FR64\",\"Qty\":\"=(Length/250)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FWH22\",\"Qty\":\"=(Length/150)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FR64\",\"Qty\":\"=(Length/150)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"RA752\",\r\n Desc: \"Dutch Flashing 2\",\r\n Use: \"\",\r\n Colour: \"Basalt\",\r\n Area: \"1\",\r\n Qty: \"2 x 3150 (Dutch Gable Flashing B)\",\r\n Length: \"3150\",\r\n CodeBase: \"RA752\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL27**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FWH22\",\"Qty\":\"=(Length/250)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FR64\",\"Qty\":\"=(Length/250)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FWH22\",\"Qty\":\"=(Length/150)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FR64\",\"Qty\":\"=(Length/150)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CRIDGE\",\r\n Desc: \"Contemporary Ridge Cap\",\r\n Use: \"\",\r\n Colour: \"Basalt\",\r\n Area: \"1\",\r\n Qty: \"1 x 3360|4 x 2555\",\r\n Length: \"3360\",\r\n CodeBase: \"CRIDGE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL08**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/600)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/400)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"LBARGESD\",\r\n Desc: \"L Barge Spandek **\",\r\n Use: \"\",\r\n Colour: \"Basalt\",\r\n Area: \"1\",\r\n Qty: \"4 x 1654 (SPANDEK 0.42 (No Foot Traffic) Barge Capping)\",\r\n Length: \"1654\",\r\n CodeBase: \"LBARGESD\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL63**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/400)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"ExtraLM=165\",\r\n Image_b64: null,\r\n PromptTextCodes: \"ExtraLM=165\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS100L\",\r\n Desc: \"Firmlok 100x1.1mm Hi Gloss **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 2806 (Collar Tie)\",\r\n Length: \"2806\",\r\n CodeBase: \"BS100L\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL10011H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 2090 (Hip Rafter)|2 x 2090 (Hip Rafter)\",\r\n Length: \"2090\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 3293 (Gable Rafter (No Post w Collar Tie))|2 x 3293 (Gable Rafter (No Post w Collar Tie))\",\r\n Length: \"3293\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 2940 (Purlin T3)|2 x 21 (Purlin T3 LH)\",\r\n Length: \"2940\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150L\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 21 (Purlin T3 RH)|2 x 2940 (Ridge Purlin)\",\r\n Length: \"21\",\r\n CodeBase: \"BS150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200L\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 5810 (Attachment Beam (Left))|1 x 5810 (Attachment Beam (Right))\",\r\n Length: \"5810\",\r\n CodeBase: \"BS200L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200L\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 5810 (Perimeter Beam (Back))|1 x 5810 (Perimeter Beam (Front))\",\r\n Length: \"5810\",\r\n CodeBase: \"BS200L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**NS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS904000\",\r\n Desc: \"Post Steel 90x90x2mm ** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"4 x 3450 (Post in Ground (Freespan) (Beam to Side))\",\r\n Length: \"3450\",\r\n CodeBase: \"PS90\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 3450mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"CPPN90H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Conditions\":{\"Use\":\"!=*Slab*\"},\"Colour\":\"Plain\"},{\"Code\":\"FBH150NYG\",\"Qty\":\"2\",\"Use\":\"Post Behind Fix\",\"Conditions\":{\"Use\":\"=*Behind Beam*\"}},{\"Code\":\"FBH11010NYG\",\"Qty\":\"1\",\"Use\":\"Post Beam Side Fix\",\"Conditions\":{\"Use\":\"=*Beam to Side*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(19989)|4000(24025) SL_EMU=2400(19988)|3000(19989)|4000(24025) SL_NUN=3000(19989)|4000(24025) SL_GIL=3000(19989)|4000(24025)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"DHRCR15\",\r\n Desc: \"Dutch/Hip Rafter Connector Right FL150 Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2 (For Hip Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"DHRCR15\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Left Hand\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIDHRCR15\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20MP\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"DHRCL15\",\r\n Desc: \"Dutch/Hip Rafter Connector Left FL150 Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2 (For Hip Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"DHRCL15\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Right Hand\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIDHRCL15\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20MP\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HRU15R\",\r\n Desc: \"Hip Rafter Single Purlin Connector Right FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 (For Purlin T3 LH)\",\r\n Length: \"\",\r\n CodeBase: \"HRU15R\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHRU15RH**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HRU15L\",\r\n Desc: \"Hip Rafter Single Purlin Connector Left FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 (For Purlin T3 RH)\",\r\n Length: \"\",\r\n CodeBase: \"HRU15L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHRU15LH**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"CTC10\",\r\n Desc: \"Collar Tie Connector FL100 H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"4 (For Collar Tie)\",\r\n Length: \"\",\r\n CodeBase: \"CTC10\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHICTC10H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"14\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS100\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"4 (For Purlin T3)|2 (For Purlin T3 LH)|2 (For Purlin T3 RH)|4 (For Ridge Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB200\",\r\n Desc: \"Connector Beam FL200 **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 (For Attachment Beam (Left) Fixed to 90mm Post)|2 (For Attachment Beam (Right) Fixed to 90mm Post)|2 (For Perimeter Beam (Back) Fixed to 90mm Post)|2 (For Perimeter Beam (Front) Fixed to 90mm Post)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB20050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"H150C\",\r\n Desc: \"Hip to Corner Connector FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"4 (For Hip Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"H150C\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"2\",\r\n Fielders_Code: \"LHIH150CH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"45.00\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"12\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"45.00\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"RRC15-S\",\r\n Desc: \"Beam Connector Rafter to Side Rail FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"4 (For Gable Rafter (No Post w Collar Tie))\",\r\n Length: \"\",\r\n CodeBase: \"RRC15\",\r\n CodeAppend: \"-S.23DEG UP\",\r\n DescAppend: \"22.5 Degrees Up\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"LHIRRC15H**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-23.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Fixed*\"}},{\"Code\":\"FBH9010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*75*\"}},{\"Code\":\"FBH11010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*90*\"}},{\"Code\":\"FBH11010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*100*\"}},{\"Code\":\"FBH13010NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*125*\"}},{\"Code\":\"FBH150NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*140*\"}},{\"Code\":\"FBH160NYG\",\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*150*\"}},{\"Use\":\"Hexhead Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*175*\"},\"Code\":\"FBH190NYG\"},{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK3\",\r\n Angle1: \"-23.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"APEX15Z\",\r\n Desc: \"Firmlok Apex Connector 150mm Zinc\",\r\n Use: \"\",\r\n Colour: \"Zinc\",\r\n Area: \"1\",\r\n Qty: \"2 (For Gable Rafter (No Post w Collar Tie))\",\r\n Length: \"\",\r\n CodeBase: \"APEX15Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"22.5 Degrees\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLAB150ZL225\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"24\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {},\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"WG\",\r\n Desc: \"Washer Grommet for Polycarbonate 22OD\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"WG\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIWGPC220D\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"MISC\",\r\n Code: \"ASSC12\",\r\n Desc: \"Acrylic Sheet 3mm Clear 1220x2440\",\r\n Use: \"\",\r\n Colour: \"Clear\",\r\n Area: \"1\",\r\n Qty: \"2 (Infill-Acrylic Flat LLD)\",\r\n Length: \"\",\r\n CodeBase: \"ASSC12\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"ACS12202440\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=20*Qty\",\"Colour\":\"Area.BeamColour\",\"Use\":\"Infill Fix\"},{\"Code\":\"PJ40\",\"Qty\":\"1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n CANL00034: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS5\",\r\n Desc: \"Flatdek 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Monument/Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"40 x 6064\",\r\n Length: \"6064\",\r\n CodeBase: \"RS5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FD42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*2)+3)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*2\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+3)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=Qty*2\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GS\",\r\n Desc: \"Sheerline Gutter .55mm\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 10000\",\r\n Length: \"10000\",\r\n CodeBase: \"GS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSV\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DP80\",\r\n Desc: \"Downpipe Round 80mm PVC 3LM Lengths\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 2195\",\r\n Length: \"2195\",\r\n CodeBase: \"DP80\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2195mm)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"HIDPR80PVC**30\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"DP80SQ\",\"Qty\":\"2\"},{\"Code\":\"FR72\",\"Qty\":\"4\"},{\"Code\":\"EL8090\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=3000\",\r\n Image_b64: null,\r\n PromptTextCodes: \"Length=3000\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL80\",\r\n Desc: \"Downpipe Outlet 80mm Dia PVC **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"OL80\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"HIDPSP80PVC**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DP80\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"LBARGEFD\",\r\n Desc: \"L Barge Flatdek **\",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"1\",\r\n Qty: \"1 x 10000 (FLATDEK (Non-Trafficable) Barge Capping)|2 x 6004 (FLATDEK (Non-Trafficable) Barge Capping)\",\r\n Length: \"10000\",\r\n CodeBase: \"LBARGEFD\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL59**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/400)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"ExtraLM=165\",\r\n Image_b64: null,\r\n PromptTextCodes: \"ExtraLM=165\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS904000\",\r\n Desc: \"Post Steel 90x90x2mm ** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"3 x 3255 (Post in Ground (Behind Beam))|3 x 3045 (Post in Ground (Behind Beam))\",\r\n Length: \"3255\",\r\n CodeBase: \"PS90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"CPPN90H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Conditions\":{\"Use\":\"!=*Slab*\"},\"Colour\":\"Plain\"},{\"Code\":\"FBH150NYG\",\"Qty\":\"2\",\"Use\":\"Post Behind Fix\",\"Conditions\":{\"Use\":\"=*Behind Beam*\"}},{\"Code\":\"FBH11010NYG\",\"Qty\":\"1\",\"Use\":\"Post Beam Side Fix\",\"Conditions\":{\"Use\":\"=*Beam to Side*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(19989)|4000(24025) SL_EMU=2400(19988)|3000(19989)|4000(24025) SL_NUN=3000(19989)|4000(24025) SL_GIL=3000(19989)|4000(24025)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"6 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4 (For Left Purlin)|4 (For Purlin)|4 (For Right Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB200\",\r\n Desc: \"Connector Beam FL200 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"4 (For Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB20050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC20\",\r\n Desc: \"Beam Corner Connector FL200 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Back Fascia Beam)|2 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"HCC20\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC20H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"IBJ200\",\r\n Desc: \"Firmlok 200 Internal Beam Joiner Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1 (For Back Fascia Beam)|1 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"IBJ200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIIBJ200\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"FWH22\",\"Qty\":\"22\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200Z\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FT20MP\",\"Qty\":\"10\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FWH22P\",\"Qty\":\"22\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 7500 (3257mm(Right Purlin)//3257mm(Right Purlin))|1 x 7500 (3257mm(Purlin)//3257mm(Purlin))|1 x 7500 (3257mm(Left Purlin)//3257mm(Left Purlin))\",\r\n Length: \"7500\",\r\n CodeBase: \"BS150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 5000 (4850mm(Back Fascia Beam))|1 x 5000 (4850mm(Fascia Beam))|1 x 6100 (5886mm(Right Rafter))|1 x 6100 (5886mm(Left Rafter))|1 x 6100 (5886mm(Rafter))|1 x 6100 (5886mm(Rafter))|1 x 6100 (5150mm(Fascia Beam))|1 x 6100 (5150mm(Back Fascia Beam))\",\r\n Length: \"5000\",\r\n CodeBase: \"BS200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_DUB=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_EMU=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_KEW=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) REDIRECT_GIL=BS200L REDIRECT_NUN=BS200L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_DUB=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_EMU=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_KEW=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) REDIRECT_GIL=BS200L REDIRECT_NUN=BS200L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n },\r\n },\r\n {\r\n Add: null,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSSEP\",\r\n Desc: \"Sheerline Gutter Stop Ends ** (pair) \",\r\n Use: \"\",\r\n Colour: \"Monument\",\r\n Area: \"\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: null,\r\n CodeAppend: null,\r\n DescAppend: \" (1xGSSEL,1xGSSER)\",\r\n \"CL ID\": null,\r\n Fielders_Code: \"SGSEP**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": null,\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n COFL00162: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS5\",\r\n Desc: \"Flatdek 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream/Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"24 x 3062 (B/C Fixed)\",\r\n Length: \"3062\",\r\n CodeBase: \"RS5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FD42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*2)+3)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*2\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+3)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=Qty*2\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GS\",\r\n Desc: \"Sheerline Gutter .55mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 6000\",\r\n Length: \"6000\",\r\n CodeBase: \"GS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSV\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075\",\r\n Desc: \"Pop 100 x 75 Zincalume/90mm Round\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OL10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPUZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 2000\",\r\n Length: \"2000\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2000mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"LBARGEFD\",\r\n Desc: \"L Barge Flatdek **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 3002 (FLATDEK (No Foot Traffic) Barge Capping)\",\r\n Length: \"3002\",\r\n CodeBase: \"LBARGEFD\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL59**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/400)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"ExtraLM=165\",\r\n Image_b64: null,\r\n PromptTextCodes: \"ExtraLM=165\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS75N1503000\",\r\n Desc: \"Post Steel 75x75x2mm notched for FL150 ** 3000mm\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 x 2850 (Post in Ground (Notched))\",\r\n Length: \"2850\",\r\n CodeBase: \"PS75N150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Notched (finish 2850mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN75150H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Conditions\":{\"Use\":\"!=*Slab*\"},\"Colour\":\"Plain\"},{\"Code\":\"PBP75150\",\"Qty\":\"1\",\"Colour\":\"Area.PostColour\",\"Use\":\"Notched Post Plate\"}]}',\r\n PromptCodes: \"Length=3000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(207155)|4000(207157)|5000(207159)|6000(207161) SL_EMU=3000(207155)|4000(207157) SL_NUN=3000(207155)|4000(207157) REDIRECT_NUN=PS75N150V REDIRECT_GIL=PS75N200\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS75N150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"CON110\",\r\n Desc: \"Connector Aluminium Fascia 125x50x125\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"7 (Rafter Bracket)\",\r\n Length: \"\",\r\n CodeBase: \"CON110\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(fixed to Timber Fascia)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHICON110\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH5010NYG\",\"Use\":\"Timber Fascia Fix\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*Timber*\"}},{\"Code\":\"FT50T\",\"Qty\":\"3\",\"Use\":\"Teks\",\"Colour\":\"Plain\"},{\"Code\":\"FBH3010NYG\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"=*Steel*\"},\"Use\":\"Steel Fascia Fix\"},{\"Code\":\"FT45M\",\"Qty\":\"1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150L\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 (For Left Rafter)|1 (For Right Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"},{\"Code\":\"RCPL45Z\",\"Qty\":\"1\",\"Colour\":\"Plain\"},{\"Code\":\"STUD19B\",\"Colour\":\"Plain\",\"Qty\":\"1\",\"Length\":\"1200\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC15\",\r\n Desc: \"Beam Corner Connector FL150 **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"2 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"HCC15\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC15H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"9\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"RCHANNEL\",\r\n Desc: \"Flatdek Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"\",\r\n Qty: \"1 x 6100 (6000mm(Back Channel))\",\r\n Length: \"6100\",\r\n CodeBase: \"RCHANNEL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FDRCH**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"SL_LSB=4500(50125)|6100(50125) SL_EMU=6100(50125) REDIRECT_GIL=BC5075 REDIRECT_NUN=BC5061\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL_LSB=4500(50125)|6100(50125) SL_EMU=6100(50125) REDIRECT_GIL=BC5075 REDIRECT_NUN=BC5061\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 6100 (2936mm(Right Rafter)//2936mm(Left Rafter))|1 x 6100 (6000mm(Fascia Beam))\",\r\n Length: \"6100\",\r\n CodeBase: \"BS150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: null,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSSEP\",\r\n Desc: \"Sheerline Gutter Stop Ends ** (pair) \",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: null,\r\n CodeAppend: null,\r\n DescAppend: \" (1xGSSEL,1xGSSER)\",\r\n \"CL ID\": null,\r\n Fielders_Code: \"SGSEP**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": null,\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n COFL00008: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS5\",\r\n Desc: \"Flatdek 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Manor Red/Classic Cream\",\r\n Area: \"1\",\r\n Qty: \"1 x 4480|1 x 4176|1 x 3871|1 x 3567|1 x 3263|1 x 2958|1 x 2654|1 x 2349|1 x 2045|1 x 1741|1 x 1436|27 x 4563 (A1-B/C Fixed)|1 x 4553 (A1-B/C Fixed)|1 x 4177 (A1-B/C Fixed)|1 x 3802 (A1-B/C Fixed)|1 x 3427 (A1-B/C Fixed)|1 x 3052 (A1-B/C Fixed)|1 x 2677 (A1-B/C Fixed)|1 x 2301 (A1-B/C Fixed)|1 x 1926 (A1-B/C Fixed)|1 x 1551 (A1-B/C Fixed)|1 x 1176 (A1-B/C Fixed)|2 x 1000 (A1-B/C Fixed)\",\r\n Length: \"4480\",\r\n CodeBase: \"RS5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FD42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n 21: null,\r\n 22: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*2)+3)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*2\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+3)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=Qty*2\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n 21: null,\r\n 22: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS5\",\r\n Desc: \"Flatdek 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Manor Red/Classic Cream\",\r\n Area: \"2\",\r\n Qty: \"1 x 1000|33 x 3062 (A2-B/C Fixed)|1 x 3055 (A2-B/C Fixed)|1 x 3035 (A2-B/C Fixed)|1 x 2888 (A2-B/C Fixed)|1 x 2868 (A2-B/C Fixed)|1 x 2722 (A2-B/C Fixed)|1 x 2702 (A2-B/C Fixed)|1 x 2555 (A2-B/C Fixed)|1 x 2535 (A2-B/C Fixed)|1 x 2388 (A2-B/C Fixed)|1 x 2368 (A2-B/C Fixed)|1 x 2221 (A2-B/C Fixed)|1 x 2201 (A2-B/C Fixed)|1 x 2054 (A2-B/C Fixed)|1 x 2034 (A2-B/C Fixed)|1 x 1888 (A2-B/C Fixed)|1 x 1868 (A2-B/C Fixed)|1 x 1721 (A2-B/C Fixed)|1 x 1701 (A2-B/C Fixed)|1 x 1554 (A2-B/C Fixed)|1 x 1534 (A2-B/C Fixed)|1 x 1387 (A2-B/C Fixed)|1 x 1367 (A2-B/C Fixed)|1 x 1221 (A2-B/C Fixed)|1 x 1201 (A2-B/C Fixed)|1 x 1054 (A2-B/C Fixed)|1 x 1034 (A2-B/C Fixed)|8 x 1000 (A2-B/C Fixed)\",\r\n Length: \"1000\",\r\n CodeBase: \"RS5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FD42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n 21: null,\r\n 22: null,\r\n 23: null,\r\n 24: null,\r\n 25: null,\r\n 26: null,\r\n 27: null,\r\n 28: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*2)+3)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*2\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+3)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=Qty*2\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n 21: null,\r\n 22: null,\r\n 23: null,\r\n 24: null,\r\n 25: null,\r\n 26: null,\r\n 27: null,\r\n 28: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS5\",\r\n Desc: \"Flatdek 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Manor Red/Classic Cream\",\r\n Area: \"3\",\r\n Qty: \"27 x 4563 (A3-B/C Fixed)|1 x 4523 (A3-B/C Fixed)|1 x 4328 (A3-B/C Fixed)|1 x 4147 (A3-B/C Fixed)|1 x 3952 (A3-B/C Fixed)|1 x 3772 (A3-B/C Fixed)|1 x 3577 (A3-B/C Fixed)|1 x 3397 (A3-B/C Fixed)|1 x 3202 (A3-B/C Fixed)|1 x 3022 (A3-B/C Fixed)|1 x 2827 (A3-B/C Fixed)|1 x 2646 (A3-B/C Fixed)|1 x 2451 (A3-B/C Fixed)|1 x 2271 (A3-B/C Fixed)|1 x 2076 (A3-B/C Fixed)|1 x 1896 (A3-B/C Fixed)|1 x 1701 (A3-B/C Fixed)|1 x 1521 (A3-B/C Fixed)|1 x 1326 (A3-B/C Fixed)|1 x 1146 (A3-B/C Fixed)|4 x 1000 (A3-B/C Fixed)\",\r\n Length: \"4563\",\r\n CodeBase: \"RS5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FD42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*2)+3)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*2\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+3)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=Qty*2\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS5\",\r\n Desc: \"Flatdek 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Manor Red/Classic Cream\",\r\n Area: \"4\",\r\n Qty: \"2 x 3062|1 x 2960|1 x 2794|1 x 2627|1 x 2460|1 x 2293|1 x 2127|1 x 1960|1 x 1793|1 x 1626|1 x 1460|1 x 1293|1 x 1126|6 x 1000|32 x 3062 (A4-B/C Fixed)|1 x 3035 (A4-B/C Fixed)|1 x 2868 (A4-B/C Fixed)|1 x 2702 (A4-B/C Fixed)|1 x 2535 (A4-B/C Fixed)|1 x 2368 (A4-B/C Fixed)|1 x 2201 (A4-B/C Fixed)|1 x 2034 (A4-B/C Fixed)|1 x 1868 (A4-B/C Fixed)|1 x 1701 (A4-B/C Fixed)|1 x 1534 (A4-B/C Fixed)|1 x 1367 (A4-B/C Fixed)|1 x 1201 (A4-B/C Fixed)|1 x 1034 (A4-B/C Fixed)|3 x 1000 (A4-B/C Fixed)\",\r\n Length: \"3062\",\r\n CodeBase: \"RS5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FD42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n 21: null,\r\n 22: null,\r\n 23: null,\r\n 24: null,\r\n 25: null,\r\n 26: null,\r\n 27: null,\r\n 28: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*2)+3)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*2\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+3)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=Qty*2\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n 12: null,\r\n 13: null,\r\n 14: null,\r\n 15: null,\r\n 16: null,\r\n 17: null,\r\n 18: null,\r\n 19: null,\r\n 20: null,\r\n 21: null,\r\n 22: null,\r\n 23: null,\r\n 24: null,\r\n 25: null,\r\n 26: null,\r\n 27: null,\r\n 28: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES (various finish lengths)\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: \",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1|1\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \".141DEG\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: \",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \".6DEG\",\r\n DescAppend: \"6 Degrees \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GS\",\r\n Desc: \"Sheerline Gutter .55mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 x 12729|1 x 6388|1 x 1477\",\r\n Length: \"12729\",\r\n CodeBase: \"GS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSV\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"EXG\",\r\n Desc: \"External Sheerline Gutter Corner 90deg **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"2\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"EXG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SGEC90**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"12\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=EXGV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=EXGV\",\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GS\",\r\n Desc: \"Sheerline Gutter .55mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"2\",\r\n Qty: \"1 x 17124\",\r\n Length: \"17124\",\r\n CodeBase: \"GS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSV\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"EXG\",\r\n Desc: \"External Sheerline Gutter Corner 90deg **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"3\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"EXG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SGEC90**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"12\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=EXGV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=EXGV\",\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GS\",\r\n Desc: \"Sheerline Gutter .55mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"3\",\r\n Qty: \"1 x 12824\",\r\n Length: \"12824\",\r\n CodeBase: \"GS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSV\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: \",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"4\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \".34DEG\",\r\n DescAppend: \"34 Degrees \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"EXG\",\r\n Desc: \"External Sheerline Gutter Corner 90deg **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"4\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"EXG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SGEC90**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"12\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=EXGV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=EXGV\",\r\n Children: null,\r\n \"Parent Item\": \"GS\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GS\",\r\n Desc: \"Sheerline Gutter .55mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"4\",\r\n Qty: \"1 x 17267|1 x 7253\",\r\n Length: \"17267\",\r\n CodeBase: \"GS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"STRAP20\",\"Qty\":\"=(Length/900)+1\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSV\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSV\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075\",\r\n Desc: \"Pop 100 x 75 Zincalume/90mm Round\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"OL10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPUZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075\",\r\n Desc: \"Pop 100 x 75 Zincalume/90mm Round\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"2\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OL10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPUZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075\",\r\n Desc: \"Pop 100 x 75 Zincalume/90mm Round\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"3\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n CodeBase: \"OL10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPUZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075\",\r\n Desc: \"Pop 100 x 75 Zincalume/90mm Round\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"4\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OL10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPUZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"2 x 2248\",\r\n Length: \"2248\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2248mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"2\",\r\n Qty: \"1 x 2300\",\r\n Length: \"2300\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2300mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"3\",\r\n Qty: \"1 x 2300|1 x 2248\",\r\n Length: \"2300\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2300mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"4\",\r\n Qty: \"1 x 2300\",\r\n Length: \"2300\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 2300mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"HR\",\r\n Desc: \"Ridge Capping Hip\",\r\n Use: \"\",\r\n Colour: \"Manor Red\",\r\n Area: \"1\",\r\n Qty: \"1 x 5711\",\r\n Length: \"5711\",\r\n CodeBase: \"HR\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL23**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/600)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/400)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"HR\",\r\n Desc: \"Ridge Capping Hip\",\r\n Use: \"\",\r\n Colour: \"Manor Red\",\r\n Area: \"2\",\r\n Qty: \"1 x 5709\",\r\n Length: \"5709\",\r\n CodeBase: \"HR\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL23**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/600)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/400)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"HR\",\r\n Desc: \"Ridge Capping Hip\",\r\n Use: \"\",\r\n Colour: \"Manor Red\",\r\n Area: \"3\",\r\n Qty: \"1 x 5711\",\r\n Length: \"5711\",\r\n CodeBase: \"HR\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL23**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/600)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=((Length/400)+1)*2\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N2004000\",\r\n Desc: \"Post Steel 90x90x2mm notched FL200 H** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 x 3128 (A1-Post in Ground (Notched))|3 x 3098 (A1-Post in Ground (Notched))\",\r\n Length: \"3128\",\r\n CodeBase: \"PS90N200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90200H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90200\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Slab*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209205)|4000(209207)|5000(209209)|6000(209213) SL_EMU=3000(209205)|4000(209207) SL_NUN=3000(209205)|4000(209207) SL_GIL=3000(209205)|4000(209207)|4500(209203) REDIRECT_NUN=PS90N200V\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N2004000\",\r\n Desc: \"Post Steel 90x90x2mm notched FL200 H** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"2\",\r\n Qty: \"3 x 3150 (Post in Ground (Notched))\",\r\n Length: \"3150\",\r\n CodeBase: \"PS90N200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Notched (finish 3150mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90200H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90200\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Slab*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209205)|4000(209207)|5000(209209)|6000(209213) SL_EMU=3000(209205)|4000(209207) SL_NUN=3000(209205)|4000(209207) SL_GIL=3000(209205)|4000(209207)|4500(209203) REDIRECT_NUN=PS90N200V\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N2004000\",\r\n Desc: \"Post Steel 90x90x2mm notched FL200 H** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"3\",\r\n Qty: \"2 x 3098 (Post in Ground (Notched))\",\r\n Length: \"3098\",\r\n CodeBase: \"PS90N200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Notched (finish 3098mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90200H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90200\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Slab*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209205)|4000(209207)|5000(209209)|6000(209213) SL_EMU=3000(209205)|4000(209207) SL_NUN=3000(209205)|4000(209207) SL_GIL=3000(209205)|4000(209207)|4500(209203) REDIRECT_NUN=PS90N200V\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N2004000\",\r\n Desc: \"Post Steel 90x90x2mm notched FL200 H** 4000mm\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"4\",\r\n Qty: \"2 x 3150 (Post in Ground (Notched))\",\r\n Length: \"3150\",\r\n CodeBase: \"PS90N200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Notched (finish 3150mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90200H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90200\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"!=*Slab*\"}}]}',\r\n PromptCodes: \"Length=4000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209205)|4000(209207)|5000(209209)|6000(209213) SL_EMU=3000(209205)|4000(209207) SL_NUN=3000(209205)|4000(209207) SL_GIL=3000(209205)|4000(209207)|4500(209203) REDIRECT_NUN=PS90N200V\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"CONB150SPR\",\r\n Desc: \"Splayed RH beam connector for FL150 Special Angle **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 (For Left Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"CONB150SPR\",\r\n CodeAppend: \".15050.39DEG LH\",\r\n DescAppend: \"150x50 39 Degrees Left Hand\",\r\n \"CL ID\": \"4\",\r\n Fielders_Code: \"LHICON150SPRH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"39.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"6\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"39.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"CONB200SPR\",\r\n Desc: \"Splayed RH beam connector for FL200 Special Angle **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 (For Cutout Beam A)\",\r\n Length: \"\",\r\n CodeBase: \"CONB200SPR\",\r\n CodeAppend: \".20050.51DEG LH\",\r\n DescAppend: \"200x50 51 Degrees Left Hand\",\r\n \"CL ID\": \"3\",\r\n Fielders_Code: \"LHICON200SPRH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"51.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"6\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK46\",\r\n Angle1: \"51.00\",\r\n Angle2: \"0.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"H150C\",\r\n Desc: \"Hip to Corner Connector FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 (For Multiple Area Beam)\",\r\n Length: \"\",\r\n CodeBase: \"H150C\",\r\n CodeAppend: \".15050.90DEG JOIN .57DEG LH\",\r\n DescAppend: \"150x50 90 Degrees Join 57 Degrees Left Hand\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"LHIH150CH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"12\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: HCUC 20 0NS (For Multiple Area Beam)\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 (For Multiple Area Beam)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \".15050.90DEG JOIN .57DEG RH\",\r\n DescAppend: \"150x50 90 Degrees Join 57 Degrees Right Hand\",\r\n \"CL ID\": \"2\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK44\",\r\n Angle1: \"-56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK44\",\r\n Angle1: \"-56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"H150C\",\r\n Desc: \"Hip to Corner Connector FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"2\",\r\n Qty: \"1 (For Multiple Area Beam)\",\r\n Length: \"\",\r\n CodeBase: \"H150C\",\r\n CodeAppend: \".15050.90DEG JOIN .34DEG LH\",\r\n DescAppend: \"150x50 90 Degrees Join 34 Degrees Left Hand\",\r\n \"CL ID\": \"5\",\r\n Fielders_Code: \"LHIH150CH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"33.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"12\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"33.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: HCUC 20 0NS (For Multiple Area Beam)\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"2\",\r\n Qty: \"1 (For Multiple Area Beam)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \".15050.90DEG JOIN .57DEG LH\",\r\n DescAppend: \"150x50 90 Degrees Join 57 Degrees Left Hand\",\r\n \"CL ID\": \"6\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK44\",\r\n Angle1: \"56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK44\",\r\n Angle1: \"56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"H150C\",\r\n Desc: \"Hip to Corner Connector FL150 H**\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"3\",\r\n Qty: \"1 (For Multiple Area Beam)\",\r\n Length: \"\",\r\n CodeBase: \"H150C\",\r\n CodeAppend: \".15050.90DEG JOIN .57DEG LH\",\r\n DescAppend: \"150x50 90 Degrees Join 57 Degrees Left Hand\",\r\n \"CL ID\": \"1\",\r\n Fielders_Code: \"LHIH150CH**\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"12\",\"Use\":\"Teks\",\"Colour\":\"Area.RafterColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK10\",\r\n Angle1: \"56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: HCUC 20 0NS (For Multiple Area Beam)\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"3\",\r\n Qty: \"1 (For Multiple Area Beam)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \".15050.90DEG JOIN .57DEG RH\",\r\n DescAppend: \"150x50 90 Degrees Join 57 Degrees Right Hand\",\r\n \"CL ID\": \"2\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: {\r\n BracketType: \"BK44\",\r\n Angle1: \"-56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n \"CL HEADERS\":\r\n \"Bracket`Width`Depth`Angle 1`Angle 2`Angle 3`Colour ID`Num`BL ID`Length 1`Length 2`ftt`Bracket Name`Drawing Name`Material`Auto Extend Tabs\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: {\r\n BracketType: \"BK44\",\r\n Angle1: \"-56.50\",\r\n Angle2: \"90.00\",\r\n RotationAngle: \"0.00\",\r\n TopTabLength: \"0.00\",\r\n SideTabLength: \"0.00\",\r\n ftt: \"0\",\r\n },\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"2\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"3\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"MSJ\",\r\n Desc: \"****** Product Not Found: (For Post) \",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"4\",\r\n Qty: \"2 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 (For Left Rafter)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB200\",\r\n Desc: \"Connector Beam FL200 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 (End Cap for Cutout Beam A)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB20050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC20\",\r\n Desc: \"Beam Corner Connector FL200 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"2 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"HCC20\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC20H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"IBJ200\",\r\n Desc: \"Firmlok 200 Internal Beam Joiner Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"IBJ200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIIBJ200\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"FWH22\",\"Qty\":\"22\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200Z\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FT20MP\",\"Qty\":\"10\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FWH22P\",\"Qty\":\"22\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC20\",\r\n Desc: \"Beam Corner Connector FL200 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"2\",\r\n Qty: \"1 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"HCC20\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC20H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"IBJ200\",\r\n Desc: \"Firmlok 200 Internal Beam Joiner Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"2\",\r\n Qty: \"2 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"IBJ200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIIBJ200\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"FWH22\",\"Qty\":\"22\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200Z\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FT20MP\",\"Qty\":\"10\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FWH22P\",\"Qty\":\"22\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"HCC20\",\r\n Desc: \"Beam Corner Connector FL200 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"3\",\r\n Qty: \"1 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"HCC20\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIHCC20H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Use\":\"Tek\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"IBJ200\",\r\n Desc: \"Firmlok 200 Internal Beam Joiner Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"3\",\r\n Qty: \"1 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"IBJ200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIIBJ200\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"FWH22\",\"Qty\":\"22\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200Z\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FT20MP\",\"Qty\":\"10\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FWH22P\",\"Qty\":\"22\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB200\",\r\n Desc: \"Connector Beam FL200 **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"4\",\r\n Qty: \"1 (End Cap for Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB20050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"IBJ200\",\r\n Desc: \"Firmlok 200 Internal Beam Joiner Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"4\",\r\n Qty: \"1 (A4-For Cutout Beam A)|1 (A4-For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"IBJ200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIIBJ200\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20M\",\"Qty\":\"10\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"FWH22\",\"Qty\":\"22\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"!=Zincalume\"}},{\"Code\":\"JBS200Z\",\"Colour\":\"Area.BeamColour\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FT20MP\",\"Qty\":\"10\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}},{\"Code\":\"FWH22P\",\"Qty\":\"22\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.BeamColour\":\"=Zincalume\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS200\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"RCHANNEL\",\r\n Desc: \"Flatdek Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"\",\r\n Qty: \"1 x 6100 (5411mm(Back Channel)//200mm(Back Channel*4*)//200mm(Back Channel*3*))|1 x 6100 (5411mm(Back Channel))|1 x 6100 (5411mm(Back Channel))|1 x 6100 (5409mm(Back Channel))|1 x 6100 (5409mm(Back Channel))|1 x 6100 (5409mm(Back Channel))|1 x 6100 (1500mm(Back Channel*2*)//1500mm(Back Channel*1*))|1 x 6100 (6100mm(Back Channel*1*))|1 x 6100 (6100mm(Back Channel*2*))|1 x 6100 (6100mm(Back Channel*3*))|1 x 6100 (6100mm(Back Channel*4*))\",\r\n Length: \"6100\",\r\n CodeBase: \"RCHANNEL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FDRCH**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"SL_LSB=4500(50125)|6100(50125) SL_EMU=6100(50125) REDIRECT_GIL=BC5075 REDIRECT_NUN=BC5061\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL_LSB=4500(50125)|6100(50125) SL_EMU=6100(50125) REDIRECT_GIL=BC5075 REDIRECT_NUN=BC5061\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss H**\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 x 6100 (5293mm(A1-Multiple Area Beam))|1 x 6100 (5292mm(A2-Multiple Area Beam))|1 x 7500 (766mm(A1-Left Rafter)//5293mm(A3-Multiple Area Beam))\",\r\n Length: \"6100\",\r\n CodeBase: \"BS150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS200\",\r\n Desc: \"Firmlok 200x2.0mm Hi Gloss ***\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"1 x 5000 (4757mm(A1-Cutout Beam A))|1 x 6100 (5787mm(A2-Fascia Beam))|1 x 6100 (5382mm(A2-Fascia Beam))|1 x 6100 (5377mm(A2-Fascia Beam))|1 x 6100 (5970mm(A3-Fascia Beam))|1 x 6100 (6000mm(A1-Fascia Beam))|1 x 7500 (6300mm(A1-Fascia Beam))|1 x 7500 (6275mm(A3-Fascia Beam))|1 x 9000 (8420mm(A4-Fascia Beam))|1 x 9000 (8417mm(A4-Cutout Beam A))|1 x 9000 (8125mm(A4-Fascia Beam))|1 x 9000 (8072mm(A4-Cutout Beam A))\",\r\n Length: \"5000\",\r\n CodeBase: \"BS200\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL20020H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_DUB=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_EMU=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_KEW=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) REDIRECT_GIL=BS200L REDIRECT_NUN=BS200L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_DUB=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_EMU=5000(200203)|6100(200203)|7500(200203)|9000(200203) SL_KEW=4000(200203)|5000(200203)|6100(200203)|7500(200203)|9000(200203) REDIRECT_GIL=BS200L REDIRECT_NUN=BS200L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n 5: null,\r\n 6: null,\r\n 7: null,\r\n 8: null,\r\n 9: null,\r\n 10: null,\r\n 11: null,\r\n },\r\n },\r\n ],\r\n COFL00154: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"RS5\",\r\n Desc: \"Flatdek 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey/Thredbo White\",\r\n Area: \"1\",\r\n Qty: \"18 x 8065 (B/C Fixed)|4 x 5063 (B/C Fixed)\",\r\n Length: \"8065\",\r\n CodeBase: \"RS5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FD42**H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=((Area.NumInternalPurlins*2)+3)*Qty\",\"Use\":\"Roof Fix\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=Qty*2\",\"Use\":\"Roof Fix\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"},\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*B/C Fixed*\",\"Area.DesignType\":\"=Flat Roof\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+3)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"}},{\"Code\":\"FT45MR\",\"Qty\":\"=Qty*2\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Area.DesignType\":\"=Gable Hip Roof\"}},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\",\"Conditions\":{\"Area.DesignType\":\"=Gable Hip Roof\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FIBREGLASS ROOFING\",\r\n Code: \"RFG5\",\r\n Desc: \"Flatdek Wonderglass Sheet 2400GSM Opal\",\r\n Use: \"\",\r\n Colour: \"Opal\",\r\n Area: \"1\",\r\n Qty: \"2 x 8065 (B/C Fixed)\",\r\n Length: \"8065\",\r\n CodeBase: \"RFG5\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"TSWGFD24OP\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT30M\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Use\":\"Fibreglass Roof Sheeting\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"WGFG\",\"Use\":\"Fibreglass Roof Sheet\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"},\"Colour\":\"Area.RoofSheetColour\",\"Code\":\"FT30M\",\"Qty\":\"=Qty*3\",\"Use\":\"Fibreglass Roof Sheet\"},{\"Code\":\"WGFG\",\"Qty\":\"=Qty*3\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"},\"Use\":\"Fibreglass Roof Sheet\"},{\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Code\":\"FT30M\",\"Qty\":\"=(Length/1000)*2\",\"Use\":\"Stitching\"},{\"Code\":\"WGFG\",\"Qty\":\"=(Length/1000)*2\",\"Colour\":\"Plain\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"},\"Use\":\"Stitching\"},{\"Code\":\"FT35_WCB\",\"Qty\":\"=((Area.NumInternalPurlins*3)+4)*Qty\",\"Colour\":\"Area.RoofSheetColour\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"},\"Use\":\"Fibreglass Roof Sheet\"},{\"Code\":\"FT35_WCB\",\"Qty\":\"=Qty*3\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\",\"Use\":\"!=*B/C Fixed*\"},\"Use\":\"Fibreglass Roof Sheet\",\"Colour\":\"Plain\"},{\"Code\":\"FT35_WCB\",\"Qty\":\"=(Length/1000)*2\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"},\"Use\":\"Stitching\",\"Colour\":\"Area.RoofSheetColour\"},{\"Code\":\"RCFILL\",\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"REDIRECT_LSB=RFG5Q\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_LSB=RFG5Q\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSRET\",\r\n Desc: \"Sheerline Gutter .55mm (Roof sheet fixed) **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 5850\",\r\n Length: \"5850\",\r\n CodeBase: \"GSRET\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SG55**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"=(Length/600)+1\",\"Colour\":\"Area.RoofSheetColour\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=GSVR\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=GSVR\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"ELOS10075\",\r\n Desc: \"Downpipe Offset for 100 x 75 Steel **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"ELOS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPO10075**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"OL10075\",\r\n Desc: \"Pop 100 x 75 Zincalume/90mm Round\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"OL10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPUZL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"FR72\",\"Colour\":\"Area.GutterColour\",\"Qty\":\"6\"}]}',\r\n PromptCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Image_b64: null,\r\n PromptTextCodes: \"REDIRECT_NUN=OL10075Z\",\r\n Children: null,\r\n \"Parent Item\": \"DPS10075\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"DOWNPIPES & ACCESSORIES\",\r\n Code: \"DPS100752400\",\r\n Desc: \"Downpipe .40mm 100x75 Steel ** 2400mm\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 1896\",\r\n Length: \"1896\",\r\n CodeBase: \"DPS10075\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (finish 1896mm)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"DP4010075**##\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[{\"Code\":\"AS10075\",\"Qty\":\"2\"}]}',\r\n PromptCodes: \"Length=2400\",\r\n Image_b64: null,\r\n PromptTextCodes: \"SL=1800(410711)|2400(410721) SL_GIL=1800(410711)\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"CBARGEFD\",\r\n Desc: \"C Barge Flatdek\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 8005 (FLATDEK (No Foot Traffic) Barge Capping Carport Overhang)\",\r\n Length: \"8005\",\r\n CodeBase: \"CBARGEFD\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(No Side Beam)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LLFL45**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/600)+1\",\"Conditions\":{\"Job.WindZone\":\"=NOT CYCLONIC\"}},{\"Code\":\"FT20MN\",\"Qty\":\"=(Length/400)+1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"ExtraLM=165\",\r\n Image_b64: null,\r\n PromptTextCodes: \"ExtraLM=165\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"POSTS\",\r\n Code: \"PS90N1503000\",\r\n Desc: \"Post Steel 90x90x2mm notched FL150 H** 3000mm\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"2 x 2893 (Post in Ground (Notched))|2 x 2761 (Post in Ground (Notched))\",\r\n Length: \"2893\",\r\n CodeBase: \"PS90N150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(various finish lengths)\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"PSN90150H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"PBP90150\",\"Use\":\"Notched Post Plate\",\"Colour\":\"Area.PostColour\",\"Qty\":\"1\"},{\"Code\":\"FT150M\",\"Qty\":\"2\",\"Conditions\":{\"Use\":\"!=*Slab*\"},\"Colour\":\"Plain\"}]}',\r\n PromptCodes: \"Length=3000\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"DisableNesting=1 SL=3000(209155)|4000(209157)|5000(209160)|6000(209162) SL_EMU=3000(209155)|4000(209157) SL_NUN=3000(209155)|4000(209157) REDIRECT_NUN=PS90N150V REDIRECT_GIL=PS90N200\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"CON110\",\r\n Desc: \"Connector Aluminium Fascia 125x50x125\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"18 (Rafter Bracket)\",\r\n Length: \"\",\r\n CodeBase: \"CON110\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(fixed to Metal Fascia)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHICON110\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH5010NYG\",\"Use\":\"Timber Fascia Fix\",\"Qty\":\"1\",\"Colour\":\"Plain\",\"Conditions\":{\"Use\":\"=*Timber*\"}},{\"Code\":\"FT50T\",\"Qty\":\"3\",\"Use\":\"Teks\",\"Colour\":\"Plain\"},{\"Code\":\"FBH3010NYG\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"=*Steel*\"},\"Use\":\"Steel Fascia Fix\"},{\"Code\":\"FT45M\",\"Qty\":\"1\",\"Conditions\":{\"Job.WindZone\":\"=CYCLONIC\"}}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 (End Cap for Fascia Beam)|1 (End Cap for Purlin)|1 (For Fascia Beam)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\",\"Qty\":\"8\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"FLUB150L\",\r\n Desc: \"Connector Beam FL150 **\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 (For Purlin)\",\r\n Length: \"\",\r\n CodeBase: \"FLUB150L\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FLUB15050H**05\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[{\"Code\":\"FBH60NYG\",\"Use\":\"Bolt\",\"Qty\":\"1\",\"Conditions\":{\"Use\":\"!=*End*\"},\"Colour\":\"Plain\"},{\"Code\":\"FT20M\",\"Qty\":\"8\",\"Use\":\"Teks\",\"Colour\":\"Area.BeamColour\"},{\"Code\":\"RCPL45Z\",\"Qty\":\"1\",\"Colour\":\"Plain\"},{\"Code\":\"STUD19B\",\"Colour\":\"Plain\",\"Qty\":\"1\",\"Length\":\"1200\"}]}',\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"BS150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"WG\",\r\n Desc: \"Washer Grommet for Polycarbonate 22OD\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"4 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"WG\",\r\n CodeAppend: \"\",\r\n DescAppend: \" \",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"LHIWGPC220D\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"PS90N150\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BACK CHANNEL\",\r\n Code: \"RCHANNEL\",\r\n Desc: \"Flatdek Receiver Channel **\",\r\n Use: \"\",\r\n Colour: \"Thredbo White\",\r\n Area: \"\",\r\n Qty: \"1 x 6100 (5003mm(Back Channel))|1 x 6100 (4850mm(Back Channel)//1000mm(Back Channel))|1 x 6100 (3002mm(Back Channel))\",\r\n Length: \"6100\",\r\n CodeBase: \"RCHANNEL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FDRCH**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: \"SL_LSB=4500(50125)|6100(50125) SL_EMU=6100(50125) REDIRECT_GIL=BC5075 REDIRECT_NUN=BC5061\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL_LSB=4500(50125)|6100(50125) SL_EMU=6100(50125) REDIRECT_GIL=BC5075 REDIRECT_NUN=BC5061\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BS150\",\r\n Desc: \"Firmlok 150x1.5mm Hi Gloss H**\",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"1\",\r\n Qty: \"1 x 6100 (5845mm(Purlin))|1 x 7500 (6445mm(Fascia Beam))\",\r\n Length: \"6100\",\r\n CodeBase: \"BS150\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"\",\r\n Fielders_Code: \"FL15015H**####\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": \"\",\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Image_b64: null,\r\n PromptTextCodes:\r\n \"SL=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_DUB=3000(150153)|4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_EMU=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) SL_KEW=4000(150153)|5000(150153)|6100(150153)|7500(150153)|9000(150153) REDIRECT_GIL=BS150L REDIRECT_NUN=BS150L\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n },\r\n {\r\n Add: null,\r\n Category: \"GUTTERS & ACCESSORIES\",\r\n Code: \"GSSEP\",\r\n Desc: \"Sheerline Gutter Stop Ends ** (pair) \",\r\n Use: \"\",\r\n Colour: \"Woodland Grey\",\r\n Area: \"\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: null,\r\n CodeAppend: null,\r\n DescAppend: \" (1xGSSEL,1xGSSER)\",\r\n \"CL ID\": null,\r\n Fielders_Code: \"SGSEP**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Image_b64: null,\r\n PromptTextCodes: null,\r\n Children: null,\r\n \"Parent Item\": null,\r\n ExtraData: null,\r\n Conditions: null,\r\n FixedItemLength: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n },\r\n ],\r\n};\r\n","import { FIELDERS_BOM_JOBS, FIELDERS_ENGLOAD_JOBS, LYSAGHT_BOM_JOBS, LYSAGHT_ENGLOAD_JOBS } from \"./Helpers/bomJobs\";\r\nimport { API_BASE } from \"../AppConfig\";\r\nimport * as COMMON from \"../components/Common\";\r\nimport { fetchTimeout } from \"../components/Common\";\r\nimport _merge from \"lodash/merge\";\r\nimport _cloneDeep from \"lodash/cloneDeep\";\r\nimport { appendBOMItems, newDefaultJobState } from \"../redux_store/jobState\";\r\nimport * as JOBSTATE_VALIDATION from \"../redux_store/jobState_Validation\";\r\nconst { convertJobStateToIni } = require(\"../components/Common_Conversions\");\r\n\r\n// return the old lysaght bom for job\r\nexport const getLysaghtJobOldBom = ({ jobId }) => {\r\n return LYSAGHT_BOM_JOBS[jobId];\r\n};\r\n\r\n// return the old fielders bom for job\r\nexport const getFieldersJobOldBom = ({ jobId }) => {\r\n return FIELDERS_BOM_JOBS[jobId];\r\n};\r\n\r\nexport const GetTestConfig = async ({ brand }) => {\r\n let api_url = API_BASE() + \"/config/\";\r\n\r\n if (brand === \"lysaght\") {\r\n api_url += \"ZGllZ28ucG9ydGVsYUBibHVlc2NvcGVzdGVlbC5jb20ubGxkLmJiY2NvbW1z\";\r\n } else {\r\n api_url += \"ZGllZ28ucG9ydGVsYUBibHVlc2NvcGVzdGVlbC5jb20uY2VuLmJiY2NvbW1z\";\r\n }\r\n\r\n try {\r\n const response = await fetchTimeout(\r\n api_url,\r\n {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n },\r\n 45000\r\n );\r\n\r\n const json = await response.json();\r\n return json;\r\n } catch (e) {\r\n \r\n return false;\r\n }\r\n};\r\n\r\n// Gets the old job eng load\r\nexport const getFieldersOldJobLoad = ({ jobId }) => {\r\n return FIELDERS_ENGLOAD_JOBS[jobId];\r\n};\r\n\r\n// Gets the old job eng load\r\nexport const getLysaghtOldJobLoad = ({ jobId }) => {\r\n return LYSAGHT_ENGLOAD_JOBS[jobId];\r\n};\r\n\r\n// Gets the job data\r\nexport const getJob = async ({ jobId, config, app, user_data }) => {\r\n let job_url = API_BASE() + \"job/\" + \"DES\" + \"/\" + jobId + \"/\";\r\n try {\r\n const response = await fetchTimeout(\r\n job_url,\r\n {\r\n method: \"GET\", // *GET, POST, PUT, DELETE, etc.\r\n },\r\n 45000\r\n );\r\n\r\n let documents = JSON.parse(await response.text());\r\n if (documents.length > 0) {\r\n let recall_job_data = { ...documents[0] };\r\n let region = recall_job_data?.Distributor?.Offer?.Regions?.[0];\r\n\r\n if (region && config) {\r\n let region_offering = recall_job_data?.Distributor?.Offer?.offerings?.[region];\r\n if (region_offering) {\r\n config = COMMON.mergeDeep({ ...config }, region_offering);\r\n let brand = recall_job_data?.Distributor?.Offer?.Brand;\r\n let new_app_offering = { ...app.offerings };\r\n new_app_offering[brand].Regions[region] = region_offering;\r\n }\r\n }\r\n\r\n let num_areas = recall_job_data?.AreaSpecifications.length;\r\n\r\n let user_data_for_validation = user_data;\r\n if (recall_job_data?.User) user_data_for_validation = recall_job_data?.User;\r\n if (!user_data_for_validation?.BusinessDetails && recall_job_data?.Distributor)\r\n user_data_for_validation.BusinessDetails = recall_job_data?.Distributor;\r\n\r\n let job_to_load = _cloneDeep(\r\n newDefaultJobState(config, \"\", user_data_for_validation, num_areas ? num_areas : 1)\r\n );\r\n _merge(job_to_load, recall_job_data);\r\n\r\n window.svg = null;\r\n window.svg_data = null;\r\n job_to_load.App = {\r\n current_SVG: \"\",\r\n current_OBJ: \"\",\r\n temp_POA: \"\",\r\n };\r\n if (job_to_load?.QuoteParameters?.BOM?.bomHashCode) job_to_load.QuoteParameters.BOM.bomHashCode = 0;\r\n\r\n if (config?.region?.id === region ? config : null)\r\n job_to_load = JOBSTATE_VALIDATION.validateFullJob(config, job_to_load, -1, app);\r\n\r\n return job_to_load;\r\n } else {\r\n throw new Error(\"No Job\");\r\n }\r\n } catch (e) {\r\n \r\n return false;\r\n }\r\n};\r\n\r\n// Get the latest bom from engineering\r\nexport const getJobBom = async ({ job_data, jobId, config, app }) => {\r\n let api_url = API_BASE() + \"bom/\" + jobId + \"/\";\r\n\r\n let job_ini = convertJobStateToIni(job_data, app, \"\", config);\r\n let request_id = Date.now();\r\n\r\n let pricefile = app?.pricefile;\r\n\r\n let fast = true;\r\n let append_items = appendBOMItems(job_data, pricefile);\r\n let timeout = 20000;\r\n if (job_data?.DesignParameters) {\r\n timeout =\r\n 8000 +\r\n job_data.DesignParameters.NumFlat * 3000 +\r\n job_data.DesignParameters.NumGable * 4000 +\r\n job_data.DesignParameters.NumDeck * 3000;\r\n }\r\n\r\n let job_shape_details = {};\r\n let offering_bom_schema = {};\r\n offering_bom_schema.overall = config?.bom_items_for_each_job;\r\n for (let this_area_data of job_data.AreaSpecifications) {\r\n let design_option = config?.design_options?.[this_area_data.SHAPE.DesignType];\r\n offering_bom_schema[this_area_data.AreaIndex] = design_option?.bom_items;\r\n // Only requires if it's a gable structure for sheet modification (sheet laying rules for GS1)\r\n let isGable = this_area_data.SHAPE.RoofType1 === \"Gable\" ? true : false;\r\n job_shape_details[this_area_data.AreaIndex] = { isGable, SKYLIGHTS: this_area_data.SKYLIGHTS };\r\n }\r\n\r\n try {\r\n const response = await fetchTimeout(\r\n api_url,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n job: job_ini,\r\n fast: fast,\r\n order_list: {},\r\n request_id: request_id,\r\n job_id: jobId,\r\n job_shape_details,\r\n site_poa: job_data?.App?.temp_POA\r\n ? job_data?.App?.temp_POA\r\n : job_data?.Distributor?.Offer?.Regions?.[0],\r\n offering_bom_schema: offering_bom_schema,\r\n append_items: append_items,\r\n }),\r\n retry: true,\r\n retry_timeout: timeout * 1.5,\r\n request_id: request_id,\r\n },\r\n timeout\r\n );\r\n\r\n const json = await response.json();\r\n \r\n\r\n if (json.Error) {\r\n throw json.Error;\r\n } else if (json.bom_system) {\r\n return json;\r\n } else {\r\n // Handle other cases if needed\r\n // You can return something else or throw an error\r\n }\r\n } catch (e) {\r\n \r\n // Handle errors\r\n // You can return an error object or rethrow the error if needed\r\n }\r\n};\r\n\r\n// Get the latest job engineering\r\nexport const getJobEngineering = async ({ job_data, jobId, config, app }) => {\r\n let api_url = API_BASE() + \"svg/\" + jobId + \"/engineering\";\r\n let user_id = app.user.id;\r\n let request_id = Date.now();\r\n let job_ini = convertJobStateToIni(job_data, app, \"\", config);\r\n let brand = job_data.Distributor.Brand;\r\n\r\n let timeout = 30000;\r\n if (job_data?.DesignParameters) {\r\n timeout =\r\n 6000 +\r\n job_data.DesignParameters.NumFlat * 2000 +\r\n job_data.DesignParameters.NumGable * 3000 +\r\n job_data.DesignParameters.NumDeck * 2000;\r\n }\r\n\r\n if (api_url.includes(\"/engineering\")) {\r\n timeout = timeout * 1.8;\r\n }\r\n\r\n try {\r\n const response = await fetchTimeout(\r\n api_url,\r\n {\r\n signal: window?.loading2d_controller?.signal,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n user_id: user_id,\r\n job_id: job_data.id,\r\n request_id: request_id,\r\n job: job_ini,\r\n wind_data: job_data?.SiteParameters?.WindData,\r\n area_index: -1,\r\n session_id: window?.session_id,\r\n business_code: job_data?.BusinessCode,\r\n brand,\r\n threed: false,\r\n }),\r\n retry: true,\r\n retry_timeout: timeout * 2,\r\n request_id: request_id,\r\n },\r\n timeout\r\n );\r\n\r\n if (response === undefined) {\r\n return false;\r\n }\r\n\r\n let json = await response.json();\r\n\r\n if (json.Error) {\r\n // Handle errors here if needed\r\n }\r\n\r\n // Remove the svg_data property from the JSON response\r\n delete json.svg_data;\r\n\r\n return json;\r\n } catch (e) {\r\n if (e?.message?.includes && e.message.includes(\"aborted\")) {\r\n \r\n return false;\r\n }\r\n window.loading2d = false;\r\n \r\n\r\n let message = \"Error loading layout from QikQuote server.\";\r\n if (typeof e === \"string\") message = e;\r\n if (e.message === \"failed to fetch\")\r\n message = \"SERVER NOT REACHABLE. Check internet connection, then try again in a few minutes...\";\r\n\r\n // Handle errors here if needed\r\n\r\n return false;\r\n }\r\n};\r\n\r\n// Get the lld test jobs list\r\nexport const getLysaghtJobList = (jobs) => {\r\n return Object.keys(LYSAGHT_BOM_JOBS);\r\n};\r\n\r\n// Get the cds test jobs list\r\nexport const getFieldersJobList = (jobs) => {\r\n return Object.keys(FIELDERS_BOM_JOBS);\r\n};\r\n","import { API_BASE } from \"../AppConfig\";\r\n\r\nconst apiSync = ({ id, json }) => {\r\n fetch(API_BASE() + \"test/\" + id, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({ jobs: json, id: id, DocumentType: \"AUTO_TESTING\" }),\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n \r\n }\r\n })\r\n .catch((e) => {\r\n \r\n });\r\n};\r\n\r\nexport const apiGetTest = ({ id }) => {\r\n return fetch(API_BASE() + \"test/\" + id, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n const data = await response.json(); // Parse the JSON response\r\n if (data.jobs) return data.jobs; // Return the 'jobs' property\r\n }\r\n return null; // Returning null or another appropriate value in case of failure\r\n })\r\n .catch((e) => {\r\n \r\n throw e; // Re-throw the error for further handling\r\n });\r\n};\r\n\r\nexport const getBomTest = async () => {\r\n return await apiGetTest({ id: window.brand + \"_bom_test_jobs\" });\r\n};\r\n\r\nexport const getLoadTest = async () => {\r\n return await apiGetTest({ id: window.brand + \"_load_test_jobs\" });\r\n};\r\n\r\n// Resets the BOM to the returned new BOM\r\nexport const syncBomTest = ({ newBom }) => {\r\n apiSync({ id: window.brand + \"_bom_test_jobs\", json: newBom });\r\n};\r\n\r\n// Resets the Loads to the returned new engineering loads\r\nexport const syncLoadTest = ({ newLoad }) => {\r\n apiSync({ id: window.brand + \"_load_test_jobs\", json: newLoad });\r\n};\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport { fetchTimeout, mergeDeep, deepCopy } from \"../components/Common\";\r\nimport { API_BASE } from \"../AppConfig\";\r\nimport { updateAPP, updateUser, loadUser } from \"../redux_store/appState\";\r\nimport { updateAreaSpecification, NEW_JOB } from \"../redux_store/jobState\";\r\nimport { BASIC_SPECS_SECTIONS } from \"../redux_store/jobState_Schemas\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport * as CONFIG from \"../redux_store/configState\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { updateBOMOrderData } from \"../redux_store/jobState\";\r\nimport { CircularProgress } from \"@material-ui/core\";\r\n\r\n// For Price File and Tests download\r\nimport { saveAs } from \"file-saver\";\r\nimport ExcelJS from \"exceljs\";\r\n\r\nimport { JsonView, darkStyles } from \"react-json-view-lite\";\r\nimport \"react-json-view-lite/dist/index.css\";\r\nimport {\r\n GetTestConfig,\r\n getFieldersJobList,\r\n getFieldersJobOldBom,\r\n getFieldersOldJobLoad,\r\n getJob,\r\n getJobBom,\r\n getJobEngineering,\r\n getLysaghtJobList,\r\n getLysaghtJobOldBom,\r\n getLysaghtOldJobLoad,\r\n} from \"./TestScriptAdmin\";\r\nimport { getBomTest, getLoadTest, syncBomTest, syncLoadTest } from \"./SyncTests\";\r\n\r\nconst jsondiffpatch = require(\"jsondiffpatch\");\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n width: \"98%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"90%\",\r\n overflow: \"scroll\",\r\n fontSize: \"small\",\r\n },\r\n});\r\n\r\nfunction arraysAreEqual(arr1, arr2) {\r\n const filteredArr1 = arr1.filter((item) => item?.Add !== null && item?.Code !== \"MSJ\");\r\n const filteredArr2 = arr2.filter((item) => item?.Add !== null && item?.Code !== \"MSJ\");\r\n\r\n if (filteredArr1.length !== filteredArr2.length) {\r\n return false; // Different non-null item counts, not equal\r\n }\r\n\r\n for (const item1 of filteredArr1) {\r\n // Find a matching item in filteredArr2\r\n const matchingItem = filteredArr2.find(\r\n (item2) =>\r\n item1?.Code === item2?.Code &&\r\n item1?.Qty === item2?.Qty &&\r\n item1?.CodeBase === item2?.CodeBase &&\r\n item1?.DescAppend === item2?.DescAppend\r\n );\r\n\r\n // If no matching item was found, continue\r\n if (!matchingItem) {\r\n return false; // Items are not equal\r\n }\r\n }\r\n\r\n return true; // All non-null items are equal\r\n}\r\n\r\nfunction syntaxHighlight(json) {\r\n if (typeof json != \"string\") {\r\n json = JSON.stringify(json, undefined, 2);\r\n }\r\n json = json.replace(/&/g, \"&\").replace(//g, \">\").replaceAll(\"\\\\r\\\\n\", \" \");\r\n return json.replace(\r\n /(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)/g,\r\n function (match) {\r\n var cls = \"number\";\r\n if (/^\"/.test(match)) {\r\n if (/:$/.test(match)) {\r\n cls = \"key\";\r\n } else {\r\n cls = \"string\";\r\n }\r\n } else if (/true|false/.test(match)) {\r\n cls = \"boolean\";\r\n } else if (/null/.test(match)) {\r\n cls = \"null\";\r\n }\r\n // let data = match.replaceAll(\"\\r\\n\", ' ');\r\n // \r\n return '' + match + \" \";\r\n }\r\n );\r\n}\r\n\r\nexport async function canLoadJobs({ app, user }) {\r\n // Use Promise.all to start all jobs concurrently\r\n let loadBoms = await getBomTest();\r\n let loadLoads = await getLoadTest();\r\n let jobs;\r\n if (loadBoms && loadLoads) {\r\n jobs = Object.keys(loadBoms);\r\n } else jobs = window.brand === \"Lysaght\" ? getLysaghtJobList() : getFieldersJobList();\r\n let testConfig = GetTestConfig({ brand: window.brand });\r\n const results = await Promise.all(\r\n jobs.map(async (job) => {\r\n const expectedBOM = loadBoms\r\n ? loadBoms[job]\r\n : window.brand === \"Lysaght\"\r\n ? getLysaghtJobOldBom({ jobId: job })\r\n : getFieldersJobOldBom({ jobId: job });\r\n\r\n const loadedJob = await getJob({ jobId: job, app, testConfig, user_data: user });\r\n const loadedJobBom = await getJobBom({\r\n job_data: loadedJob,\r\n jobId: job,\r\n testConfig,\r\n app,\r\n });\r\n\r\n return loadedJobBom != null;\r\n })\r\n );\r\n\r\n // Check if every result is true\r\n const allLoaded = results.every((result) => result === true);\r\n\r\n return allLoaded;\r\n}\r\n\r\nexport async function bomPassTest({ app, user }) {\r\n // Use Promise.all to start all jobs concurrently\r\n let loadBoms = await getBomTest();\r\n let loadLoads = await getLoadTest();\r\n let jobs;\r\n if (loadBoms && loadLoads) {\r\n jobs = Object.keys(loadBoms);\r\n } else jobs = window.brand === \"Lysaght\" ? getLysaghtJobList() : getFieldersJobList();\r\n let testConfig = GetTestConfig({ brand: window.brand });\r\n\r\n const batchSize = 3;\r\n\r\n const processBatch = async (batch) => {\r\n return Promise.all(\r\n batch.map(async (job) => {\r\n const expectedBOM = loadBoms\r\n ? loadBoms[job]\r\n : window.brand === \"Lysaght\"\r\n ? getLysaghtJobOldBom({ jobId: job })\r\n : getFieldersJobOldBom({ jobId: job });\r\n\r\n const loadedJob = await getJob({ jobId: job, app, testConfig, user_data: user });\r\n const loadedJobBom = await getJobBom({\r\n job_data: loadedJob,\r\n jobId: job,\r\n testConfig,\r\n app,\r\n });\r\n\r\n return arraysAreEqual(expectedBOM, loadedJobBom.bom_system.system_items.items);\r\n })\r\n );\r\n };\r\n\r\n const results = [];\r\n for (let i = 0; i < jobs.length; i += batchSize) {\r\n const batch = jobs.slice(i, i + batchSize);\r\n const batchResults = await processBatch(batch);\r\n results.push(...batchResults);\r\n }\r\n\r\n // Check if every result is true\r\n const allEqual = results.every((result) => result === true);\r\n\r\n return allEqual;\r\n}\r\n\r\nexport default function DebugTools(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [intialise, setIntialise] = React.useState(false);\r\n const [diagnosticData, setDiagnosticData] = React.useState(null);\r\n const [diagnosticDataProd, setDiagnosticDataProd] = React.useState(null);\r\n const [diagnosticDataTest, setDiagnosticDataTest] = React.useState(null);\r\n const [method, setMethod] = React.useState(\"GET\");\r\n const [loading, setLoading] = React.useState(\"\");\r\n const [progress, setProgress] = React.useState(0);\r\n const [flushStatus, setFlushStatus] = React.useState(\"\");\r\n\r\n const [statusUpdateProd, SetStatusUpdateProd] = React.useState(null);\r\n const [statusUpdateTest, SetStatusUpdateTest] = React.useState(null);\r\n\r\n const [lyvesCode, setLyvesCode] = React.useState(\"\");\r\n\r\n const [json_data, set_json_data_to_view] = React.useState({});\r\n let json_data_to_view = json_data;\r\n if (diagnosticData) json_data_to_view[\"LOCAL\"] = diagnosticData;\r\n if (diagnosticDataTest) json_data_to_view[\"TEST\"] = diagnosticDataTest;\r\n if (diagnosticDataProd) json_data_to_view[\"PRODUCTION\"] = diagnosticDataProd;\r\n\r\n const [APITestURL, setAPITestURL] = React.useState(API_BASE() + \"IsAlive\");\r\n\r\n const config = useSelector((state) => state.config);\r\n const job = useSelector((state) => state.job);\r\n const pricefile = useSelector((state) => state.app.pricefile);\r\n const user = useSelector((state) => state.app.user);\r\n const app = useSelector((state) => state.app);\r\n const [poa, setPOA] = React.useState(job?.App?.temp_POA ? job.App.temp_POA : config?.region?.id);\r\n\r\n \r\n\r\n let brand = window.LYSAGHT ? \"Lysaght\" : \"Fielders\";\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"IsAlive/\";\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n // let new_data = { ...json_data_to_view };\r\n // new_data[\"LOCAL\"] = json;\r\n // set_json_data_to_view(new_data);\r\n setDiagnosticData(json);\r\n // setBusinessList(json);\r\n // setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n // setBusinessList([]);\r\n });\r\n\r\n let api_url_test = \"https://test.centenarydesignsuite.fielders.com.au/api/IsAlive/\";\r\n fetchTimeout(api_url_test, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n // \r\n // let new_data = { ...json_data_to_view };\r\n // new_data[\"TEST\"] = json;\r\n // set_json_data_to_view(new_data);\r\n setDiagnosticDataTest(json);\r\n // setBusinessList(json);\r\n // setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n // setBusinessList([]);\r\n });\r\n\r\n let api_url_prod = \"https://centenarydesignsuite.fielders.com.au/api/IsAlive/\";\r\n fetchTimeout(api_url_prod, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n // \r\n setDiagnosticDataProd(json);\r\n // let new_data = { ...json_data_to_view };\r\n // new_data[\"PRODUCTION\"] = json;\r\n // set_json_data_to_view(new_data);\r\n // setBusinessList(json);\r\n // setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n // setBusinessList([]);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n const item_template = {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"CD42DS\",\r\n Desc: \"C-Dek 310 0.42BMT **H**\",\r\n Use: \"\",\r\n Colour: \"Classic Cream\",\r\n Area: \"0\",\r\n Qty: \"1\",\r\n Length: \"1000\",\r\n CodeBase: \"CD42DS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: [],\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {},\r\n ProductListItem: \"\",\r\n QtyCalculated: null,\r\n LinkedItemsData: null,\r\n matched_state: \"no_match\",\r\n Image_b64: \"\",\r\n };\r\n\r\n //#region DES-712\r\n const flattenJSON = (obj = {}, res = {}, extraKey = \"\") => {\r\n let key = \"\";\r\n for (key in obj) {\r\n if (typeof obj[key] !== \"object\") {\r\n res[extraKey + key] = obj[key];\r\n } else {\r\n flattenJSON(obj[key], res, `${extraKey}${key}.`);\r\n }\r\n }\r\n return res;\r\n };\r\n\r\n const exportExcel = () => {\r\n //generateDocumentToShow(\"Order List\");\r\n\r\n if (!job?.QuoteParameters?.BOM?.SystemList?.items) {\r\n alert(\"there is no current job loaded, or current job does not have any BOM items generated yet\");\r\n return;\r\n }\r\n\r\n var XLSX = require(\"xlsx\");\r\n let systemList = [];\r\n\r\n for (var index in job?.QuoteParameters?.BOM?.SystemList?.items) {\r\n systemList.push(flattenJSON(job?.QuoteParameters?.BOM?.SystemList?.items[index]));\r\n }\r\n const worksheet = XLSX.utils.json_to_sheet(systemList);\r\n const workbook = XLSX.utils.book_new();\r\n\r\n XLSX.utils.book_append_sheet(workbook, worksheet, \"BOM\");\r\n\r\n //buffer\r\n let buf = XLSX.write(workbook, { bookType: \"xlsx\", type: \"buffer\" });\r\n //Binary string\r\n XLSX.write(workbook, { bookType: \"xlsx\", type: \"binary\" });\r\n\r\n XLSX.writeFile(workbook, \"BOM.xlsx\");\r\n };\r\n //#endregion\r\n\r\n const AddAllItems = () => {\r\n let all_pitches = [15, 20, 25, 30];\r\n let order_list = [];\r\n for (let pricefile_item of pricefile.data) {\r\n if (pricefile_item.Brand === \"LLD\") continue;\r\n let all_colours = pricefile_item.Colours;\r\n if (all_colours) all_colours = all_colours.split(\",\");\r\n if (!all_colours) all_colours = [...config.colour_arrays?.Colorbond];\r\n if (typeof all_colours === \"String\") all_colours = [all_colours];\r\n\r\n if (pricefile_item.ProductCode.includes(\"**\") && pricefile_item.ProductCode.includes(\"@@\")) {\r\n let num_items = all_pitches.length * all_colours.length;\r\n \r\n //iterate all colours AND pitches\r\n for (let angle of all_pitches) {\r\n //iterate all colours\r\n if (all_colours)\r\n for (let colour_str of all_colours) {\r\n let colour = colour_str.trim();\r\n if (config?.colour_map?.[colour]?.Code) {\r\n // code, proceed\r\n let code = config?.colour_map?.[colour]?.Code;\r\n let new_item = { ...item_template };\r\n new_item.Code = pricefile_item.ProductIndex;\r\n new_item.Fielders_Code = pricefile_item.ProductCode.replace(\"**\", code).replace(\r\n \"@@\",\r\n angle\r\n );\r\n new_item.Qty = \"1\";\r\n if (pricefile_item.SellingUOM == \"LM\") new_item.Length = \"1000\";\r\n else new_item.Length = \"\";\r\n new_item.Category = pricefile_item.GroupingName;\r\n new_item.CodeBase = pricefile_item.ProductIndex;\r\n new_item.Desc = pricefile_item.ProductDescription.replace(\"**\", colour).replace(\r\n \"@@\",\r\n angle\r\n );\r\n order_list.push(new_item);\r\n }\r\n }\r\n }\r\n } else if (pricefile_item.ProductCode.includes(\"@@\")) {\r\n let num_items = all_pitches.length;\r\n \r\n //iterate all angles\r\n for (let angle of all_pitches) {\r\n // code, proceed\r\n let new_item = { ...item_template };\r\n new_item.Code = pricefile_item.ProductIndex;\r\n new_item.Fielders_Code = pricefile_item.ProductCode.replace(\"@@\", angle);\r\n new_item.Qty = \"1\";\r\n if (pricefile_item.SellingUOM == \"LM\") new_item.Length = \"1000\";\r\n else new_item.Length = \"\";\r\n new_item.Category = pricefile_item.GroupingName;\r\n new_item.CodeBase = pricefile_item.ProductIndex;\r\n new_item.Desc = pricefile_item.ProductDescription.replace(\"@@\", angle);\r\n order_list.push(new_item);\r\n }\r\n } else if (pricefile_item.ProductCode.includes(\"**\")) {\r\n let num_items = all_colours.length;\r\n \r\n //iterate all colours\r\n if (all_colours)\r\n for (let colour_str of all_colours) {\r\n let colour = colour_str.trim();\r\n if (config?.colour_map?.[colour]?.Code) {\r\n // code, proceed\r\n let code = config?.colour_map?.[colour]?.Code;\r\n let new_item = { ...item_template };\r\n new_item.Code = pricefile_item.ProductIndex;\r\n new_item.Fielders_Code = pricefile_item.ProductCode.replace(\"**\", code);\r\n new_item.Qty = \"1\";\r\n if (pricefile_item.SellingUOM == \"LM\") new_item.Length = \"1000\";\r\n else new_item.Length = \"\";\r\n new_item.Category = pricefile_item.GroupingName;\r\n new_item.CodeBase = pricefile_item.ProductIndex;\r\n new_item.Desc = pricefile_item.ProductDescription.replace(\"**\", colour);\r\n order_list.push(new_item);\r\n }\r\n }\r\n } else {\r\n //just add it\r\n let new_item = { ...item_template };\r\n new_item.Code = pricefile_item.ProductIndex;\r\n new_item.Fielders_Code = pricefile_item.ProductCode;\r\n new_item.Qty = \"1\";\r\n if (pricefile_item.SellingUOM == \"LM\") new_item.Length = \"1000\";\r\n else new_item.Length = \"\";\r\n new_item.Category = pricefile_item.GroupingName;\r\n new_item.CodeBase = pricefile_item.ProductIndex;\r\n new_item.Desc = pricefile_item.ProductDescription;\r\n order_list.push(new_item);\r\n }\r\n }\r\n\r\n let output = \"\";\r\n\r\n for (let new_item of order_list) {\r\n output +=\r\n new_item.Code +\r\n \",\" +\r\n new_item.Fielders_Code +\r\n \",\" +\r\n new_item.Qty +\r\n \",\" +\r\n new_item.Length +\r\n \",\" +\r\n new_item.Category +\r\n \",\" +\r\n new_item.Desc +\r\n \"\\n\";\r\n }\r\n\r\n var element = document.createElement(\"a\");\r\n element.setAttribute(\"href\", \"data:text/plain;charset=utf-8,\" + encodeURIComponent(output));\r\n element.setAttribute(\"download\", job.id + \"_BIGORDERLIST.JSON\");\r\n\r\n element.style.display = \"none\";\r\n document.body.appendChild(element);\r\n\r\n element.click();\r\n document.body.removeChild(element);\r\n\r\n \r\n\r\n let order_list_bom = {\r\n items: order_list,\r\n total_price: 1,\r\n total_eprice: 1,\r\n };\r\n dispatch(updateBOMOrderData(order_list_bom));\r\n };\r\n\r\n const RestartQQServerUsingHelper = () => {\r\n setLoading(\"Restart\");\r\n let api_url = API_BASE() + \"admin/SendHelperCommand?command=RestartAll\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n setLoading(\"\");\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n });\r\n };\r\n const UpdateQQServerUsingHelper = () => {\r\n setLoading(\"Update\");\r\n let api_url = API_BASE() + \"admin/SendHelperCommand?command=UpdateQQ\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n dispatch(loadUser(user.id, \"cent2021\")).then((result) => {\r\n \r\n setLoading(\"\");\r\n });\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n });\r\n };\r\n\r\n const GetUserList = () => {\r\n let api_url = API_BASE() + \"admin/GetUserSummaryAsync\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n let new_data = { ...json_data_to_view };\r\n new_data[\"USER SUMMARY\"] = json;\r\n set_json_data_to_view(new_data);\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n });\r\n };\r\n\r\n function objectsAreEqual(obj1, obj2) {\r\n // Implement your custom comparison logic here\r\n // For example, you can compare specific properties of the objects\r\n\r\n // For a basic comparison of all properties, you can use JSON.stringify:\r\n return JSON.stringify(obj1) === JSON.stringify(obj2);\r\n }\r\n\r\n function findDifferentItems(arr1, arr2) {\r\n const differentItems = [];\r\n\r\n if (!Array.isArray(arr1) || !Array.isArray(arr2)) {\r\n // Handle cases where arr1 or arr2 is not an array\r\n return differentItems;\r\n }\r\n\r\n for (const item1 of arr1) {\r\n // Check if item1 is null or has Add: null, and continue if true\r\n if (!item1 || item1?.Add === null || item1?.Code === \"MSJ\") {\r\n continue;\r\n }\r\n\r\n const matchingItem = arr2.find(\r\n (item2) =>\r\n item1?.Code === item2?.Code &&\r\n item1?.Qty === item2?.Qty &&\r\n item1?.CodeBase === item2?.CodeBase &&\r\n item1?.DescAppend === item2?.DescAppend\r\n );\r\n\r\n // If no matching item was found, add item1 to differentItems\r\n if (!matchingItem) {\r\n differentItems.push(item1);\r\n }\r\n }\r\n\r\n for (const item2 of arr2) {\r\n // Check if item2 is null or has Add: null, and continue if true\r\n if (!item2 || item2?.Add === null || item2?.Code === \"MSJ\") {\r\n continue;\r\n }\r\n\r\n const matchingItem = arr1.find(\r\n (item1) =>\r\n item1?.Code === item2?.Code &&\r\n item1?.Qty === item2?.Qty &&\r\n item1?.CodeBase === item2?.CodeBase &&\r\n item1?.DescAppend === item2?.DescAppend\r\n );\r\n\r\n // If no matching item was found, add item2 to differentItems\r\n if (!matchingItem) {\r\n differentItems.push(item2);\r\n }\r\n }\r\n\r\n return differentItems;\r\n }\r\n\r\n const GetTestScripts = async (resync) => {\r\n setLoading(\"tests\");\r\n\r\n let loadBoms = await getBomTest();\r\n let loadLoads = await getLoadTest();\r\n let jobs;\r\n if (loadBoms && loadLoads) {\r\n jobs = Object.keys(loadBoms);\r\n } else jobs = window.brand === \"Lysaght\" ? getLysaghtJobList() : getFieldersJobList();\r\n\r\n \r\n\r\n let new_data = { ...json_data_to_view };\r\n const totalJobs = jobs.length;\r\n let completedJobs = 0;\r\n\r\n const testConfig = GetTestConfig({ brand: window.brand });\r\n\r\n let syncBom = {};\r\n let syncLoad = {};\r\n\r\n const processJobData = async (job) => {\r\n if (!new_data[\"Job Data\"] || !new_data[\"Job Data\"][job]) {\r\n new_data[\"Job Data\"] = { ...new_data[\"Job Data\"], [job]: { job: {}, bom: {}, loads: {}, tests: {} } };\r\n }\r\n\r\n const loadedJob = await getJob({ jobId: job, app, testConfig, user_data: user });\r\n new_data[\"Job Data\"][job][\"job\"] = loadedJob;\r\n\r\n const loadedJobBom = await getJobBom({\r\n job_data: loadedJob,\r\n jobId: job,\r\n testConfig,\r\n app,\r\n });\r\n new_data[\"Job Data\"][job][\"bom\"] = loadedJobBom;\r\n\r\n const loadedJobLoads = await getJobEngineering({ job_data: loadedJob, jobId: job, testConfig, app });\r\n new_data[\"Job Data\"][job][\"loads\"] = loadedJobLoads;\r\n\r\n const expectedBOM = loadBoms\r\n ? loadBoms[job]\r\n : window.brand === \"Lysaght\"\r\n ? getLysaghtJobOldBom({ jobId: job })\r\n : getFieldersJobOldBom({ jobId: job });\r\n\r\n const expectedLoad = loadLoads\r\n ? loadLoads[job]\r\n : window.brand === \"Lysaght\"\r\n ? getLysaghtOldJobLoad({ jobId: job })\r\n : getFieldersOldJobLoad({ jobId: job });\r\n\r\n const compareBoms = {\r\n Expected: expectedBOM,\r\n Actual: loadedJobBom.bom_system.system_items.items,\r\n Equal: arraysAreEqual(expectedBOM, loadedJobBom.bom_system.system_items.items),\r\n differentItems: findDifferentItems(expectedBOM, loadedJobBom.bom_system.system_items.items),\r\n };\r\n\r\n if (resync) {\r\n syncBom[job] = loadedJobBom.bom_system.system_items.items;\r\n syncLoad[job] = loadedJobLoads.EngineeringResults;\r\n }\r\n\r\n new_data[\"Job Data\"][job][\"tests\"][\"bom\"] = compareBoms;\r\n\r\n const compareLoads = {\r\n Expected: expectedLoad,\r\n Actual: loadedJobLoads.EngineeringResults,\r\n };\r\n\r\n new_data[\"Job Data\"][job][\"tests\"][\"loads\"] = compareLoads;\r\n\r\n // Calculate the difference between expected and actual BOM\r\n const bomDiff = jsondiffpatch.diff(compareBoms.Expected, compareBoms.Actual);\r\n\r\n // Calculate the difference between expected and actual loads\r\n const loadsDiff = jsondiffpatch.diff(compareLoads.Expected, compareLoads.Actual);\r\n\r\n // Add the differences to the tests object\r\n new_data[\"Job Data\"][job][\"tests\"][\"bomDiff\"] = bomDiff;\r\n new_data[\"Job Data\"][job][\"tests\"][\"loadsDiff\"] = loadsDiff;\r\n\r\n // Determine the prefix based on comparison result\r\n const prefix = compareBoms.Equal ? \"✓\" : \"⮾\";\r\n\r\n // Create a new key in the \"Job Data\" object with the prefix and the original job key\r\n const prefixedJobKey = `${prefix} ${job}`;\r\n new_data[\"Job Data\"][prefixedJobKey] = new_data[\"Job Data\"][job];\r\n\r\n // Optionally, you can remove the original job key if it's no longer needed\r\n delete new_data[\"Job Data\"][job];\r\n\r\n // Calculate progress and update the state\r\n completedJobs++;\r\n const currentProgress = (completedJobs / totalJobs) * 100;\r\n setProgress(currentProgress);\r\n };\r\n\r\n const processJobsConcurrently = async (jobs) => {\r\n const batchSize = 3;\r\n\r\n for (let i = 0; i < jobs.length; i += batchSize) {\r\n const batch = jobs.slice(i, i + batchSize);\r\n await Promise.all(batch.map((job) => processJobData(job)));\r\n }\r\n };\r\n\r\n // Call the new function with your jobs array\r\n await processJobsConcurrently(jobs);\r\n\r\n if (resync) {\r\n syncBomTest({ newBom: syncBom });\r\n syncLoadTest({ newLoad: syncLoad });\r\n // Reset loading state and progress\r\n setLoading(\"\");\r\n setProgress(0);\r\n return;\r\n }\r\n\r\n \r\n // Check if all BOMS match and add passed variable\r\n const pass = Object.values(new_data[\"Job Data\"]).every((obj) =>\r\n Object.keys(obj).every((key) => {\r\n \r\n return obj[key] === \"✓\";\r\n })\r\n );\r\n\r\n new_data[\"Job Data\"][\"Passed\"] = pass;\r\n\r\n // Now, update the state with the final new_data\r\n set_json_data_to_view(new_data);\r\n\r\n // Reset loading state and progress\r\n setLoading(\"\");\r\n setProgress(0);\r\n };\r\n\r\n \r\n\r\n const GetPriceFile = () => {\r\n let api_url = API_BASE() + \"/admin/GetPriceFileData\";\r\n\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n const priceFileData = json.PRICE_FILE.data;\r\n\r\n if (!Array.isArray(priceFileData)) {\r\n console.error(\"JSON data is not an array of objects.\");\r\n setLoading(\"\");\r\n return;\r\n }\r\n\r\n if (priceFileData.length === 0) {\r\n console.warn(\"JSON data is empty.\");\r\n setLoading(\"\");\r\n return;\r\n }\r\n\r\n // Create a new Excel workbook\r\n const workbook = new ExcelJS.Workbook();\r\n const worksheet = workbook.addWorksheet(\"PriceFile\");\r\n\r\n // Define the headers (assuming your object keys represent the column names)\r\n const headers = Object.keys(priceFileData[0]);\r\n\r\n // Add headers to the worksheet\r\n worksheet.addRow(headers);\r\n\r\n // Add data rows to the worksheet\r\n priceFileData.forEach((row) => {\r\n const rowData = headers.map((header) => row[header]);\r\n worksheet.addRow(rowData);\r\n });\r\n\r\n // Generate a blob from the workbook\r\n return workbook.xlsx.writeBuffer();\r\n })\r\n .then((buffer) => {\r\n // Use FileSaver.js to trigger the download\r\n const blob = new Blob([buffer], {\r\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n });\r\n saveAs(blob, \"Pricefile.xlsx\");\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n });\r\n };\r\n\r\n const GetPricingReport = () => {\r\n let api_url = API_BASE() + \"/admin/GetPriceFileData\";\r\n\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n const priceFileData = json.PRICE_FILE.data;\r\n\r\n if (!Array.isArray(priceFileData)) {\r\n console.error(\"JSON data is not an array of objects.\");\r\n setLoading(\"\");\r\n return;\r\n }\r\n\r\n if (priceFileData.length === 0) {\r\n console.warn(\"JSON data is empty.\");\r\n setLoading(\"\");\r\n return;\r\n }\r\n\r\n // Create a new Excel workbook\r\n const workbook = new ExcelJS.Workbook();\r\n const worksheet = workbook.addWorksheet(\"PricingReport\");\r\n\r\n // Define the headers (assuming your object keys represent the column names)\r\n let headers = Object.keys(priceFileData[0]).filter((header) =>\r\n [\"ProductIndex\", \"ProductCode\", \"ProductGroup\", \"SubGroup\"].includes(header)\r\n ); // Removed \"State\" from here\r\n\r\n headers.push(\"Brand\"); // Renamed \"State\" to \"Brand\"\r\n headers.push(\"State-LLD\");\r\n headers.push(\"State-CDS\");\r\n\r\n // Add headers to the worksheet\r\n const headerRow = worksheet.addRow(headers);\r\n\r\n // Set filtering for all headers\r\n worksheet.autoFilter = {\r\n from: {\r\n row: headerRow.number,\r\n column: 1,\r\n },\r\n to: {\r\n row: headerRow.number,\r\n column: headers.length,\r\n },\r\n };\r\n\r\n headerRow.eachCell((cell) => {\r\n cell.font = { bold: true };\r\n });\r\n\r\n // Define a style for empty cells\r\n const emptyCellStyle = {\r\n type: \"pattern\",\r\n pattern: \"solid\",\r\n fgColor: { argb: \"FFD3D3D3\" }, // Light gray color\r\n };\r\n\r\n // Add data rows to the worksheet\r\n priceFileData.forEach((row) => {\r\n const rowData = headers.map((header) => {\r\n if (header === \"State-LLD\") {\r\n let stateData = row[\"State\"]; // Assuming this is the correct path to your state data\r\n return stateData.hasOwnProperty(\"LLD\") ? stateData[\"LLD\"].join(\", \") : \"\";\r\n } else if (header === \"State-CDS\") {\r\n let stateData = row[\"State\"]; // Assuming this is the correct path to your state data\r\n return stateData.hasOwnProperty(\"CDS\") ? stateData[\"CDS\"].join(\", \") : \"\";\r\n } else if (header === \"Brand\") {\r\n // Use the new \"Brand\" header\r\n let stateData = row[\"State\"];\r\n let brands = [];\r\n if (stateData.hasOwnProperty(\"LLD\") && stateData[\"LLD\"].length > 0) {\r\n brands.push(\"LLD\");\r\n }\r\n if (stateData.hasOwnProperty(\"CDS\") && stateData[\"CDS\"].length > 0) {\r\n brands.push(\"CDS\");\r\n }\r\n return brands.join(\", \"); // Join multiple brands with comma\r\n }\r\n // Return the original data for all other headers\r\n return row[header];\r\n });\r\n const newRow = worksheet.addRow(rowData);\r\n newRow.eachCell((cell, colNumber) => {\r\n if (cell.value === \"\") {\r\n cell.fill = emptyCellStyle; // Set cells with no value to gray\r\n }\r\n });\r\n });\r\n\r\n // Generate a blob from the workbook\r\n return workbook.xlsx.writeBuffer();\r\n })\r\n .then((buffer) => {\r\n // Use FileSaver.js to trigger the download\r\n const blob = new Blob([buffer], {\r\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n });\r\n saveAs(blob, \"PricingReport.xlsx\");\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n });\r\n };\r\n\r\n const GetUnpricedItems = () => {\r\n let api_url = API_BASE() + \"/admin/GetProdAccountsNotPriced?lyves_account=\" + lyvesCode;\r\n\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n var element = document.createElement(\"a\");\r\n element.setAttribute(\r\n \"href\",\r\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(JSON.stringify(json, null, 2))\r\n );\r\n element.setAttribute(\"download\", (lyvesCode ? lyvesCode : \"ALL_LLD_ACTIVE\") + \"_no_eprices.json\");\r\n\r\n element.style.display = \"none\";\r\n document.body.appendChild(element);\r\n\r\n element.click();\r\n document.body.removeChild(element);\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n });\r\n };\r\n\r\n const FlushCaches = () => {\r\n setLoading(\"FlushCache\");\r\n setFlushStatus(\"...flushing\");\r\n let api_url = API_BASE() + \"admin/FlushCaches\";\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n setLoading(\"\");\r\n setFlushStatus(\"...Success!\");\r\n alert(\"success updating Flushing Caches\");\r\n })\r\n .catch((e) => {\r\n \r\n setFlushStatus(\"...Error!\");\r\n setLoading(\"\");\r\n });\r\n };\r\n\r\n const SyncTestToDev = () => {\r\n setLoading(\"SyncDev\");\r\n let api_url = API_BASE() + \"admin/SyncTestToDev\";\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n dispatch(loadUser(user.id, \"cent2021\")).then((result) => {\r\n \r\n setLoading(\"\");\r\n alert(\"success updating DEV SERVERS\");\r\n });\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n alert(\"Error flushing cache: \" + e);\r\n });\r\n };\r\n\r\n const SyncTestToProd = () => {\r\n setLoading(\"SyncProd\");\r\n let api_url = API_BASE() + \"admin/SyncTestToProd\";\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n dispatch(loadUser(user.id, \"cent2021\")).then((result) => {\r\n \r\n setLoading(\"\");\r\n alert(\"success updating PRODUCTION SERVERS\");\r\n });\r\n })\r\n .catch((e) => {\r\n \r\n setLoading(\"\");\r\n });\r\n };\r\n\r\n const setPOAConfig = (new_poa) => {};\r\n\r\n const toggleBrand = (event, value = null) => {\r\n window.brand = value;\r\n if (window.brand === \"Fielders\") {\r\n window.FIELDERS = true;\r\n window.LYSAGHT = false;\r\n } else if (window.brand === \"Lysaght\") {\r\n window.FIELDERS = false;\r\n window.LYSAGHT = true;\r\n }\r\n let new_user = { ...user, Brand: value };\r\n dispatch(updateUser(new_user));\r\n };\r\n\r\n function padTo2Digits(num) {\r\n return num.toString().padStart(2, \"0\");\r\n }\r\n\r\n function formatDate(date) {\r\n return [padTo2Digits(date.getDate()), padTo2Digits(date.getMonth() + 1), date.getFullYear()].join(\"-\");\r\n }\r\n\r\n \r\n\r\n return (\r\n \r\n
\r\n setMethod(v)}\r\n style={{ flex: \"none\" }}\r\n />\r\n {\r\n let val = e.target.value;\r\n setAPITestURL(val);\r\n\r\n let api_url = val;\r\n console.warn(\"getting\", api_url);\r\n fetchTimeout(\r\n api_url,\r\n {\r\n method: method,\r\n },\r\n 240000\r\n )\r\n .then(async (response) => {\r\n console.warn(response.status);\r\n let response_text = await response.text();\r\n console.warn(response_text);\r\n })\r\n .catch((e) => {\r\n console.warn(\"ERROR\", e);\r\n });\r\n }}\r\n />\r\n {\r\n dispatch(updateAPP(\"user\", { ...user, Role: v }));\r\n }}\r\n />\r\n {\r\n setPOA(val);\r\n let region_offering = deepCopy(app?.offerings?.[brand]?.Regions?.[val]);\r\n let master_offering = deepCopy(app?.offerings?.[brand]?.Master);\r\n let new_config = mergeDeep({ ...master_offering }, { ...region_offering });\r\n new_config.region.id = val;\r\n dispatch(CONFIG.updateConfigAll(new_config));\r\n\r\n if (job) {\r\n \r\n let new_job = deepCopy(job);\r\n new_job.Distributor.POA = val;\r\n new_job.App.temp_POA = val;\r\n if (new_job?.QuoteParameters?.BOM?.QuoteData?.CURRENT_DEALER?.POA)\r\n new_job.QuoteParameters.BOM.QuoteData.CURRENT_DEALER.POA = val;\r\n dispatch({\r\n type: NEW_JOB,\r\n parameter: deepCopy(new_job),\r\n });\r\n }\r\n }}\r\n style={{\r\n flex: \"inherit\",\r\n }}\r\n />\r\n \r\n
Generate Order List On Current Job with All Items \r\n {/* DES-712 */}\r\n
exportExcel()}>Export Current Job to Excel \r\n
\r\n Restart QQ Server\r\n {loading === \"Restart\" && }\r\n \r\n
\r\n Update QQ Server and Local Databases\r\n {loading === \"Update\" && }\r\n \r\n {window.test && (\r\n
\r\n PUBLISH Test Server ={\">\"} PROD Server (copies TEST materials, offering and pricefile to PRODUCTION)\r\n {loading === \"SyncProd\" && }\r\n \r\n )}\r\n {window.debug && (\r\n
\r\n Sync Test Server ={\">\"} Dev Server (copies TEST materials, offering and pricefile to dev)\r\n {loading === \"SyncDev\" && }\r\n \r\n )}\r\n {user.Role == 99 &&\r\n (user?.id.includes(\"kevinchan\") ||\r\n user?.id.includes(\"diego.\") ||\r\n user?.id.includes(\"michael.abdo\")) && (\r\n
\r\n Get User List Summary\r\n \r\n )}\r\n {user.Role == 99 && (\r\n
\r\n \r\n Get Price File\r\n \r\n {\r\n setLyvesCode(v);\r\n }}\r\n helperText={\"leaving blank will return ALL ACTIVE LLD including PAT accts\"}\r\n />\r\n \r\n Get Unpriced ePrice Items for LYVES Code\r\n \r\n \r\n )}\r\n {user.Role == 99 && (\r\n
\r\n \r\n Get ePricing Report\r\n \r\n \r\n )}\r\n {user.Role == 99 && loading ? (\r\n
\r\n ) : (\r\n <>\r\n
GetTestScripts(false)} style={{ marginTop: \"20px\" }}>\r\n Run Test Scripts\r\n \r\n
GetTestScripts(true)} style={{ marginTop: \"20px\" }}>\r\n Sync Test Scripts\r\n \r\n >\r\n )}\r\n {user.Role == 99 && (\r\n
\r\n Flush Memory Caches {flushStatus}\r\n {loading === \"FlushCache\" && }\r\n \r\n )}\r\n\r\n
{\r\n if (level <= 0) return true;\r\n else return false;\r\n }}\r\n style={darkStyles}\r\n />\r\n {/* LOCAL \r\n {diagnosticData && (\r\n
\r\n )}\r\n \r\n TEST \r\n {diagnosticDataTest && (\r\n
\r\n )}\r\n \r\n PRODUCTION (1 of them) \r\n {diagnosticDataProd && (\r\n
\r\n )} */}\r\n \r\n );\r\n}\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport moment from \"moment\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { DatePicker } from \"@material-ui/pickers\";\r\nimport BSL_ControlContainer from \"./BSL_ControlContainer\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\n\r\nconst StyledButton = withStyles((theme) => ({\r\n root: {\r\n fontSize: \"11pt\",\r\n fontFamily: theme.typography.fontFamily,\r\n fontWeight: \"200\",\r\n padding: \"6px 20px\",\r\n minWidth: \"35px\",\r\n background: \"#192E61\",\r\n color: \"white\",\r\n boxShadow: \"none\",\r\n width: \"fit-content\",\r\n maxwidth: \"200px\",\r\n \"&:hover\": {\r\n color: \"white !important\",\r\n background: \"#0F1F41 !important\",\r\n },\r\n \"&:hover label\": {\r\n color: \"white\",\r\n },\r\n },\r\n disabled: {\r\n background: \"#FFFFFF00 !important\",\r\n color: Palette.Control.Grey + \" !important\",\r\n },\r\n}))(Button);\r\n\r\nconst useStyles = makeStyles({\r\n tight: {\r\n fontSize: \"10pt\",\r\n padding: \"2px 10px\",\r\n },\r\n});\r\n\r\nfunction disableWeekends(date) {\r\n return date.getDay() === 0 || date.getDay() === 6;\r\n}\r\n\r\nexport default function BSL_DatePicker(props) {\r\n const classes = useStyles();\r\n\r\n // Default to current date\r\n var minimumDate = moment(moment().toDate(), \"DD-MM-YYYY\").add(props?.disableForwardDays ?? 0, \"days\");\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { fetchTimeout } from \"../components/Common\";\r\nimport { API_BASE, Palette } from \"../AppConfig\";\r\n\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { LinearProgress } from \"@material-ui/core\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport Message from \"../components/Message\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport BSL_Select from \"../components/BSL_Select\";\r\nimport BSL_DatePicker from \"../components/BSL_DatePicker\";\r\nimport BSL_UploadDocument from \"../components/BSL_Upload/BSL_UploadDocument\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport { Add } from \"@material-ui/icons\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n width: \"98%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"90%\",\r\n overflow: \"auto\",\r\n },\r\n});\r\n\r\nexport default function SystemTools(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const user = useSelector((state) => state.app.user);\r\n const [intialise, setIntialise] = React.useState(false);\r\n const [loading, setLoading] = React.useState(true);\r\n const [announcementList, setAnnouncementList] = React.useState([]);\r\n const [currentAnnouncement, setCurrentAnnouncement] = React.useState({});\r\n // const [selectedAnnouncement, setSelectedAnnouncement] = React.useState({});\r\n const [showMessage, setShowMessage] = React.useState(false);\r\n const inputRef = React.useRef(null);\r\n const [fileinputKey, setFileinputKey] = React.useState(0);\r\n const [ts, setTs] = React.useState(Date.now());\r\n\r\n // const [password, setPassword] = React.useState(\"\");\r\n // const rows = useSelector(state => state.app.user_last_jobs_edited);\r\n\r\n const updateAnnouncement = (param) => (e, value) => {\r\n let val = value ? value : e;\r\n if (val?.target?.value) val = e?.target?.value;\r\n\r\n \r\n let new_currentAnnouncement = { ...currentAnnouncement };\r\n new_currentAnnouncement[param] = val;\r\n setCurrentAnnouncement(new_currentAnnouncement);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"admin/getannouncementsall\";\r\n if (window.LYSAGHT) api_url = API_BASE() + \"admin/getannouncementsall/?b=L\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n \r\n if (json.Message) throw json.Message;\r\n setAnnouncementList(json);\r\n setLoading(false);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setAnnouncementList([]);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n const saveAnnouncement = () => {\r\n let api_url = API_BASE() + \"admin/putannouncement\";\r\n if (window.LYSAGHT) api_url = API_BASE() + \"admin/putannouncement/?b=L\";\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(currentAnnouncement),\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n setLoading(true);\r\n setIntialise(false);\r\n } else {\r\n throw await response.text();\r\n }\r\n })\r\n .catch((e) => {\r\n \r\n setShowMessage({\r\n type: \"error\",\r\n message: \"Annoucement failed to save\" + e,\r\n });\r\n });\r\n };\r\n\r\n const handleAddAnnouncement = () => {\r\n setCurrentAnnouncement({\r\n id: Math.floor(Math.random() * 9999999999999).toString(),\r\n DocumentType: window.LYSAGHT ? \"LLD_ANNOUNCEMENT\" : \"ANNOUNCEMENT\",\r\n type: \"general\",\r\n status: \"disable\",\r\n name: \"General Announcement\",\r\n regions: \"\",\r\n header: \"General Announcement!\",\r\n content: \"This is a Announcement.\",\r\n valid_from_ts: \"\",\r\n valid_to_ts: \"\",\r\n image: \"\",\r\n creator: user?.Email,\r\n action_text: \"\",\r\n action_content: \"\",\r\n action_link: \"\",\r\n _rid: \"rANNAJxThE8GAAAAAAAAAA==\",\r\n _self: \"dbs/rANNAA==/colls/rANNAJxThE8=/docs/rANNAJxThE8GAAAAAAAAAA==/\",\r\n _etag: '\"4b03add0-0000-0700-0000-621d5f990000\"',\r\n _attachments: \"attachments/\",\r\n _ts: 1646092185,\r\n });\r\n };\r\n\r\n let announcementsSorted = [];\r\n for (var item of announcementList) {\r\n announcementsSorted.push({ Key: item.id, Display: item.name });\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n {\r\n for (var item of announcementList) {\r\n if (item?.id === e.target.value) setCurrentAnnouncement(item);\r\n }\r\n }}\r\n />\r\n \r\n\r\n
\r\n \r\n {loading && }\r\n\r\n {currentAnnouncement?.id && (\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n updateAnnouncement(\"valid_from_ts\")(new Date(date.setHours(0, 0, 1)).getTime())\r\n }\r\n style={{ width: \"240px\", flex: \"none\" }}\r\n />\r\n {\r\n let new_date_at_end_of_day = date.setHours(23, 59, 59);\r\n \r\n updateAnnouncement(\"valid_to_ts\")(new Date(new_date_at_end_of_day).getTime());\r\n }}\r\n style={{ width: \"240px\", flex: \"none\" }}\r\n />\r\n \r\n\r\n \r\n\r\n {\r\n updateAnnouncement(\"image\")(null, message.filename);\r\n setShowMessage(message);\r\n }}\r\n onError={setShowMessage}\r\n onClear={() => {\r\n updateAnnouncement(\"image\")(null, \"\");\r\n }}\r\n documentFolder=\"APP_announcements\"\r\n documentFilename={\r\n currentAnnouncement.image ? currentAnnouncement.image : currentAnnouncement.id\r\n }\r\n documentSaveFilename={currentAnnouncement.id}\r\n documentType=\"logo\"\r\n sizeLimitMB={2}\r\n recompressImage={true}\r\n resizeImageByMaxWidth={300}\r\n style={{\r\n flex: \"none\",\r\n width: \"200px\",\r\n }}\r\n />\r\n\r\n {\r\n updateAnnouncement(\"image\")(null, message.filename);\r\n updateAnnouncement(\"action_link\")(\r\n API_BASE() + \"Document/APP_announcements/\" + message.filename\r\n );\r\n setShowMessage(message);\r\n }}\r\n onError={setShowMessage}\r\n onClear={() => {\r\n updateAnnouncement(\"image\")(null, \"\");\r\n }}\r\n documentFolder=\"APP_announcements\"\r\n documentFilename={\r\n currentAnnouncement.image ? currentAnnouncement.image : currentAnnouncement.id\r\n }\r\n documentSaveFilename={currentAnnouncement.id}\r\n documentType=\"logo\"\r\n sizeLimitMB={2}\r\n recompressImage={true}\r\n resizeImageByMaxWidth={300}\r\n style={{\r\n flex: \"none\",\r\n width: \"200px\",\r\n }}\r\n />\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n )}\r\n \r\n
setShowMessage(null)}\r\n />\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport BSL_ControlContainer from \"../components/BSL_ControlContainer\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { Chip, IconButton } from \"@material-ui/core\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport DoneIcon from \"@material-ui/icons/Done\";\r\nimport ArrowDropUpIcon from \"@material-ui/icons/ArrowDropUp\";\r\nimport FileCopyIcon from \"@material-ui/icons/FileCopy\";\r\nimport BSL_Select from \"../components/BSL_Select\";\r\nimport Autocomplete from \"react-autocomplete\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\n\r\nexport function ReplaceAll(target, search, replacement) {\r\n return target.replace(new RegExp(search, \"g\"), replacement);\r\n}\r\n\r\nexport default function ManageProductListAncillary(props) {\r\n const { row, value, mode, offering_editcell, saveValue, onClose, pricefileDescSummary, embed, subhead, parent } =\r\n props;\r\n\r\n let ancillary_raw = row?.AncillaryParts ? row?.AncillaryParts : [];\r\n\r\n if (mode === \"OFFERING\" || mode === \"FILTER\") {\r\n ancillary_raw = value ? value : [];\r\n }\r\n\r\n const [displayData, setDisplayData] = React.useState(ancillary_raw);\r\n const [ancillaryData, setAncillaryData] = React.useState(undefined);\r\n const [newCode, setNewCode] = React.useState(\"\");\r\n const [newConditionKey, setNewConditionKey] = React.useState(\"\");\r\n const [newConditionOperator, setNewConditionOperator] = React.useState(\"=\");\r\n const [newConditionValue, setNewConditionValue] = React.useState(\"\");\r\n const [addNewCondition, setAddNewCondition] = React.useState(undefined);\r\n const [confirmDelete, setConfirmDelete] = React.useState(null);\r\n const [autocompleteOptions, setAutocompleteOptions] = React.useState(embed ? pricefileDescSummary : null);\r\n const [displayDataValidJSON, setDisplayDataValidJSON] = React.useState(true);\r\n const OuterComponent = embed ? React.Fragment : BSL_Dialog;\r\n const outerProps = embed\r\n ? {}\r\n : {\r\n title: title,\r\n open: true,\r\n button1Text: \"Update\",\r\n button1Click: () => saveData(),\r\n button2Text: \"Cancel\",\r\n button2Click: onClose,\r\n style: { maxWidth: \"initial\" },\r\n fullWidth: true,\r\n maxWidth: \"xl\",\r\n };\r\n\r\n const checkValidJSON = (str) => {\r\n try {\r\n JSON.parse(str);\r\n } catch (ex) {\r\n try {\r\n JSON.parse(\"[\" + str + \"]\");\r\n } catch (e) {\r\n setDisplayDataValidJSON(false);\r\n return false;\r\n }\r\n }\r\n setDisplayDataValidJSON(true);\r\n return true;\r\n };\r\n\r\n const handleTextChange = (ancillary_raw) => {\r\n let ancillary_items = [];\r\n if (ancillary_raw.startsWith && ancillary_raw.startsWith(\"{\")) {\r\n let ancillary_raw_json = JSON.parse(ancillary_raw);\r\n ancillary_items = ancillary_raw_json[\"AncillaryParts\"];\r\n } else if (typeof ancillary_raw === \"object\") {\r\n ancillary_items = ancillary_raw;\r\n } else {\r\n let split = ancillary_raw.split(\" \");\r\n for (let i = 0; i < split.length; i++) {\r\n var this_item = split[i];\r\n if (this_item !== \"\") {\r\n if (this_item.includes(\"(\") && !this_item.includes(\")\") && i < split.length) {\r\n while (i <= split.length) {\r\n i++;\r\n let next_bit = split[i];\r\n this_item += \" \" + next_bit;\r\n if (next_bit.includes(\")\")) break;\r\n }\r\n }\r\n var this_item_object = {};\r\n this_item_object.Code = this_item;\r\n\r\n if (this_item.includes(\"x\")) {\r\n let split = this_item.split(\"x\");\r\n let is_numbers = /^\\d+$/.test(split[0]);\r\n\r\n if (is_numbers) {\r\n split.forEach((str, i) => {\r\n // eslint-disable-line no-loop-func\r\n if (i === 0) this_item_object.Qty = str;\r\n else if (i === 1) this_item_object.Code = str;\r\n else this_item_object.Code += \"x\" + str;\r\n });\r\n\r\n if (this_item_object.Code.includes(\"(\")) {\r\n this_item_object.Use = this_item_object.Code.split(\"(\")[1]\r\n .replace(\"(\", \"\")\r\n .replace(\")\", \"\");\r\n this_item_object.Code = this_item_object.Code.split(\"(\")[0];\r\n }\r\n }\r\n }\r\n\r\n ancillary_items.push(this_item_object);\r\n }\r\n }\r\n }\r\n setAncillaryData(ancillary_items);\r\n };\r\n\r\n const appendNewCondition = (index, condition_value = null) => {\r\n if (!condition_value && newConditionValue !== 0) condition_value = newConditionValue;\r\n\r\n if (!newConditionKey) {\r\n alert(\"Choose a condition parameter\");\r\n return;\r\n }\r\n\r\n if (!condition_value && condition_value !== 0) {\r\n alert(\"Add a condition value to compare to\");\r\n return;\r\n }\r\n\r\n let new_ancillaryData = [...ancillaryData];\r\n let conditions = new_ancillaryData?.[index]?.Conditions;\r\n\r\n // Ensure conditions is an object\r\n if (typeof conditions !== \"object\" || conditions === null) conditions = {};\r\n\r\n let value = newConditionOperator + condition_value;\r\n if (newConditionOperator.includes(\"val\")) value = newConditionOperator.replace(\"val\", condition_value);\r\n\r\n // Handle existing conditions\r\n if (conditions[newConditionKey] != null) {\r\n if (!Array.isArray(conditions[newConditionKey])) {\r\n // If the existing condition is not an array, convert it to an array\r\n conditions[newConditionKey] = [conditions[newConditionKey]];\r\n }\r\n // Append the new value to the array\r\n conditions[newConditionKey].push(value);\r\n } else {\r\n // If the condition key does not exist, add it directly\r\n\r\n conditions[newConditionKey] = value;\r\n }\r\n\r\n new_ancillaryData[index].Conditions = conditions;\r\n setAncillaryData(new_ancillaryData);\r\n setNewConditionKey(\"\");\r\n setNewConditionOperator(\"\");\r\n setNewConditionValue(\"\");\r\n setAddNewCondition(undefined);\r\n };\r\n\r\n const deleteCondition = (index, key, expression, individual_expression) => {\r\n let new_ancillaryData = [...ancillaryData];\r\n\r\n if (Array.isArray(expression) && expression.length > 1) {\r\n // Check if Conditions is an array\r\n if (Array.isArray(new_ancillaryData[index].Conditions[key])) {\r\n // Filter out the individual_expression from the conditions array\r\n new_ancillaryData[index].Conditions[key] = new_ancillaryData[index].Conditions[key].filter(\r\n (e) => e !== individual_expression\r\n );\r\n } else {\r\n console.error(\"Conditions is not an array.\");\r\n }\r\n } else {\r\n // Delete the condition based on the key\r\n delete new_ancillaryData[index].Conditions[key];\r\n\r\n // If there are no more conditions left, delete the Conditions object\r\n if (Object.keys(new_ancillaryData[index].Conditions).length === 0) {\r\n delete new_ancillaryData[index].Conditions;\r\n }\r\n }\r\n\r\n setAncillaryData(new_ancillaryData);\r\n };\r\n\r\n const updateCondition = (index, condition_key, new_condition_key, operator_value, condition_value) => {\r\n let new_ancillaryData = [...ancillaryData];\r\n delete new_ancillaryData?.[index]?.Conditions[condition_key];\r\n\r\n let value = operator_value + condition_value;\r\n if (operator_value.includes(\"val\")) value = operator_value.replace(\"val\", condition_value);\r\n\r\n new_ancillaryData[index].Conditions[new_condition_key] = value;\r\n setAncillaryData(new_ancillaryData);\r\n };\r\n\r\n const updateAncillaryData = (index, parameter, value, parent = null) => {\r\n let new_ancillaryData = [...ancillaryData];\r\n\r\n if (index === -1) {\r\n if (value) new_ancillaryData.push(parent?.filterType ? {} : { Code: value });\r\n setNewCode(\"\");\r\n } else {\r\n if ((value === null) | (value === \"\") && new_ancillaryData[index][parameter] !== undefined) {\r\n delete new_ancillaryData[index][parameter];\r\n } else if (value !== null && value !== \"\") {\r\n new_ancillaryData[index][parameter] = value;\r\n }\r\n }\r\n\r\n setAncillaryData(new_ancillaryData);\r\n };\r\n\r\n const handleDeleteRow = (index) => {\r\n let new_ancillaryData = ancillaryData\r\n .slice(0, index)\r\n .concat(ancillaryData.slice(index + 1, ancillaryData.length));\r\n setAncillaryData(new_ancillaryData);\r\n };\r\n\r\n const handleMoveUpRow = (index) => {\r\n if (index <= 0) return;\r\n let new_ancillaryData = [...ancillaryData];\r\n var item = new_ancillaryData.splice(index, 1)[0];\r\n new_ancillaryData.splice(index - 1, 0, item);\r\n setAncillaryData(new_ancillaryData);\r\n };\r\n\r\n const handleCopyRow = (index) => {\r\n let new_ancillaryData = [...ancillaryData];\r\n var new_item = JSON.parse(JSON.stringify(new_ancillaryData[index]));\r\n new_ancillaryData.splice(index, 0, new_item);\r\n setAncillaryData(new_ancillaryData);\r\n };\r\n\r\n React.useEffect(() => {\r\n setDisplayData(ReplaceAll(JSON.stringify(ancillaryData).substring(1).slice(0, -1), \"},\", \"},\\n\"));\r\n\r\n if (mode === \"FILTER\") {\r\n saveValue(parent?.rowNum, \"modify\", ancillaryData);\r\n } else if (embed) {\r\n saveValue(\r\n parent?.rowNum,\r\n \"ancillary\",\r\n ReplaceAll(JSON.stringify(ancillaryData).substring(1).slice(0, -1), \"},\", \"},\\n\")\r\n );\r\n }\r\n }, [ancillaryData]);\r\n\r\n React.useEffect(() => {\r\n let data = getData();\r\n if (data.AncillaryParts.length === 0) {\r\n updateAncillaryData(-1, parent?.filterType, parent?.item, parent);\r\n }\r\n }, [parent?.item]);\r\n\r\n if (ancillaryData === undefined) {\r\n let ancillary_items = [];\r\n if (ancillary_raw.startsWith && ancillary_raw.startsWith(\"{\")) {\r\n let ancillary_raw_json = JSON.parse(ancillary_raw);\r\n ancillary_items = ancillary_raw_json[\"AncillaryParts\"];\r\n } else if (typeof ancillary_raw === \"object\") {\r\n ancillary_items = ancillary_raw;\r\n } else {\r\n let split = ancillary_raw.split(\" \");\r\n for (let i = 0; i < split.length; i++) {\r\n var this_item = split[i];\r\n if (this_item !== \"\") {\r\n if (this_item.includes(\"(\") && !this_item.includes(\")\") && i < split.length) {\r\n while (i <= split.length) {\r\n i++;\r\n let next_bit = split[i];\r\n this_item += \" \" + next_bit;\r\n if (next_bit.includes(\")\")) break;\r\n }\r\n }\r\n var this_item_object = {};\r\n this_item_object.Code = this_item;\r\n\r\n if (this_item.includes(\"x\")) {\r\n let split = this_item.split(\"x\");\r\n let is_numbers = /^\\d+$/.test(split[0]);\r\n\r\n if (is_numbers) {\r\n split.forEach((str, i) => {\r\n // eslint-disable-line no-loop-func\r\n if (i === 0) this_item_object.Qty = str;\r\n else if (i === 1) this_item_object.Code = str;\r\n else this_item_object.Code += \"x\" + str;\r\n });\r\n\r\n if (this_item_object.Code.includes(\"(\")) {\r\n this_item_object.Use = this_item_object.Code.split(\"(\")[1]\r\n .replace(\"(\", \"\")\r\n .replace(\")\", \"\");\r\n this_item_object.Code = this_item_object.Code.split(\"(\")[0];\r\n }\r\n }\r\n }\r\n\r\n ancillary_items.push(this_item_object);\r\n }\r\n }\r\n }\r\n setAncillaryData(ancillary_items);\r\n }\r\n\r\n const getData = () => {\r\n let data = { AncillaryParts: ancillaryData };\r\n return data;\r\n };\r\n\r\n var confirmed = false;\r\n const saveData = () => {\r\n if (!confirmed && newConditionValue) {\r\n alert(\r\n \"You have an unsaved new condition ... are you sure you would like to proceed? Click Update again to proceed...\"\r\n );\r\n confirmed = true;\r\n return;\r\n }\r\n\r\n confirmed = false;\r\n let data = getData();\r\n\r\n if (mode === \"OFFERING\" || mode === \"FILTER\") {\r\n saveValue(offering_editcell?.POA, offering_editcell?.key_path, ancillaryData);\r\n } else {\r\n saveValue(row, \"AncillaryParts\", JSON.stringify(data));\r\n }\r\n };\r\n\r\n let ancillary_rows = [];\r\n\r\n if (!autocompleteOptions) {\r\n let options = [];\r\n for (let option in pricefileDescSummary) {\r\n options.push(option + \" - \" + pricefileDescSummary[option]);\r\n }\r\n setAutocompleteOptions(options);\r\n }\r\n\r\n const condition_key_options = [\r\n { Key: \"Use\", Display: \"Parent Use\" },\r\n { Key: \"Colour\", Display: \"Parent Colour\" },\r\n { Key: \"Qty\", Display: \"Parent Qty\" },\r\n { Key: \"Length\", Display: \"Parent Length\" },\r\n { Key: \"Desc\", Display: \"Parent Description\" },\r\n { Key: \"DescAppend\", Display: \"Parent Appended Desc\" },\r\n { Key: \"Job.RoofType\", Display: \"House RoofType\", Options: [\"STEEL\", \"TILE\"] },\r\n { Key: \"Job.WindZone\", Display: \"Job WindZone\", Options: [\"CYCLONIC\", \"NOT CYCLONIC\"] },\r\n {\r\n Key: \"Area.DesignType\",\r\n Display: \"Area Design Type\",\r\n Options: [\r\n { Key: \"Flat Roof\", Display: \"FLAT\" },\r\n { Key: \"Gable Hip Roof\", Display: \"GABLE\" },\r\n { Key: \"Flat Deck\", Display: \"DECK\" },\r\n ],\r\n },\r\n {\r\n Key: \"Area.RafterBeam\",\r\n Display: \"Area Rafter Beam\",\r\n Options: [\"656510\", \"1086510\", \"1586510\", \"2086510\", \"FL10011\", \"FL15015\", \"FL20020\"],\r\n },\r\n {\r\n Key: \"Area.PurlinBeam\",\r\n Display: \"Area Purlin Beam\",\r\n Options: [\"656510\", \"1086510\", \"1586510\", \"2086510\", \"FL10011\", \"FL15015\", \"FL20020\"],\r\n },\r\n {\r\n Key: \"Area.FasciaBeam\",\r\n Display: \"Area Fascia Beam\",\r\n Options: [\"656510\", \"1086510\", \"1586510\", \"2086510\", \"FL10011\", \"FL15015\", \"FL20020\"],\r\n },\r\n {\r\n Key: \"Area.HipBeam\",\r\n Display: \"Area Hip Beam\",\r\n Options: [\"656510\", \"1086510\", \"1586510\", \"2086510\", \"FL10011\", \"FL15015\", \"FL20020\"],\r\n },\r\n {\r\n Key: \"Area.PostType\",\r\n Display: \"Area Post Type\",\r\n },\r\n { Key: \"Area.BeamColour\", Display: \"Area Beam Colour\" },\r\n { Key: \"Area.PostColour\", Display: \"Area Post Colour\" },\r\n { Key: \"Area.RoofSheet\", Display: \"Area RoofSheet Type\" },\r\n { Key: \"Brand\", Display: \"Brand\", Options: [\"Lysaght\", \"Fielders\"] },\r\n {\r\n Key: \"POP\",\r\n Display: \"Job POP\",\r\n Options: [\"LSB\", \"EMU\", \"NUN\", \"LAU\", \"GIL\", \"KEW\", \"MEN\", \"MAR\", \"GAW\", \"NOA\", \"CAM\", \"MIN\", \"WAN\"],\r\n },\r\n {\r\n Key: \"Area.HasDutchGable\",\r\n Display: \"Area Has Dutch Gable Ends\",\r\n Options: [\r\n { Key: true, Display: \"Yes\" },\r\n { Key: false, Display: \"No\" },\r\n ],\r\n },\r\n {\r\n Key: \"AnyArea.RoofSheet\",\r\n Display: \"Any Area Roofsheet\",\r\n },\r\n {\r\n Key: \"AnyArea.RoofSpan\",\r\n Display: \"Any Area Roof Spans\",\r\n Options: [\"No Foot Traffic\", \"Non-Trafficable\", \"Cyclonic\"],\r\n },\r\n ];\r\n\r\n const autoCompleteMarginTop = embed ? \"2px\" : \"-33px\";\r\n const autoCompleteItemMarginTop = embed ? \"2px\" : \"-21px\";\r\n\r\n const operator_options = [\r\n { Key: \"=\", Display: \"= Equals\" },\r\n { Key: \"!=\", Display: \"!= Not Equals\" },\r\n { Key: \">=\", Display: \"> (Greater than)\" },\r\n { Key: \">=\", Display: \">= (Greater than or \" },\r\n { Key: \"<\", Display: \"< (Less than)\" },\r\n { Key: \"<=\", Display: \"< or =\" },\r\n { Key: \"=val*\", Display: \"Starts with\" },\r\n { Key: \"=*val\", Display: \"Ends with\" },\r\n { Key: \"=*val*\", Display: \"Contains\" },\r\n { Key: \"!=val*\", Display: \"!=val* (Does Not Start With)\" },\r\n { Key: \"!=*val\", Display: \"!=*val (Does Not End With)\" },\r\n { Key: \"!=*val*\", Display: \"!=*val* (Does Not Contain)\" },\r\n ];\r\n\r\n const expressionHandler = (expression, passthrough) => {\r\n if (Array.isArray(expression)) {\r\n for (let individual_expression of expression) {\r\n passthrough(individual_expression);\r\n }\r\n } else {\r\n passthrough(expression);\r\n }\r\n };\r\n\r\n if (ancillaryData) {\r\n let row_i = 0;\r\n for (let ancillaryRow of ancillaryData) {\r\n let row_num = row_i;\r\n row_i++;\r\n let conditions_chips = [];\r\n\r\n const backgroundColor = embed\r\n ? parent?.rowNum % 2 === 0\r\n ? row_num % 2 === 0\r\n ? \"#a8faf8\"\r\n : \"#d9fcfb\"\r\n : row_num % 2 === 0\r\n ? \"#d4ff86\"\r\n : \"#ecffc8\"\r\n : row_num % 2 === 0\r\n ? \"\"\r\n : \"#f4f1eb\";\r\n\r\n if (ancillaryRow?.Conditions) {\r\n let first = true;\r\n let row_condition_i = 0;\r\n\r\n for (let condition_key in ancillaryRow?.Conditions) {\r\n let row_condition_num = row_condition_i;\r\n row_condition_i++;\r\n let expression = ancillaryRow?.Conditions[condition_key];\r\n\r\n expressionHandler(expression, (individual_expression) => {\r\n let value = individual_expression;\r\n\r\n let operator_value = \"=\";\r\n if (typeof value === \"string\") {\r\n value = value.trim();\r\n if (value.startsWith(\"!=\")) operator_value = \"!=\";\r\n else if (value.startsWith(\"=\")) operator_value = \"=\";\r\n else if (value.startsWith(\"<>\")) operator_value = \"<>\";\r\n else if (value.startsWith(\">=\")) operator_value = \">=\";\r\n else if (value.startsWith(\"<=\")) operator_value = \"<=\";\r\n else if (value.startsWith(\">\")) operator_value = \">\";\r\n else if (value.startsWith(\"<\")) operator_value = \"<\";\r\n\r\n if (operator_value === \"=\") {\r\n if (value.startsWith(\"=*\") && value.endsWith(\"*\")) operator_value = \"=*val*\";\r\n else if (value.startsWith(\"=*\")) operator_value = \"=*val\";\r\n else if (value.endsWith(\"*\")) operator_value = \"=val*\";\r\n } else if (operator_value === \"!=\") {\r\n if (value.startsWith(\"!=*\") && value.endsWith(\"*\")) operator_value = \"!=*val*\";\r\n else if (value.startsWith(\"!=*\")) operator_value = \"!=*val\";\r\n else if (value.endsWith(\"*\")) operator_value = \"!=val*\";\r\n }\r\n\r\n value = value\r\n .replace(\"!=\", \"\")\r\n .replace(\"=\", \"\")\r\n .replace(\">\", \"\")\r\n .replace(\"<\", \"\")\r\n .replace(\"*\", \"\")\r\n .replace(\"*\", \"\");\r\n }\r\n\r\n conditions_chips.push(\r\n \r\n \r\n {first ? \"\" : \"AND \"}IF:\r\n \r\n kvp.Key === condition_key)\r\n ? condition_key_options\r\n : [\r\n ...condition_key_options,\r\n { Key: condition_key, Display: condition_key + \"*\" },\r\n ]\r\n }\r\n onChange={(e) =>\r\n updateCondition(\r\n row_num,\r\n condition_key,\r\n e.target.value,\r\n operator_value,\r\n value\r\n )\r\n }\r\n />\r\n \r\n updateCondition(\r\n row_num,\r\n condition_key,\r\n condition_key,\r\n e.target.value,\r\n value\r\n )\r\n }\r\n />\r\n {condition_key_options.find((kvp) => kvp.Key === condition_key)?.Options ? (\r\n kvp.Key === condition_key)\r\n ?.Options\r\n }\r\n onChange={(e, val) => {\r\n updateCondition(\r\n row_num,\r\n condition_key,\r\n condition_key,\r\n operator_value,\r\n val\r\n );\r\n e.stopPropagation();\r\n }}\r\n />\r\n ) : (\r\n \r\n updateCondition(\r\n row_num,\r\n condition_key,\r\n condition_key,\r\n operator_value,\r\n e.target.value\r\n )\r\n }\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n }}\r\n onBlur={(val) =>\r\n updateCondition(\r\n row_num,\r\n condition_key,\r\n condition_key,\r\n operator_value,\r\n val\r\n )\r\n }\r\n onChange={(val) => {\r\n if (val)\r\n updateCondition(\r\n row_num,\r\n condition_key,\r\n condition_key,\r\n operator_value,\r\n val\r\n );\r\n }}\r\n />\r\n )}\r\n \r\n }\r\n style={{ width: \"fit-content\", height: \"auto\", marginTop: \"5px\" }}\r\n onDelete={() => {\r\n deleteCondition(row_num, condition_key, expression, individual_expression);\r\n }}\r\n />\r\n );\r\n first = false;\r\n });\r\n }\r\n }\r\n\r\n ancillary_rows.push(\r\n \r\n {(!parent?.operation || parent?.operation !== \"delete\") && (\r\n \r\n {row_num === 0 && subhead && (\r\n \r\n \r\n {subhead}\r\n
\r\n \r\n )}\r\n \r\n {!embed && row_num > 0 && (\r\n {\r\n handleMoveUpRow(row_num);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {\r\n setConfirmDelete(row_num);\r\n }}\r\n >\r\n \r\n \r\n {!embed && (\r\n {\r\n handleCopyRow(row_num);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n {(!parent?.item || parent?.operation === \"swap\") && (\r\n \r\n item.toLowerCase().indexOf(value.toLowerCase()) > -1\r\n }\r\n getItemValue={(item) => item}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: autoCompleteMarginTop,\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n helperText={\r\n embed\r\n ? null\r\n : pricefileDescSummary?.[ancillaryRow?.Code]\r\n ? pricefileDescSummary?.[ancillaryRow?.Code]\r\n : \"*Desc not found*\"\r\n }\r\n tooltip={\r\n !embed\r\n ? null\r\n : pricefileDescSummary?.[ancillaryRow?.Code]\r\n ? pricefileDescSummary?.[ancillaryRow?.Code]\r\n : \"*Desc not found*\"\r\n }\r\n onEnter={(e) =>\r\n updateAncillaryData(\r\n row_num,\r\n \"Code\",\r\n e.target.value.split(\"-\")[0].trim()\r\n )\r\n }\r\n onBlur={(value) =>\r\n updateAncillaryData(row_num, \"Code\", value.split(\"-\")[0].trim())\r\n }\r\n />\r\n );\r\n }}\r\n value={ancillaryRow?.Code}\r\n onChange={(e) =>\r\n updateAncillaryData(row_num, \"Code\", e.target.value.split(\"-\")[0].trim())\r\n }\r\n onSelect={(value) =>\r\n updateAncillaryData(row_num, \"Code\", value.split(\"-\")[0].trim())\r\n }\r\n />\r\n )}\r\n item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: autoCompleteMarginTop,\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n onEnter={(e) =>\r\n updateAncillaryData(\r\n row_num,\r\n \"Qty\",\r\n e.target.value.replace(\"length\", \"Length\").replace(\"qty\", \"Qty\")\r\n )\r\n }\r\n onBlur={(value) =>\r\n updateAncillaryData(\r\n row_num,\r\n \"Qty\",\r\n value.replace(\"length\", \"Length\").replace(\"qty\", \"Qty\")\r\n )\r\n }\r\n />\r\n );\r\n }}\r\n value={ancillaryRow?.Qty}\r\n onChange={(e) =>\r\n updateAncillaryData(\r\n row_num,\r\n \"Qty\",\r\n e.target.value.replace(\"length\", \"Length\").replace(\"qty\", \"Qty\")\r\n )\r\n }\r\n onSelect={(value) =>\r\n updateAncillaryData(\r\n row_num,\r\n \"Qty\",\r\n value.replace(\"length\", \"Length\").replace(\"qty\", \"Qty\")\r\n )\r\n }\r\n />\r\n {}}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n }}\r\n onChange={(val) =>\r\n updateAncillaryData(row_num, \"Length\", val.replace(\"length\", \"Length\"))\r\n }\r\n onBlur={(val) =>\r\n updateAncillaryData(row_num, \"Length\", val.replace(\"length\", \"Length\"))\r\n }\r\n />\r\n\r\n updateAncillaryData(row_num, \"Use\", val)}\r\n onBlur={(val) => updateAncillaryData(row_num, \"Use\", val)}\r\n />\r\n\r\n {mode !== \"FILTER\" && (\r\n true}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: autoCompleteMarginTop,\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n updateAncillaryData(row_num, \"Colour\", e.target.value)}\r\n onBlur={(value) => updateAncillaryData(row_num, \"Colour\", value)}\r\n />\r\n );\r\n }}\r\n value={ancillaryRow?.Colour}\r\n onChange={(e) => updateAncillaryData(row_num, \"Colour\", e.target.value)}\r\n onSelect={(value) => updateAncillaryData(row_num, \"Colour\", value)}\r\n />\r\n )}\r\n \r\n )}\r\n \r\n {conditions_chips}\r\n \r\n \r\n {conditions_chips.length === 0 ? \"\" : \"AND \"}IF:\r\n \r\n\r\n {\r\n setNewConditionKey(e.target.value);\r\n }}\r\n />\r\n\r\n {\r\n setNewConditionOperator(e.target.value);\r\n }}\r\n />\r\n {condition_key_options.find((kvp) => kvp.Key === newConditionKey)?.Options ? (\r\n kvp.Key === newConditionKey)\r\n ?.Options\r\n }\r\n onChange={(e, val) => {\r\n appendNewCondition(row_num, val);\r\n e.stopPropagation();\r\n }}\r\n />\r\n ) : (\r\n appendNewCondition(row_num, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n }}\r\n onBlur={(val) => setNewConditionValue(val)}\r\n />\r\n )}\r\n \r\n ) : null\r\n }\r\n onDelete={() => {\r\n if (addNewCondition === row_num) {\r\n appendNewCondition(row_num);\r\n } else {\r\n setAddNewCondition(row_num);\r\n }\r\n }}\r\n style={\r\n addNewCondition === row_num\r\n ? { background: \"#rgb(247 190 57)\", width: \"fit-content\", height: \"auto\" }\r\n : { width: \"55px\", height: \"auto\", marginTop: \"4px\" }\r\n }\r\n deleteIcon={addNewCondition === row_num ? : }\r\n />\r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n let title = \"Edit Ancillary Items for \" + row?.[\"ProductIndex\"] + \"-\" + row?.[\"ProductDescription\"];\r\n if (mode === \"OFFERING\" || mode === \"FILTER\") {\r\n title = \"Edit Ancillary Items for \" + offering_editcell?.title;\r\n }\r\n\r\n return (\r\n \r\n {!embed && (\r\n \r\n \r\n )}\r\n \r\n {ancillary_rows}\r\n
\r\n {\r\n if (!item.toLowerCase || !value.toLowerCase) return false;\r\n return item.toLowerCase().indexOf(value.toLowerCase()) > -1;\r\n }}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: autoCompleteItemMarginTop,\r\n lineHeight: 1.4,\r\n width: \"100%\",\r\n maxHeight: \"200px\",\r\n overflowY: \"auto\",\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n if (!parent?.item) {\r\n return (\r\n {}}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n helperText={embed ? null : \"*Select Item*\"}\r\n onEnter={(e) =>\r\n updateAncillaryData(-1, \"Code\", e.target.value.split(\"-\")[0].trim())\r\n }\r\n />\r\n );\r\n }\r\n }}\r\n value={newCode}\r\n onChange={(e) => setNewCode(e.target.value.split(\"-\")[0].trim())}\r\n onSelect={(value) => updateAncillaryData(-1, \"Code\", value.split(\"-\")[0].trim())}\r\n />\r\n {mode !== \"FILTER\" && (\r\n {\r\n updateAncillaryData(-1, \"Code\", parent.item ? parent.item : newCode, parent);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n
\r\n {mode === \"FILTER\" && (\r\n {\r\n updateAncillaryData(-1, \"Code\", parent.item ? parent.item : newCode, parent);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {\r\n handleDeleteRow(confirmDelete);\r\n setConfirmDelete(null);\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={() => {\r\n setConfirmDelete(null);\r\n }}\r\n >\r\n Are you sure you want to delete ancillary row {confirmDelete + 1}?\r\n \r\n \r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport BSL_Select from \"../components/BSL_Select\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport Autocomplete from \"react-autocomplete\";\r\nimport ManageProductListAncillary from \"./ManageProductListAncillary\";\r\nimport Switch from \"@mui/material/Switch\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\n\r\nexport function ReplaceAll(target, search, replacement) {\r\n return target.replace(new RegExp(search, \"g\"), replacement);\r\n}\r\n\r\nexport default function ManageProductListFilter(props) {\r\n const { value, offering_editcell, saveValue, onClose, pricefileDescSummary } = props;\r\n\r\n let filter_raw = value ? value : [];\r\n\r\n const [displayData, setDisplayData] = React.useState(value ? value : []);\r\n const [filterData, setFilterData] = React.useState(undefined);\r\n const [newCode, setNewCode] = React.useState(\"\");\r\n const [confirmDelete, setConfirmDelete] = React.useState(null);\r\n const [autocompleteOptions, setAutocompleteOptions] = React.useState(null);\r\n const [newFilterType, setNewFilterType] = React.useState(\"Code\");\r\n const [displayDataValidJSON, setDisplayDataValidJSON] = React.useState(true);\r\n const [showJSON, setShowJSON] = React.useState(false);\r\n\r\n const materialCategories = [\"BEAMS\", \"BRACKETS\", \"POSTS\", \"FLASHING\", \"STEEL ROOFING\"];\r\n\r\n const checkValidJSON = (str) => {\r\n try {\r\n JSON.parse(str);\r\n } catch (ex) {\r\n try {\r\n JSON.parse(\"[\" + str + \"]\");\r\n } catch (e) {\r\n setDisplayDataValidJSON(false);\r\n return false;\r\n }\r\n }\r\n setDisplayDataValidJSON(true);\r\n return true;\r\n };\r\n\r\n const handleTextChange = (filter_raw) => {\r\n let filter_items = [];\r\n if (filter_raw.startsWith && filter_raw.startsWith(\"{\")) {\r\n let filter_raw_json = JSON.parse(filter_raw);\r\n filter_items = filter_raw_json[\"AncillaryParts\"];\r\n } else if (typeof filter_raw === \"object\") {\r\n filter_items = filter_raw;\r\n } else {\r\n let split = filter_raw.split(\" \");\r\n for (let i = 0; i < split.length; i++) {\r\n var this_item = split[i];\r\n if (this_item !== \"\") {\r\n if (this_item.includes(\"(\") && !this_item.includes(\")\") && i < split.length) {\r\n while (i <= split.length) {\r\n i++;\r\n let next_bit = split[i];\r\n this_item += \" \" + next_bit;\r\n if (next_bit.includes(\")\")) break;\r\n }\r\n }\r\n var this_item_object = {};\r\n this_item_object.Code = this_item;\r\n\r\n if (this_item.includes(\"x\")) {\r\n let split = this_item.split(\"x\");\r\n let is_numbers = /^\\d+$/.test(split[0]);\r\n\r\n if (is_numbers) {\r\n split.forEach((str, i) => {\r\n if (i === 0) this_item_object.Qty = str;\r\n else if (i === 1) this_item_object.Code = str;\r\n else this_item_object.Code += \"x\" + str;\r\n });\r\n\r\n if (this_item_object.Code.includes(\"(\")) {\r\n this_item_object.Use = this_item_object.Code.split(\"(\")[1]\r\n .replace(\"(\", \"\")\r\n .replace(\")\", \"\");\r\n this_item_object.Code = this_item_object.Code.split(\"(\")[0];\r\n }\r\n }\r\n }\r\n\r\n filter_items.push(this_item_object);\r\n }\r\n }\r\n }\r\n setFilterData(filter_items);\r\n };\r\n\r\n const updateFilterData = (index, parameter, value) => {\r\n let new_filterData = [...filterData];\r\n\r\n if (index === -1) {\r\n if (value !== \"\") {\r\n new_filterData.push({\r\n [parameter]: value,\r\n Operation: \"delete\",\r\n Details: [],\r\n });\r\n setNewCode(\"\");\r\n }\r\n setFilterData(new_filterData);\r\n return;\r\n }\r\n\r\n let item = new_filterData[index];\r\n if (!item) return;\r\n\r\n switch (parameter) {\r\n case \"operation\":\r\n item.Operation = value || \"delete\";\r\n item.Details = [{}];\r\n break;\r\n case \"ancillary\":\r\n if (item) {\r\n item.AncillaryParts = '{\"AncillaryParts\":[' + value + \"]}\";\r\n }\r\n break;\r\n case \"modify\":\r\n if (item) {\r\n item.Details = value || [];\r\n }\r\n break;\r\n }\r\n\r\n if (item.Operation === \"delete\") {\r\n delete item.AncillaryParts;\r\n }\r\n\r\n setFilterData(new_filterData);\r\n };\r\n\r\n const handleDeleteRow = (index) => {\r\n let new_filterData = filterData.slice(0, index).concat(filterData.slice(index + 1, filterData.length));\r\n setFilterData(new_filterData);\r\n };\r\n\r\n useEffect(() => {\r\n setDisplayData(ReplaceAll(JSON.stringify(filterData).substring(1).slice(0, -1), \"},\", \"},\\n\"));\r\n }, [filterData]);\r\n\r\n if (filterData === undefined) {\r\n let filter_items = [];\r\n\r\n if (filter_raw.startsWith && filter_raw.startsWith(\"{\")) {\r\n let filter_raw_json = JSON.parse(filter_raw);\r\n filter_items = filter_raw_json[\"AncillaryParts\"];\r\n } else if (typeof filter_raw === \"object\") {\r\n filter_items = filter_raw;\r\n } else {\r\n let split = filter_raw.split(\" \");\r\n\r\n for (let i = 0; i < split.length; i++) {\r\n var this_item = split[i];\r\n if (this_item !== \"\") {\r\n if (this_item.includes(\"(\") && !this_item.includes(\")\") && i < split.length) {\r\n while (i <= split.length) {\r\n i++;\r\n let next_bit = split[i];\r\n this_item += \" \" + next_bit;\r\n if (next_bit.includes(\")\")) break;\r\n }\r\n }\r\n\r\n var this_item_object = {};\r\n this_item_object.Code = this_item;\r\n\r\n if (this_item.includes(\"x\")) {\r\n let split = this_item.split(\"x\");\r\n let is_numbers = /^\\d+$/.test(split[0]);\r\n\r\n if (is_numbers) {\r\n split.forEach((str, i) => {\r\n if (i === 0) this_item_object.Qty = str;\r\n else if (i === 1) this_item_object.Code = str;\r\n else this_item_object.Code += \"x\" + str;\r\n });\r\n\r\n if (this_item_object.Code.includes(\"(\")) {\r\n this_item_object.Use = this_item_object.Code.split(\"(\")[1]\r\n .replace(\"(\", \"\")\r\n .replace(\")\", \"\");\r\n this_item_object.Code = this_item_object.Code.split(\"(\")[0];\r\n }\r\n }\r\n }\r\n filter_items.push(this_item_object);\r\n }\r\n }\r\n }\r\n setFilterData(filter_items);\r\n }\r\n\r\n let filter_rows = [];\r\n\r\n if (!autocompleteOptions) {\r\n const options = Object.keys(pricefileDescSummary).map(\r\n (option) => `${option} - ${pricefileDescSummary[option]}`\r\n );\r\n\r\n setAutocompleteOptions(options);\r\n }\r\n\r\n if (filterData) {\r\n filter_rows = filterData.map((filterRow, row_num) => {\r\n const filterType = Object.keys(filterRow)[0] || \"\";\r\n const filterValue = filterRow[filterType] || \"\";\r\n \r\n const parent = {\r\n rowNum: row_num,\r\n item: filterRow?.Code || filterRow?.Category || \"\",\r\n operation: filterRow?.Operation,\r\n filterType: filterType,\r\n };\r\n \r\n const mainRow = (\r\n \r\n \r\n setConfirmDelete(row_num)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {filterType}\r\n \r\n \r\n {filterValue}\r\n \r\n
\r\n updateFilterData(row_num, \"operation\", event.target.value)}\r\n items={[\"modify\", \"swap\", \"delete\"]}\r\n style={{ flex: \"0 0 8%\" }}\r\n selectStyle={{ background: \"white\", width: \"120px\" }}\r\n />\r\n saveValue(null)}\r\n saveValue={updateFilterData}\r\n pricefileDescSummary={autocompleteOptions}\r\n embed={true}\r\n parent={parent}\r\n />\r\n \r\n );\r\n \r\n const ancillaryRow = filterRow?.Operation !== \"delete\" && (\r\n \r\n saveValue(null)}\r\n saveValue={updateFilterData}\r\n pricefileDescSummary={autocompleteOptions}\r\n embed={true}\r\n subhead={\"Replace ancillary items with ...\"}\r\n parent={{ rowNum: row_num }}\r\n />\r\n \r\n );\r\n \r\n return [mainRow, ancillaryRow].filter(Boolean);\r\n }).flat();\r\n }\r\n \r\n let title = \"Edit Items for \" + offering_editcell?.title;\r\n\r\n return (\r\n {\r\n saveValue(offering_editcell?.POA, offering_editcell?.key_path, filterData);\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={onClose}\r\n style={{ maxWidth: \"initial\" }}\r\n fullWidth={true}\r\n maxWidth={\"xl\"}\r\n >\r\n {showJSON && (\r\n \r\n \r\n )}\r\n setShowJSON((prev) => !prev)} />}\r\n label=\"Show JSON\"\r\n />\r\n \r\n {filter_rows}\r\n
\r\n {\r\n setNewFilterType(val);\r\n setNewCode(\"\");\r\n e.stopPropagation();\r\n }}\r\n style={{\r\n marginTop: \"-12px\",\r\n flex: 7,\r\n }}\r\n />\r\n \r\n
{\r\n if (!item.toLowerCase || !value.toLowerCase) return false;\r\n return item.toLowerCase().indexOf(value.toLowerCase()) > -1;\r\n }}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n marginLeft: \"9px\",\r\n lineHeight: 1.4,\r\n width: \"100%\",\r\n maxHeight: \"200px\",\r\n overflowY: \"auto\",\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n \r\n );\r\n }}\r\n value={newCode}\r\n onChange={(e) => setNewCode(e.target.value.split(\"-\")[0].trim())}\r\n onSelect={(value) => setNewCode(value.split(\"-\")[0].trim())}\r\n />\r\n {\r\n updateFilterData(-1, newFilterType, newCode);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n {\r\n handleDeleteRow(confirmDelete);\r\n setConfirmDelete(null);\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={() => {\r\n setConfirmDelete(null);\r\n }}\r\n >\r\n Are you sure you want to delete filter row {confirmDelete + 1}?\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { BaseURL } from \"../components/Common\";\r\n\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport BSL_ControlContainer from \"../components/BSL_ControlContainer\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { IconButton, Paper, Popper } from \"@material-ui/core\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\nimport Autocomplete from \"react-autocomplete\";\r\n\r\nconst createThumb = (filename) => {\r\n if (!filename) return \"\";\r\n return (\r\n <>\r\n {filename}\r\n \r\n >\r\n );\r\n};\r\n\r\nconst texture_files = [\r\n { Key: \"\", Display: \"None\" },\r\n {\r\n Key: \"corro.jpg\",\r\n Display: createThumb(\"corro.jpg\"),\r\n },\r\n {\r\n Key: \"cdeck.png\",\r\n Display: createThumb(\"cdeck.png\"),\r\n },\r\n {\r\n Key: \"flatdek.png\",\r\n Display: createThumb(\"flatdek.png\"),\r\n },\r\n {\r\n Key: \"flatdekii.png\",\r\n Display: createThumb(\"flatdekii.png\"),\r\n },\r\n {\r\n Key: \"hirib.png\",\r\n Display: createThumb(\"hirib.png\"),\r\n },\r\n {\r\n Key: \"kliplok.png\",\r\n Display: createThumb(\"kliplok.png\"),\r\n },\r\n {\r\n Key: \"kliplokclassic.png\",\r\n Display: createThumb(\"kliplokclassic.png\"),\r\n },\r\n {\r\n Key: \"spandek.jpg\",\r\n Display: createThumb(\"spandek.jpg\"),\r\n },\r\n {\r\n Key: \"trimdek.png\",\r\n Display: createThumb(\"trimdek.png\"),\r\n },\r\n {\r\n Key: \"corro_trans.png\",\r\n Display: createThumb(\"corro_trans.png\"),\r\n },\r\n {\r\n Key: \"tl5_trans.png\",\r\n Display: createThumb(\"tl5_trans.png\"),\r\n },\r\n {\r\n Key: \"greca_trans.png\",\r\n Display: createThumb(\"greca_trans.png\"),\r\n },\r\n {\r\n Key: \"cdeck_skylight.png\",\r\n Display: createThumb(\"cdeck_skylight.png\"),\r\n },\r\n];\r\n\r\nconst bottom_texture_files = [\r\n { Key: \"\", Display: \"None\" },\r\n {\r\n Key: \"solarspan_vj.png\",\r\n Display: createThumb(\"solarspan_vj.png\"),\r\n },\r\n {\r\n Key: \"solarspan_smooth.png\",\r\n Display: createThumb(\"solarspan_smooth.png\"),\r\n },\r\n];\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"90%\",\r\n minWidth: \"600px\",\r\n },\r\n container: {\r\n // height: \"90%\",\r\n // maxHeight: \"800px\",\r\n },\r\n row: {\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n categoryHeadingCell: {\r\n textAlign: \"center\",\r\n backgroundColor: Palette.FieldersOrange + \" !important\",\r\n padding: \"2px !important\",\r\n borderTopLeftRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n borderLeft: \"1px solid white !important\",\r\n borderRight: \"1px solid white !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n categoryHeadingCellBlank: {\r\n textAlign: \"center\",\r\n backgroundColor: \"#ffffff !important\",\r\n padding: \"2px !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n // padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: \"#a8a8a8\",\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n headingCellSubtype: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n // padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: \"#878787\",\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n\r\n headingRow: {\r\n backgroundColor: Palette.FieldersBlue,\r\n },\r\n skylightheadingCell: {\r\n background: \"#5ebba7\",\r\n },\r\n editor: {\r\n border: \"1px solid grey\",\r\n width: \"40px\",\r\n },\r\n noHover: {\r\n \"&:hover\": {\r\n backgroundColor: \"transparent !important\",\r\n },\r\n },\r\n}));\r\n\r\nconst LYSAGHT_POAs = [\"DEFAULT\", \"LSB\", \"EMU\", \"NUN\", \"LAU\", \"GIL\", \"KEW\"];\r\nconst CENTENARY_POAs = [\"DEFAULT\", \"MEN\", \"CAM\", \"MIN\", \"WAN\"];\r\n\r\nconst subtype_columns = (roofSheetIDs, colours) => [\r\n {\r\n id: \"Key\",\r\n label: \"Offering Key\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"name\",\r\n label: \"Display Name\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"allow_nofoot_traffic\",\r\n label: \"Allow No Foot Traffic\",\r\n grouping: \"SUBTYPES - No Foot Traffic\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => (val === false ? \"No\" : \"Yes\"),\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"roofsheet_id\",\r\n label: \"Roofsheet ID\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"roofsheet_id_ds\",\r\n label: \"Roofsheet ID (Double Sided)\",\r\n grouping: \"SUBTYPES - No Foot Traffic\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: roofSheetIDs,\r\n },\r\n {\r\n id: \"max_overhang\",\r\n label: \"Max Overhang\",\r\n grouping: \"SUBTYPES - No Foot Traffic\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"allow_non_trafficable\",\r\n label: \"Allow Non-Trafficable\",\r\n grouping: \"SUBTYPES - Non-Trafficable\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"roofsheet_id_non_trafficable\",\r\n label: \"Roofsheet ID\",\r\n grouping: \"SUBTYPES - Non-Trafficable\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: roofSheetIDs,\r\n },\r\n {\r\n id: \"roofsheet_id_non_trafficable_ds\",\r\n label: \"Roofsheet ID (Double Sided)\",\r\n grouping: \"SUBTYPES - Non-Trafficable\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: roofSheetIDs,\r\n },\r\n {\r\n id: \"max_overhang_non_trafficable\",\r\n label: \"Max Overhang\",\r\n grouping: \"SUBTYPES - Non-Trafficable\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"allow_cyclonic\",\r\n label: \"Allow Cyclonic\",\r\n grouping: \"SUBTYPES - Cyclonic\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n\r\n format: (value) => {\r\n if (value && typeof value === \"string\" && value?.split !== undefined && colours) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colours.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n } else if (value && typeof value === \"object\") {\r\n let output = [];\r\n for (let poa in value) {\r\n let colour = value[poa];\r\n if (!colour) continue;\r\n if (colours.includes(colour.trim()))\r\n output.push(\r\n <>\r\n \r\n {poa} - {colour}\r\n \r\n \r\n >\r\n );\r\n else\r\n output.push(\r\n <>\r\n \r\n {poa} - {colour}{\" \"}\r\n \r\n \r\n \r\n >\r\n );\r\n }\r\n return output;\r\n }\r\n return value;\r\n },\r\n editor: (editCell, brand) => {\r\n let poas = brand === \"Lysaght\" ? LYSAGHT_POAs : CENTENARY_POAs;\r\n\r\n let values = editCell?.value;\r\n if (typeof editCell?.value === \"string\") {\r\n values = {\r\n DEFAULT: editCell?.value,\r\n };\r\n }\r\n\r\n return (\r\n \r\n {poas.map((poa, index) => {\r\n return (\r\n // {\r\n // {item}\r\n // }\r\n \r\n \r\n {poa}:\r\n
\r\n {\r\n // if (editCell?.column?.autocompleteShowFullList) return true;\r\n if (item.toLowerCase().startsWith(value.toLowerCase().substring(0, 3)))\r\n return true;\r\n if (item.toLowerCase().indexOf(value.toLowerCase()) > -1) return true;\r\n return false;\r\n }}\r\n getItemValue={(item) => item}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n // marginTop: \"-33px\",\r\n lineHeight: 1.4,\r\n width: \"350px\",\r\n textAlign: \"left\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n overflowY: \"auto\",\r\n maxHeight: \"300px\",\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n \r\n // saveValue(\r\n // editCell.section,\r\n // editCell.key,\r\n // editCell.row,\r\n // editCell?.column?.id,\r\n // e.target.value\r\n // )\r\n // }\r\n onChange={(val) => {\r\n let new_values = { ...values };\r\n new_values[poa] = val;\r\n if (val.trim() === \"\") delete new_values[poa];\r\n if (Object.keys(new_values).length < 2)\r\n new_values = new_values?.[\"DEFAULT\"];\r\n editCell.setEditCell({\r\n ...editCell,\r\n value: new_values ? new_values : \"\",\r\n });\r\n }}\r\n helperText={index === 0 ? \"leave blank below to use default\" : \"\"}\r\n />\r\n );\r\n }}\r\n value={values?.[poa] ? values?.[poa] : \"\"}\r\n // onChange={(e) => setValue(e.target.value.split(\"-\")[0].trim())}\r\n onSelect={(val) => {\r\n let new_values = { ...values };\r\n new_values[poa] = val;\r\n if (val.trim() === \"\") delete new_values[poa];\r\n if (Object.keys(new_values).length < 2) new_values = new_values?.[\"DEFAULT\"];\r\n editCell.setEditCell({ ...editCell, value: new_values ? new_values : \"\" });\r\n }}\r\n />\r\n \r\n );\r\n })}\r\n \r\n );\r\n },\r\n // autocompleteOptions: colours,\r\n },\r\n {\r\n id: \"default_colour\",\r\n label: \"Default Colour\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: colours,\r\n },\r\n {\r\n id: \"texture_filename\",\r\n label: \"3D Model Texture\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => createThumb(val),\r\n select: texture_files,\r\n },\r\n {\r\n id: \"bottomside_texture_filename\",\r\n label: \"Under Texture (insulated panel)\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => createThumb(val),\r\n select: bottom_texture_files,\r\n },\r\n];\r\n\r\nconst skylight_columns = (roofSheetIDs, colours) => [\r\n {\r\n id: \"Key\",\r\n label: \"Skylights\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"name\",\r\n label: \"Display Name\",\r\n grouping: \"SKYLIGHT SPECIFICATIONS\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"roofsheet_id\",\r\n label: \"Skylight Roofsheet ID\",\r\n grouping: \"SKYLIGHT SPECIFICATIONS\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: roofSheetIDs,\r\n },\r\n {\r\n id: \"texture_filename\",\r\n label: \"3D Model Texture\",\r\n grouping: \"SKYLIGHT SPECIFICATIONS\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => createThumb(val),\r\n select: texture_files,\r\n },\r\n {\r\n id: \"max_overhang\",\r\n label: \"Max Overhang\",\r\n grouping: \"SKYLIGHT SPECIFICATIONS\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"SKYLIGHT SPECIFICATIONS\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: colours,\r\n },\r\n {\r\n id: \"default_colour\",\r\n label: \"Default Colour\",\r\n grouping: \"SKYLIGHT SPECIFICATIONS\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: colours,\r\n },\r\n];\r\n\r\nconst roofsheeetGroup_columns = (roofSheetIDs, colour, parent) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"200px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n validate: \"name\",\r\n },\r\n {\r\n id: \"name\",\r\n label: \"Display Name\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"name\",\r\n },\r\n {\r\n id: \"thumbnail\",\r\n label: \"Thumbnail\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (value) => {\r\n if (value)\r\n return (\r\n \r\n );\r\n return \"\";\r\n },\r\n editor: (editCell) => {\r\n const uploadFile = (e) => {\r\n if (e?.target?.files) handleFiles(e.target.files);\r\n };\r\n\r\n const handleFiles = (files) => {\r\n if (files.length === 0) return;\r\n let file = files[0];\r\n if (\r\n file.name.toLowerCase().endsWith(\".png\") ||\r\n file.name.toLowerCase().endsWith(\".jpg\") ||\r\n file.name.toLowerCase().endsWith(\".gif\")\r\n ) {\r\n if (file.size > 10000) {\r\n alert(\"File is too big! Less thank 10kB please\");\r\n return;\r\n }\r\n\r\n \r\n var reader = new FileReader();\r\n reader.onload = function (e) {\r\n \r\n editCell.setEditCell({ ...editCell, value: e.target.result });\r\n // setValue(e.target.result);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n editCell.setEditCell({ ...editCell, value: \"\" })}\r\n style={{ color: \"black\", position: \"absolute\", right: \"5px\", marginTop: \"12px\" }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n {\"Choose image file to upload\"}\r\n
\r\n
\r\n \r\n \r\n\r\n {/* {param !== \"NO BUTTON\" && (\r\n editCell?saveValue(row, \"Image_b64\", value)}>UPDATE \r\n )} */}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"default_subtype\",\r\n label: \"Default Subtype\",\r\n grouping: \"defaults\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: parent?.subtypes ? Object.keys(parent?.subtypes) : [],\r\n autocompleteShowFullList: true,\r\n },\r\n {\r\n id: \"default_skylight\",\r\n label: \"Default Skylight\",\r\n grouping: \"defaults\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n autocompleteOptions: parent?.skylights ? Object.keys(parent?.skylights) : [],\r\n autocompleteShowFullList: true,\r\n },\r\n {\r\n id: \"allow_cyclonic\",\r\n label: \"Allow Cyclonic\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"single_span_only\",\r\n label: \"Single Span Only\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"gutter_return_not_required\",\r\n label: \"Return Gutter NOT required\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"double_beam_hip_required\",\r\n label: \"Double Hip Beam Area Join\",\r\n grouping: \"SUBTYPES - Cyclonic\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"texture_filename\",\r\n label: \"3D Model Texture\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => createThumb(val),\r\n select: texture_files,\r\n },\r\n {\r\n id: \"bottomside_texture_filename\",\r\n label: \"Under Texture (insulated panel)\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => createThumb(val),\r\n select: bottom_texture_files,\r\n },\r\n {\r\n id: \"skylight_texture_filename\",\r\n label: \"Skylight Texture\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (val, row) => createThumb(val),\r\n select: texture_files,\r\n },\r\n {\r\n id: \"min_pitch\",\r\n label: \"Min Pitch\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"fan_bracket\",\r\n label: \"Fan Bracket\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"fan_bracket_default\",\r\n label: \"Default Number of fan brackets\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"max_overhang\",\r\n label: \"Max Overhang\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"min_front_overhang\",\r\n label: \"Min Front & Rear Overhang\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"min_side_overhang\",\r\n label: \"Min Side Overhang\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"max_side_overhang\",\r\n label: \"Max Side Overhang\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"coverage\",\r\n label: \"Coverage\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"skylight_coverage\",\r\n label: \"Skylight Coverage\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"skylight_cyclonic_coverage\",\r\n label: \"Skylight Cyclonic Coverage\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"gable_end_span_override\",\r\n label: \"Gable End Span Override\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"gable_internal_span_override\",\r\n label: \"Gable Internal Span Override\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"wall_fixing_spacing\",\r\n label: \"Wall Fix Spacing\",\r\n grouping: \"specifications\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n];\r\nconst roofsheeetGroup_columns2 = (roofSheetIDs, colour, parent) => [\r\n {\r\n id: \"subtypes\",\r\n label: \"Subtypes\",\r\n grouping: \"subtypes\",\r\n colSpan: 16,\r\n style: {\r\n width: \"100px\",\r\n },\r\n format: (group_key, value, row, classes, getGroupHeaders, roofSheetIDs, colours, setEditCell, editCell) => {\r\n return (\r\n \r\n \r\n \r\n {getGroupHeaders(subtype_columns)} \r\n \r\n {subtype_columns().map((column) => {\r\n if (\r\n column.id === \"bottomside_texture_filename\" &&\r\n !group_key.toUpperCase().includes(\"BONDOR\") &&\r\n !group_key.toUpperCase().includes(\"VERSICLAD\") &&\r\n !group_key.toUpperCase().includes(\"APOLLO\")\r\n )\r\n return null;\r\n return column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n );\r\n })}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n {Object.keys(value).map((key, index) => {\r\n return (\r\n \r\n {subtype_columns(roofSheetIDs, colours).map((column) => {\r\n let display_value = value[key][column.id];\r\n if (column.id === \"Key\") display_value = key;\r\n\r\n if (\r\n column.id === \"bottomside_texture_filename\" &&\r\n !group_key.toUpperCase().includes(\"BONDOR\") &&\r\n !group_key.toUpperCase().includes(\"VERSICLAD\") &&\r\n !group_key.toUpperCase().includes(\"APOLLO\")\r\n )\r\n return null;\r\n\r\n let warning = false;\r\n if (\r\n column?.format === undefined &&\r\n column.autocompleteOptions &&\r\n display_value\r\n ) {\r\n if (!column.autocompleteOptions.includes(display_value)) warning = true;\r\n }\r\n let deleteIcon = false;\r\n if (column.id === \"Key\") deleteIcon = true;\r\n\r\n let key_path =\r\n \"roofsheet_types>\" + group_key + \">subtypes>\" + key + \">\" + column.id;\r\n\r\n return (\r\n {\r\n if (editCell?.anchorEl) {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n } else {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key: key,\r\n key_path: key_path,\r\n group_key: group_key,\r\n row: row,\r\n column: { ...column },\r\n value: display_value,\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n {deleteIcon && (\r\n {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key: key,\r\n key_path: key_path,\r\n // row: row,\r\n column: { ...column },\r\n value: \"DELETE\",\r\n });\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {column.format\r\n ? column.format(display_value, value[key])\r\n : display_value}\r\n {warning && (\r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n\r\n \r\n {\r\n if (editCell?.anchorEl) {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n } else {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key_path: \"roofsheet_types>\" + group_key + \">subtypes>ADD\",\r\n group_key: group_key,\r\n row: row,\r\n column: { label: \"New item Key\" },\r\n value: \"\",\r\n template: {\r\n roofsheet_id: \"\",\r\n allow_non_trafficable: false,\r\n roofsheet_id_non_trafficable: \"\",\r\n default_colour: \"\",\r\n colours: \"\",\r\n },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n colSpan={subtype_columns.length}\r\n >\r\n [add new]\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {/* {getGroupHeaders(skylight_columns)} */}\r\n \r\n {skylight_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n {row?.skylights &&\r\n Object.keys(row.skylights).map((key, index) => {\r\n return (\r\n \r\n {skylight_columns(roofSheetIDs, colours).map((column) => {\r\n let display_value = row.skylights[key][column.id];\r\n if (column.id === \"Key\") display_value = key;\r\n let deleteIcon = false;\r\n if (column.id === \"Key\") deleteIcon = true;\r\n\r\n let warning = false;\r\n if (column.autocompleteOptions && display_value) {\r\n if (!column.autocompleteOptions.includes(display_value))\r\n warning = true;\r\n }\r\n let key_path =\r\n \"roofsheet_types>\" +\r\n group_key +\r\n \">skylights>\" +\r\n key +\r\n \">\" +\r\n column.id;\r\n\r\n return (\r\n {\r\n if (editCell?.anchorEl) {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n } else {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key: key,\r\n key_path: key_path,\r\n group_key: group_key,\r\n row: row,\r\n column: { ...column },\r\n value: display_value,\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n {deleteIcon && (\r\n {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key: key,\r\n key_path: key_path,\r\n // row: row,\r\n column: { ...column },\r\n value: \"DELETE\",\r\n });\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {column.format\r\n ? column.format(display_value, value[key])\r\n : display_value}\r\n {warning && (\r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n\r\n \r\n {\r\n if (editCell?.anchorEl) {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n } else {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key_path: \"roofsheet_types>\" + group_key + \">skylights>ADD\",\r\n group_key: group_key,\r\n row: row,\r\n column: { label: \"New item Key\" },\r\n value: \"\",\r\n template: {\r\n name: \"\",\r\n roofsheet_id: \"\",\r\n default_colour: \"\",\r\n colours: \"\",\r\n },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n colSpan={subtype_columns.length}\r\n >\r\n [add new]\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n },\r\n },\r\n];\r\n\r\nexport default function ManageOfferingRoofSheetGroups(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { value, saveValue, onClose, materials, brand } = props;\r\n\r\n const [editCell, setEditCell] = React.useState(null);\r\n\r\n const [roofSheetIDs, setRoofSheetIDs] = React.useState(materials?.[\"SHEETS_NAMES\"]);\r\n const [colours, setColours] = React.useState([\r\n ...(materials?.[\"colour_arrays\"] ? materials?.[\"colour_arrays\"] : []),\r\n ...(materials?.[\"colour_map\"] ? materials?.[\"colour_map\"] : []),\r\n ]);\r\n\r\n if (editCell === null) {\r\n setEditCell({ setEditCell: setEditCell, saveValue: saveValue });\r\n }\r\n\r\n const getGroupHeaders = (columns) => {\r\n let grouping_headers = [];\r\n\r\n let last_grouping = undefined;\r\n let num_in_this_group = -1;\r\n let header_i = 0;\r\n for (let column of columns()) {\r\n if (column?.hideInTable) continue;\r\n let this_grouping = column?.grouping;\r\n if (\r\n this_grouping !== last_grouping ||\r\n (this_grouping === undefined && last_grouping) ||\r\n num_in_this_group > 8\r\n ) {\r\n //change in grouping. print cell\r\n\r\n let cell_style = {};\r\n if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n grouping_headers.push(\r\n \r\n {last_grouping ? last_grouping : \"\"}\r\n \r\n );\r\n header_i++;\r\n last_grouping = this_grouping;\r\n num_in_this_group = 0;\r\n } else {\r\n num_in_this_group++;\r\n }\r\n }\r\n\r\n if (num_in_this_group > 0) {\r\n let cell_style = {};\r\n if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n grouping_headers.push(\r\n \r\n {last_grouping ? last_grouping : \"\"}\r\n \r\n );\r\n }\r\n return grouping_headers;\r\n };\r\n\r\n return (\r\n // {\r\n // // saveValue(props.section, props.ref_key, props.row, \"Spans\", spans);\r\n // }}\r\n // button2Text=\"Cancel\"\r\n // button2Click={onClose}\r\n // style={{ maxWidth: \"initial\" }}\r\n // fullWidth={true}\r\n // maxWidth={\"xl\"}\r\n // >\r\n \r\n
\r\n \r\n \r\n {/* \r\n {getGroupHeaders(roofsheeetGroup_columns)} \r\n \r\n {roofsheeetGroup_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n \r\n \r\n */}\r\n \r\n {Object.keys(value).map((key, index) => {\r\n return (\r\n <>\r\n \r\n {roofsheeetGroup_columns(roofSheetIDs, colours, value[key]).map(\r\n (column) => {\r\n if (\r\n column.id === \"bottomside_texture_filename\" &&\r\n !key.toUpperCase().includes(\"BONDOR\") &&\r\n !key.toUpperCase().includes(\"VERSICLAD\") &&\r\n !key.toUpperCase().includes(\"APOLLO\")\r\n )\r\n return null;\r\n\r\n let display_value = value[key][column.id];\r\n if (column.id === \"Key\") display_value = key;\r\n\r\n let deleteIcon = false;\r\n if (column.id === \"Key\") deleteIcon = true;\r\n\r\n let key_path = \"roofsheet_types>\" + key + \">\" + column.id;\r\n\r\n let warning = false;\r\n if (column.autocompleteOptions && display_value) {\r\n if (!column.autocompleteOptions.includes(display_value))\r\n warning = true;\r\n }\r\n\r\n let template = {};\r\n if (column?.style) template = column.style;\r\n\r\n return (\r\n {\r\n if (editCell?.anchorEl) {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n } else {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key: key,\r\n key_path: key_path,\r\n // row: row,\r\n column: { ...column },\r\n value: display_value,\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n {deleteIcon && (\r\n {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key: key,\r\n key_path: key_path,\r\n // row: row,\r\n column: { ...column },\r\n value: \"DELETE\",\r\n });\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {{column.label}: }\r\n {column.id !== \"Key\" && }\r\n {column.format\r\n ? column.format(display_value, value[key])\r\n : display_value}\r\n\r\n {warning && (\r\n \r\n )}\r\n \r\n\r\n // format: (group_key, value, row, classes, getGroupHeaders, roofSheetIDs, colours, setEditCell, editCell)\r\n );\r\n }\r\n )}\r\n \r\n \r\n {roofsheeetGroup_columns2(roofSheetIDs, colours, value[key]).map(\r\n (column) => {\r\n if (\r\n column.id === \"bottomside_texture_filename\" &&\r\n !key.toUpperCase().includes(\"BONDOR\") &&\r\n !key.toUpperCase().includes(\"VERSICLAD\") &&\r\n !key.toUpperCase().includes(\"APOLLO\")\r\n )\r\n return null;\r\n\r\n let display_value = value[key][column.id];\r\n if (column.id === \"Key\") display_value = \"\";\r\n\r\n let key_path = \"roofsheet_types>\" + key + \">\" + column.id;\r\n\r\n let warning = false;\r\n if (column.autocompleteOptions && display_value) {\r\n if (!column.autocompleteOptions.includes(display_value))\r\n warning = true;\r\n }\r\n\r\n return (\r\n {\r\n if (editCell?.anchorEl) {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n } else {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key: key,\r\n key_path: key_path,\r\n // row: row,\r\n column: { ...column },\r\n value: display_value,\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n {column.format\r\n ? column.format(\r\n key,\r\n display_value,\r\n value[key],\r\n classes,\r\n getGroupHeaders,\r\n roofSheetIDs,\r\n colours,\r\n setEditCell,\r\n editCell\r\n )\r\n : display_value}\r\n\r\n {warning && (\r\n \r\n )}\r\n \r\n\r\n // format: (group_key, value, row, classes, getGroupHeaders, roofSheetIDs, colours, setEditCell, editCell)\r\n );\r\n }\r\n )}\r\n \r\n >\r\n );\r\n })}\r\n \r\n {\r\n if (editCell?.anchorEl) {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n } else {\r\n setEditCell({\r\n ...editCell,\r\n anchorEl: e.currentTarget,\r\n key_path: \"roofsheet_types>ADD\",\r\n column: { label: \"New item Key\" },\r\n value: \"\",\r\n template: {\r\n name: \"\",\r\n subtypes: {},\r\n skylights: {},\r\n default_skylight: \"\",\r\n default_subtype: \"\",\r\n default_colour: \"\",\r\n thumbnail: \"\",\r\n texture_filename: \"\",\r\n skylight_texture_filename: \"\",\r\n texture_normal_filename: \"\",\r\n min_pitch: 5,\r\n max_overhang: 500,\r\n coverage: 760,\r\n },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n colSpan={subtype_columns.length}\r\n >\r\n [add new]\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
{\r\n // e.stopPropagation();\r\n }}\r\n >\r\n \r\n {/* */}\r\n setEditCell({ ...editCell, anchorEl: null })}\r\n style={{ color: \"white\", position: \"absolute\", right: \"5px\" }}\r\n >\r\n \r\n \r\n\r\n {editCell?.value === \"DELETE\" ? (\r\n <>\r\n {\r\n saveValue(\"MASTER\", editCell.key_path, \"DELETE\");\r\n setEditCell({ ...editCell, anchorEl: null });\r\n }}\r\n secondary\r\n >\r\n DELETE\r\n \r\n {\r\n setEditCell({ ...editCell, anchorEl: null });\r\n }}\r\n >\r\n CANCEL\r\n \r\n >\r\n ) : editCell?.column?.editor ? (\r\n editCell?.column?.editor(editCell, brand)\r\n ) : editCell?.column?.select ? (\r\n <>\r\n {\r\n setEditCell({ ...editCell, value: val });\r\n // e.stopPropagation();\r\n }}\r\n />\r\n >\r\n ) : (\r\n <>\r\n {\r\n if (editCell?.column?.autocompleteShowFullList) return true;\r\n if (item.toLowerCase().startsWith(value.toLowerCase().substring(0, 3))) return true;\r\n if (item.toLowerCase().indexOf(value.toLowerCase()) > -1) return true;\r\n return false;\r\n }}\r\n getItemValue={(item) => item}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n // marginTop: \"-33px\",\r\n lineHeight: 1.4,\r\n width: \"350px\",\r\n textAlign: \"left\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n \r\n // saveValue(\r\n // editCell.section,\r\n // editCell.key,\r\n // editCell.row,\r\n // editCell?.column?.id,\r\n // e.target.value\r\n // )\r\n // }\r\n onChange={(val) => {\r\n setEditCell({ ...editCell, value: val });\r\n }}\r\n // helperText={editCellHelperText}\r\n />\r\n );\r\n }}\r\n value={editCell?.value}\r\n // onChange={(e) => setValue(e.target.value.split(\"-\")[0].trim())}\r\n onSelect={(val) => setEditCell({ ...editCell, value: val })}\r\n />\r\n >\r\n )}\r\n \r\n {editCell?.value !== \"DELETE\" && (\r\n {\r\n saveValue(\"MASTER\", editCell.key_path, editCell.value, editCell.template);\r\n setEditCell({ ...editCell, anchorEl: null });\r\n }}\r\n >\r\n UPDATE\r\n \r\n )}\r\n \r\n \r\n
\r\n // \r\n );\r\n}\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\n// import { useSelector, useDispatch } from \"react-redux\";\r\nimport Popper from \"@mui/material/Popper\";\r\n// web.cjs is required for IE11 support\r\nimport { useSpring, animated } from \"react-spring\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n// import { API_BASE, Palette } from \"../AppConfig\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\n\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n Box,\r\n Checkbox,\r\n Paper,\r\n IconButton,\r\n Tooltip,\r\n Switch,\r\n TableContainer,\r\n TableHead,\r\n TableCell,\r\n TableBody,\r\n Table,\r\n TableRow,\r\n TableSortLabel,\r\n Toolbar,\r\n Typography,\r\n FormControlLabel,\r\n Button,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\n// import { visuallyHidden } from \"@material-ui/core/utils/\";\r\nimport { alpha } from \"@material-ui/core/styles\";\r\nimport { Add, Edit } from \"@material-ui/icons\";\r\nimport { API_BASE } from \"../AppConfig\";\r\nimport { fetchTimeout } from \"../components/Common\";\r\nimport { Autocomplete } from \"@mui/material\";\r\n// import { Autocomplete } from \"@material-ui/lab\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"90%\",\r\n minWidth: \"600px\",\r\n },\r\n container: {\r\n // height: \"90%\",\r\n // maxHeight: \"800px\",\r\n },\r\n row: {\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n // color: theme?.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n categoryHeadingCell: {\r\n textAlign: \"center\",\r\n // backgroundColor: Palette.FieldersOrange + \" !important\",\r\n padding: \"2px !important\",\r\n borderTopLeftRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n borderLeft: \"1px solid white !important\",\r\n borderRight: \"1px solid white !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n categoryHeadingCellBlank: {\r\n textAlign: \"center\",\r\n backgroundColor: \"#ffffff !important\",\r\n padding: \"2px !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n // padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n // fontWeight: theme?.brand?.FIELDERS ? \"inherit\" : \"600\",\r\n // fontFamily: theme?.typography?.fontFamilySecondary,\r\n backgroundColor: \"#a8a8a8\",\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n headingCellSubtype: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n // padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n // fontWeight: theme?.brand?.FIELDERS ? \"inherit\" : \"600\",\r\n // fontFamily: theme?.typography?.fontFamilySecondary,\r\n backgroundColor: \"#878787\",\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n\r\n headingRow: {\r\n // backgroundColor: Palette.FieldersBlue,\r\n },\r\n skylightheadingCell: {\r\n background: \"#5ebba7\",\r\n },\r\n editor: {\r\n border: \"1px solid grey\",\r\n width: \"40px\",\r\n },\r\n noHover: {\r\n \"&:hover\": {\r\n backgroundColor: \"transparent !important\",\r\n },\r\n },\r\n}));\r\n\r\nconst createData = (file, displayName, notes, conditions) => {\r\n return {\r\n file,\r\n displayName,\r\n notes,\r\n conditions,\r\n };\r\n};\r\n\r\nconst Fade = React.forwardRef(function Fade(props, ref) {\r\n const { in: open, children, onEnter, onExited, ...other } = props;\r\n const style = useSpring({\r\n from: { opacity: 0 },\r\n to: { opacity: open ? 1 : 0 },\r\n onStart: () => {\r\n if (open && onEnter) {\r\n onEnter();\r\n }\r\n },\r\n onRest: () => {\r\n if (!open && onExited) {\r\n onExited();\r\n }\r\n },\r\n });\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n});\r\n\r\nFade.propTypes = {\r\n children: PropTypes.element,\r\n in: PropTypes.bool,\r\n onEnter: PropTypes.func,\r\n onExited: PropTypes.func,\r\n};\r\n\r\nexport default function ManageDrawings(props) {\r\n const classes = useStyles();\r\n // const dispatch = useDispatch();\r\n // Drawings, saveDrawings, close, material list\r\n const { value, saveValue, onClose, materials } = props;\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [selectedRow, setSelectedRow] = React.useState(null);\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const [order, setOrder] = React.useState(\"asc\");\r\n const [orderBy, setOrderBy] = React.useState(\"file\");\r\n const [selected, setSelected] = React.useState([]);\r\n const [page, setPage] = React.useState(0);\r\n const [dense, setDense] = React.useState(false);\r\n const [rowsPerPage, setRowsPerPage] = React.useState(5);\r\n const [updateRow, setUpdateRow] = React.useState(\"\");\r\n const [updatedState, setUpdatedState] = React.useState(value);\r\n const [value_, setValue] = React.useState(\"\");\r\n const [value2, setValue2] = React.useState(\"\");\r\n const [keyCondition, setKeyCondition] = React.useState(\"\");\r\n const [valueCondition, setvalueCondition] = React.useState(\"\");\r\n const [conditionOpen, setConditionOpen] = React.useState(false);\r\n\r\n const handleConditionOpen = () => {\r\n setConditionOpen(true);\r\n };\r\n\r\n const handleConditionClose = () => {\r\n setConditionOpen(false);\r\n };\r\n\r\n let index = selectedRow?.split(\"|\")[0];\r\n let key = selectedRow?.split(\"|\")[1];\r\n let textLabel;\r\n\r\n \r\n\r\n if (textLabel === undefined) {\r\n if (key !== (null || undefined) && index !== (null || undefined)) {\r\n textLabel = updatedState[index][key];\r\n } else {\r\n textLabel = \"\";\r\n }\r\n }\r\n\r\n const handleFileClick = (event, updatedState) => {\r\n setAnchorEl(event.currentTarget);\r\n setSelectedRow(updatedState);\r\n setSelected([]);\r\n setUpdateRow(\"\"); // Restart selected row\r\n setOpen((previousOpen) => !previousOpen);\r\n };\r\n\r\n const canBeOpen = open && Boolean(selectedRow);\r\n const id = canBeOpen ? \"spring-popper\" : undefined;\r\n\r\n let rows = updatedState.map((rows) => {\r\n return createData(rows?.File, rows?.Name, rows?.Notes, rows?.Conditions);\r\n });\r\n\r\n function descendingComparator(a, b, orderBy) {\r\n if (b[orderBy] < a[orderBy]) {\r\n return -1;\r\n }\r\n if (b[orderBy] > a[orderBy]) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function getComparator(order, orderBy) {\r\n return order === \"desc\"\r\n ? (a, b) => descendingComparator(a, b, orderBy)\r\n : (a, b) => -descendingComparator(a, b, orderBy);\r\n }\r\n\r\n // This method is created for cross-browser compatibility, if you don't\r\n // need to support IE11, you can use Array.prototype.sort() directly\r\n function stableSort(array, comparator) {\r\n const stabilizedThis = array.map((el, index) => [el, index]);\r\n stabilizedThis.sort((a, b) => {\r\n const order = comparator(a[0], b[0]);\r\n if (order !== 0) {\r\n return order;\r\n }\r\n return a[1] - b[1];\r\n });\r\n return stabilizedThis.map((el) => el[0]);\r\n }\r\n\r\n const headCells = [\r\n {\r\n id: \"file\",\r\n numeric: false,\r\n disablePadding: true,\r\n label: \"File Name \",\r\n },\r\n {\r\n id: \"displayName\",\r\n numeric: true,\r\n disablePadding: false,\r\n label: \"Display Name \",\r\n },\r\n {\r\n id: \"notes\",\r\n numeric: true,\r\n disablePadding: false,\r\n label: \"Internal Notes \",\r\n },\r\n {\r\n id: \"Conditions\",\r\n numeric: true,\r\n disablePadding: false,\r\n label: \"Conditions \",\r\n },\r\n ];\r\n\r\n function EnhancedTableHead(props) {\r\n const { onSelectAllClick, order, orderBy, numSelected, rowCount, onRequestSort } = props;\r\n const createSortHandler = (property) => (event) => {\r\n onRequestSort(event, property);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n 0 && numSelected < rowCount}\r\n checked={rowCount > 0 && numSelected === rowCount}\r\n onChange={onSelectAllClick}\r\n inputProps={{\r\n \"aria-label\": \"select all desserts\",\r\n }}\r\n />\r\n \r\n {headCells.map((headCell) => (\r\n \r\n \r\n {headCell.label}\r\n {orderBy === headCell.id ? (\r\n \r\n {order === \"desc\" ? \"sorted descending\" : \"sorted ascending\"}\r\n \r\n ) : null}\r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n }\r\n\r\n const handleDeleteSelected = () => {\r\n let newState = updatedState;\r\n newState = newState.filter((rows) => {\r\n if (selected.indexOf(rows.File) > -1) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n setSelected([]);\r\n setUpdatedState(newState);\r\n saveValue(\"MASTER\", \"drawings\", newState);\r\n };\r\n\r\n EnhancedTableHead.propTypes = {\r\n numSelected: PropTypes.number.isRequired,\r\n onRequestSort: PropTypes.func.isRequired,\r\n onSelectAllClick: PropTypes.func.isRequired,\r\n order: PropTypes.oneOf([\"asc\", \"desc\"]).isRequired,\r\n orderBy: PropTypes.string.isRequired,\r\n rowCount: PropTypes.number.isRequired,\r\n };\r\n\r\n function EnhancedTableToolbar(props) {\r\n const { numSelected } = props;\r\n\r\n return (\r\n 0 && {\r\n bgcolor: (theme) => alpha(theme.palette.primary.main, theme.palette.action.activatedOpacity),\r\n }),\r\n }}\r\n >\r\n {numSelected > 0 ? (\r\n \r\n {numSelected} selected\r\n \r\n ) : (\r\n \r\n Drawings\r\n \r\n )}\r\n\r\n {numSelected > 0 && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n EnhancedTableToolbar.propTypes = {\r\n numSelected: PropTypes.number.isRequired,\r\n };\r\n\r\n const handleRequestSort = (event, property) => {\r\n const isAsc = orderBy === property && order === \"asc\";\r\n setOrder(isAsc ? \"desc\" : \"asc\");\r\n setOrderBy(property);\r\n };\r\n\r\n const handleSelectAllClick = (event) => {\r\n \r\n if (event.target.checked) {\r\n const newSelected = rows.map((n) => n.file);\r\n setSelected(newSelected);\r\n return;\r\n }\r\n setSelected([]);\r\n };\r\n\r\n const handleClick = (event, name) => {\r\n const selectedIndex = selected.indexOf(name);\r\n let newSelected = [];\r\n\r\n if (selectedIndex === -1) {\r\n newSelected = newSelected.concat(selected, name);\r\n } else if (selectedIndex === 0) {\r\n newSelected = newSelected.concat(selected.slice(1));\r\n } else if (selectedIndex === selected.length - 1) {\r\n newSelected = newSelected.concat(selected.slice(0, -1));\r\n } else if (selectedIndex > 0) {\r\n newSelected = newSelected.concat(selected.slice(0, selectedIndex), selected.slice(selectedIndex + 1));\r\n }\r\n\r\n setSelected(newSelected);\r\n };\r\n\r\n const uploadFile = (e) => {\r\n if (e?.target?.files) handleFiles(e.target.files[0]);\r\n };\r\n\r\n const uploadMultiFile = (e) => {\r\n \r\n for (var i = 0; i < e.target.files.length; i++) {\r\n handleFiles(e.target.files[i]);\r\n }\r\n };\r\n\r\n const handleFiles = (files) => {\r\n \r\n // if (files.length === 0) return;\r\n let file = files;\r\n if (file.name.toLowerCase().endsWith(\".pdf\")) {\r\n if (file.size > 2097152) {\r\n alert(\"File is too big! Less than 2MB please\");\r\n return;\r\n }\r\n\r\n \r\n var reader = new FileReader();\r\n reader.onload = function (e) {\r\n \r\n // Check if state has file / if not add file else ignore.\r\n let found = false;\r\n if (updatedState?.some && updatedState.some((e) => e.File === file.name)) {\r\n /* contains the element we're looking for */\r\n found = true;\r\n \r\n }\r\n if (!found) {\r\n \r\n let newState = updatedState;\r\n \r\n newState.push({ File: file.name, Notes: \"new line\" });\r\n \r\n setUpdatedState(newState);\r\n saveValue(\"MASTER\", \"drawings\", newState);\r\n }\r\n save(e.target.result, file.name);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n };\r\n\r\n const save = (value, name) => {\r\n let help_base_url = API_BASE() + \"document/Drawings\";\r\n fetchTimeout(help_base_url, {\r\n method: \"PUT\",\r\n body: JSON.stringify({\r\n document_type: \"drawing\",\r\n document_name: name,\r\n document_data: value,\r\n }),\r\n })\r\n // .then(res => (res.ok ? res : Promise.reject(res)))\r\n .then(async (res) => {\r\n if (!res.ok) Promise.reject(res);\r\n else {\r\n let text = await res.text();\r\n\r\n let newState = updatedState;\r\n if (newState.at(-1).File === \"\") {\r\n newState.at(-1).File = name;\r\n setUpdatedState(newState);\r\n handleFileClick(anchorEl, selectedRow);\r\n\r\n saveValue(\"MASTER\", \"drawings\", newState);\r\n }\r\n\r\n if (open) setOpen(false);\r\n }\r\n });\r\n };\r\n\r\n const handleChangeRowsPerPage = (event) => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n };\r\n\r\n let newState;\r\n const addCondition = () => {\r\n newState = updatedState;\r\n newState[index].Conditions = {\r\n ...newState[index].Conditions,\r\n key: \"condition\",\r\n };\r\n // setAnchorEl(anchorEl);\r\n // setSelectedRow(updatedState);\r\n // setUpdateRow(\"\"); // Restart selected row\r\n // setOpen((previousOpen) => !previousOpen);\r\n\r\n \r\n // newState = newState.filter((rows) => {\r\n // if (selected.indexOf(rows.File) > -1) {\r\n // return false;\r\n // }\r\n // return true;\r\n // });\r\n setUpdatedState(newState);\r\n // handleConditionOpen();\r\n // saveValue(\"MASTER\", \"drawings\", newState);\r\n };\r\n\r\n const getRecommendKeys = () => {\r\n let keysList = new Set(); // Use Set to avoid duplicate keys\r\n \r\n updatedState.forEach((element) => {\r\n if (element[\"Conditions\"] && typeof element[\"Conditions\"] === \"object\") {\r\n Object.keys(element[\"Conditions\"]).forEach((index) => {\r\n keysList.add(index);\r\n });\r\n }\r\n });\r\n \r\n // Convert the Set to an array, sort it alphabetically, and return\r\n return Array.from(keysList).sort();\r\n };\r\n\r\n const getRecommendedValues = () => {\r\n let valuesList = new Set(); // Use Set to avoid duplicate keys\r\n \r\n updatedState.forEach((element) => {\r\n if (element[\"Conditions\"] && typeof element[\"Conditions\"] === \"object\") {\r\n Object.keys(element[\"Conditions\"]).forEach((index) => {\r\n const value = element[\"Conditions\"][index];\r\n if (value !== null && value !== undefined) {\r\n valuesList.add(value);\r\n }\r\n });\r\n }\r\n });\r\n \r\n // Convert the Set to an array, sort it alphabetically, and return\r\n const valuesArray = Array.from(valuesList).sort();\r\n return valuesArray;\r\n };\r\n\r\n const handleChangeDense = (event) => {\r\n setDense(event.target.checked);\r\n };\r\n\r\n const isSelected = (name) => selected.indexOf(name) !== -1;\r\n\r\n // Avoid a layout jump when reaching the last page with empty rows.\r\n const emptyRows = page > 0 ? Math.max(0, (1 + page) * rowsPerPage - rows.length) : 0;\r\n\r\n return (\r\n <>\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* if you don't need to support IE11, you can replace the `stableSort` call with:\r\n rows.sort(getComparator(order, orderBy)).slice() */}\r\n {stableSort(rows, getComparator(order, orderBy))\r\n // .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n .map((row, index) => {\r\n const isItemSelected = isSelected(row.file);\r\n const labelId = `enhanced-table-checkbox-${index}`;\r\n\r\n return (\r\n \r\n \r\n handleClick(event, row.file)}\r\n color=\"primary\"\r\n checked={isItemSelected}\r\n inputProps={{\r\n \"aria-labelledby\": labelId,\r\n }}\r\n />\r\n \r\n \r\n handleFileClick(\r\n event,\r\n updatedState.findIndex((p) => p.File == row.file) + \"|File\"\r\n )\r\n }\r\n >\r\n {row.file}\r\n \r\n \r\n handleFileClick(\r\n event,\r\n updatedState.findIndex((p) => p.File == row.file) + \"|Name\"\r\n )\r\n }\r\n >\r\n {row.displayName}\r\n \r\n \r\n handleFileClick(\r\n event,\r\n updatedState.findIndex((p) => p.File == row.file) + \"|Notes\"\r\n )\r\n }\r\n >\r\n {row.notes}\r\n \r\n {\r\n handleFileClick(\r\n event,\r\n updatedState.findIndex((p) => p.File == row.file) +\r\n \"|Condition\"\r\n );\r\n setOpen(false);\r\n handleConditionOpen();\r\n }}\r\n >\r\n \r\n {row.conditions?.toString() ? (\r\n <>\r\n Edit \r\n >\r\n ) : (\r\n <>\r\n Add \r\n >\r\n )}\r\n
\r\n \r\n \r\n );\r\n })}\r\n\r\n {emptyRows > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n \r\n \r\n {/* \r\n {\r\n let newState = updatedState;\r\n newState = [...newState, { File: \"\", Name: \"\", Notes: \"new line\" }];\r\n setUpdatedState(newState);\r\n handleFileClick(event, \"\");\r\n setOpen(false);\r\n }}\r\n >\r\n Add Drawing\r\n \r\n */}\r\n }\r\n label=\"Dense padding\"\r\n />\r\n \r\n
Bulk Upload or Replace Files
\r\n
\r\n
\r\n \r\n \r\n {/* */}\r\n \r\n\r\n e.stopPropagation()}\r\n id={id}\r\n open={open}\r\n // selectedRow={anchorEl}\r\n anchorEl={anchorEl}\r\n transition\r\n placement=\"bottom\"\r\n disablePortal={false}\r\n >\r\n {({ TransitionProps }) => (\r\n \r\n \r\n handleFileClick(event, \"\")}\r\n style={{ color: \"white\", position: \"absolute\", right: \"5px\" }}\r\n >\r\n \r\n \r\n {textLabel !== \"\" && key} \r\n \r\n {key === \"File\" && (\r\n <>\r\n \r\n window.open(\r\n `${API_BASE() + \"document/\"}/Drawing/${\r\n updatedState[index].File.split(\".\")[0]\r\n }%7C`,\r\n \"_blank\"\r\n )\r\n }\r\n >\r\n View Current File\r\n \r\n \r\n
Upload New File
\r\n
\r\n\r\n {/*
*/}\r\n\r\n {/*
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n {\"Click or Drag & Drop image file to upload\"}\r\n
\r\n
\r\n */}\r\n
\r\n >\r\n )}\r\n {(key === \"Name\" || key === \"Notes\") && (\r\n <>\r\n setUpdateRow(event.target.value)}\r\n />\r\n {\r\n let newState = updatedState;\r\n newState[index][key] = updateRow;\r\n setUpdatedState(newState);\r\n saveValue(\"MASTER\", \"drawings\", newState);\r\n handleFileClick(e, \"\");\r\n }}\r\n style={{ backgroundColor: \"lightblue\" }}\r\n >\r\n UPDATE\r\n \r\n >\r\n )}\r\n \r\n\r\n {/* {\r\n \r\n // setSelectedRow(updateRow);\r\n // setUpdateRow(\"\");\r\n // \r\n }}\r\n >\r\n UPDATE\r\n */}\r\n \r\n \r\n )}\r\n \r\n \r\n {\r\n e.stopPropagation();\r\n }}\r\n open={conditionOpen}\r\n onClose={handleConditionClose}\r\n >\r\n Conditions for {updatedState[index]?.File} \r\n \r\n <>\r\n {updatedState[index]?.Conditions &&\r\n Object.keys(updatedState[index]?.Conditions)?.map((ind) => {\r\n return (\r\n <>\r\n \r\n
(\r\n \r\n )}\r\n renderInput={(params) => (\r\n {\r\n let inde = index + \"|\" + ind;\r\n setKeyCondition({\r\n ...keyCondition,\r\n [inde]: [e.target.value],\r\n });\r\n }}\r\n />\r\n )}\r\n onChange={(e, v) => {\r\n let inde = index + \"|\" + ind;\r\n setKeyCondition({\r\n ...keyCondition,\r\n [inde]: [v],\r\n });\r\n }}\r\n options={getRecommendKeys()}\r\n />\r\n \r\n
(\r\n \r\n )}\r\n onChange={(e, v) => {\r\n let inde = index + \"|\" + ind;\r\n setvalueCondition({\r\n ...valueCondition,\r\n [inde]: [v],\r\n });\r\n }}\r\n renderInput={(params) => (\r\n {\r\n let inde = index + \"|\" + ind;\r\n setvalueCondition({\r\n ...valueCondition,\r\n [inde]: [e.target.value],\r\n });\r\n }}\r\n style={{\r\n width:\r\n Math.min(\r\n Math.max(\r\n updatedState[index].Conditions[ind]?.length,\r\n 2\r\n ),\r\n 50\r\n ) +\r\n 25 +\r\n \"ch\",\r\n }}\r\n {...params}\r\n label={updatedState[index].Conditions[ind]}\r\n />\r\n )}\r\n options={getRecommendedValues()}\r\n />{\" \"}\r\n {\r\n let newState = updatedState;\r\n\r\n newState = newState.map((values) => {\r\n let newVals = values;\r\n if (values.File === updatedState[index].File) {\r\n delete newVals.Conditions[ind];\r\n }\r\n return newVals;\r\n });\r\n setUpdatedState(newState);\r\n // handleFileClick(anchorEl, selectedRow);\r\n // setOpen(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n >\r\n );\r\n })}\r\n {\r\n // handleFileClick(anchorEl, selectedRow);\r\n\r\n addCondition();\r\n let newState = updatedState;\r\n let already = false;\r\n if (\r\n valueCondition !== (null || undefined || \"\") &&\r\n keyCondition === (null || undefined || \"\")\r\n ) {\r\n for (var i = 0; i < Object.keys(valueCondition).length; i++) {\r\n newState[Object.keys(valueCondition)[i].split(\"|\")[0]].Conditions[\r\n Object.keys(valueCondition)[i].split(\"|\")[1]\r\n ] = valueCondition[Object.keys(valueCondition)[i]][0];\r\n }\r\n } else if (keyCondition !== (null || undefined || \"\")) {\r\n for (var i = 0; i < Object.keys(keyCondition).length; i++) {\r\n if (valueCondition !== (null || undefined || \"\")) {\r\n for (var j = 0; j < Object.keys(valueCondition).length; j++) {\r\n if (\r\n Object.keys(valueCondition)[j].split(\"|\")[1] ===\r\n Object.keys(keyCondition)[i].split(\"|\")[1]\r\n ) {\r\n newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n keyCondition[Object.keys(keyCondition)[i]]\r\n ] = valueCondition[Object.keys(valueCondition)[j]][0];\r\n\r\n delete newState[Object.keys(keyCondition)[i].split(\"|\")[0]]\r\n .Conditions[Object.keys(keyCondition)[i].split(\"|\")[1]];\r\n\r\n already = true;\r\n }\r\n }\r\n }\r\n\r\n if (!already) {\r\n newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n keyCondition[Object.keys(keyCondition)[i]]\r\n ] =\r\n newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n Object.keys(keyCondition)[i].split(\"|\")[1]\r\n ];\r\n\r\n delete newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n Object.keys(keyCondition)[i].split(\"|\")[1]\r\n ];\r\n }\r\n }\r\n }\r\n\r\n already = false;\r\n setvalueCondition(\"\");\r\n setKeyCondition(\"\");\r\n setUpdatedState(newState);\r\n // handleFileClick(anchorEl, selectedRow);\r\n // setOpen(true);\r\n saveValue(\"MASTER\", \"drawings\", newState);\r\n // setOpen(true);\r\n }}\r\n >\r\n Add new condition\r\n \r\n {\r\n let newState = updatedState;\r\n let already = false;\r\n if (\r\n valueCondition !== (null || undefined || \"\") &&\r\n keyCondition === (null || undefined || \"\")\r\n ) {\r\n for (var i = 0; i < Object.keys(valueCondition).length; i++) {\r\n newState[Object.keys(valueCondition)[i].split(\"|\")[0]].Conditions[\r\n Object.keys(valueCondition)[i].split(\"|\")[1]\r\n ] = valueCondition[Object.keys(valueCondition)[i]][0];\r\n }\r\n } else if (keyCondition !== (null || undefined || \"\")) {\r\n for (var i = 0; i < Object.keys(keyCondition).length; i++) {\r\n if (valueCondition !== (null || undefined || \"\")) {\r\n for (var j = 0; j < Object.keys(valueCondition).length; j++) {\r\n if (\r\n Object.keys(valueCondition)[j].split(\"|\")[1] ===\r\n Object.keys(keyCondition)[i].split(\"|\")[1]\r\n ) {\r\n newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n keyCondition[Object.keys(keyCondition)[i]]\r\n ] = valueCondition[Object.keys(valueCondition)[j]][0];\r\n\r\n delete newState[Object.keys(keyCondition)[i].split(\"|\")[0]]\r\n .Conditions[Object.keys(keyCondition)[i].split(\"|\")[1]];\r\n\r\n already = true;\r\n }\r\n }\r\n }\r\n\r\n if (!already) {\r\n newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n keyCondition[Object.keys(keyCondition)[i]]\r\n ] =\r\n newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n Object.keys(keyCondition)[i].split(\"|\")[1]\r\n ];\r\n\r\n delete newState[Object.keys(keyCondition)[i].split(\"|\")[0]].Conditions[\r\n Object.keys(keyCondition)[i].split(\"|\")[1]\r\n ];\r\n }\r\n }\r\n }\r\n\r\n already = false;\r\n setvalueCondition(\"\");\r\n setKeyCondition(\"\");\r\n setUpdatedState(newState);\r\n // handleFileClick(anchorEl, selectedRow);\r\n // setOpen(true);\r\n saveValue(\"MASTER\", \"drawings\", newState);\r\n }}\r\n >\r\n SAVE\r\n \r\n >\r\n \r\n \r\n Close \r\n \r\n \r\n >\r\n );\r\n}\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from \"@material-ui/core\";\r\n\r\nexport const DMapDialog = ({ DMapDialogOpen, handleClose, newMapping, props, code, name, setCode, setName }) => {\r\n const handleAddCode = (newEntry, foundObject) => {\r\n let newState = props.value;\r\n const selectedType = newMapping.Selected[\"type\"];\r\n\r\n if (newState[selectedType]) {\r\n const existingIndex = newState[selectedType].findIndex(\r\n (obj) => obj[\"CUST CODE\"] === (newEntry ? newEntry[\"CUST CODE\"] : foundObject[\"CUST CODE\"])\r\n );\r\n\r\n if (existingIndex !== -1) newState[selectedType][existingIndex] = newEntry ? newEntry : foundObject;\r\n else newState[selectedType].push(newEntry ? newEntry : foundObject);\r\n }\r\n\r\n if (!newEntry) {\r\n newState[\"DMAPSTORE\"] = newState[\"DMAPSTORE\"].filter(\r\n (obj) => obj[\"CUST CODE\"] !== foundObject[\"CUST CODE\"]\r\n );\r\n }\r\n\r\n newState = SortAccounts(newState);\r\n props.saveValue(props.editCell.POA, props.editCell.key_path, newState);\r\n handleClose();\r\n };\r\n\r\n const handleAddLyvesCode = () => {\r\n const newEntry = {\r\n \"CUST CODE\": code,\r\n \"CUSTOMER NAME 1\": name,\r\n };\r\n\r\n setName(\"\");\r\n setCode(\"\");\r\n\r\n handleAddCode(newEntry, null);\r\n };\r\n\r\n const handleAddMappedCode = () => {\r\n handleAddCode(null, newMapping.Found);\r\n };\r\n\r\n return (\r\n \r\n {\"D365 Mapping Found!\"} \r\n \r\n \r\n A Mapping has been found! Would you like to Add the Mapped D365 Codes or continue adding with the\r\n LYVES code. Note Adding the D365 Code will use the NEW DCodes instead of the Lyves Code.\r\n \r\n \r\n \r\n DMapLyves Code: {newMapping?.Found?.[\"CUST CODE\"]} \r\n \r\n \r\n DMapD365 Code: {newMapping?.Found?.[\"D365_CODE\"]} \r\n \r\n \r\n DMap Name: {newMapping?.Found?.[\"CUSTOMER NAME 1\"]} \r\n \r\n \r\n \r\n \r\n Just Add Lyves Code \r\n \r\n Add Mapped Code\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const findDMapping = ({ code, name, type, props, setNewMapping, setName, setCode }) => {\r\n const dmapStore = props.value[\"DMAPSTORE\"];\r\n let dMap = false;\r\n\r\n if (dmapStore) {\r\n const foundObject = dmapStore.find((mapping) => mapping[\"CUST CODE\"] === code);\r\n\r\n if (foundObject) {\r\n // Mapping Found\r\n setNewMapping({ Found: foundObject, Selected: { name, type } });\r\n dMap = true;\r\n }\r\n }\r\n\r\n if (!dMap) {\r\n handleStandard({ props, code, name, type, setName, setCode });\r\n }\r\n};\r\n\r\n// Handle Saving Standard Accounts\r\nexport const handleStandard = ({ props, code, name, type, setName, setCode }) => {\r\n let newState = props.value;\r\n\r\n const newEntry = {\r\n \"CUST CODE\": code,\r\n \"CUSTOMER NAME 1\": name,\r\n };\r\n\r\n setName(\"\");\r\n setCode(\"\");\r\n\r\n // Handle case where this type doesn't already exist\r\n if (!newState[type]) newState[type] = [];\r\n\r\n const existingIndex = newState[type].findIndex(\r\n (obj) => obj[\"CUST CODE\"] === (newEntry[\"CUST CODE\"])\r\n );\r\n\r\n if (existingIndex !== -1) newState[type][existingIndex] = newEntry;\r\n else newState[type].push(newEntry);\r\n\r\n newState = SortAccounts(newState);\r\n props.saveValue(props.editCell.POA, props.editCell.key_path, newState);\r\n\r\n // For unit testing purposes\r\n newState = props.value;\r\n return newState;\r\n};\r\n\r\nconst SortAccounts = (pricing_accounts) => {\r\n // loop over each pricing account\r\n for (const account in pricing_accounts) {\r\n // sort by customer name or cust code if name is not available\r\n pricing_accounts[account].sort((a, b) => {\r\n const nameA = (a[\"CUSTOMER NAME 1\"] || a[\"CUST CODE\"]).toLowerCase();\r\n const nameB = (b[\"CUSTOMER NAME 1\"] || b[\"CUST CODE\"]).toLowerCase();\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n return pricing_accounts;\r\n};\r\n\r\nhandleStandard.propTypes = {\r\n props: PropTypes.object.isRequired,\r\n code: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n type: PropTypes.oneOf([\"CC\", \"STANDARD\", \"PAT\"]).isRequired,\r\n setName: PropTypes.func.isRequired,\r\n setCode: PropTypes.func.isRequired,\r\n};\r\n\r\nDMapDialog.propTypes = {\r\n DMapDialogOpen: PropTypes.bool.isRequired,\r\n handleClose: PropTypes.func.isRequired,\r\n newMapping: PropTypes.object.isRequired,\r\n props: PropTypes.object.isRequired,\r\n code: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n setCode: PropTypes.func.isRequired,\r\n setName: PropTypes.func.isRequired,\r\n};\r\n","import React from \"react\";\r\n\r\nimport {\r\n Box,\r\n Fade,\r\n IconButton,\r\n makeStyles,\r\n Paper,\r\n Popper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableRow,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport { Button } from \"@mui/material\";\r\nimport { Close, Delete } from \"@material-ui/icons\";\r\n\r\nimport { DMapDialog, findDMapping } from \"./Helpers/Accounts\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"90%\",\r\n minWidth: \"600px\",\r\n },\r\n container: {\r\n // height: \"90%\",\r\n // maxHeight: \"800px\",\r\n },\r\n row: {\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n wordBreak: \"break-all\",\r\n border: \"none\",\r\n padding: \"2px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n categoryHeadingCell: {\r\n textAlign: \"center\",\r\n backgroundColor: Palette.FieldersOrange + \" !important\",\r\n padding: \"2px !important\",\r\n borderTopLeftRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n borderLeft: \"1px solid white !important\",\r\n borderRight: \"1px solid white !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n categoryHeadingCellBlank: {\r\n textAlign: \"center\",\r\n backgroundColor: \"#ffffff !important\",\r\n padding: \"2px !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n // padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: \"#a8a8a8\",\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n headingCellSubtype: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n // padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: \"#878787\",\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n\r\n headingRow: {\r\n backgroundColor: Palette.FieldersBlue,\r\n },\r\n skylightheadingCell: {\r\n background: \"#5ebba7\",\r\n },\r\n editor: {\r\n border: \"1px solid grey\",\r\n width: \"40px\",\r\n },\r\n noHover: {\r\n \"&:hover\": {\r\n backgroundColor: \"transparent !important\",\r\n },\r\n },\r\n}));\r\n\r\nconst ManagePricing = (props) => {\r\n const [open, setOpen] = React.useState(false);\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const [selected, setSelected] = React.useState(null);\r\n const [updateText, setUpdateText] = React.useState(\"\");\r\n const [selectedInd, setSelectedInd] = React.useState(null);\r\n const [selectedRow, setSelectedRow] = React.useState(null);\r\n\r\n const [code, setCode] = React.useState(null);\r\n const [name, setName] = React.useState(null);\r\n const [newMapping, setNewMapping] = React.useState(null);\r\n const [DMapDialogOpen, setDMapDialogOpen] = React.useState(false);\r\n\r\n const descriptionElementRef = React.useRef(null);\r\n\r\n React.useEffect(() => {\r\n if (open) {\r\n const { current: descriptionElement } = descriptionElementRef;\r\n if (descriptionElement !== null) {\r\n descriptionElement.focus();\r\n }\r\n }\r\n }, [open]);\r\n\r\n React.useEffect(() => {\r\n if (newMapping !== null) setDMapDialogOpen(true);\r\n }, [newMapping]);\r\n\r\n const handleClose = () => {\r\n setDMapDialogOpen(false);\r\n setNewMapping(null);\r\n };\r\n\r\n const handleFileClick = (event, updatedState, ind, val) => {\r\n setAnchorEl(event.currentTarget);\r\n setSelectedRow(updatedState);\r\n setSelected(val);\r\n setSelectedInd(ind);\r\n if (ind > 0) {\r\n setUpdateText(Object.values(updatedState)[1]);\r\n } else {\r\n setUpdateText(Object.values(updatedState)[0]);\r\n }\r\n setOpen((previousOpen) => !previousOpen);\r\n };\r\n\r\n const handleSave = () => {\r\n if (props.editCell) {\r\n let newState = props.value;\r\n newState[selected].find((o, i) => {\r\n if (o[\"CUST CODE\"] === selectedRow[\"CUST CODE\"]) {\r\n if (selectedInd === 0) {\r\n newState[selected][i][\"CUST CODE\"] = updateText;\r\n } else {\r\n newState[selected][i][\"CUSTOMER NAME 1\"] = updateText;\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n setOpen(false);\r\n props.saveValue(props.editCell.POA, props.editCell.key_path, newState);\r\n // newState[\"selected\"]\r\n }\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n e.stopPropagation()}>\r\n \r\n \r\n \r\n \r\n CUSTOMER CODE \r\n NAME \r\n \r\n {Object.keys(props.value).map((val) => {\r\n if (!Array.isArray(props.value[val])) {\r\n return props.value[val];\r\n } else {\r\n return (\r\n <>\r\n \r\n {val} \r\n \r\n {props.value[val].map((element, index) => (\r\n \r\n handleFileClick(event, element, 0, val)}\r\n >\r\n {element[\"CUST CODE\"] ?? \"\"}\r\n \r\n handleFileClick(event, element, 1, val)}\r\n >\r\n {element[\"CUSTOMER NAME 1\"] ?? \"\"}\r\n \r\n {\r\n let newState = props.value;\r\n let newVal = newState[val].filter(\r\n (e) => e[\"CUST CODE\"] !== element[\"CUST CODE\"]\r\n );\r\n\r\n newState[val] = newVal;\r\n props.saveValue(\r\n props.editCell.POA,\r\n props.editCell.key_path,\r\n newState\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n ))}\r\n >\r\n );\r\n }\r\n })}\r\n \r\n {\r\n setCode(e.target.value);\r\n }}\r\n label=\"CODE\"\r\n />\r\n {\r\n setName(e.target.value);\r\n }}\r\n label=\"NAME\"\r\n />\r\n \r\n \r\n {\r\n findDMapping({\r\n code,\r\n name,\r\n props,\r\n setNewMapping,\r\n type: \"STANDARD\",\r\n setName,\r\n setCode,\r\n });\r\n }}\r\n >\r\n ADD STANDARD\r\n \r\n \r\n \r\n {\r\n findDMapping({\r\n code,\r\n name,\r\n props,\r\n setNewMapping,\r\n type: \"CC\",\r\n setName,\r\n setCode,\r\n });\r\n }}\r\n >\r\n ADD CC\r\n \r\n \r\n \r\n {\r\n findDMapping({\r\n code,\r\n name,\r\n props,\r\n setNewMapping,\r\n type: \"PAT\",\r\n setName,\r\n setCode,\r\n });\r\n }}\r\n >\r\n ADD PAT\r\n \r\n \r\n \r\n
\r\n \r\n \r\n e.stopPropagation()}\r\n open={open}\r\n anchorEl={anchorEl}\r\n transition\r\n placement=\"bottom\"\r\n disablePortal={false}\r\n >\r\n {({ TransitionProps }) => (\r\n \r\n \r\n handleFileClick(event, \"\")}\r\n style={{ color: \"black\", position: \"absolute\", right: \"20px\" }}\r\n >\r\n \r\n \r\n \r\n {selectedRow && (\r\n <>\r\n {\r\n setUpdateText(e.target.value);\r\n }}\r\n />\r\n \r\n setOpen(false)}>Close \r\n handleSave()}>Save \r\n \r\n >\r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n >\r\n );\r\n};\r\n\r\nexport default ManagePricing;\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport { fetchTimeout } from \"../components/Common\";\r\nimport { Palette, API_BASE } from \"../AppConfig\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport RemoveIcon from \"@material-ui/icons/Remove\";\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport { Popper, LinearProgress } from \"@material-ui/core\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport \"react-json-view-lite/dist/index.css\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport ManageProductListAncillary from \"./ManageProductListAncillary\";\r\nimport ManageProductListFilter from \"./ManageProductListFilter\";\r\nimport Autocomplete from \"react-autocomplete\";\r\nimport BSL_ControlContainer from \"../components/BSL_ControlContainer\";\r\nimport Draggable from \"react-draggable\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport ManageOfferingRoofSheetGroups from \"./ManageOfferingRoofSheetGroups\";\r\nimport ManageDrawings from \"./ManageDrawings\";\r\nimport ManagePricing from \"./ManagePricing\";\r\nimport BSL_Select from \"../components/BSL_Select\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: \"98%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"95vh\",\r\n overflow: \"hidden\",\r\n fontSize: \"small\",\r\n },\r\n container: {\r\n height: \"90vh\",\r\n maxHeight: \"calc(100vh - 200px)\",\r\n },\r\n row: {\r\n height: \"1px\",\r\n background: \"#f8f4df\",\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowAlt: {\r\n background: \"#ffffff\",\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n margin: \"2px 0px 2px 0px\",\r\n padding: \"0px 0px 0px 24px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n maxWidth: \"300px\",\r\n minWidth: \"150px\",\r\n },\r\n categoryHeadingCell: {\r\n textAlign: \"center\",\r\n backgroundColor: Palette.FieldersOrange + \" !important\",\r\n padding: \"2px !important\",\r\n borderTopLeftRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n borderLeft: \"1px solid white !important\",\r\n borderRight: \"1px solid white !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n categoryHeadingCellBlank: {\r\n textAlign: \"center\",\r\n backgroundColor: \"#ffffff !important\",\r\n padding: \"2px !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n headingCell: {\r\n fontSize: \"13px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: Palette.FieldersBlue,\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n },\r\n headingRow: {\r\n backgroundColor: Palette.FieldersBlue,\r\n },\r\n categoryHeader: {\r\n padding: \"2px 20px 2px 20px\",\r\n fontSize: \"smaller\",\r\n background: \"#ffa620\",\r\n marginLeft: \"0px\",\r\n height: \"100%\",\r\n borderTop: \"solid 2px #acacac\",\r\n whiteSpace: \"nowrap\",\r\n },\r\n categorySubHeader: {\r\n padding: \"2px 20px 2px 40px\",\r\n fontSize: \"smaller\",\r\n background: \"#ffa620\",\r\n marginLeft: \"0px\",\r\n height: \"100%\",\r\n borderTop: \"solid 2px #acacac\",\r\n whiteSpace: \"nowrap\",\r\n },\r\n stickySectionHeader: {\r\n position: \"sticky\",\r\n top: \"16px\",\r\n boxShadow: \"1px 1px 9px -2px rgb(0 0 0 / 47%)\",\r\n },\r\n rowHeader: {\r\n padding: \"2px 20px 2px 40px\",\r\n fontSize: \"smaller\",\r\n background: \"#fcb44957\",\r\n marginLeft: \"0px\",\r\n height: \"100%\",\r\n borderTop: \"solid 2px #acacac\",\r\n whiteSpace: \"nowrap\",\r\n verticalAlign: \"top\",\r\n },\r\n rowIndent: {\r\n width: \"20px\",\r\n minWidth: \"20px\",\r\n maxWidth: \"20px\",\r\n padding: \"0px\",\r\n },\r\n cellInherit: {\r\n background: \"#e3e3e396\",\r\n color: \"#b0b0b0\",\r\n },\r\n noHover: {\r\n \"&:hover\": {\r\n backgroundColor: \"transparent !important\",\r\n },\r\n },\r\n}));\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `full-width-tab-${index}`,\r\n \"aria-controls\": `full-width-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n \r\n {value === index && (\r\n \r\n {children} \r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nconst LYSAGHT_POAs = [\"MASTER\", \"LSB\", \"EMU\", \"NUN\", \"LAU\", \"GIL\", \"KEW\"];\r\nconst CENTENARY_POAs = [\"MASTER\", \"MEN\", \"CAM\", \"MIN\", \"WAN\"];\r\n\r\nexport default function ManageOffering(props) {\r\n const classes = useStyles();\r\n const [pricefile, setPricefile] = React.useState(null);\r\n const [pricefileDescSummary, setPricefileDescSummary] = React.useState(null);\r\n const [cds_docs, setCDSOffering] = React.useState(null);\r\n const [lld_docs, setLLDOffering] = React.useState(null);\r\n const [materialsKeys, setMaterialsKeys] = React.useState(null);\r\n const [intialise, setIntialise] = React.useState(false);\r\n const [jsonValid, setJSONValid] = React.useState(false);\r\n const [visibleSections, setVisibleSections] = React.useState({});\r\n const [saving, setSaving] = React.useState({}); // not fast enough! hackign with a global var\r\n\r\n if (window.saving === undefined) window.saving = {};\r\n\r\n const [editCell, setEditCell] = React.useState(null);\r\n const [value, setValue] = React.useState(\"\");\r\n const [value2, setValue2] = React.useState(\"\");\r\n const [tab, setTab] = React.useState(window?.F ? 0 : 1);\r\n const [lysaght, setLysaght] = React.useState(false);\r\n const config = useSelector((state) => state.config);\r\n\r\n const toggleVisibleSections = (key) => {\r\n let new_showVariations = { ...visibleSections };\r\n if (new_showVariations[key] !== undefined) delete new_showVariations[key];\r\n else new_showVariations[key] = true;\r\n setVisibleSections(new_showVariations);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (tab === 1) {\r\n setLysaght(true);\r\n } else {\r\n setLysaght(false);\r\n }\r\n }, [tab]);\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"admin/GetOfferingFile?name=ALL_OFFERINGS\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n setPricefileDescSummary(json[\"PRICE_FILE_DESC_SUMMARY\"]);\r\n\r\n if (json?.[\"MATERIALS\"]) setMaterialsKeys(json[\"MATERIALS\"]);\r\n\r\n let cds_docs = {};\r\n for (let doc of json[\"CEN_OFFERINGS\"]) cds_docs[doc?.id] = doc;\r\n setCDSOffering(cds_docs);\r\n\r\n let lld_docs = {};\r\n for (let doc of json[\"LLD_OFFERINGS\"]) lld_docs[doc?.id] = doc;\r\n\r\n setLLDOffering(lld_docs);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n setPricefile(null);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n function padTo2Digits(num) {\r\n return num.toString().padStart(2, \"0\");\r\n }\r\n\r\n function formatDate(date) {\r\n return [padTo2Digits(date.getDate()), padTo2Digits(date.getMonth() + 1), date.getFullYear()].join(\"-\");\r\n }\r\n\r\n const checkValidJSON = (str) => {\r\n if (typeof str === \"object\") {\r\n setJSONValid(true);\r\n return true;\r\n }\r\n if (!str) {\r\n setJSONValid(false);\r\n return false;\r\n }\r\n try {\r\n JSON.parse(str);\r\n setJSONValid(true);\r\n } catch (e) {\r\n setJSONValid(false);\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n const DownloadOfferingFile = () => {\r\n var element = document.createElement(\"a\");\r\n element.setAttribute(\r\n \"href\",\r\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(JSON.stringify(config, null, 4))\r\n );\r\n element.setAttribute(\r\n \"download\",\r\n config.id + \".\" + config.DocumentType + \".\" + formatDate(new Date()) + \".json\"\r\n );\r\n\r\n element.style.display = \"none\";\r\n document.body.appendChild(element);\r\n\r\n element.click();\r\n\r\n document.body.removeChild(element);\r\n };\r\n\r\n const rangeFormat = (val) => {\r\n if (val?.min !== undefined) {\r\n let min = val?.min;\r\n if (min?.replace) min = min.replace(\"Area.ROOF_SHEETING.RoofSheetData.min_pitch\", \"RoofSheet>min_pitch\");\r\n let max = val?.max;\r\n if (max?.replace)\r\n max = max.replace(\"Area.ROOF_SHEETING.RoofSheetData.max_overhang\", \"RoofSheet>max_overhang\");\r\n let def = val?.default;\r\n if (def?.replace) def = def.replace(\"Area.ROOF_SHEETING.RoofSheetData.min_pitch\", \"RoofSheet>min_pitch\");\r\n\r\n return (\r\n \r\n min: {min}\r\n \r\n max: {max}\r\n \r\n default: {def}\r\n
\r\n );\r\n }\r\n return \"→ inherit\";\r\n };\r\n\r\n const collectionFormat = (val, autocomplete_list = []) => {\r\n if (val === undefined || val === null) {\r\n return \"→ inherit\";\r\n } else if (val && typeof val === \"object\") {\r\n let items = [];\r\n\r\n Object.keys(val).map((item) => {\r\n //header\r\n items.push({item} );\r\n items.push(arrayFormat(val[item], autocomplete_list));\r\n });\r\n return {items}
;\r\n }\r\n return val;\r\n };\r\n\r\n const arrayFormat = (val, autocomplete_list = []) => {\r\n if (Array.isArray(val)) {\r\n let items = [];\r\n val.map((item) => {\r\n if (typeof item === \"string\") {\r\n let warning = false;\r\n if (autocomplete_list.length > 0 && !autocomplete_list.includes(item)) warning = true;\r\n\r\n if (item.includes(\"\")) warning = false;\r\n if (item.includes(\"\")) warning = false;\r\n\r\n if (items.length < 25)\r\n items.push(\r\n \r\n ◝ {item}{\" \"}\r\n {warning && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n if (typeof item === \"object\") {\r\n let string = JSON.stringify(item);\r\n if (string && string.length > 75) string = string.substring(0, 75) + \"...\";\r\n if (items.length < 25) items.push(◝ {string} );\r\n }\r\n });\r\n if (items.length >= 24) items.push(◝ ...{val.length - 25} more );\r\n return {items}
;\r\n }\r\n return \"→ inherit\";\r\n };\r\n\r\n const objectFormat = (val) => {\r\n if (val === undefined || val === null) {\r\n return \"→ inherit\";\r\n } else if (val && typeof val === \"object\") {\r\n let items = [];\r\n\r\n Object.keys(val).map((item) => {\r\n if (typeof val[item] === \"string\")\r\n items.push(\r\n \r\n {item}: {val[item]}\r\n
\r\n );\r\n if (typeof val[item] === \"object\") {\r\n let string = JSON.stringify(val[item]);\r\n if (string.length > 100) string = string.substring(0, 100) + \"...\";\r\n items.push(\r\n \r\n {item}: {string}\r\n
\r\n );\r\n }\r\n });\r\n return {items}
;\r\n }\r\n return val;\r\n };\r\n\r\n const objectFormatSelection = (val, keysToShow = null) => {\r\n if (val === undefined || val === null) {\r\n return \"→ inherit\";\r\n } else if (val && typeof val === \"object\") {\r\n let items = [];\r\n keysToShow =\r\n keysToShow && keysToShow.length > 0\r\n ? Object.keys(val).filter((key) => keysToShow.includes(key))\r\n : Object.keys(val);\r\n\r\n keysToShow.forEach((item, index) => {\r\n if (typeof val[item] === \"string\" || typeof val[item] === \"number\") {\r\n items.push(\r\n \r\n {item}: {val[item]}\r\n
\r\n );\r\n } else if (typeof val[item] === \"object\") {\r\n let string = JSON.stringify(val[item]);\r\n if (string.length > 100) string = string.substring(0, 100) + \"...\";\r\n items.push(\r\n \r\n {item}: {string}\r\n
\r\n );\r\n }\r\n });\r\n return {items}
;\r\n }\r\n return val;\r\n };\r\n\r\n const objectFormatCount = (val) => {\r\n if (val === undefined || val === null) {\r\n return \"→ inherit\";\r\n } else {\r\n const count = val.length;\r\n return (\r\n \r\n {count} x ACTIVE FILTERS\r\n
\r\n );\r\n }\r\n };\r\n\r\n const stringFormat = (val) => {\r\n if (val !== undefined) {\r\n return val;\r\n }\r\n return \"→ inherit\";\r\n };\r\n\r\n const roofSheetFormat = (value) => {\r\n if (typeof value === \"object\") {\r\n return (\r\n setEditCell(null)}\r\n />\r\n );\r\n }\r\n return \"→ inherit\";\r\n };\r\n\r\n const drawingFormat = (value) => {\r\n if (typeof value === \"object\") {\r\n return ;\r\n }\r\n return \"→ inherit\";\r\n };\r\n\r\n const pricingFormat = (value) => {\r\n if (typeof value === \"object\") {\r\n return ;\r\n }\r\n return \"→ inherit\";\r\n };\r\n\r\n const bomFormat = (value) => {\r\n if (Array.isArray(value)) {\r\n var parts = \"\";\r\n for (var item of value) {\r\n var qty = item?.Qty;\r\n if (qty === \"\" || qty === undefined) qty = \"1\";\r\n else if (qty && qty?.includes && qty.includes(\"=\")) qty = \"X\";\r\n var code = item?.Code ?? \"\";\r\n var conditions = item?.Conditions ? \"*\" : \"\";\r\n var use = item?.Use ? \" (\" + item?.Use + \")\" : \"\";\r\n if (code != \"\") parts += qty + \" x \" + code + use + conditions + \"\\n\";\r\n }\r\n return (\r\n \r\n {parts}\r\n
\r\n );\r\n }\r\n return \"→ inherit\";\r\n };\r\n\r\n const boolFormat = (val) => {\r\n if (val === undefined) {\r\n return \"→ inherit\";\r\n }\r\n if (val && val === 1) return \"Yes\";\r\n if (val && val === \"yes\") return \"Yes\";\r\n if (val && val === true) return \"Yes\";\r\n return \"No\";\r\n };\r\n const selectFormat = (val, autocomplete_list) => {\r\n if (autocomplete_list.length > 0)\r\n for (var item of autocomplete_list) {\r\n if (item.Key === val && item?.Display) return item.Display;\r\n }\r\n return \"→ inherit\";\r\n };\r\n const autoFormat = (val, autocomplete_list) => {\r\n if (val === undefined || val === null) {\r\n return \"→ inherit\";\r\n } else if (Array.isArray(val)) {\r\n return arrayFormat(val, autocomplete_list);\r\n } else if (val && typeof val === \"object\") {\r\n let string = JSON.stringify(val, null, 4);\r\n if (string.length > 100) string = string.substring(0, 100) + \"...\";\r\n\r\n return string;\r\n }\r\n\r\n let warning = false;\r\n if (autocomplete_list && val && autocomplete_list.length > 0 && !autocomplete_list.includes(val))\r\n warning = true;\r\n\r\n if (val.includes(\"\")) warning = false;\r\n if (val.includes(\"\")) warning = false;\r\n\r\n if (warning) {\r\n return (\r\n \r\n {val}{\" \"}\r\n {warning && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n return val;\r\n };\r\n\r\n const handleEditCell =\r\n (title, POA, key_path, type, value, autocomplete_list = []) =>\r\n (e) => {\r\n if (editCell || editCell?.noEdit) {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditCell(null);\r\n } else {\r\n if (type === \"JSON\" || typeof type === \"function\") {\r\n checkValidJSON(value);\r\n }\r\n setValue(value);\r\n setValue2(\"\");\r\n setEditCell({\r\n anchorEl: e.currentTarget,\r\n POA: POA,\r\n key_path: key_path,\r\n title: title,\r\n type: type,\r\n value: value,\r\n autocomplete_list: autocomplete_list,\r\n });\r\n }\r\n e.stopPropagation();\r\n };\r\n\r\n const saveValue = (POA, key_path, value, template) => {\r\n let new_docs = lysaght ? { ...lld_docs } : { ...cds_docs };\r\n\r\n let object = new_docs;\r\n let object_parent = new_docs;\r\n\r\n var stack = (POA + \">\" + key_path).split(\">\");\r\n\r\n let second_last_param = \"\";\r\n while (stack.length > (key_path.endsWith(\">Key\") ? 2 : 1)) {\r\n second_last_param = stack.shift();\r\n if (object?.[second_last_param]) {\r\n object_parent = object;\r\n object = object[second_last_param];\r\n } else {\r\n object[second_last_param] = {};\r\n object_parent = object;\r\n object = object[second_last_param];\r\n }\r\n }\r\n let last_param = stack.shift();\r\n\r\n if (last_param === \"ADD\") {\r\n object[value] = template;\r\n } else if (value === \"DELETE\") {\r\n let old_obj = { ...object };\r\n object = {};\r\n for (var key in old_obj) {\r\n if (key === last_param) {\r\n } else object[key] = old_obj[key];\r\n }\r\n object_parent[second_last_param] = object;\r\n } else if (key_path.endsWith(\">Key\")) {\r\n let old_obj = { ...object };\r\n object = {};\r\n for (var key in old_obj) {\r\n if (key === last_param) {\r\n object[value] = old_obj[key];\r\n } else object[key] = old_obj[key];\r\n }\r\n object_parent[second_last_param] = object;\r\n } else {\r\n object[last_param] = value;\r\n object_parent[second_last_param] = object;\r\n if (POA !== \"MASTER\") {\r\n if (!value === undefined || value === \"\") delete object[last_param];\r\n else if (value === []) delete object[last_param];\r\n else if (value === {}) delete object[last_param];\r\n }\r\n }\r\n\r\n if (!new_docs?.[POA]?.[\"id\"]) new_docs[POA][\"id\"] = POA;\r\n if (!new_docs?.[POA]?.[\"DocumentType\"])\r\n new_docs[POA][\"DocumentType\"] = lysaght ? \"LLD_OFFERING\" : \"CDS_OFFERING\";\r\n\r\n let save_key = (lysaght ? \"lysaght\" : \"fielders\") + \">\" + POA + \">\" + key_path;\r\n\r\n window.saving[save_key] = \"SAVE\";\r\n setSaving({ ...window.saving });\r\n\r\n window.save_offering_id = save_key;\r\n\r\n if (window.save_offering_controller) window.save_offering_controller.abort();\r\n if (window.AbortController) {\r\n window.save_offering_controller = new AbortController();\r\n }\r\n\r\n let api_url = API_BASE() + \"admin/UpdateOffering\";\r\n //upload to db\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n signal: window?.save_offering_controller?.signal,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n doc: new_docs[POA],\r\n brand: lysaght ? \"lysaght\" : \"fielders\",\r\n POA: POA,\r\n key_path: key_path,\r\n value: value,\r\n }),\r\n })\r\n .then(async (response) => {\r\n if (window.save_offering_id !== save_key) return; // don't update the front end with server docs\r\n if (response.status >= 200 && response.status <= 300) {\r\n let server_updated_docs = await response.json();\r\n\r\n let docs = {};\r\n for (let doc of server_updated_docs) docs[doc?.id] = doc;\r\n\r\n lysaght ? setLLDOffering(docs) : setCDSOffering(docs);\r\n\r\n window.saving[save_key] = null;\r\n setSaving({ ...window.saving });\r\n } else {\r\n throw \"Error saving values\";\r\n }\r\n window.saving[save_key] = null;\r\n setSaving({ ...window.saving });\r\n })\r\n .catch((e) => {\r\n window.saving[save_key] = \"Error\";\r\n setSaving({ ...window.saving });\r\n });\r\n\r\n setValue(\"\");\r\n setEditCell(null);\r\n };\r\n\r\n var row_i = 0;\r\n\r\n const FLATROOF_COL = \"#dfdfdf\";\r\n const PITCHEDROOF_COL = \"#cfdfdf\";\r\n const PORTALROOF_COL = \"#bfbfdf\";\r\n const NATIONALCARPORT_COL = \"#efbfdf\";\r\n const DECK_COL = \"#f48893\";\r\n\r\n const createDesignRow = (\r\n title,\r\n design,\r\n param,\r\n param_parent,\r\n format = \"auto\",\r\n autocomplete_list = [],\r\n master_only = false,\r\n noEdit = false,\r\n param_grand_parent = null,\r\n param_child = null\r\n ) => {\r\n let backgroundColour = \"\";\r\n\r\n switch (design) {\r\n case \"Flat Roof\":\r\n backgroundColour = FLATROOF_COL;\r\n break;\r\n case \"Pitched Roof\":\r\n backgroundColour = PITCHEDROOF_COL;\r\n break;\r\n case \"Gable Hip Roof\":\r\n backgroundColour = PORTALROOF_COL;\r\n break;\r\n case \"National Carport\":\r\n backgroundColour = NATIONALCARPORT_COL;\r\n break;\r\n case \"Flat Deck\":\r\n backgroundColour = DECK_COL;\r\n break;\r\n default:\r\n backgroundColour = \"white\";\r\n }\r\n\r\n let POAS = lysaght ? LYSAGHT_POAs : CENTENARY_POAs;\r\n let docs = lysaght ? lld_docs : cds_docs;\r\n\r\n row_i++;\r\n\r\n return (\r\n \r\n \r\n {title} \r\n {POAS.map((POA) => {\r\n if (master_only && POA !== \"MASTER\") return null;\r\n let value = \"\";\r\n let edit_cell_path = \"\";\r\n if (design && param_parent && param_grand_parent && param_child) {\r\n value =\r\n docs?.[POA]?.design_options?.[design]?.[param_grand_parent]?.[param_parent]?.[param]?.[\r\n param_child\r\n ];\r\n edit_cell_path =\r\n \"design_options>\" +\r\n design +\r\n \">\" +\r\n param_grand_parent +\r\n \">\" +\r\n param_parent +\r\n \">\" +\r\n param +\r\n \">\" +\r\n param_child;\r\n } else if (design && param_parent && param_grand_parent) {\r\n value = docs?.[POA]?.design_options?.[design]?.[param_grand_parent]?.[param_parent]?.[param];\r\n edit_cell_path =\r\n \"design_options>\" + design + \">\" + param_grand_parent + \">\" + param_parent + \">\" + param;\r\n } else if (design && param_parent) {\r\n value = docs?.[POA]?.design_options?.[design]?.[param_parent]?.[param];\r\n edit_cell_path = \"design_options>\" + design + \">\" + param_parent + \">\" + param;\r\n } else if (design) {\r\n value = docs?.[POA]?.design_options?.[design]?.[param];\r\n edit_cell_path = \"design_options>\" + design + \">\" + param;\r\n } else if (param_parent) {\r\n value = docs?.[POA]?.[param_parent]?.[param];\r\n edit_cell_path = param_parent + \">\" + param;\r\n } else {\r\n value = docs?.[POA]?.[param];\r\n edit_cell_path = param;\r\n }\r\n let saving_key = (lysaght ? \"lysaght\" : \"fielders\") + \">\" + POA + \">\" + edit_cell_path;\r\n\r\n let display = \"\";\r\n if (typeof format === \"function\") {\r\n display = format(value, autocomplete_list);\r\n } else if (format === \"collection\") {\r\n display = collectionFormat(value, autocomplete_list);\r\n if (!value) value = {};\r\n } else if (format === \"select\") {\r\n display = selectFormat(value, autocomplete_list);\r\n } else if (format === \"bool\" || format === \"int_bool\") {\r\n display = boolFormat(value, autocomplete_list);\r\n } else if (format === \"range\") {\r\n display = rangeFormat(value, autocomplete_list);\r\n } else if (format === \"array\") {\r\n display = arrayFormat(value, autocomplete_list);\r\n if (!value) value = [];\r\n } else {\r\n display = autoFormat(value, autocomplete_list);\r\n }\r\n\r\n if (display === \"→ inherit\" && POA === \"MASTER\") display = \"\";\r\n\r\n let saving = false;\r\n let error = false;\r\n if (window.saving && window.saving?.[saving_key]) {\r\n if (window.saving?.[saving_key] === \"ERROR\") error = true;\r\n else saving = true;\r\n }\r\n\r\n return (\r\n \r\n !noEdit\r\n ? handleEditCell(title, POA, edit_cell_path, format, value, autocomplete_list)(e)\r\n : null\r\n }\r\n >\r\n {display}\r\n {saving && }\r\n {error && }\r\n \r\n );\r\n })}\r\n\r\n \r\n \r\n );\r\n };\r\n\r\n let editorType = \"text\";\r\n\r\n if (value === undefined || value === null) {\r\n editorType = \"text\";\r\n } else if (Array.isArray(value)) {\r\n editorType = \"array\";\r\n } else if (value && typeof value === \"object\") {\r\n editorType = \"JSON\";\r\n if (editCell?.key_path?.includes(\"_range\")) editorType = \"range\";\r\n }\r\n\r\n if (editCell?.type === \"collection\") {\r\n editorType = \"collection\";\r\n } else if (typeof editCell?.type === \"function\") {\r\n if (editCell?.key_path?.includes(\"beam_\")) editorType = \"collection\";\r\n }\r\n\r\n if (editCell?.type === \"array\") {\r\n editorType = \"array\";\r\n } else if (editCell?.type === \"select\") {\r\n editorType = \"select\";\r\n } else if (editCell?.type === \"JSON\" || editCell?.title.startsWith(\"STATIC DOCUMENTS\")) {\r\n editorType = \"JSON\";\r\n }\r\n\r\n if (editCell?.type === \"pricing_tier\") editorType = \"pricing_tier\";\r\n if (editCell?.title.startsWith(\"BOM \")) editorType = \"BOM\";\r\n if (editCell?.title === \"BOM FILTER\") editorType = \"bom_filter\";\r\n\r\n if (editCell?.key_path?.includes(\"roofsheet_default\")) editorType = \"roofsheet_default\";\r\n if (editCell?.key_path?.includes(\"roofsheet_types\")) editorType = \"roofsheet_types\";\r\n if (editCell?.key_path?.includes(\"SHAPE\")) editorType = \"shape\";\r\n if (editCell?.key_path?.includes(\"BEAMS_AND_POSTS\")) editorType = \"beams_and_posts\";\r\n\r\n let master = lysaght ? lld_docs?.[\"MASTER\"] : cds_docs?.[\"MASTER\"];\r\n let POAS = lysaght ? LYSAGHT_POAs : CENTENARY_POAs;\r\n let roofsheet_group_types = master?.roofsheet_types ? Object.keys(master?.roofsheet_types) : [];\r\n let gutter_types = materialsKeys?.[\"GUTTERS_NAMES\"] ? materialsKeys?.[\"GUTTERS_NAMES\"] : [];\r\n let downpipe_types = materialsKeys?.[\"DOWNPIPES_NAMES\"] ? materialsKeys?.[\"DOWNPIPES_NAMES\"] : [];\r\n let infill_types = materialsKeys?.[\"INFILLS\"] ? materialsKeys?.[\"INFILLS\"] : [];\r\n let beam_types = materialsKeys?.[\"BEAMS_NAMES\"] ? materialsKeys?.[\"BEAMS_NAMES\"] : [];\r\n let post_types = materialsKeys?.[\"POSTS_NAMES\"] ? materialsKeys?.[\"POSTS_NAMES\"] : [];\r\n let slat_types = materialsKeys?.[\"SLATS_NAMES\"] ? materialsKeys?.[\"SLATS_NAMES\"] : [];\r\n let colours = materialsKeys?.[\"colour_map\"] ? materialsKeys?.[\"colour_map\"] : [];\r\n let colour_arrays = materialsKeys?.[\"colour_arrays\"] ? materialsKeys?.[\"colour_arrays\"] : [];\r\n let colour_arrays_AND_colours = [...colour_arrays, ...colours];\r\n let product_codes = pricefileDescSummary ? Object.keys(pricefileDescSummary) : [];\r\n\r\n let attachment_types = master && master[\"attachment_types\"] ? Object.keys(master[\"attachment_types\"]) : [];\r\n\r\n console.log(\"attachment_types\", master);\r\n console.log(\"attachment_types\", attachment_types);\r\n\r\n const createArrayEditor = (in_array, parent) => {\r\n let items = [];\r\n if (Array.isArray(in_array)) {\r\n in_array.map((item_value, item_index) => {\r\n items.push(\r\n \r\n
{\r\n if (editCell?.autocomplete_list.length > 30) {\r\n if (item.toLowerCase().startsWith(value.toLowerCase().substring(0, 3))) return true;\r\n return false;\r\n }\r\n return true;\r\n }}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n textAlign: \"left\",\r\n maxHeight: \"250px\",\r\n overflowY: \"auto\",\r\n }}\r\n inputProps={{\r\n style: {\r\n zIndex: \"1\",\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {\r\n if (parent) {\r\n let array = Object.assign([], value[parent], {\r\n [item_index]: e.target.value,\r\n });\r\n let new_value = { ...value };\r\n new_value[parent] = array;\r\n setValue(new_value);\r\n } else {\r\n setValue(Object.assign([], value, { [item_index]: e.target.value }));\r\n }\r\n }}\r\n />\r\n );\r\n }}\r\n value={item_value}\r\n onChange={(e) => {\r\n if (parent) {\r\n let array = Object.assign([], value[parent], {\r\n [item_index]: e.target.value,\r\n });\r\n let new_value = { ...value };\r\n new_value[parent] = array;\r\n setValue(new_value);\r\n } else {\r\n setValue(Object.assign([], value, { [item_index]: e.target.value }));\r\n }\r\n }}\r\n onSelect={(val) => {\r\n if (parent) {\r\n let array = Object.assign([], value[parent], {\r\n [item_index]: val,\r\n });\r\n let new_value = { ...value };\r\n new_value[parent] = array;\r\n setValue(new_value);\r\n } else {\r\n setValue(Object.assign([], value, { [item_index]: val }));\r\n }\r\n }}\r\n />\r\n {\r\n if (parent) {\r\n let new_array = [...value[parent]];\r\n new_array.splice(item_index, 1);\r\n let new_value = { ...value };\r\n new_value[parent] = new_array;\r\n setValue(new_value);\r\n } else {\r\n let new_item = [...value];\r\n new_item.splice(item_index, 1);\r\n setValue(new_item);\r\n }\r\n }}\r\n style={{}}\r\n >\r\n \r\n \r\n \r\n );\r\n });\r\n }\r\n\r\n items.push(\r\n \r\n
{\r\n if (editCell?.autocomplete_list.length > 30) {\r\n if (item.toLowerCase().startsWith(value.toLowerCase().substring(0, 3))) return true;\r\n return false;\r\n }\r\n return true;\r\n }}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n textAlign: \"left\",\r\n maxHeight: \"250px\",\r\n overflowY: \"auto\",\r\n }}\r\n inputProps={{\r\n style: {\r\n zIndex: \"1\",\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {\r\n if (parent) {\r\n let new_array = [...value[parent]];\r\n new_array.push(e.target.value);\r\n let new_value = { ...value };\r\n new_value[parent] = new_array;\r\n setValue(new_value);\r\n } else {\r\n let new_item = value ? [...value] : [];\r\n new_item.push(e.target.value);\r\n setValue(new_item);\r\n }\r\n }}\r\n />\r\n );\r\n }}\r\n value={\"\"}\r\n onChange={(e) => {\r\n if (parent) {\r\n let new_array = [...value[parent]];\r\n new_array.push(e.target.value);\r\n let new_value = { ...value };\r\n new_value[parent] = new_array;\r\n setValue(new_value);\r\n } else {\r\n let new_item = value ? [...value] : [];\r\n new_item.push(e.target.value);\r\n setValue(new_item);\r\n }\r\n }}\r\n onSelect={(val) => {\r\n if (parent) {\r\n let new_array = [...value[parent]];\r\n new_array.push(val);\r\n let new_value = { ...value };\r\n new_value[parent] = new_array;\r\n setValue(new_value);\r\n } else {\r\n let new_item = value ? [...value] : [];\r\n new_item.push(val);\r\n setValue(new_item);\r\n }\r\n }}\r\n />\r\n \r\n );\r\n return {items}
;\r\n };\r\n\r\n const getDesignTemplates = (baseDesign) => {\r\n const templates = config?.design_options?.[baseDesign]?.design_templates || [];\r\n return Object.entries(templates);\r\n };\r\n\r\n const carportTemplates = getDesignTemplates(\"National Carport\");\r\n\r\n return (\r\n \r\n {!intialise &&
}\r\n\r\n {cds_docs && (\r\n <>\r\n
\r\n setTab(newValue)}\r\n indicatorColor=\"primary\"\r\n textColor=\"primary\"\r\n variant=\"fullWidth\"\r\n aria-label=\"full width tabs example\"\r\n >\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n OFFERING\r\n \r\n {POAS.map((POA) => (\r\n \r\n {POA}\r\n \r\n ))}\r\n\r\n \r\n {/* */}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n REGION SETTINGS\r\n \r\n \r\n {createDesignRow(\"STATE\", null, \"state\", \"region\")}\r\n {createDesignRow(\"POA\", null, \"id\", \"region\")}\r\n {createDesignRow(\"NAME\", null, \"name\", \"region\")}\r\n {createDesignRow(\"SUPPORT EMAIL\", null, \"support_email\", \"region\")}\r\n \r\n \r\n LICENSE AGREEMENT\r\n \r\n \r\n\r\n {createDesignRow(\r\n \"START AGREEMENT DATE\",\r\n null,\r\n \"start_agreement_date\",\r\n \"license_agreement\"\r\n )}\r\n {createDesignRow(\r\n \"RENEW AFTER DAYS\",\r\n null,\r\n \"renew_after_days\",\r\n \"license_agreement\"\r\n )}\r\n {lysaght && (\r\n <>\r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pricing Tier\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pricing Tier\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n PRICING ACCOUNTS\r\n \r\n \r\n {visibleSections[\"Pricing Tier\"] && (\r\n <>\r\n {createDesignRow(\r\n \"PRICING TIER ACCOUNTS\",\r\n null,\r\n \"pricing_accounts\",\r\n \"region\",\r\n \"pricing_tier\"\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n\r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n FLAT ROOF DESIGN\r\n \r\n \r\n {visibleSections[\"Flat Roof\"] && (\r\n <>\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - Dimensions\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - Dimensions\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n FLAT DIMENSION LIMITS\r\n \r\n \r\n\r\n {visibleSections[\"Flat Roof - Dimensions\"] && (\r\n <>\r\n {createDesignRow(\r\n \"LENGTH RANGE\",\r\n \"Flat Roof\",\r\n \"length_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"DEPTH RANGE\",\r\n \"Flat Roof\",\r\n \"depth_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"HEIGHT RANGE\",\r\n \"Flat Roof\",\r\n \"height_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"PITCH RANGE\",\r\n \"Flat Roof\",\r\n \"pitch_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG LEFT RANGE\",\r\n \"Flat Roof\",\r\n \"overhang_left_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG RIGHT RANGE\",\r\n \"Flat Roof\",\r\n \"overhang_right_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG FRONT RANGE\",\r\n \"Flat Roof\",\r\n \"overhang_front_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG BACK RANGE\",\r\n \"Flat Roof\",\r\n \"overhang_back_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG CUTOUT RANGE\",\r\n \"Flat Roof\",\r\n \"overhang_cutout_range\",\r\n null,\r\n \"range\"\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - Materials\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - Materials\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n FLAT ROOFSHEET / GUTTER / DOWNPIPE / SLAT OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Roof - Materials\"] && (\r\n <>\r\n {createDesignRow(\r\n \"ROOFSHEET GROUPS\",\r\n \"Flat Roof\",\r\n \"roofsheet_groups\",\r\n null,\r\n \"array\",\r\n roofsheet_group_types\r\n )}\r\n {createDesignRow(\r\n \"ROOFSHEET DEFAULT\",\r\n \"Flat Roof\",\r\n \"roofsheet_default\",\r\n null,\r\n objectFormat\r\n )}\r\n {createDesignRow(\r\n \"GUTTER OPTIONS\",\r\n \"Flat Roof\",\r\n \"gutter_options\",\r\n null,\r\n \"array\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"GUTTER DEFAULT\",\r\n \"Flat Roof\",\r\n \"gutter_default\",\r\n null,\r\n \"auto\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNPIPE OPTIONS\",\r\n \"Flat Roof\",\r\n \"downpipe_options\",\r\n null,\r\n \"array\",\r\n downpipe_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNPIPE DEFAULT\",\r\n \"Flat Roof\",\r\n \"downpipe_default\",\r\n null,\r\n \"auto\",\r\n downpipe_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNLIGHT OPTIONS\",\r\n \"Flat Roof\",\r\n \"downlight_options\",\r\n null,\r\n \"array\",\r\n product_codes\r\n )}\r\n {createDesignRow(\r\n \"DOWNLIGHT DEFAULT\",\r\n \"Flat Roof\",\r\n \"downlight_default\",\r\n null,\r\n \"auto\",\r\n product_codes\r\n )}\r\n {createDesignRow(\r\n \"SLAT OPTIONS\",\r\n \"Flat Roof\",\r\n \"slat_options\",\r\n null,\r\n \"array\",\r\n slat_types\r\n )}\r\n {createDesignRow(\r\n \"ALLOW SLATS\",\r\n \"Flat Roof\",\r\n \"allow_slats\",\r\n null,\r\n \"select\",\r\n [\r\n { Key: 0, Display: \"No\" },\r\n { Key: 1, Display: \"Yes\" },\r\n ]\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - POSTS\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - POSTS\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n POSTS OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Roof - POSTS\"] && (\r\n <>\r\n {createDesignRow(\"POST NAME\", \"Flat Roof\", \"Name\", \"post\")}\r\n {createDesignRow(\r\n \"POST COLOURS\",\r\n \"Flat Roof\",\r\n \"colours\",\r\n \"post\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST COLOUR\",\r\n \"Flat Roof\",\r\n \"default_colour\",\r\n \"post\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"POST OPTIONS\",\r\n \"Flat Roof\",\r\n \"options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST SECTION\",\r\n \"Flat Roof\",\r\n \"section_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"FREESTANDING POST OPTIONS\",\r\n \"Flat Roof\",\r\n \"freestanding_options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT FREESTANDING POST SECTION\",\r\n \"Flat Roof\",\r\n \"section_freestanding_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Flat Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"post\",\r\n \"array\",\r\n post_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - BEAM 1\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - BEAM 1\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 1 (FASCIA) OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Roof - BEAM 1\"] && (\r\n <>\r\n {createDesignRow(\"BEAM 1 NAME\", \"Flat Roof\", \"Name\", \"beam_1\")}\r\n {createDesignRow(\r\n \"BEAM 1 COLOURS\",\r\n \"Flat Roof\",\r\n \"colours\",\r\n \"beam_1\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 COLOUR\",\r\n \"Flat Roof\",\r\n \"default_colour\",\r\n \"beam_1\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 1 OPTIONS\",\r\n \"Flat Roof\",\r\n \"options\",\r\n \"beam_1\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 SECTION\",\r\n \"Flat Roof\",\r\n \"section_default\",\r\n \"beam_1\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Flat Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_1\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - BEAM 2\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - BEAM 2\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 2 (PURLIN) OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Roof - BEAM 2\"] && (\r\n <>\r\n {createDesignRow(\"BEAM 2 NAME\", \"Flat Roof\", \"Name\", \"beam_2\")}\r\n {createDesignRow(\r\n \"BEAM 2 COLOURS\",\r\n \"Flat Roof\",\r\n \"colours\",\r\n \"beam_2\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 COLOUR\",\r\n \"Flat Roof\",\r\n \"default_colour\",\r\n \"beam_2\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 OPTIONS\",\r\n \"Flat Roof\",\r\n \"options\",\r\n \"beam_2\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 SECTION\",\r\n \"Flat Roof\",\r\n \"section_default\",\r\n \"beam_2\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"ALLOW OMIT SIDE RETURN BEAMS\",\r\n \"Flat Roof\",\r\n \"allow_omit_side_beams\",\r\n null,\r\n \"select\",\r\n [\r\n { Key: 0, Display: \"No\" },\r\n { Key: 1, Display: \"Yes\" },\r\n ]\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Flat Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_2\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - BEAM 3\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - BEAM 3\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 3 (RAFTER) OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Roof - BEAM 3\"] && (\r\n <>\r\n {createDesignRow(\"BEAM 3 NAME\", \"Flat Roof\", \"Name\", \"beam_3\")}\r\n {createDesignRow(\r\n \"BEAM 3 COLOURS\",\r\n \"Flat Roof\",\r\n \"colours\",\r\n \"beam_3\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 COLOUR\",\r\n \"Flat Roof\",\r\n \"default_colour\",\r\n \"beam_3\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 OPTIONS\",\r\n \"Flat Roof\",\r\n \"options\",\r\n \"beam_3\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 SECTION\",\r\n \"Flat Roof\",\r\n \"section_default\",\r\n \"beam_3\"\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Flat Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_3\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - JOIN BEAM\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - JOIN BEAM\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n JOIN BEAM OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Roof - JOIN BEAM\"] && (\r\n <>\r\n {createDesignRow(\r\n \"JOIN BEAM NAME\",\r\n \"Flat Roof\",\r\n \"Name\",\r\n \"join_beam\"\r\n )}\r\n {createDesignRow(\r\n \"JOIN BEAM COLOURS\",\r\n \"Flat Roof\",\r\n \"colours\",\r\n \"join_beam\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT JOIN BEAM COLOUR\",\r\n \"Flat Roof\",\r\n \"default_colour\",\r\n \"join_beam\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"JOIN BEAM OPTIONS\",\r\n \"Flat Roof\",\r\n \"options\",\r\n \"join_beam\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT JOIN BEAM SECTION\",\r\n \"Flat Roof\",\r\n \"section_default\",\r\n \"join_beam\"\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Flat Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"join_beam\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Roof - OTHER\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Roof - OTHER\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n OTHER OPTIONS (Flashing/Template/BOM Item/etc...)\r\n \r\n \r\n {visibleSections[\"Flat Roof - OTHER\"] && (\r\n <>\r\n {createDesignRow(\r\n \"RAFTER BRACKET CODE\",\r\n \"Flat Roof\",\r\n \"rafter_bracket_code\"\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT ATTACHMENT TYPE\",\r\n \"Flat Roof\",\r\n \"default_attachment_type\",\r\n null,\r\n \"auto\",\r\n attachment_types\r\n )}\r\n {createDesignRow(\r\n \"FLASHING COLOURS\",\r\n \"Flat Roof\",\r\n \"flashing_colours\",\r\n null,\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"RIDGE COLOURS\",\r\n \"Flat Roof\",\r\n \"ridge_colours\",\r\n null,\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"FLASHING CODES\",\r\n \"Flat Roof\",\r\n \"flashing_codes\",\r\n null,\r\n \"JSON\"\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT AREA TEMPLATE\",\r\n \"Flat Roof\",\r\n \"default_area_template\",\r\n null,\r\n \"JSON\"\r\n )}\r\n {createDesignRow(\r\n \"BOM ITEMS (FLAT ONLY)\",\r\n \"Flat Roof\",\r\n \"bom_items\",\r\n null,\r\n bomFormat\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n {!lysaght && (\r\n <>\r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pitched Roof\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n PITCHED ROOF DESIGN\r\n \r\n \r\n {visibleSections[\"Pitched Roof\"] && (\r\n <>\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"Pitched Roof - Dimensions\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - Dimensions\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n PITCHED DIMENSION LIMITS\r\n \r\n \r\n\r\n {visibleSections[\"Pitched Roof - Dimensions\"] && (\r\n <>\r\n {createDesignRow(\r\n \"LENGTH RANGE\",\r\n \"Pitched Roof\",\r\n \"length_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"DEPTH RANGE\",\r\n \"Pitched Roof\",\r\n \"depth_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"HEIGHT RANGE\",\r\n \"Pitched Roof\",\r\n \"height_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"PITCH RANGE\",\r\n \"Pitched Roof\",\r\n \"pitch_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG LEFT RANGE\",\r\n \"Pitched Roof\",\r\n \"overhang_left_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG RIGHT RANGE\",\r\n \"Pitched Roof\",\r\n \"overhang_right_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG FRONT RANGE\",\r\n \"Pitched Roof\",\r\n \"overhang_front_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG BACK RANGE\",\r\n \"Pitched Roof\",\r\n \"overhang_back_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG CUTOUT RANGE\",\r\n \"Pitched Roof\",\r\n \"overhang_cutout_range\",\r\n null,\r\n \"range\"\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"Pitched Roof - Materials\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - Materials\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n PITCHED ROOFSHEET / GUTTER / DOWNPIPE / SLAT / INFILL\r\n OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - Materials\"] && (\r\n <>\r\n {createDesignRow(\r\n \"ROOFSHEET GROUPS\",\r\n \"Pitched Roof\",\r\n \"roofsheet_groups\",\r\n null,\r\n \"array\",\r\n roofsheet_group_types\r\n )}\r\n {createDesignRow(\r\n \"ROOFSHEET DEFAULT\",\r\n \"Pitched Roof\",\r\n \"roofsheet_default\",\r\n null,\r\n objectFormat\r\n )}\r\n {createDesignRow(\r\n \"GUTTER OPTIONS\",\r\n \"Pitched Roof\",\r\n \"gutter_options\",\r\n null,\r\n \"array\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"GUTTER DEFAULT\",\r\n \"Pitched Roof\",\r\n \"gutter_default\",\r\n null,\r\n \"auto\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNPIPE OPTIONS\",\r\n \"Pitched Roof\",\r\n \"downpipe_options\",\r\n null,\r\n \"array\",\r\n downpipe_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNPIPE DEFAULT\",\r\n \"Pitched Roof\",\r\n \"downpipe_default\",\r\n null,\r\n \"auto\",\r\n downpipe_types\r\n )}\r\n {createDesignRow(\r\n \"INFILL OPTIONS\",\r\n \"Pitched Roof\",\r\n \"infill_options\",\r\n null,\r\n \"array\",\r\n infill_types\r\n )}\r\n {createDesignRow(\r\n \"INFILL DEFAULT\",\r\n \"Pitched Roof\",\r\n \"infill_default\",\r\n null,\r\n \"auto\",\r\n infill_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST SECTION\",\r\n \"Pitched Roof\",\r\n \"section_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"SLAT OPTIONS\",\r\n \"Pitched Roof\",\r\n \"slat_options\",\r\n null,\r\n \"array\",\r\n slat_types\r\n )}\r\n {createDesignRow(\r\n \"ALLOW SLATS\",\r\n \"Pitched Roof\",\r\n \"allow_slats\",\r\n null,\r\n \"select\",\r\n [\r\n { Key: 0, Display: \"No\" },\r\n { Key: 1, Display: \"Yes\" },\r\n ]\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pitched Roof - POSTS\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - POSTS\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n POSTS OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - POSTS\"] && (\r\n <>\r\n {createDesignRow(\r\n \"POST NAME\",\r\n \"Pitched Roof\",\r\n \"Name\",\r\n \"post\"\r\n )}\r\n {createDesignRow(\r\n \"POST COLOURS\",\r\n \"Pitched Roof\",\r\n \"colours\",\r\n \"post\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST COLOUR\",\r\n \"Pitched Roof\",\r\n \"default_colour\",\r\n \"post\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"POST OPTIONS\",\r\n \"Pitched Roof\",\r\n \"options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST SECTION\",\r\n \"Pitched Roof\",\r\n \"section_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"FREESTANDING POST OPTIONS\",\r\n \"Pitched Roof\",\r\n \"freestanding_options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT FREESTANDING POST SECTION\",\r\n \"Pitched Roof\",\r\n \"section_freestanding_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Pitched Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"post\",\r\n \"array\",\r\n post_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pitched Roof - BEAM 1\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - BEAM 1\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 1 (RAFTER) OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - BEAM 1\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 1 NAME\",\r\n \"Pitched Roof\",\r\n \"Name\",\r\n \"beam_1\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 1 COLOURS\",\r\n \"Pitched Roof\",\r\n \"colours\",\r\n \"beam_1\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 COLOUR\",\r\n \"Pitched Roof\",\r\n \"default_colour\",\r\n \"beam_1\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 1 OPTIONS\",\r\n \"Pitched Roof\",\r\n \"options\",\r\n \"beam_1\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 SECTION\",\r\n \"Pitched Roof\",\r\n \"section_default\",\r\n \"beam_1\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Pitched Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_1\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pitched Roof - BEAM 2\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - BEAM 2\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 2 (PURLIN ON TOP) OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - BEAM 2\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 2 NAME\",\r\n \"Pitched Roof\",\r\n \"Name\",\r\n \"beam_2\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 COLOURS\",\r\n \"Pitched Roof\",\r\n \"colours\",\r\n \"beam_2\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 COLOUR\",\r\n \"Pitched Roof\",\r\n \"default_colour\",\r\n \"beam_2\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 OPTIONS\",\r\n \"Pitched Roof\",\r\n \"options\",\r\n \"beam_2\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 SECTION\",\r\n \"Pitched Roof\",\r\n \"section_default\",\r\n \"beam_2\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Pitched Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_2\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"Pitched Roof - BEAM 2 INSET\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - BEAM 2 INSET\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 2 (PURLIN INSET) OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - BEAM 2 INSET\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 2 NAME\",\r\n \"Pitched Roof\",\r\n \"Name\",\r\n \"beam_2_inset\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 COLOURS\",\r\n \"Pitched Roof\",\r\n \"colours\",\r\n \"beam_2_inset\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 COLOUR\",\r\n \"Pitched Roof\",\r\n \"default_colour\",\r\n \"beam_2_inset\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 OPTIONS\",\r\n \"Pitched Roof\",\r\n \"options\",\r\n \"beam_2_inset\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 SECTION\",\r\n \"Pitched Roof\",\r\n \"section_default\",\r\n \"beam_2_inset\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Pitched Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_2_inset\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pitched Roof - BEAM 3\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - BEAM 3\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 3 (FASCIA BEAM) OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - BEAM 3\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 3 NAME\",\r\n \"Pitched Roof\",\r\n \"Name\",\r\n \"beam_3\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 COLOURS\",\r\n \"Pitched Roof\",\r\n \"colours\",\r\n \"beam_3\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 COLOUR\",\r\n \"Pitched Roof\",\r\n \"default_colour\",\r\n \"beam_3\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 OPTIONS\",\r\n \"Pitched Roof\",\r\n \"options\",\r\n \"beam_3\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 SECTION\",\r\n \"Pitched Roof\",\r\n \"section_default\",\r\n \"beam_3\"\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Pitched Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_3\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pitched Roof - BEAM 4\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - BEAM 4\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 4 (PITCHING BEAM) OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - BEAM 4\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 3 NAME\",\r\n \"Pitched Roof\",\r\n \"Name\",\r\n \"beam_4\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 COLOURS\",\r\n \"Pitched Roof\",\r\n \"colours\",\r\n \"beam_4\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 COLOUR\",\r\n \"Pitched Roof\",\r\n \"default_colour\",\r\n \"beam_4\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 OPTIONS\",\r\n \"Pitched Roof\",\r\n \"options\",\r\n \"beam_4\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 SECTION\",\r\n \"Pitched Roof\",\r\n \"section_default\",\r\n \"beam_4\"\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Pitched Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_4\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Pitched Roof - OTHER\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Pitched Roof - OTHER\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n OTHER OPTIONS\r\n \r\n \r\n {visibleSections[\"Pitched Roof - OTHER\"] && (\r\n <>\r\n {createDesignRow(\r\n \"RAFTER BRACKET CODE\",\r\n \"Pitched Roof\",\r\n \"rafter_bracket_code\"\r\n )}\r\n {createDesignRow(\r\n \"FLASHING COLOURS\",\r\n \"Pitched Roof\",\r\n \"flashing_colours\",\r\n null,\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"RIDGE COLOURS\",\r\n \"Pitched Roof\",\r\n \"ridge_colours\",\r\n null,\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"FLASHING CODES\",\r\n \"Pitched Roof\",\r\n \"flashing_codes\",\r\n null,\r\n \"JSON\"\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT AREA TEMPLATE\",\r\n \"Pitched Roof\",\r\n \"default_area_template\",\r\n null,\r\n \"JSON\"\r\n )}\r\n {createDesignRow(\r\n \"BOM ITEMS (PITCHED ONLY)\",\r\n \"Pitched Roof\",\r\n \"bom_items\",\r\n null,\r\n bomFormat\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n\r\n \r\n \r\n {\r\n toggleVisibleSections(\"Gable Hip Roof\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Gable Hip Roof\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n GABLE ROOF DESIGN\r\n \r\n \r\n {visibleSections[\"Gable Hip Roof\"] && (\r\n <>\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - Dimensions\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - Dimensions\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n GABLE DIMENSION LIMITS\r\n \r\n \r\n\r\n {visibleSections[\"Portal Roof - Dimensions\"] && (\r\n <>\r\n {createDesignRow(\r\n \"LENGTH RANGE\",\r\n \"Gable Hip Roof\",\r\n \"length_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"DEPTH RANGE\",\r\n \"Gable Hip Roof\",\r\n \"depth_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"HEIGHT RANGE\",\r\n \"Gable Hip Roof\",\r\n \"height_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"PITCH RANGE\",\r\n \"Gable Hip Roof\",\r\n \"pitch_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG LEFT RANGE\",\r\n \"Gable Hip Roof\",\r\n \"overhang_left_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG RIGHT RANGE\",\r\n \"Gable Hip Roof\",\r\n \"overhang_right_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG FRONT RANGE\",\r\n \"Gable Hip Roof\",\r\n \"overhang_front_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG BACK RANGE\",\r\n \"Gable Hip Roof\",\r\n \"overhang_back_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"OVERHANG CUTOUT RANGE\",\r\n \"Gable Hip Roof\",\r\n \"overhang_cutout_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"MAX FRAME OVERHANG\",\r\n \"Gable Hip Roof\",\r\n \"max_frame_overhang\",\r\n null,\r\n \"auto\"\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - Materials\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - Materials\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n GABLE ROOFSHEET / GUTTER / DOWNPIPE / SLAT / INFILL OPTIONS\r\n \r\n \r\n {visibleSections[\"Portal Roof - Materials\"] && (\r\n <>\r\n {createDesignRow(\r\n \"ROOFSHEET GROUPS\",\r\n \"Gable Hip Roof\",\r\n \"roofsheet_groups\",\r\n null,\r\n \"array\",\r\n roofsheet_group_types\r\n )}\r\n {createDesignRow(\r\n \"ROOFSHEET DEFAULT\",\r\n \"Gable Hip Roof\",\r\n \"roofsheet_default\",\r\n null,\r\n objectFormat\r\n )}\r\n {createDesignRow(\r\n \"GUTTER OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"gutter_options\",\r\n null,\r\n \"array\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"GUTTER DEFAULT\",\r\n \"Gable Hip Roof\",\r\n \"gutter_default\",\r\n null,\r\n \"auto\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNPIPE OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"downpipe_options\",\r\n null,\r\n \"array\",\r\n downpipe_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNPIPE DEFAULT\",\r\n \"Gable Hip Roof\",\r\n \"downpipe_default\",\r\n null,\r\n \"auto\",\r\n downpipe_types\r\n )}\r\n {createDesignRow(\r\n \"INFILL OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"infill_options\",\r\n null,\r\n \"array\",\r\n infill_types\r\n )}\r\n {createDesignRow(\r\n \"INFILL DEFAULT\",\r\n \"Gable Hip Roof\",\r\n \"infill_default\",\r\n null,\r\n \"auto\",\r\n infill_types\r\n )}\r\n {createDesignRow(\r\n \"INFILL BEAM OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"options\",\r\n \"infill_beam\",\r\n \"array\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"INFILL BEAM DEFAULT\",\r\n \"Gable Hip Roof\",\r\n \"section_default\",\r\n \"infill_beam\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"SLAT OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"slat_options\",\r\n null,\r\n \"array\",\r\n slat_types\r\n )}\r\n {createDesignRow(\r\n \"ALLOW SLATS\",\r\n \"Gable Hip Roof\",\r\n \"allow_slats\",\r\n null,\r\n \"select\",\r\n [\r\n { Key: 0, Display: \"No\" },\r\n { Key: 1, Display: \"Yes\" },\r\n ]\r\n )}\r\n {createDesignRow(\r\n \"ALLOW ROLL TOP RIDGE\",\r\n \"Gable Hip Roof\",\r\n \"allow_roll_top_ridge\",\r\n null,\r\n \"select\",\r\n [\r\n { Key: 0, Display: \"No\" },\r\n { Key: 1, Display: \"Yes\" },\r\n ]\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - POSTS\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - POSTS\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n POSTS OPTIONS\r\n \r\n \r\n {visibleSections[\"Portal Roof - POSTS\"] && (\r\n <>\r\n {createDesignRow(\"POST NAME\", \"Gable Hip Roof\", \"Name\", \"post\")}\r\n {createDesignRow(\r\n \"POST COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"colours\",\r\n \"post\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST COLOUR\",\r\n \"Gable Hip Roof\",\r\n \"default_colour\",\r\n \"post\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"POST OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST SECTION\",\r\n \"Gable Hip Roof\",\r\n \"section_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"FREESTANDING POST OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"freestanding_options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT FREESTANDING POST SECTION\",\r\n \"Gable Hip Roof\",\r\n \"section_freestanding_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Gable Hip Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"post\",\r\n \"array\",\r\n post_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - BEAM 1\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - BEAM 1\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 1 (Rafter) OPTIONS\r\n \r\n \r\n {visibleSections[\"Portal Roof - BEAM 1\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 1 NAME\",\r\n \"Gable Hip Roof\",\r\n \"Name\",\r\n \"beam_1\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 1 COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"colours\",\r\n \"beam_1\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 COLOUR\",\r\n \"Gable Hip Roof\",\r\n \"default_colour\",\r\n \"beam_1\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 1 OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"options\",\r\n \"beam_1\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 SECTION\",\r\n \"Gable Hip Roof\",\r\n \"section_default\",\r\n \"beam_1\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Gable Hip Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_1\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n {!lysaght && (\r\n <>\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - BEAM 2\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - BEAM 2\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 2 (PURLIN ON TOP) OPTIONS\r\n \r\n \r\n {visibleSections[\"Portal Roof - BEAM 2\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 2 NAME\",\r\n \"Gable Hip Roof\",\r\n \"Name\",\r\n \"beam_2\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"colours\",\r\n \"beam_2\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 COLOUR\",\r\n \"Gable Hip Roof\",\r\n \"default_colour\",\r\n \"beam_2\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"options\",\r\n \"beam_2\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 SECTION\",\r\n \"Gable Hip Roof\",\r\n \"section_default\",\r\n \"beam_2\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Gable Hip Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_2\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - BEAM 2 INSET\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - BEAM 2 INSET\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n {lysaght\r\n ? \"BEAM 2 (Purlin) OPTIONS\"\r\n : \"BEAM 2 (PURLIN INSET) OPTIONS\"}\r\n \r\n \r\n {visibleSections[\"Portal Roof - BEAM 2 INSET\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 2 NAME\",\r\n \"Gable Hip Roof\",\r\n \"Name\",\r\n \"beam_2_inset\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"colours\",\r\n \"beam_2_inset\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 COLOUR\",\r\n \"Gable Hip Roof\",\r\n \"default_colour\",\r\n \"beam_2_inset\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"options\",\r\n \"beam_2_inset\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 SECTION\",\r\n \"Gable Hip Roof\",\r\n \"section_default\",\r\n \"beam_2_inset\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Gable Hip Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_2_inset\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - BEAM 3\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - BEAM 3\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 3 (Edge Beam) OPTIONS\r\n \r\n \r\n {visibleSections[\"Portal Roof - BEAM 3\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 3 NAME\",\r\n \"Gable Hip Roof\",\r\n \"Name\",\r\n \"beam_3\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"colours\",\r\n \"beam_3\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 COLOUR\",\r\n \"Gable Hip Roof\",\r\n \"default_colour\",\r\n \"beam_3\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"options\",\r\n \"beam_3\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 SECTION\",\r\n \"Gable Hip Roof\",\r\n \"section_default\",\r\n \"beam_3\"\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Gable Hip Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_3\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - BEAM 4\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - BEAM 4\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 4 (Hip Beam) OPTIONS\r\n \r\n \r\n {visibleSections[\"Portal Roof - BEAM 4\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 3 NAME\",\r\n \"Gable Hip Roof\",\r\n \"Name\",\r\n \"beam_4\"\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"colours\",\r\n \"beam_4\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 COLOUR\",\r\n \"Gable Hip Roof\",\r\n \"default_colour\",\r\n \"beam_4\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 OPTIONS\",\r\n \"Gable Hip Roof\",\r\n \"options\",\r\n \"beam_4\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 SECTION\",\r\n \"Gable Hip Roof\",\r\n \"section_default\",\r\n \"beam_4\"\r\n )}\r\n {createDesignRow(\r\n \"DISABLED FOR CYCLONIC\",\r\n \"Gable Hip Roof\",\r\n \"disabled_on_cyclonic\",\r\n \"beam_4\",\r\n \"array\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Portal Roof - OTHER\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Portal Roof - OTHER\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n OTHER OPTIONS (Flashing/Template/BOM Item/etc...)\r\n \r\n \r\n {visibleSections[\"Portal Roof - OTHER\"] && (\r\n <>\r\n {createDesignRow(\r\n \"RAFTER BRACKET CODE\",\r\n \"Gable Hip Roof\",\r\n \"rafter_bracket_code\"\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT ATTACHMENT TYPE\",\r\n \"Gable Hip Roof\",\r\n \"default_attachment_type\",\r\n null,\r\n \"auto\",\r\n attachment_types\r\n )}\r\n {createDesignRow(\r\n \"FLASHING COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"flashing_colours\",\r\n null,\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"RIDGE COLOURS\",\r\n \"Gable Hip Roof\",\r\n \"ridge_colours\",\r\n null,\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"FLASHING CODES\",\r\n \"Gable Hip Roof\",\r\n \"flashing_codes\",\r\n null,\r\n \"JSON\"\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT AREA TEMPLATE\",\r\n \"Gable Hip Roof\",\r\n \"default_area_template\",\r\n null,\r\n \"JSON\"\r\n )}\r\n {createDesignRow(\r\n \"BOM ITEMS (GABLE ONLY)\",\r\n \"Gable Hip Roof\",\r\n \"bom_items\",\r\n null,\r\n bomFormat\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n\r\n {lysaght && (\r\n <>\r\n \r\n \r\n {\r\n toggleVisibleSections(\"National Carport\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"National Carport\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n NATIONAL CARPORT DESIGN\r\n \r\n \r\n {visibleSections[\"National Carport\"] && (\r\n <>\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"National Carport - Materials\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"National Carport - Materials\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n CARPORT ROOFSHEET / GUTTER / DOWNPIPE OPTIONS\r\n \r\n \r\n {visibleSections[\"National Carport - Materials\"] && (\r\n <>\r\n {createDesignRow(\r\n \"ROOFSHEET GROUPS\",\r\n \"National Carport\",\r\n \"roofsheet_groups\",\r\n null,\r\n \"array\",\r\n roofsheet_group_types\r\n )}\r\n {createDesignRow(\r\n \"ROOFSHEET DEFAULT\",\r\n \"National Carport\",\r\n \"roofsheet_default\",\r\n null,\r\n objectFormat\r\n )}\r\n {createDesignRow(\r\n \"GUTTER OPTIONS\",\r\n \"National Carport\",\r\n \"gutter_options\",\r\n null,\r\n \"array\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"GUTTER DEFAULT\",\r\n \"National Carport\",\r\n \"gutter_default\",\r\n null,\r\n \"auto\",\r\n gutter_types\r\n )}\r\n {createDesignRow(\r\n \"DOWNPIPE OPTIONS\",\r\n \"National Carport\",\r\n \"downpipe_options\",\r\n null,\r\n \"array\",\r\n downpipe_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"National Carport - POSTS\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"National Carport - POSTS\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n POSTS OPTIONS\r\n \r\n \r\n {visibleSections[\"National Carport - POSTS\"] && (\r\n <>\r\n {createDesignRow(\r\n \"POST OPTIONS\",\r\n \"National Carport\",\r\n \"options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"POST COLOURS\",\r\n \"National Carport\",\r\n \"colours\",\r\n \"post\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST COLOUR\",\r\n \"National Carport\",\r\n \"default_colour\",\r\n \"post\",\r\n \"auto\",\r\n colours\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"National Carport - BEAM 1\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"National Carport - BEAM 1\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 1 (FASCIA) OPTIONS\r\n \r\n \r\n {visibleSections[\"National Carport - BEAM 1\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 1 OPTIONS\",\r\n \"National Carport\",\r\n \"options\",\r\n \"beam_1\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"BEAM 1 COLOURS\",\r\n \"National Carport\",\r\n \"colours\",\r\n \"beam_1\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 COLOUR\",\r\n \"National Carport\",\r\n \"default_colour\",\r\n \"beam_1\",\r\n \"auto\",\r\n colours\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"National Carport - BEAM 2\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"National Carport - BEAM 2\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 2 (PURLIN) OPTIONS\r\n \r\n \r\n {visibleSections[\"National Carport - BEAM 2\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 2 OPTIONS\",\r\n \"National Carport\",\r\n \"options\",\r\n \"beam_2\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 COLOURS\",\r\n \"National Carport\",\r\n \"colours\",\r\n \"beam_2\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 COLOUR\",\r\n \"National Carport\",\r\n \"default_colour\",\r\n \"beam_2\",\r\n \"auto\",\r\n colours\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"National Carport - BEAM 3\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"National Carport - BEAM 3\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEAM 3 (RAFTER) OPTIONS\r\n \r\n \r\n {visibleSections[\"National Carport - BEAM 3\"] && (\r\n <>\r\n {createDesignRow(\r\n \"BEAM 3 OPTIONS\",\r\n \"National Carport\",\r\n \"options\",\r\n \"beam_3\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"BEAM 3 COLOURS\",\r\n \"National Carport\",\r\n \"colours\",\r\n \"beam_3\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 3 COLOUR\",\r\n \"National Carport\",\r\n \"default_colour\",\r\n \"beam_3\",\r\n \"auto\",\r\n colours\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n \"National Carport - TEMPLATES\"\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"National Carport - TEMPLATES\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n DESIGN TEMPLATES\r\n \r\n \r\n {visibleSections[\"National Carport - TEMPLATES\"] &&\r\n carportTemplates.length > 0 &&\r\n carportTemplates.map(\r\n ([templateName, templateDetails], index) => (\r\n <>\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\r\n templateName\r\n );\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[templateName] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n {templateName.toUpperCase()}\r\n \r\n \r\n {visibleSections[templateName] && (\r\n <>\r\n {createDesignRow(\r\n \"SHAPE\",\r\n \"National Carport\",\r\n \"SHAPE\",\r\n templateName,\r\n objectFormatSelection,\r\n [\r\n \"Length\",\r\n \"Depth\",\r\n \"Height\",\r\n \"RoofPitch\",\r\n ],\r\n false,\r\n false,\r\n \"design_templates\"\r\n )}\r\n {createDesignRow(\r\n \"BEAMS & POSTS\",\r\n \"National Carport\",\r\n \"BEAMS_AND_POSTS\",\r\n templateName,\r\n objectFormat,\r\n [beam_types, post_types],\r\n false,\r\n false,\r\n \"design_templates\"\r\n )}\r\n {createDesignRow(\r\n \"BOM ADDITIONS\",\r\n \"National Carport\",\r\n \"bom_items\",\r\n templateName,\r\n bomFormat,\r\n [],\r\n false,\r\n false,\r\n \"design_templates\",\r\n \"add\"\r\n )}\r\n {createDesignRow(\r\n \"BOM FILTER\",\r\n \"National Carport\",\r\n \"bom_items\",\r\n templateName,\r\n objectFormatCount,\r\n [],\r\n false,\r\n false,\r\n \"design_templates\",\r\n \"filter\"\r\n )}\r\n >\r\n )}\r\n >\r\n )\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n\r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Deck\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Deck\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n DECK DESIGN\r\n \r\n \r\n {visibleSections[\"Flat Deck\"] && (\r\n <>\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Deck - Dimensions\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Deck - Dimensions\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n DECK DIMENSION LIMITS\r\n \r\n \r\n\r\n {visibleSections[\"Flat Deck - Dimensions\"] && (\r\n <>\r\n {createDesignRow(\r\n \"LENGTH RANGE\",\r\n \"Flat Deck\",\r\n \"length_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"DEPTH RANGE\",\r\n \"Flat Deck\",\r\n \"depth_range\",\r\n null,\r\n \"range\"\r\n )}\r\n {createDesignRow(\r\n \"HEIGHT RANGE\",\r\n \"Flat Deck\",\r\n \"height_range\",\r\n null,\r\n \"range\"\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Deck - POSTS\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Deck - POSTS\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n POSTS OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Deck - POSTS\"] && (\r\n <>\r\n {createDesignRow(\"POST NAME\", \"Flat Deck\", \"Name\", \"post\")}\r\n {createDesignRow(\r\n \"POST COLOURS\",\r\n \"Flat Deck\",\r\n \"colours\",\r\n \"post\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST COLOUR\",\r\n \"Flat Deck\",\r\n \"default_colour\",\r\n \"post\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"POST OPTIONS\",\r\n \"Flat Deck\",\r\n \"options\",\r\n \"post\",\r\n \"collection\",\r\n post_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT POST SECTION\",\r\n \"Flat Deck\",\r\n \"section_default\",\r\n \"post\",\r\n \"auto\",\r\n post_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Deck - BEAM 1\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Deck - BEAM 1\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BEARER OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Deck - BEAM 1\"] && (\r\n <>\r\n {createDesignRow(\"BEAM 1 NAME\", \"Flat Deck\", \"Name\", \"beam_1\")}\r\n {createDesignRow(\r\n \"BEAM 1 COLOURS\",\r\n \"Flat Deck\",\r\n \"colours\",\r\n \"beam_1\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 COLOUR\",\r\n \"Flat Deck\",\r\n \"default_colour\",\r\n \"beam_1\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 1 OPTIONS\",\r\n \"Flat Deck\",\r\n \"options\",\r\n \"beam_1\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 1 SECTION\",\r\n \"Flat Deck\",\r\n \"section_default\",\r\n \"beam_1\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Deck - BEAM 2\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Deck - BEAM 2\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n JOIST OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Deck - BEAM 2\"] && (\r\n <>\r\n {createDesignRow(\"BEAM 2 NAME\", \"Flat Deck\", \"Name\", \"beam_2\")}\r\n {createDesignRow(\r\n \"BEAM 2 COLOURS\",\r\n \"Flat Deck\",\r\n \"colours\",\r\n \"beam_2\",\r\n \"auto\",\r\n colour_arrays_AND_colours\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 COLOUR\",\r\n \"Flat Deck\",\r\n \"default_colour\",\r\n \"beam_2\",\r\n \"auto\",\r\n colours\r\n )}\r\n {createDesignRow(\r\n \"BEAM 2 OPTIONS\",\r\n \"Flat Deck\",\r\n \"options\",\r\n \"beam_2\",\r\n \"collection\",\r\n beam_types\r\n )}\r\n {createDesignRow(\r\n \"DEFAULT BEAM 2 SECTION\",\r\n \"Flat Deck\",\r\n \"section_default\",\r\n \"beam_2\",\r\n \"auto\",\r\n beam_types\r\n )}\r\n >\r\n )}\r\n\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Deck - BRACING\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Deck - BRACING\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n BRACING OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Deck - BRACING\"] && (\r\n <>\r\n {createDesignRow(\r\n \"STRAP BRACE CODE\",\r\n \"Flat Deck\",\r\n \"strap_brace_code\",\r\n \"bracing\",\r\n \"auto\",\r\n product_codes\r\n )}\r\n {createDesignRow(\r\n \"STRAP ROLL LENGTH (m)\",\r\n \"Flat Deck\",\r\n \"strap_brace_roll_length\",\r\n \"bracing\",\r\n \"auto\"\r\n )}\r\n {createDesignRow(\r\n \"WIRE BRACE CODE\",\r\n \"Flat Deck\",\r\n \"wire_brace_code\",\r\n \"bracing\",\r\n \"auto\",\r\n product_codes\r\n )}\r\n {createDesignRow(\r\n \"WIRE ROLL LENGTH (m)\",\r\n \"Flat Deck\",\r\n \"wire_brace_roll_length\",\r\n \"bracing\",\r\n \"auto\"\r\n )}\r\n {createDesignRow(\r\n \"ROD BRACE CODE\",\r\n \"Flat Deck\",\r\n \"rod_brace_code\",\r\n \"bracing\",\r\n \"auto\",\r\n product_codes\r\n )}\r\n {createDesignRow(\r\n \"FLOOR BRACE CODE\",\r\n \"Flat Deck\",\r\n \"floor_brace_code\",\r\n \"bracing\",\r\n \"auto\",\r\n product_codes\r\n )}\r\n {createDesignRow(\r\n \"FLOOR BRACE AREA PER 30m ROLL (m2)\",\r\n \"Flat Deck\",\r\n \"floor_brace_area\",\r\n \"bracing\",\r\n \"auto\"\r\n )}\r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n toggleVisibleSections(\"Flat Deck - OTHER\");\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {visibleSections[\"Flat Deck - OTHER\"] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n OTHER OPTIONS\r\n \r\n \r\n {visibleSections[\"Flat Deck - OTHER\"] && (\r\n <>\r\n {createDesignRow(\r\n \"DEFAULT AREA TEMPLATE\",\r\n \"Flat Deck\",\r\n \"default_area_template\",\r\n null,\r\n \"JSON\"\r\n )}\r\n {createDesignRow(\r\n \"BOM ITEMS (DECK ONLY)\",\r\n \"Flat Deck\",\r\n \"bom_items\",\r\n null,\r\n bomFormat\r\n )}\r\n >\r\n )}\r\n >\r\n )}\r\n\r\n \r\n \r\n GLOBAL SETTINGS\r\n \r\n \r\n {createDesignRow(\"Job Settings\", null, \"job_settings\", null, \"JSON\")}\r\n {createDesignRow(\"Attachment Types\", null, \"attachment_types\", null, \"JSON\")}\r\n {createDesignRow(\r\n \"ROOFSHEET GROUPS\",\r\n null,\r\n \"roofsheet_types\",\r\n null,\r\n roofSheetFormat,\r\n null,\r\n true,\r\n true\r\n )}\r\n {createDesignRow(\r\n \"STATIC DOCUMENTS\",\r\n null,\r\n \"static_documents\",\r\n null,\r\n \"JSON\",\r\n null,\r\n true\r\n )}\r\n {createDesignRow(\r\n \"BOM ITEMS (ALL JOBS)\",\r\n null,\r\n \"bom_items_for_each_job\",\r\n null,\r\n bomFormat,\r\n null,\r\n true\r\n )}\r\n {createDesignRow(\"DRAWINGS\", null, \"drawings\", null, drawingFormat, null, true)}\r\n \r\n
\r\n \r\n \r\n \r\n\r\n
{\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n \r\n setEditCell(null)}\r\n style={{ color: \"white\", position: \"absolute\", right: \"5px\" }}\r\n >\r\n \r\n \r\n {editorType === \"select\" && (\r\n <>\r\n {\r\n setValue(val);\r\n e.stopPropagation();\r\n }}\r\n />\r\n\r\n saveValue(editCell.POA, editCell.key_path, value)}>\r\n UPDATE\r\n \r\n >\r\n )}\r\n {editorType === \"range\" && (\r\n <>\r\n \r\n setValue({ ...value, min: Number(e.target.value) })}\r\n onChange={(val) => setValue({ ...value, min: Number(val) })}\r\n />\r\n setValue({ ...value, max: Number(e.target.value) })}\r\n onChange={(val) => setValue({ ...value, max: Number(val) })}\r\n />\r\n setValue({ ...value, default: Number(e.target.value) })}\r\n onChange={(val) => setValue({ ...value, default: Number(val) })}\r\n />\r\n \r\n\r\n saveValue(editCell.POA, editCell.key_path, value)}>\r\n UPDATE\r\n \r\n >\r\n )}\r\n {editorType === \"shape\" && (\r\n <>\r\n \r\n {Object.entries(editCell.value)\r\n .filter(([key]) =>\r\n [\"Length\", \"Depth\", \"Height\", \"RoofPitch\"].includes(key)\r\n )\r\n .map(([key, val]) => (\r\n \r\n setValue({ ...value, [key]: Number(e.target.value) })\r\n }\r\n onChange={(v) => setValue({ ...value, [key]: Number(v) })}\r\n />\r\n ))}\r\n saveValue(editCell.POA, editCell.key_path, value)}\r\n >\r\n UPDATE\r\n \r\n \r\n >\r\n )}\r\n\r\n {editorType === \"beams_and_posts\" && (\r\n <>\r\n \r\n setValue({ ...value, [\"BeamType1\"]: e.target.value })}\r\n items={editCell?.autocomplete_list[0]}\r\n > \r\n setValue({ ...value, [\"BeamType2\"]: e.target.value })}\r\n items={editCell?.autocomplete_list[0]}\r\n > \r\n setValue({ ...value, [\"BeamType3\"]: e.target.value })}\r\n items={editCell?.autocomplete_list[0]}\r\n > \r\n setValue({ ...value, [\"PostType\"]: e.target.value })}\r\n items={editCell?.autocomplete_list[1]}\r\n > \r\n saveValue(editCell.POA, editCell.key_path, value)}\r\n >\r\n UPDATE\r\n \r\n \r\n >\r\n )}\r\n\r\n {editorType === \"text\" && (\r\n <>\r\n {\r\n if (item.toLowerCase().startsWith(value.toLowerCase().substring(0, 3)))\r\n return true;\r\n if (item.toLowerCase().indexOf(value.toLowerCase()) > -1) return true;\r\n return false;\r\n }}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n wrapperStyle={\r\n {\r\n // zIndex: \"0\",\r\n }\r\n }\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n textAlign: \"left\",\r\n maxHeight: \"250px\",\r\n overflowY: \"auto\",\r\n }}\r\n inputProps={{\r\n style: {\r\n zIndex: \"1\",\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {\r\n setValue(e.target.value);\r\n }}\r\n />\r\n );\r\n }}\r\n value={value}\r\n onChange={(e) => {\r\n setValue(e.target.value);\r\n }}\r\n onSelect={(val) => {\r\n setValue(val);\r\n }}\r\n />\r\n\r\n saveValue(editCell.POA, editCell.key_path, value)}>\r\n UPDATE\r\n \r\n >\r\n )}\r\n {editorType === \"array\" && (\r\n <>\r\n \r\n {createArrayEditor(value)}\r\n \r\n\r\n saveValue(editCell.POA, editCell.key_path, value)}>\r\n UPDATE\r\n \r\n >\r\n )}\r\n {editorType === \"collection\" && (\r\n <>\r\n \r\n {Object.keys(value).map((key) => {\r\n return (\r\n <>\r\n \r\n {\r\n let new_key = e.target.value;\r\n\r\n new_key = new_key.replace(/[^\\w\\s/'/-/(/)]/gi, \"\");\r\n if (new_key && new_key != key) {\r\n let newValue = JSON.stringify(value);\r\n newValue = newValue.replace(\r\n '\"' + key + '\":',\r\n '\"' + new_key + '\":'\r\n );\r\n setValue(JSON.parse(newValue));\r\n }\r\n }}\r\n onBlur={(val) => {\r\n let new_key = val;\r\n new_key = new_key.replace(/[^\\w\\s/'/-/(/)]/gi, \"\");\r\n if (new_key && new_key != key) {\r\n let newValue = JSON.stringify(value);\r\n newValue = newValue.replace(\r\n '\"' + key + '\":',\r\n '\"' + new_key + '\":'\r\n );\r\n setValue(JSON.parse(newValue));\r\n }\r\n }}\r\n />\r\n {\r\n let new_value = { ...value };\r\n delete new_value[key];\r\n setValue(new_value);\r\n }}\r\n style={{}}\r\n >\r\n \r\n \r\n
\r\n {createArrayEditor(value[key], key)}\r\n >\r\n );\r\n })}\r\n \r\n {\r\n let new_key = e.target.value;\r\n new_key = new_key.replace(/[^\\w\\s/'/-/(/)]/gi, \"\");\r\n if (new_key) {\r\n let newValue = { ...value };\r\n newValue[new_key] = [];\r\n setValue(newValue);\r\n }\r\n setValue2(\"\");\r\n }}\r\n onBlur={(val) => {\r\n let new_key = val;\r\n new_key = new_key.replace(/[^\\w\\s/'/-/(/)]/gi, \"\");\r\n if (new_key) {\r\n let newValue = { ...value };\r\n newValue[new_key] = [];\r\n setValue(newValue);\r\n }\r\n setValue2(\"\");\r\n }}\r\n />\r\n\r\n saveValue(editCell.POA, editCell.key_path, value)}>\r\n UPDATE\r\n \r\n >\r\n )}\r\n {editorType === \"BOM\" && (\r\n setEditCell(null)}\r\n saveValue={saveValue}\r\n pricefileDescSummary={pricefileDescSummary}\r\n />\r\n )}\r\n {editorType === \"bom_filter\" && (\r\n setEditCell(null)}\r\n saveValue={saveValue}\r\n pricefileDescSummary={pricefileDescSummary}\r\n />\r\n )}\r\n {editorType === \"JSON\" && (\r\n {\r\n if (!jsonValid) {\r\n alert(\r\n \"JSON is not valid. You cannot save this data. Fix it up and try again.\"\r\n );\r\n } else {\r\n saveValue(editCell.POA, editCell.key_path, JSON.parse(value));\r\n }\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={() => setEditCell(null)}\r\n style={{ maxWidth: \"initial\", height: \"95vh\" }}\r\n contentStyle={{ maxWidth: \"initial\", height: \"95vh\" }}\r\n fullWidth={true}\r\n maxWidth={\"md\"}\r\n >\r\n \r\n )}\r\n {editorType === \"pricing_tier\" && (\r\n <>\r\n \r\n >\r\n )}\r\n {editorType === \"roofsheet_default\" && (\r\n <>\r\n {\r\n let new_value = value ? { ...value } : {};\r\n new_value.grouptype = val;\r\n setValue(new_value);\r\n e.stopPropagation();\r\n }}\r\n />\r\n {\r\n let new_value = value ? { ...value } : {};\r\n new_value.subtype = val;\r\n setValue(new_value);\r\n e.stopPropagation();\r\n }}\r\n />\r\n\r\n saveValue(editCell.POA, editCell.key_path, value)}>\r\n UPDATE\r\n \r\n >\r\n )}\r\n \r\n \r\n \r\n >\r\n )}\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport { Palette } from \"../AppConfig\";\r\n\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport BSL_ControlContainer from \"./BSL_ControlContainer\";\r\n\r\nconst BSLCheckbox = withStyles((theme) => ({\r\n root: {\r\n color: \"white\",\r\n padding: \"0px 10px 0px 0px\",\r\n\r\n \"& .MuiIconButton-label\": {\r\n position: \"relative\",\r\n zIndex: 0,\r\n outline: theme.brand.FIELDERS ? \"1px solid #6B8799\" : \"1px solid \" + Palette.Lysaght.DarkBlue,\r\n outlineOffset: \"-1px\",\r\n backgroundColor: \"white\",\r\n },\r\n\r\n \"& .MuiSvgIcon-root\": {\r\n width: \"21px\",\r\n height: \"21px\",\r\n },\r\n\r\n \"&:focus\": {\r\n \"& .MuiIconButton-label\": {\r\n outline: theme.brand.FIELDERS ? \"2px solid #6B8799\" : \"2px solid \" + Palette.Lysaght.DarkBlue,\r\n outlineOffset: \"-2px\",\r\n },\r\n },\r\n\r\n \"&$checked\": {\r\n color: theme.brand.FIELDERS ? \"white\" : Palette.Lysaght.DarkBlue,\r\n \"& .MuiIconButton-label\": {\r\n position: \"relative\",\r\n zIndex: 1,\r\n // border: \"1px solid black\",\r\n // outline: '2px solid ' + Palette.Control.FieldersDarkBlue,\r\n outlineOffset: \"-1px\",\r\n backgroundColor: theme.brand.FIELDERS ? \"white\" : Palette.Lysaght.DarkBlue,\r\n color: theme.brand.FIELDERS ? \"white\" : Palette.Lysaght.DarkBlue,\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n zIndex: 1,\r\n },\r\n \"& .MuiIconButton-label:after\": {\r\n content: '\"\"',\r\n left: 4,\r\n top: 4,\r\n height: 13,\r\n width: 13,\r\n position: \"absolute\",\r\n backgroundColor: theme.brand.FIELDERS ? Palette.Control.FieldersDarkBlue : \"white\",\r\n zIndex: 0,\r\n },\r\n },\r\n },\r\n checked: {},\r\n}))((props) => );\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n margin: \"4px 0px 2px 0px\",\r\n },\r\n label: {\r\n cursor: \"pointer\",\r\n flex: \"1\",\r\n font: (theme.brand.FIELDERS ? \"16px \" : \"14px \") + theme.typography.fontFamily,\r\n color: Palette.Control.DarkGrey,\r\n padding: \"0px 0px\",\r\n whiteSpace: \"normal\",\r\n textAlign: \"start\",\r\n },\r\n subtitle: {\r\n flex: \"1\",\r\n font: \"13px 'Univers45', sans-serif\",\r\n color: \"#6B8799\",\r\n textAlign: \"end\",\r\n padding: \"4px 0px\",\r\n },\r\n helperText: {\r\n flex: \"1\",\r\n font: \"13px 'Univers45', sans-serif\",\r\n color: Palette.Control.DarkGrey,\r\n textAlign: \"start\",\r\n padding: \"4px 0px\",\r\n },\r\n input: {\r\n padding: \"2px\",\r\n font: (theme.brand.FIELDERS ? \"16px \" : \"14px \") + theme.typography.fontFamily,\r\n padding: \"10px 8px\",\r\n border: \"1px solid #6B8799\",\r\n },\r\n textField: {\r\n // root: {\r\n borderRadius: \"0px\",\r\n // }\r\n },\r\n notchedOutline: {\r\n \"&:focus\": {\r\n borderWidth: \"1px\",\r\n borderColor: \"#002D62 !important\",\r\n },\r\n },\r\n}));\r\n\r\nexport default function BSL_CheckBox(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n return (\r\n \r\n {\r\n if (props.onChange)\r\n props.onChange(props.returnInt ? (e.target.checked ? 1 : 0) : e.target.checked);\r\n }}\r\n name={props.checkBoxText}\r\n />\r\n }\r\n label={props.label}\r\n />\r\n \r\n );\r\n}\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport BSL_ControlContainer from \"../components/BSL_ControlContainer\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { Chip, IconButton } from \"@material-ui/core\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport DoneIcon from \"@material-ui/icons/Done\";\r\nimport Autocomplete from \"react-autocomplete\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport BSL_CheckBox from \"../components/BSL_CheckBox\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"90%\",\r\n minWidth: \"600px\",\r\n },\r\n sl_row: {\r\n flex: 1,\r\n display: \"flex\",\r\n margin: \"3px 0px\",\r\n padding: \"3px 0px\",\r\n borderBottom: \"1px dotted grey\",\r\n },\r\n sl_row_header: {\r\n display: \"flex\",\r\n width: \"100px\",\r\n },\r\n sl_row_content: {\r\n flexWrap: \"wrap\",\r\n flex: \"1\",\r\n },\r\n sl_content: {\r\n display: \"flex\",\r\n flexDirectio: \"column\",\r\n flex: \"1\",\r\n },\r\n sl_chip: {\r\n color: theme.palette.primary.main,\r\n },\r\n pair_chip: {\r\n color: theme.palette.primary.main,\r\n },\r\n pair_header: {\r\n color: theme.palette.primary.main,\r\n fontSize: \"14px\",\r\n fontWeight: 600,\r\n },\r\n}));\r\n\r\nexport function ReplaceAll(target, search, replacement) {\r\n return target.replace(new RegExp(search, \"g\"), replacement);\r\n}\r\nfunction GetPromptCode(key, prompt_codes_string) {\r\n var return_val = null;\r\n if (!prompt_codes_string) return null;\r\n // $.each(prompt_codes_string.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g), function (index, element) {\r\n\r\n prompt_codes_string.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g).forEach((element) => {\r\n var pair = element.split(\"=\");\r\n if (pair[1] && pair[0] === key) {\r\n return_val = ReplaceAll(pair[1], '\"', \"\");\r\n }\r\n });\r\n return return_val;\r\n}\r\n\r\nfunction GetPromptCodeKeys(prompt_codes_string) {\r\n var return_val = [];\r\n if (!prompt_codes_string) return null;\r\n\r\n prompt_codes_string.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g).forEach((element) => {\r\n var pair = element.split(\"=\");\r\n return_val.push(pair[0]);\r\n });\r\n return return_val;\r\n}\r\n\r\nfunction SortObjectByKey(unordered) {\r\n return Object.keys(unordered)\r\n .sort()\r\n .reduce((obj, key) => {\r\n obj[key] = unordered[key];\r\n return obj;\r\n }, {});\r\n}\r\n\r\nfunction GetSLs(prompt_codes_string) {\r\n let sl_array = {};\r\n let stock_lengths = prompt_codes_string;\r\n if (!stock_lengths) stock_lengths = \"\";\r\n stock_lengths = stock_lengths.split(\"|\");\r\n for (let sl of stock_lengths) {\r\n let length = sl.split(\"(\")[0];\r\n let subgroup = sl?.split(\"(\")?.[1]?.replace(\")\", \"\") ?? \"\";\r\n sl_array[length] = subgroup;\r\n }\r\n SortObjectByKey(sl_array);\r\n return sl_array;\r\n}\r\n\r\nexport default function ManageProductListControlCodes(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { row, saveValue, onClose, pricefileDescSummary } = props;\r\n\r\n let control_codes_raw = row?.PromptTextCodes;\r\n\r\n const [stockLengths, setStockLengths] = React.useState(undefined);\r\n const [displayData, setDisplayData] = React.useState(control_codes_raw);\r\n const [pairPOAs, setPairPOAs] = React.useState(undefined);\r\n const [newPairPOA, setNewPairPOA] = React.useState(\"\");\r\n const [newPairCode, setNewPairCode] = React.useState(\"\");\r\n\r\n const [redirectPOAs, setRedirectPOAs] = React.useState(undefined);\r\n const [newRedirectPOA, setNewRedirectPOA] = React.useState(\"\");\r\n const [newRedirectCode, setNewRedirectCode] = React.useState(\"\");\r\n\r\n const [newSL, setNewSL] = React.useState(\"\");\r\n const [newSLSubgroup, setNewSLSubgroup] = React.useState(\"\");\r\n const [addSL, setAddSL] = React.useState(undefined);\r\n\r\n const [altIndex, setAltIndex] = React.useState(GetPromptCode(\"AltIndex\", control_codes_raw));\r\n const [disableNesting, setDisableNesting] = React.useState(\r\n GetPromptCode(\"DisableNesting\", control_codes_raw) === null\r\n ? 0\r\n : GetPromptCode(\"DisableNesting\", control_codes_raw)\r\n ? 1\r\n : 0\r\n );\r\n const [reverseColourCode, setReverseColourCode] = React.useState(\r\n GetPromptCode(\"ReverseColCode\", control_codes_raw) === null\r\n ? 0\r\n : GetPromptCode(\"ReverseColCode\", control_codes_raw)\r\n ? 1\r\n : 0\r\n );\r\n\r\n const [desc, setDesc] = React.useState(GetPromptCode(\"Desc\", control_codes_raw));\r\n const [lldDesc, setLLDDesc] = React.useState(GetPromptCode(\"LLDDesc\", control_codes_raw));\r\n const [cdsDesc, setCDSDesc] = React.useState(GetPromptCode(\"CDSDesc\", control_codes_raw));\r\n const [length, setLength] = React.useState(GetPromptCode(\"Length\", control_codes_raw));\r\n const [maxLength, setMaxLength] = React.useState(GetPromptCode(\"MAX_LM\", control_codes_raw));\r\n const [minLength, setMinLength] = React.useState(GetPromptCode(\"MIN_LM\", control_codes_raw));\r\n const [drawing, setDrawing] = React.useState(GetPromptCode(\"Drawing\", control_codes_raw));\r\n const [autocompleteOptions, setAutocomplateOptions] = React.useState(null);\r\n const [cutExtra, setCutExtra] = React.useState(GetPromptCode(\"CutExtra\", control_codes_raw));\r\n const [extraLM, setExtraLM] = React.useState(GetPromptCode(\"ExtraLM\", control_codes_raw));\r\n\r\n let valid_pitches_raw = GetPromptCode(\"@@\", control_codes_raw);\r\n const [validPitches, setValidPitches] = React.useState(valid_pitches_raw ? valid_pitches_raw.split(\"|\") : []);\r\n\r\n let disabled_raw = GetPromptCode(\"DISABLED\", control_codes_raw);\r\n const [disabledPOAs, setDisabledPOAs] = React.useState(disabled_raw ? disabled_raw.split(\"|\") : []);\r\n\r\n const [priceOverride, setPriceOverride] = React.useState(GetPromptCode(\"$$\", control_codes_raw));\r\n\r\n let input_style = { padding: \"0px\", margin: \"1px\" };\r\n\r\n let keys = GetPromptCodeKeys(control_codes_raw);\r\n\r\n React.useEffect(() => {\r\n setDisplayData(getData());\r\n }, [\r\n stockLengths,\r\n pairPOAs,\r\n redirectPOAs,\r\n altIndex,\r\n desc,\r\n lldDesc,\r\n cdsDesc,\r\n length,\r\n priceOverride,\r\n validPitches,\r\n disabledPOAs,\r\n disableNesting,\r\n reverseColourCode,\r\n maxLength,\r\n minLength,\r\n cutExtra,\r\n extraLM,\r\n ]);\r\n\r\n const getData = () => {\r\n let data = \"\";\r\n if (length) data += (data ? \" \" : \"\") + \"Length=\" + length;\r\n if (maxLength) data += (data ? \" \" : \"\") + \"MAX_LM=\" + maxLength;\r\n if (minLength) data += (data ? \" \" : \"\") + \"MIN_LM=\" + minLength;\r\n if (cutExtra) data += (data ? \" \" : \"\") + \"CutExtra=\" + cutExtra;\r\n if (extraLM) data += (data ? \" \" : \"\") + \"ExtraLM=\" + extraLM;\r\n\r\n if (desc) data += (data ? \" \" : \"\") + 'Desc=\"' + desc + '\"';\r\n if (lldDesc) data += (data ? \" \" : \"\") + 'LLDDesc=\"' + lldDesc + '\"';\r\n if (cdsDesc) data += (data ? \" \" : \"\") + 'CDSDesc=\"' + cdsDesc + '\"';\r\n if (priceOverride) data += (data ? \" \" : \"\") + \"$$=\" + priceOverride;\r\n if (altIndex) data += (data ? \" \" : \"\") + \"AltIndex=\" + altIndex;\r\n if (drawing) data += (data ? \" \" : \"\") + 'Drawing=\"' + drawing + '\"';\r\n if (validPitches && validPitches.length > 0) {\r\n let pitch_data = \"\";\r\n for (let pitch of validPitches) {\r\n pitch_data += (pitch_data ? \"|\" : \"\") + pitch;\r\n }\r\n data += (data ? \" @@=\" : \"@@=\") + pitch_data;\r\n }\r\n if (disabledPOAs && disabledPOAs.length > 0) {\r\n let disPOAs = \"\";\r\n for (let poas of disabledPOAs) {\r\n disPOAs += (disPOAs ? \"|\" : \"\") + poas;\r\n }\r\n data += (data ? \" DISABLED=\" : \"DISABLED=\") + disPOAs;\r\n }\r\n if (disableNesting) data += (data ? \" \" : \"\") + \"DisableNesting=1\";\r\n if (reverseColourCode) data += (data ? \" \" : \"\") + \"ReverseColCode=1\";\r\n\r\n if (stockLengths && Object.keys(stockLengths).length > 0)\r\n for (let sl_poa in stockLengths) {\r\n let data_row = \"\";\r\n if (Object.keys(stockLengths[sl_poa]).length > 0)\r\n for (let sl_length in stockLengths[sl_poa]) {\r\n if (sl_length && stockLengths[sl_poa][sl_length])\r\n data_row += (data_row ? \"|\" : \"\") + sl_length + \"(\" + stockLengths[sl_poa][sl_length] + \")\";\r\n }\r\n if (!data_row) continue;\r\n if (sl_poa === \"ALL\") data += (data ? \" SL=\" : \"SL=\") + data_row;\r\n else data += (data ? \" SL_\" + sl_poa + \"=\" : \"SL_\" + sl_poa + \"=\") + data_row;\r\n }\r\n\r\n if (pairPOAs && Object.keys(pairPOAs).length > 0)\r\n for (let pairPOA in pairPOAs) {\r\n if (!pairPOAs[pairPOA]) continue;\r\n if (pairPOA === \"ALL\") data += (data ? \" PAIR=\" : \"PAIR=\") + pairPOAs[pairPOA];\r\n else data += (data ? \" PAIR_\" + pairPOA + \"=\" : \"PAIR_\" + pairPOA + \"=\") + pairPOAs[pairPOA];\r\n }\r\n\r\n if (redirectPOAs && Object.keys(redirectPOAs).length > 0)\r\n for (let redirectPOA in redirectPOAs) {\r\n if (!redirectPOAs[redirectPOA]) continue;\r\n if (redirectPOA === \"ALL\") data += (data ? \" REDIRECT=\" : \"REDIRECT=\") + redirectPOAs[redirectPOA];\r\n else\r\n data +=\r\n (data ? \" REDIRECT_\" + redirectPOA + \"=\" : \"REDIRECT_\" + redirectPOA + \"=\") +\r\n redirectPOAs[redirectPOA];\r\n }\r\n return data;\r\n };\r\n\r\n const saveData = () => {\r\n let data = getData();\r\n saveValue(row, \"PromptTextCodes\", data);\r\n };\r\n\r\n if (!autocompleteOptions) {\r\n let options = [];\r\n for (let option in pricefileDescSummary) {\r\n options.push(option + \" - \" + pricefileDescSummary[option]);\r\n }\r\n setAutocomplateOptions(options);\r\n }\r\n\r\n const LYSAGHT_POAs = [\"LSB\", \"EMU\", \"NUN\", \"LAU\", \"GIL\", \"KEW\"];\r\n const CENTENARY_POAs = [\"MEN\", \"CAM\", \"MIN\", \"WAN\"];\r\n\r\n let poaOptions = [];\r\n for (let option of LYSAGHT_POAs) {\r\n poaOptions.push(option);\r\n }\r\n for (let option of CENTENARY_POAs) {\r\n poaOptions.push(option);\r\n }\r\n\r\n if (stockLengths === undefined) {\r\n let new_stockLengths = {};\r\n let sl_all = GetSLs(GetPromptCode(\"SL\", control_codes_raw));\r\n new_stockLengths[\"ALL\"] = sl_all;\r\n\r\n if (keys)\r\n for (let key of keys) {\r\n if (key.startsWith(\"SL_\")) {\r\n let sl = GetSLs(GetPromptCode(key, control_codes_raw));\r\n new_stockLengths[key.replace(\"SL_\", \"\")] = sl;\r\n }\r\n }\r\n setStockLengths(new_stockLengths);\r\n }\r\n\r\n if (pairPOAs === undefined) {\r\n let new_pairPOAs = {};\r\n let pair_all = GetPromptCode(\"PAIR\", control_codes_raw);\r\n new_pairPOAs[\"ALL\"] = pair_all;\r\n if (keys)\r\n for (let key of keys) {\r\n if (key.startsWith(\"PAIR_\")) {\r\n let pair = GetPromptCode(key, control_codes_raw);\r\n new_pairPOAs[key.replace(\"PAIR_\", \"\")] = pair;\r\n }\r\n }\r\n \r\n setPairPOAs(new_pairPOAs);\r\n }\r\n\r\n if (redirectPOAs === undefined) {\r\n let new_redirectPOAs = {};\r\n let redirect_all = GetPromptCode(\"REDIRECT\", control_codes_raw);\r\n new_redirectPOAs[\"ALL\"] = redirect_all;\r\n if (keys)\r\n for (let key of keys) {\r\n if (key.startsWith(\"REDIRECT_\")) {\r\n let redirect = GetPromptCode(key, control_codes_raw);\r\n new_redirectPOAs[key.replace(\"REDIRECT_\", \"\")] = redirect;\r\n }\r\n }\r\n \r\n setRedirectPOAs(new_redirectPOAs);\r\n }\r\n\r\n const handleDeleteRow = (poa) => {\r\n let new_stockLengths = { ...stockLengths };\r\n if (new_stockLengths[poa]) {\r\n if (poa === \"ALL\") new_stockLengths[poa] = {};\r\n else delete new_stockLengths[poa];\r\n setStockLengths(new_stockLengths);\r\n setNewSL(\"\");\r\n setNewSLSubgroup(\"\");\r\n setAddSL(\"\");\r\n }\r\n };\r\n const handleDelete = (poa, length) => {\r\n let new_stockLengths = { ...stockLengths };\r\n if (new_stockLengths[poa][length]) {\r\n delete new_stockLengths[poa][length];\r\n setStockLengths(new_stockLengths);\r\n setNewSL(\"\");\r\n setNewSLSubgroup(\"\");\r\n setAddSL(\"\");\r\n }\r\n };\r\n const handleAdd = (poa, length = null, subgroup = null) => {\r\n if (length === null && newSL) length = newSL;\r\n if (subgroup === null && newSLSubgroup) subgroup = newSLSubgroup;\r\n if (!length) {\r\n alert(\"add a new length\");\r\n return;\r\n }\r\n if (!subgroup) {\r\n alert(\"add a subgroup\");\r\n return;\r\n }\r\n let new_stockLengths = { ...stockLengths };\r\n new_stockLengths[poa][length] = subgroup;\r\n setStockLengths(new_stockLengths);\r\n setNewSL(\"\");\r\n setNewSLSubgroup(\"\");\r\n setAddSL(\"\");\r\n };\r\n\r\n const addSLPOA = (poa) => {\r\n if (!poa) return;\r\n let new_stockLengths = { ...stockLengths };\r\n if (new_stockLengths[poa]) {\r\n alert(\"POA '\" + poa + \"' already exists\");\r\n return;\r\n } else {\r\n new_stockLengths[poa] = {};\r\n setStockLengths(new_stockLengths);\r\n setNewSL(\"\");\r\n setNewSLSubgroup(\"\");\r\n setAddSL(\"\");\r\n }\r\n };\r\n\r\n const handleAddPairPOA = (poa, code) => {\r\n if (!poa) {\r\n alert(\"add a new pair POA\");\r\n return;\r\n }\r\n if (!code) {\r\n // alert(\"add a pair code\");\r\n return;\r\n }\r\n let new_pairPOAs = { ...pairPOAs };\r\n new_pairPOAs[poa] = code;\r\n setPairPOAs(new_pairPOAs);\r\n setNewPairPOA(\"\");\r\n setNewPairCode(\"\");\r\n };\r\n\r\n const handleDeletePair = (poa) => {\r\n let new_pairPOAs = { ...pairPOAs };\r\n if (new_pairPOAs[poa]) {\r\n delete new_pairPOAs[poa];\r\n setPairPOAs(new_pairPOAs);\r\n setNewPairPOA(\"\");\r\n setNewPairCode(\"\");\r\n }\r\n };\r\n\r\n const handleAddRedirectPOA = (poa, code) => {\r\n if (!poa) {\r\n alert(\"add a new redirect POA\");\r\n return;\r\n }\r\n if (!code) {\r\n // alert(\"add a redirect code\");\r\n return;\r\n }\r\n let new_redirectPOAs = { ...redirectPOAs };\r\n new_redirectPOAs[poa] = code;\r\n setRedirectPOAs(new_redirectPOAs);\r\n setNewRedirectPOA(\"\");\r\n setNewRedirectCode(\"\");\r\n };\r\n\r\n const handleDeleteRedirect = (poa) => {\r\n let new_redirectPOAs = { ...redirectPOAs };\r\n if (new_redirectPOAs[poa]) {\r\n delete new_redirectPOAs[poa];\r\n setRedirectPOAs(new_redirectPOAs);\r\n setNewRedirectPOA(\"\");\r\n setNewRedirectCode(\"\");\r\n }\r\n };\r\n\r\n let stock_length_rows = [];\r\n if (stockLengths) {\r\n for (let sl_poa in stockLengths) {\r\n let chips = [];\r\n for (let sl_key in stockLengths[sl_poa]) {\r\n let length = sl_key;\r\n let subgroup = stockLengths[sl_poa][sl_key] ?? row?.SubGroup;\r\n if (length)\r\n chips.push(\r\n \r\n {length}mm \r\n \r\n sub:{subgroup}\r\n >\r\n }\r\n onDelete={() => handleDelete(sl_poa, length)}\r\n className={classes.sl_chip}\r\n />\r\n );\r\n }\r\n\r\n chips.push(\r\n \r\n {}}\r\n onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n }}\r\n onBlur={(val) => setNewSL(val)}\r\n />\r\n {}}\r\n onEnter={(e) => handleAdd(sl_poa, null, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n }}\r\n onBlur={(val) => setNewSLSubgroup(val)}\r\n />\r\n \r\n )\r\n }\r\n onDelete={() => {\r\n if (!addSL || addSL != sl_poa) {\r\n setAddSL(sl_poa);\r\n } else if (addSL === sl_poa) {\r\n handleAdd(sl_poa);\r\n }\r\n }}\r\n style={{ background: \"#c7c7c7\" }}\r\n deleteIcon={addSL === sl_poa ? : }\r\n />\r\n );\r\n\r\n stock_length_rows.push(\r\n \r\n
\r\n {\r\n handleDeleteRow(sl_poa);\r\n }}\r\n >\r\n \r\n \r\n {}}\r\n // onBlur={(val) => updateMarkup(key, \"DisplayName\", val)}\r\n />\r\n
\r\n
{chips}
\r\n
\r\n );\r\n }\r\n }\r\n\r\n let pair_items = [];\r\n\r\n if (pairPOAs) {\r\n for (let pair in pairPOAs) {\r\n pair_items.push(\r\n \r\n {pair}: \r\n \r\n value && value.length > 2\r\n ? item.toLowerCase().indexOf(value.toLowerCase()) > -1\r\n : false\r\n }\r\n getItemValue={(item) => item.split(\"-\")[0].trim()}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n onEnter={(e) => handleAddPairPOA(pair, e.target.value)}\r\n onBlur={(val) => handleAddPairPOA(pair, val)}\r\n />\r\n );\r\n }}\r\n value={pairPOAs?.[pair]}\r\n onChange={(e) => handleAddPairPOA(pair, e.target.value)}\r\n onSelect={(val) => handleAddPairPOA(pair, val)}\r\n />\r\n\r\n {/* {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n }}\r\n onEnter={(e) => handleAddPairPOA(pair, e.target.value)}\r\n onBlur={(val) => handleAddPairPOA(pair, val)}\r\n /> */}\r\n \r\n }\r\n onDelete={pair === \"ALL\" ? null : () => handleDeletePair(pair)}\r\n className={classes.pair_chip}\r\n />\r\n );\r\n }\r\n }\r\n\r\n pair_items.push(\r\n \r\n {/* handleAddPairPOA(e.target.value, newPairCode)}\r\n onBlur={(val) => setNewPairPOA(val)}\r\n /> */}\r\n\r\n (value ? true : true)}\r\n getItemValue={(item) => item}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n onEnter={(e) => setNewPairPOA(e.target.value)}\r\n onBlur={(val) => setNewPairPOA(val)}\r\n />\r\n );\r\n }}\r\n value={newPairPOA}\r\n onChange={(e) => setNewPairPOA(e.target.value)}\r\n onSelect={(val) => setNewPairPOA(val)}\r\n />\r\n\r\n {/* handleAddPairPOA(newPairPOA, e.target.value)}\r\n onBlur={(val) => setNewPairCode(val)}\r\n /> */}\r\n \r\n value && value.length > 2 ? item.toLowerCase().indexOf(value.toLowerCase()) > -1 : false\r\n }\r\n getItemValue={(item) => item.split(\"-\")[0].trim()}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n onEnter={(e) => handleAddPairPOA(newPairPOA, e.target.value)}\r\n onBlur={(val) => setNewPairCode(val)}\r\n />\r\n );\r\n }}\r\n value={newPairCode}\r\n onChange={(e) => setNewPairCode(e.target.value)}\r\n onSelect={(val) => handleAddPairPOA(newPairPOA, val)}\r\n />\r\n \r\n }\r\n onDelete={() => {\r\n handleAddPairPOA(newPairPOA, newPairCode);\r\n }}\r\n style={{ background: \"#c7c7c7\" }}\r\n deleteIcon={ }\r\n />\r\n );\r\n\r\n let redirect_items = [];\r\n\r\n if (redirectPOAs) {\r\n for (let redirect in redirectPOAs) {\r\n redirect_items.push(\r\n \r\n {redirect}: \r\n\r\n \r\n value && value.length > 2\r\n ? item.toLowerCase().indexOf(value.toLowerCase()) > -1\r\n : false\r\n }\r\n getItemValue={(item) => item.split(\"-\")[0].trim()}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n onEnter={(e) => handleAddRedirectPOA(redirect, e.target.value)}\r\n onBlur={(val) => handleAddRedirectPOA(redirect, val)}\r\n />\r\n );\r\n }}\r\n value={redirectPOAs?.[redirect]}\r\n onChange={(e) => handleAddRedirectPOA(redirect, e.target.value)}\r\n onSelect={(val) => handleAddRedirectPOA(redirect, val)}\r\n />\r\n\r\n {/* {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n }}\r\n onEnter={(e) => handleAddRedirectPOA(redirect, e.target.value)}\r\n onBlur={(val) => handleAddRedirectPOA(redirect, val)}\r\n /> */}\r\n \r\n }\r\n onDelete={redirect === \"ALL\" ? null : () => handleDeleteRedirect(redirect)}\r\n className={classes.pair_chip}\r\n />\r\n );\r\n }\r\n }\r\n\r\n let redirect_options = [];\r\n for (let item of poaOptions) {\r\n redirect_options.push({\r\n Display: \"POA:\" + item,\r\n Key: item,\r\n });\r\n }\r\n redirect_options.push({\r\n Display: \"DOUBLE SIDED\",\r\n Key: \"DOUBLE_SIDED\",\r\n });\r\n\r\n redirect_items.push(\r\n \r\n {/* handleAddRedirectPOA(e.target.value, newRedirectCode)}\r\n onBlur={(val) => setNewRedirectPOA(val)}\r\n /> */}\r\n\r\n (value ? true : true)}\r\n getItemValue={(item) => item.Key}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item.Display}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n onEnter={(e) => setNewRedirectPOA(e.target.value)}\r\n onBlur={(val) => setNewRedirectPOA(val)}\r\n />\r\n );\r\n }}\r\n value={newRedirectPOA}\r\n onChange={(e) => setNewRedirectPOA(e.target.value)}\r\n onSelect={(val) => setNewRedirectPOA(val)}\r\n />\r\n\r\n {/* handleAddRedirectPOA(newRedirectPOA, e.target.value)}\r\n onBlur={(val) => setNewRedirectCode(val)}\r\n /> */}\r\n \r\n value && value.length > 2 ? item.toLowerCase().indexOf(value.toLowerCase()) > -1 : false\r\n }\r\n getItemValue={(item) => item.split(\"-\")[0].trim()}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"0px\",\r\n lineHeight: 1.4,\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"24px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {}}\r\n // onEnter={(e) => handleAdd(sl_poa, e.target.value)}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n onEnter={(e) => handleAddRedirectPOA(newRedirectPOA, e.target.value)}\r\n onBlur={(val) => setNewRedirectCode(val)}\r\n />\r\n );\r\n }}\r\n value={newRedirectCode}\r\n onChange={(e) => setNewRedirectCode(e.target.value)}\r\n onSelect={(val) => handleAddRedirectPOA(newRedirectPOA, val)}\r\n />\r\n \r\n }\r\n onDelete={() => {\r\n handleAddRedirectPOA(newRedirectPOA, newRedirectCode);\r\n }}\r\n style={{ background: \"#c7c7c7\" }}\r\n deleteIcon={ }\r\n />\r\n );\r\n\r\n return (\r\n {\r\n saveData();\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={onClose}\r\n style={{ maxWidth: \"initial\" }}\r\n fullWidth={true}\r\n maxWidth={\"xl\"}\r\n >\r\n \r\n {displayData}\r\n
\r\n \r\n {/* */}\r\n setLength(e.target.value)}\r\n onChange={(value) => setLength(value)}\r\n endAdornment={\"mm\"}\r\n helperText={\r\n \"Length in mm... (where CAD system gives a length for this item, the BOM will tally the QTY based on the length); eg; Length=3000 ... where system length=7500, will return Qty=3\"\r\n }\r\n />\r\n setMinLength(e.target.value)}\r\n onChange={(value) => setMinLength(value)}\r\n endAdornment={\"mm\"}\r\n helperText={\r\n \"Min Length in mm... (where CAD system gives a length less than this, the length will be adjusted to the min); eg; Min Length=3000 ... where system length=1200, will return Length=3000\"\r\n }\r\n />\r\n {/* \r\n */}\r\n setMaxLength(e.target.value)}\r\n onChange={(value) => setMaxLength(value)}\r\n endAdornment={\"mm\"}\r\n helperText={\r\n \"Max Length in mm... (where CAD system or user gives a length greater than this, a warning is given in the BOM that the length has been exceeded. for Back Channels (default: 9000), Gutters (default: 8000) and Flashings (default: 6100), this is the splicing length)\"\r\n }\r\n />\r\n setCutExtra(e.target.value)}\r\n onChange={(value) => setCutExtra(value)}\r\n endAdornment={\"mm\"}\r\n helperText={\r\n \"For Back Channels, Gutters and Flashing, when item is spliced by max length, add this extra to each length. The system default will be 200 if this is not set.\"\r\n }\r\n />\r\n setExtraLM(e.target.value)}\r\n onChange={(value) => setExtraLM(value)}\r\n endAdornment={\"mm\"}\r\n helperText={\r\n \"For each of this item, an extra of XXmm will be added. Default for Back Channels (default: 100), Gutters (default: 100) and Flashings (default: 200) and 0mm for all other categories \"\r\n }\r\n />\r\n {/* */}\r\n {/* */}\r\n setDesc(e.target.value)}\r\n onChange={(value) => setDesc(value)}\r\n helperText={\r\n \"A Short/abbreviated description, used in the BOM, particularly for ancillary item. ; eg; 'Short Name'\"\r\n }\r\n />\r\n {/* setLLDDesc(e.target.value)}\r\n onChange={(value) => setLLDDesc(value)}\r\n // helperText={\r\n // \"A Short/abbreviated description, used in the BOM, particularly for ancillary item. ; eg; 'Short Name'\"\r\n // }\r\n />\r\n setCDSDesc(e.target.value)}\r\n onChange={(value) => setCDSDesc(value)}\r\n // helperText={\r\n // \"A Short/abbreviated description, used in the BOM, particularly for ancillary item. ; eg; 'Short Name'\"\r\n // }\r\n /> */}\r\n {/* */}\r\n setPriceOverride(e.target.value)}\r\n onChange={(value) => setPriceOverride(value)}\r\n startAdornment={\"$\"}\r\n style={{\r\n width: \"102px\",\r\n flex: \"none\",\r\n color: \"white\",\r\n }}\r\n helperText={\r\n \"Fixed price to charge regardless of markups. eg; $$=0.01 -> always charge 1 cent ... Can be appended with LM for price per LM eg; $$=1.00LM -> charged $1 per LM\"\r\n }\r\n />\r\n setAltIndex(e.target.value)}\r\n onChange={(value) => setAltIndex(value)}\r\n helperText={\r\n \"Alternative Index codes that this item can be picked up with other than the primary Index code; eg; CBNW10150G\"\r\n }\r\n />\r\n {/* setDrawing(e.target.value)}\r\n onChange={(value) => setDrawing(value)}\r\n helperText={\r\n \"A PDF filename associated which will automatically be added to the Job Print Pack if this item is ordered. File must be in Azure Blob Storage.\"\r\n }\r\n /> */}\r\n {\r\n setValidPitches(\r\n val.sort((a, b) => {\r\n if (Number(a) < Number(b)) return -1;\r\n if (Number(a) > Number(b)) return 1;\r\n return 0;\r\n })\r\n );\r\n\r\n // if (validPitches.includes(val)) {\r\n // const filteredItems = validPitches.filter((item) => item !== val);\r\n // setValidPitches(\r\n // filteredItems.sort((a, b) => {\r\n // if (Number(a) < Number(b)) return -1;\r\n // if (Number(a) > Number(b)) return 1;\r\n // return 0;\r\n // })\r\n // );\r\n // } else {\r\n // let new_array = [...validPitches];\r\n // new_array.push(val);\r\n // setValidPitches(\r\n // new_array.sort((a, b) => {\r\n // if (Number(a) < Number(b)) return -1;\r\n // if (Number(a) > Number(b)) return 1;\r\n // return 0;\r\n // })\r\n // );\r\n // }\r\n }}\r\n helperText={\r\n \"Valid pitches for this item, only for items that have '@@' in the code of description to replace. Leave blank to allow any pitch.\"\r\n }\r\n />\r\n {\r\n // alert(val);\r\n setDisabledPOAs(val);\r\n // if (disabledPOAs.includes(val)) {\r\n // const filteredItems = disabledPOAs.filter((item) => item !== val);\r\n // setDisabledPOAs(filteredItems);\r\n // } else {\r\n // let new_array = [...disabledPOAs];\r\n // new_array.push(val);\r\n // setDisabledPOAs(new_array);\r\n // }\r\n }}\r\n helperText={\r\n \"POA's where this item should not display in the BOM as a selectable item AND will price with an ERROR if in the system/order list\"\r\n }\r\n />\r\n setReverseColourCode(val)}\r\n helperText={\r\n \"If selected and colour code has 4 characters, the last 2 become the first two for Lyves Code Output... eg; CCPB = PBCC\"\r\n }\r\n />\r\n \r\n\r\n \r\n {stock_length_rows}\r\n\r\n addSLPOA(val)}\r\n />\r\n \r\n\r\n setDisableNesting(val)}\r\n helperText={\r\n \"If there are stock lengths, and the length required exceeds the longest stock length, rather than splicing and nesting the item, it will be added into the BOM in its full length and an error will be generated in the BOM warning the user the item is not priced.\"\r\n }\r\n />\r\n\r\n \r\n {pair_items}\r\n \r\n\r\n \r\n {redirect_items}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport BSL_ControlContainer from \"../components/BSL_ControlContainer\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport ManageProductListControlCodes from \"./ManageProductListControlCodes\";\r\nimport ManageProductListAncillary from \"./ManageProductListAncillary\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"90%\",\r\n minWidth: \"600px\",\r\n },\r\n sl_row: {\r\n flex: 1,\r\n display: \"flex\",\r\n margin: \"3px 0px\",\r\n padding: \"3px 0px\",\r\n borderBottom: \"1px dotted grey\",\r\n },\r\n sl_row_header: {\r\n display: \"flex\",\r\n width: \"100px\",\r\n },\r\n sl_row_content: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n flex: \"1\",\r\n },\r\n sl_content: {\r\n display: \"flex\",\r\n flexDirectio: \"column\",\r\n flex: \"1\",\r\n },\r\n sl_chip: {\r\n color: theme.palette.primary.main,\r\n },\r\n pair_chip: {\r\n color: theme.palette.primary.main,\r\n },\r\n pair_header: {\r\n color: theme.palette.primary.main,\r\n fontSize: \"14px\",\r\n fontWeight: 600,\r\n },\r\n}));\r\n\r\nexport default function ManageProductListItem(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { row, action, columns, config } = props;\r\n const [editRow, setEditRow] = React.useState(row);\r\n const [value2Colours, setValue2Colours] = React.useState(\"\");\r\n const [value2Image, setValue2Image] = React.useState(\"\");\r\n const [showControlCodes, setShowControlCodes] = React.useState(false);\r\n const [showAncillaryItems, setShowAncillaryItems] = React.useState(false);\r\n\r\n const setValue = (parameter) => (value) => {\r\n let newRow = { ...editRow };\r\n newRow[parameter] = value;\r\n setEditRow(newRow);\r\n };\r\n\r\n let title = \"NEW ITEM\";\r\n let saveButtonText = \"Add New\";\r\n if (action === \"EDIT\") {\r\n title = \"EDIT \" + row?.[\"ProductIndex\"] + \" - \" + row?.[\"ProductDescription\"];\r\n saveButtonText = \"Update Item\";\r\n } else if (action === \"DUPLICATE\") {\r\n title = \"DUPLICATE \" + row?.[\"ProductIndex\"] + \" - \" + row?.[\"ProductDescription\"];\r\n saveButtonText = \"Duplicate Item\";\r\n } else if (action === \"VIEW\") {\r\n title = \"VIEWING HISTORY DATA FOR \" + row?.[\"ProductIndex\"];\r\n saveButtonText = \"CLOSE\";\r\n }\r\n\r\n return (\r\n {\r\n props.onClose();\r\n }}\r\n button1Click={() => {\r\n if (!editRow[\"ProductIndex\"]) {\r\n alert(\"Please add an Product index before saving\");\r\n return;\r\n }\r\n if (!editRow[\"ProductCode\"]) {\r\n alert(\"Please add an Lyves Code before saving\");\r\n return;\r\n }\r\n if (!editRow[\"ProductDescription\"]) {\r\n alert(\"Please add an Product Description before saving\");\r\n return;\r\n }\r\n\r\n if (action === \"DUPLICATE\") props.saveValue(editRow, \"ADD\");\r\n else if (action === \"NEW\") props.saveValue(editRow, \"ADD\");\r\n else props.saveValue(editRow, action);\r\n // saveValue(value2, \"ADD\");\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={() => {\r\n props.onClose();\r\n }}\r\n style={{ maxWidth: \"initial\" }}\r\n contentStyle={{ background: action === \"VIEW\" ? \"#eeeeee\" : \"inherit\" }}\r\n fullWidth={true}\r\n maxWidth={\"md\"}\r\n >\r\n \r\n \r\n {columns?.[0]?.editor(\r\n row,\r\n editRow[\"GroupingName\"],\r\n setValue(\"GroupingName\"),\r\n () => {},\r\n \"NO BUTTON\"\r\n )}\r\n {columns?.[2]?.editor(\r\n row,\r\n editRow[\"ProductIndex\"],\r\n setValue(\"ProductIndex\"),\r\n () => {},\r\n \"NO BUTTON\"\r\n )}\r\n {columns?.[6]?.editor(\r\n row,\r\n editRow[\"ProductDescription\"],\r\n setValue(\"ProductDescription\"),\r\n () => {},\r\n \"NO BUTTON\"\r\n )}\r\n {columns?.[7]?.editor(row, editRow[\"Cost\"], setValue(\"Cost\"), () => {}, \"NO BUTTON\")}\r\n {columns?.[8]?.editor(row, editRow[\"Markup\"], setValue(\"Markup\"), () => {}, \"NO BUTTON\")}\r\n {columns?.[9]?.editor(row, editRow[\"SellingUOM\"], setValue(\"SellingUOM\"), () => {}, \"NO BUTTON\")}\r\n {columns?.[13]?.editor(row, editRow[\"Notes\"], setValue(\"Notes\"), () => {}, \"NO BUTTON\")}\r\n \r\n \r\n {columns?.[1]?.editor(\r\n row,\r\n editRow[\"Image_b64\"],\r\n setValue(\"Image_b64\"),\r\n () => {},\r\n value2Image,\r\n setValue2Image,\r\n \"NO BUTTON\"\r\n )}\r\n {columns?.[4]?.editor(row, editRow[\"Brand\"], setValue(\"Brand\"), () => {}, \"NO BUTTON\")}\r\n {columns?.[3]?.editor(row, editRow[\"ProductCode\"], setValue(\"ProductCode\"), () => {}, \"NO BUTTON\")}\r\n {columns?.[5]?.editor(\r\n row,\r\n editRow[\"ProductGroup\"],\r\n setValue(\"ProductGroup\"),\r\n () => {},\r\n editRow[\"SubGroup\"],\r\n setValue(\"SubGroup\"),\r\n \"NO BUTTON\"\r\n )}\r\n \r\n {columns?.[10]?.editor(\r\n row,\r\n editRow[\"Colours\"],\r\n setValue(\"Colours\"),\r\n () => {},\r\n value2Colours,\r\n setValue2Colours,\r\n \"NO BUTTON\",\r\n editRow?.[\"Brand\"] === \"CDS\" ? config.cdsOffering : config.lldOffering\r\n )}\r\n
\r\n {columns?.[15]?.editor(row, editRow[\"State\"], setValue(\"State\"), () => {}, \"NO BUTTON\")}\r\n \r\n \r\n\r\n \r\n \r\n {\r\n setShowAncillaryItems(true);\r\n }}\r\n >\r\n {editRow[\"AncillaryParts\"] ? (\r\n columns?.[11]?.format(editRow[\"AncillaryParts\"], editRow)\r\n ) : (\r\n
\"-Add Ancillary Items-\"
\r\n )}\r\n
\r\n {showAncillaryItems && (\r\n setShowAncillaryItems(false)}\r\n saveValue={(row, param, data) => {\r\n setShowAncillaryItems(false);\r\n setValue(\"AncillaryParts\")(data);\r\n }}\r\n pricefileDescSummary={config.pricefileDescSummary}\r\n />\r\n )}\r\n \r\n \r\n {\r\n setShowControlCodes(true);\r\n }}\r\n >\r\n {editRow[\"PromptTextCodes\"] ? (\r\n columns?.[12]?.format(editRow[\"PromptTextCodes\"], editRow)\r\n ) : (\r\n
\"-Add Control Codes-\"
\r\n )}\r\n
\r\n {showControlCodes && (\r\n setShowControlCodes(false)}\r\n saveValue={(row, param, data) => {\r\n setShowControlCodes(false);\r\n setValue(\"PromptTextCodes\")(data);\r\n }}\r\n />\r\n )}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport { LinearProgress } from \"@material-ui/core\";\r\nimport { fetchTimeout } from \"../components/Common\";\r\nimport { Palette, API_BASE } from \"../AppConfig\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport ManageProductListItem from \"./ManageProductListItem\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"90%\",\r\n minWidth: \"600px\",\r\n },\r\n container: {\r\n height: \"90%\",\r\n maxHeight: \"calc(100% - 65px)\",\r\n },\r\n row: {\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: Palette.FieldersBlue,\r\n lineHeight: \"normal\",\r\n },\r\n no_job_message: {\r\n color: \"grey\",\r\n height: \"100px\",\r\n fontSize: \"20px\",\r\n fontStyle: \"italic\",\r\n paddingTop: \"40px\",\r\n position: \"absolute\",\r\n left: \"47%\",\r\n top: \"58px\",\r\n },\r\n}));\r\n\r\nconst columns = [\r\n {\r\n id: \"datetime\",\r\n label: \"Date Time\",\r\n },\r\n {\r\n id: \"user\",\r\n label: \"User\",\r\n },\r\n {\r\n id: \"action\",\r\n label: \"Action\",\r\n },\r\n {\r\n id: \"row_data\",\r\n label: \"Data\",\r\n },\r\n];\r\n\r\nexport default function ManageProductListItemHistory(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { row, config } = props;\r\n const [intialise, setIntialise] = React.useState(false);\r\n const [history, setHistory] = React.useState([]);\r\n const [viewItem, setViewItem] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"admin/GetPriceFileDataHistory?id=\" + row.id;\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n let data = [...json];\r\n data.sort((a, b) => {\r\n return a.timestamp < b.timestamp ? 1 : -1;\r\n });\r\n\r\n setHistory(data);\r\n\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setIntialise(true);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n let row_i = 0;\r\n\r\n return (\r\n {\r\n props.onClose();\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={() => {\r\n props.onClose();\r\n }}\r\n style={{ maxWidth: \"initial\" }}\r\n fullWidth={true}\r\n maxWidth={\"md\"}\r\n >\r\n {!intialise && }\r\n \r\n \r\n \r\n \r\n {columns.map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n \r\n \r\n \r\n \r\n {history &&\r\n history.map((item) => {\r\n row_i++;\r\n return (\r\n \r\n {item[\"datetime\"]} \r\n {item[\"user\"]} \r\n \r\n {item?.[\"action\"] ? item?.[\"action\"].replaceAll(\"_\", \" \") : \"\"}\r\n \r\n \r\n setViewItem(item[\"row_data\"])}>\r\n view data\r\n
\r\n \r\n \r\n );\r\n })}\r\n \r\n {(!history || history.length === 0) && (\r\n {\"No History ...\"}
\r\n )}\r\n
\r\n \r\n\r\n {viewItem && (\r\n {\r\n setViewItem(false);\r\n }}\r\n config={props.config}\r\n saveValue={(row, param) => {\r\n setViewItem(false);\r\n }}\r\n />\r\n )}\r\n \r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport { fetchTimeout, defaultColour, RehydrateThumbnails } from \"../components/Common\";\r\nimport { Palette, API_BASE } from \"../AppConfig\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport SearchIcon from \"@material-ui/icons/Search\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport { Popper, Tooltip, LinearProgress, Chip, TablePagination } from \"@material-ui/core\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport \"react-json-view-lite/dist/index.css\";\r\nimport BSL_Select, { BSL_MultiSelect } from \"../components/BSL_Select\";\r\nimport ManageProductListControlCodes from \"./ManageProductListControlCodes\";\r\nimport ManageProductListAncillary from \"./ManageProductListAncillary\";\r\nimport Autocomplete from \"react-autocomplete\";\r\nimport ColourChip from \"../components/ColourChip\";\r\nimport ManageProductListItem from \"./ManageProductListItem\";\r\nimport BSL_ControlContainer from \"../components/BSL_ControlContainer\";\r\nimport Draggable from \"react-draggable\";\r\nimport ManageProductListItemHistory from \"./ManageProductListItemHistory\";\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\nimport Select from \"react-select\";\r\n\r\n// const useStyles = makeStyles({\r\n// root: {\r\n// background: \"#cadaff\",\r\n// width: \"98%\",\r\n// display: \"flex\",\r\n// flexDirection: \"column\",\r\n// height: \"90%\",\r\n// overflow: \"scroll\",\r\n// fontSize: \"small\",\r\n// },\r\n// });\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n height: \"92%\",\r\n flex: \"1\",\r\n width: \"100%\",\r\n maxHeight: \"100%\",\r\n margin: \"0px 10px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n },\r\n container: {\r\n height: \"90vh\",\r\n maxHeight: \"calc(90vh - 64px)\",\r\n },\r\n row: {\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: Palette.FieldersBlue,\r\n lineHeight: \"normal\",\r\n },\r\n thumbnail: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n objectFit: \"contain\",\r\n width: \"32px\",\r\n height: \"32px\",\r\n \"&:hover\": {\r\n backgroundColor: \"#d5d5d5\",\r\n },\r\n },\r\n thumbnailTooltip: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n objectFit: \"contain\",\r\n maxWidth: \"400px\",\r\n maxHeight: \"400px\",\r\n flex: 1,\r\n \".tooltip:before\": {\r\n left: \"20px\",\r\n },\r\n },\r\n editButton: {\r\n cursor: \"pointer\",\r\n color: Palette.FieldersBlue,\r\n \"&:hover\": {\r\n backgroundColor: \"#d5d5d5\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n moreButton: {\r\n padding: \"0px\",\r\n borderRadius: \"0%\",\r\n },\r\n no_job_message: {\r\n color: \"grey\",\r\n height: \"100px\",\r\n fontSize: \"20px\",\r\n fontStyle: \"italic\",\r\n paddingTop: \"40px\",\r\n position: \"absolute\",\r\n left: \"47%\",\r\n top: \"208px\",\r\n },\r\n search_container: {\r\n borderRadius: theme.brand.LYSAGHT ? \"0px\" : \"50px\",\r\n background: \"white\",\r\n border: \"1px solid #6B8799\",\r\n width: \"200px\",\r\n maxHeight: \"32px\",\r\n borderRadius: \"0px\",\r\n marginRight: \"16px\",\r\n display: \"flex\",\r\n },\r\n search_icon: {\r\n color: theme.brand.LYSAGHT ? Palette.Lysaght.DarkBlue : \"grey\",\r\n width: \"0.75em\",\r\n height: \"0.75em\",\r\n marginLeft: \"7px\",\r\n verticalAlign: \"-webkit-baseline-middle\",\r\n marginTop: theme.brand.LYSAGHT ? \"5px\" : \"inherit\",\r\n },\r\n drag_bar: {\r\n width: \"30px\",\r\n height: \"1px\",\r\n marginBottom: \"1px\",\r\n background: \"#00000030\",\r\n },\r\n}));\r\n\r\nconst columns = [\r\n {\r\n id: \"GroupingName\",\r\n label: \"Category\",\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.GroupingName);\r\n let original_value = row.GroupingName;\r\n return (\r\n <>\r\n {\r\n setValue(e.target.value);\r\n // setBrandFilter(e.target.value);\r\n }}\r\n helperText={original_value ? \"currently: \" + original_value : \"\"}\r\n />\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"GroupingName\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"Image_b64\",\r\n label: \"Image\",\r\n format: (value) => {\r\n if (value) return ;\r\n return \"\";\r\n },\r\n editor: (row, value, setValue, saveValue, value2, setValue2, param) => {\r\n if (value === undefined) setValue(row.Image_b64);\r\n if (!value2) setValue2({});\r\n let original_value = row.Image_b64;\r\n\r\n const dragOver = (e) => {\r\n let newvalue2 = { ...value2 };\r\n newvalue2.background = \"#111111AA\";\r\n setValue2(newvalue2);\r\n e.preventDefault();\r\n };\r\n const dragLeave = (e) => {\r\n let newvalue2 = { ...value2 };\r\n newvalue2.background = \"rgb(134 134 134 / 36%)\";\r\n setValue2(newvalue2);\r\n e.preventDefault();\r\n };\r\n const fileDrop = (e) => {\r\n let newvalue2 = { ...value2 };\r\n newvalue2.background = \"rgb(134 134 134 / 36%)\";\r\n setValue2(newvalue2);\r\n e.preventDefault();\r\n const files = e.dataTransfer.files;\r\n\r\n if (files.length) {\r\n handleFiles(files);\r\n }\r\n };\r\n\r\n const uploadFile = (e) => {\r\n if (e?.target?.files) handleFiles(e.target.files);\r\n };\r\n\r\n const handleFiles = (files) => {\r\n if (files.length === 0) return;\r\n let file = files[0];\r\n if (\r\n file.name.toLowerCase().endsWith(\".png\") ||\r\n file.name.toLowerCase().endsWith(\".jpg\") ||\r\n file.name.toLowerCase().endsWith(\".gif\")\r\n ) {\r\n if (file.size > 10000) {\r\n alert(\"File is too big! Less thank 10kB please\");\r\n return;\r\n }\r\n\r\n \r\n var reader = new FileReader();\r\n reader.onload = function (e) {\r\n \r\n setValue(e.target.result);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n setValue(\"\")}\r\n style={{ color: \"black\", position: \"absolute\", right: \"5px\", marginTop: \"12px\" }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n {\"Click or Drag & Drop image file to upload\"}\r\n
\r\n
\r\n \r\n \r\n\r\n {param !== \"NO BUTTON\" && (\r\n saveValue(row, \"Image_b64\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"ProductIndex\",\r\n label: \"Index\",\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.ProductIndex);\r\n let original_value = row.ProductIndex;\r\n return (\r\n <>\r\n saveValue(row, \"ProductIndex\", value)}\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={original_value ? \"currently: \" + original_value : \"\"}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"ProductIndex\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"ProductCode\",\r\n label: \"LyvesCode\",\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.ProductCode);\r\n let original_value = row.ProductCode;\r\n return (\r\n <>\r\n saveValue(row, \"ProductCode\", value)}\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={original_value ? \"currently: \" + original_value : \"\"}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"ProductCode\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"Brand\",\r\n label: \"Brand\",\r\n format: (value) => {\r\n if (value) return value;\r\n return \"ALL\";\r\n },\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.Brand);\r\n let original_value = row.Brand;\r\n return (\r\n <>\r\n {\r\n setValue(e.target.value);\r\n // setBrandFilter(e.target.value);\r\n }}\r\n helperText={original_value ? \"currently: \" + original_value : \"\"}\r\n />\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"Brand\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"ProductGroup\",\r\n label: \"Product Group\",\r\n format: (value, row) => {\r\n return <>{row?.ProductGroup + \"-\" + row?.SubGroup}>;\r\n },\r\n editor: (row, value, setValue, saveValue, value2, setValue2, param) => {\r\n if (value === undefined) setValue(row.ProductGroup);\r\n if (value2 === undefined) setValue2(row.SubGroup);\r\n return (\r\n <>\r\n \r\n \r\n saveValue(\r\n row,\r\n \"ProductGroup\",\r\n value ? value : row.ProductGroup,\r\n \"SubGroup\",\r\n value2 ? value2 : row.SubGroup\r\n )\r\n }\r\n onChange={(val) => {\r\n setValue(val);\r\n }}\r\n helperText={row?.ProductGroup ? \"currently: \" + row?.ProductGroup : \"\"}\r\n />\r\n \r\n saveValue(\r\n row,\r\n \"ProductGroup\",\r\n value ? value : row.ProductGroup,\r\n \"SubGroup\",\r\n value2 ? value2 : row.SubGroup\r\n )\r\n }\r\n onChange={(val) => {\r\n setValue2(val);\r\n }}\r\n helperText={row?.SubGroup ? row?.SubGroup : \"\"}\r\n />\r\n \r\n\r\n {param !== \"NO BUTTON\" && (\r\n \r\n saveValue(\r\n row,\r\n \"ProductGroup\",\r\n value ? value : row.ProductGroup,\r\n \"SubGroup\",\r\n value2 ? value2 : row.SubGroup\r\n )\r\n }\r\n >\r\n UPDATE\r\n \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"ProductDescription\",\r\n label: \"Description\",\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.ProductDescription);\r\n let original_value = row.ProductDescription;\r\n return (\r\n <>\r\n saveValue(row, \"ProductDescription\", value)}\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={original_value ? \"currently: \" + original_value : \"\"}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"ProductDescription\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"Cost\",\r\n label: \"Cost\",\r\n hideInTable: true,\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.Cost);\r\n let original_value = row.Cost;\r\n return (\r\n <>\r\n saveValue(row, \"Cost\", value)}\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={original_value ? \"currently: \" + original_value : \"\"}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"Cost\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"Markup\",\r\n label: \"Mark up\",\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.Markup);\r\n let original_value = row.Markup;\r\n return (\r\n <>\r\n saveValue(row, \"Markup\", value)}\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={original_value ? \"currently: \" + original_value : \"\"}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"Markup\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"SellingUOM\",\r\n label: \"Unit\",\r\n fieldInfo: \"use a number to nominate a pack size, otherwise EA or LM\",\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.SellingUOM);\r\n let original_value = row.SellingUOM;\r\n return (\r\n <>\r\n true}\r\n getItemValue={(item) => item}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n wrapperStyle={{\r\n zIndex: \"999999\",\r\n }}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"-33px\",\r\n textAlign: \"left\",\r\n maxHeight: \"250px\",\r\n overflowY: \"auto\",\r\n }}\r\n inputProps={{\r\n style: {\r\n zIndex: \"999999\",\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n // {\r\n // let new_col = e.target.value.replace(\"List: \", \"\").split(\"(\")[0].trim();\r\n // setValue(value + (value == \"\" ? \"\" : \",\") + new_col);\r\n // setValue2(\"\");\r\n // }}\r\n // onChange={(value) => {\r\n // setValue2(value);\r\n // }}\r\n // InputProps={{\r\n // style: { fontSize: \"80%\" },\r\n // ...props,\r\n // }}\r\n // helperText={helperText}\r\n // helperTextStyle={{\r\n // whiteSpace: \"break-spaces\",\r\n // backgroundColor: \"#ffe7c3\",\r\n // padding: \"5px\",\r\n // borderRadius: \"5px\",\r\n // }}\r\n // />\r\n\r\n saveValue(row, \"SellingUOM\", value)}\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n InputProps={{\r\n ...props,\r\n }}\r\n helperText={\r\n (original_value ? \"currently: \" + original_value : \"\") +\r\n \". Number to nominate pack size, otherwise EA or LM\"\r\n }\r\n />\r\n );\r\n }}\r\n value={value}\r\n onChange={(e) => setValue(value)}\r\n onSelect={(value) => {\r\n setValue(value);\r\n saveValue(row, \"SellingUOM\", value);\r\n }}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"SellingUOM\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"Colours\",\r\n label: \"Colours\",\r\n format: (value, row) => {\r\n if (!value) {\r\n return (\r\n \r\n default: {defaultColour(row?.ProductDescription, row?.GroupingName, row?.Brand)}\r\n
\r\n );\r\n }\r\n\r\n let valid = true;\r\n\r\n let materials = window.config;\r\n if (!value.includes(\",\")) {\r\n valid = false;\r\n if (materials?.colour_arrays?.[value.trim()]) {\r\n valid = true;\r\n }\r\n if (materials?.colour_map?.[value.trim()]) {\r\n valid = true;\r\n }\r\n }\r\n\r\n return (\r\n \r\n {!valid && (\r\n \r\n )}\r\n {value}\r\n
\r\n );\r\n },\r\n editor: (row, value, setValue, saveValue, value2, setValue2, param, materials) => {\r\n if (value === undefined) setValue(row.Colours);\r\n let original_value = row.Colours;\r\n\r\n let colour_keys = [];\r\n for (let list_key in materials.colour_arrays) {\r\n let list = materials.colour_arrays?.[list_key];\r\n colour_keys.push(\"List: \" + list_key + \" (\" + list.length + \" Colours)\");\r\n }\r\n\r\n colour_keys = [...colour_keys, ...Object.keys(materials.colour_map)];\r\n\r\n let value_colours = value.split(\",\");\r\n let colours_chips = [];\r\n for (let colour of value_colours) {\r\n if (materials.colour_arrays?.[colour]) {\r\n let list_chips = [];\r\n for (let list_colour of materials.colour_arrays?.[colour])\r\n list_chips.push(\r\n <>\r\n ● \r\n \r\n {list_colour} \r\n \r\n >\r\n );\r\n\r\n colours_chips.push(\r\n <>\r\n \r\n \r\n {colour} (List) \r\n >\r\n }\r\n onDelete={() => {\r\n let new_value = \"\";\r\n for (let val_colour of value_colours) {\r\n if (val_colour.trim() !== colour.trim())\r\n new_value += (new_value == \"\" ? \"\" : \",\") + val_colour;\r\n }\r\n setValue(new_value.trim());\r\n }}\r\n />\r\n \r\n {list_chips}
\r\n >\r\n );\r\n } else {\r\n colours_chips.push(\r\n <>\r\n \r\n \r\n {colour} \r\n >\r\n }\r\n onDelete={() => {\r\n let new_value = \"\";\r\n for (let val_colour of value_colours) {\r\n if (val_colour.trim() !== colour.trim())\r\n new_value += (new_value == \"\" ? \"\" : \",\") + val_colour;\r\n }\r\n setValue(new_value.trim());\r\n }}\r\n />\r\n \r\n >\r\n );\r\n }\r\n }\r\n\r\n let helperText = [];\r\n if (original_value && param !== \"NO BUTTON\")\r\n helperText.push(\r\n <>\r\n currently: \r\n {original_value}\r\n \r\n >\r\n );\r\n\r\n return (\r\n <>\r\n {\r\n setValue(value);\r\n }}\r\n />\r\n {colours_chips}
\r\n {\r\n if (item === null || item === undefined || value === null) return true;\r\n if (!item.toLowerCase || !value.toLowerCase) return true;\r\n return item.toLowerCase().indexOf(value.toLowerCase()) > -1;\r\n }}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n wrapperStyle={{\r\n zIndex: \"999999\",\r\n }}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"-21px\",\r\n textAlign: \"left\",\r\n maxHeight: \"250px\",\r\n overflowY: \"auto\",\r\n }}\r\n inputProps={{\r\n style: {\r\n zIndex: \"999999\",\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {\r\n let new_col = e.target.value.replace(\"List: \", \"\").split(\"(\")[0].trim();\r\n setValue(value + (value == \"\" ? \"\" : \",\") + new_col);\r\n setValue2(\"\");\r\n }}\r\n onChange={(value) => {\r\n setValue2(value);\r\n }}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n helperText={helperText}\r\n helperTextStyle={\r\n helperText.length > 0\r\n ? {\r\n whiteSpace: \"break-spaces\",\r\n backgroundColor: \"#ffe7c3\",\r\n padding: \"5px\",\r\n borderRadius: \"5px\",\r\n }\r\n : {}\r\n }\r\n />\r\n );\r\n }}\r\n value={value2}\r\n onChange={(e) => setValue2(e.target.value)}\r\n onSelect={(val) => {\r\n let new_col = val.replace(\"List: \", \"\").split(\"(\")[0].trim();\r\n setValue((value + (value == \"\" ? \"\" : \",\") + new_col).trim());\r\n setValue2(\"\");\r\n }}\r\n />\r\n {param !== \"NO BUTTON\" && (\r\n saveValue(row, \"Colours\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"AncillaryParts\",\r\n label: \"Ancillary Parts\",\r\n format: (value, row) => {\r\n if (typeof value === \"object\" || value.startsWith(\"{\")) {\r\n var parts = \"\";\r\n var ancillary_json = typeof value === \"object\" ? value : JSON.parse(value);\r\n if (ancillary_json[\"AncillaryParts\"])\r\n for (var item of ancillary_json[\"AncillaryParts\"]) {\r\n var qty = item?.Qty;\r\n if (qty === \"\" || qty === undefined) qty = \"1\";\r\n else if (qty && qty?.includes && qty.includes(\"=\")) qty = \"X\";\r\n var code = item?.Code ?? \"\";\r\n var conditions = item?.Conditions ? \"*\" : \"\";\r\n if (item?.Conditions && JSON.stringify(item?.Conditions).includes(\"Lysaght\"))\r\n conditions += \"Lysaght*\";\r\n if (item?.Conditions && JSON.stringify(item?.Conditions).includes(\"Fielders\"))\r\n conditions += \"Fielders*\";\r\n var use = item?.Use ? \"(\" + item?.Use + \")\" : \"\";\r\n if (code != \"\") parts += qty + \"x\" + code + use + conditions + \"\\n\";\r\n }\r\n return {parts}
;\r\n } else {\r\n let parts = \"\";\r\n let split = value.split(\" \");\r\n for (let i = 0; i < split.length; i++) {\r\n var this_item = split[i];\r\n if (this_item !== \"\") {\r\n if (this_item.includes(\"(\") && !this_item.includes(\")\") && i < split.length) {\r\n while (i <= split.length) {\r\n i++;\r\n let next_bit = split[i];\r\n this_item += \" \" + next_bit;\r\n if (next_bit.includes(\")\")) break;\r\n }\r\n }\r\n parts += this_item + \"\\n\";\r\n }\r\n }\r\n\r\n return {parts}
;\r\n }\r\n },\r\n editor: (row, value, setValue, saveValue, value2, setValue2, pricefileDescSummary) => {\r\n if (!row?.ProductCode) return null;\r\n return (\r\n saveValue(null)}\r\n saveValue={saveValue}\r\n pricefileDescSummary={pricefileDescSummary}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n id: \"PromptTextCodes\",\r\n label: \"Control Codes\",\r\n format: (value, row) => {\r\n let arr = null;\r\n if (value?.replace)\r\n arr = value\r\n .replace(/(\"[\\s\\S]*?\")/g, (m, cg) => {\r\n return cg.replace(/\\s/g, \"LINE-BREAK-TO-PRESERVE\");\r\n })\r\n .split(\" \")\r\n .filter((i) => Boolean(i.trim()))\r\n .map((i) => i.replace(/LINE-BREAK-TO-PRESERVE/g, \" \"));\r\n\r\n let val_list = \"\";\r\n if (arr)\r\n for (let line of arr) {\r\n let output = line;\r\n if (line.startsWith(\"SL\")) {\r\n output = \"\";\r\n let sls = line.split(\"|\");\r\n for (let sl of sls) {\r\n output += (output === \"\" ? \"\" : \"|\") + sl.split(\"(\")[0];\r\n }\r\n }\r\n val_list += (output.length > 30 ? output.substring(0, 30) + \"...\" : output) + \"\\n\";\r\n }\r\n\r\n return {val_list}
;\r\n },\r\n editor: (row, value, setValue, saveValue, value2, setValue2, pricefileDescSummary) => {\r\n if (!row?.ProductCode) return null;\r\n return (\r\n saveValue(null)}\r\n saveValue={saveValue}\r\n pricefileDescSummary={pricefileDescSummary}\r\n />\r\n );\r\n },\r\n },\r\n {\r\n id: \"Notes\",\r\n label: \"Notes\",\r\n format: (value, row) => {\r\n let output = value;\r\n if (output === undefined) output = \"\";\r\n return {output}
;\r\n },\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n if (value === undefined) setValue(row.Notes ? row.Notes : \"\");\r\n let original_value = row.Notes ? row.Notes : \"\";\r\n return (\r\n <>\r\n saveValue(row, \"Notes\", value)}\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={(value ? value.length : 0) + \"/150 characters.\"}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n {\r\n if (value.length > 150) {\r\n alert(\"max 150 charaters exceeded\");\r\n return;\r\n }\r\n saveValue(row, \"Notes\", value);\r\n }}\r\n >\r\n UPDATE\r\n \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"Hidden\",\r\n label: \"Hide in BOM\",\r\n format: (value, row) => {\r\n let output = value;\r\n if (output === \"1\" || output === 1) return \"Yes\";\r\n return No ;\r\n },\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n return (\r\n <>\r\n {\r\n setValue(val);\r\n e.stopPropagation();\r\n }}\r\n />\r\n\r\n {\r\n saveValue(row, \"Hidden\", value);\r\n }}\r\n >\r\n UPDATE\r\n \r\n >\r\n );\r\n },\r\n },\r\n {\r\n id: \"State\",\r\n label: \"States\",\r\n hideInTable: true,\r\n editor: (row, value, setValue, saveValue, value2) => {\r\n // if (value === undefined) setValue(row.Cost);\r\n // let original_value = row.Cost;\r\n const allStates = [\"NSW\", \"QLD\", \"VIC\", \"TAS\", \"SA\", \"WA\", \"NT\"];\r\n\r\n const customStyles = {\r\n container: (provided) => ({\r\n ...provided,\r\n margin: \"2px 2px 0px 8px\",\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n border: \"1px solid \" + Palette.Control.DarkBlueTrans,\r\n }),\r\n option: (provided) => ({\r\n ...provided,\r\n fontSize: \"14px !important\",\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n fontSize: \"14px !important\",\r\n }),\r\n // Add more styles as needed\r\n };\r\n\r\n return (\r\n <>\r\n \r\n available in LLD: \r\n ({ value: state, label: state }))}\r\n value={(value.LLD || []).map((selectedState) => ({\r\n value: selectedState,\r\n label: selectedState,\r\n }))}\r\n onChange={(selectedOptions) => {\r\n \r\n const selectedLLD = selectedOptions.map((option) => option.value);\r\n setValue({\r\n ...value,\r\n LLD: selectedLLD,\r\n CDS: value.CDS || [],\r\n });\r\n }}\r\n styles={customStyles}\r\n />\r\n
\r\n\r\n \r\n available in CDS: \r\n ({ value: state, label: state }))}\r\n value={(value.CDS || []).map((selectedState) => ({\r\n value: selectedState,\r\n label: selectedState,\r\n }))}\r\n onChange={(selectedOptions) => {\r\n const selectedCDS = selectedOptions.map((option) => option.value);\r\n setValue({\r\n ...value,\r\n CDS: selectedCDS,\r\n LLD: value.LLD || [],\r\n });\r\n }}\r\n styles={customStyles}\r\n />\r\n
\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n saveValue(row, \"State\", value)}>UPDATE \r\n )}\r\n >\r\n );\r\n },\r\n },\r\n];\r\n\r\nconst menu_columm = {\r\n id: \"Menu\",\r\n label: \"Menu\",\r\n editor: (row, value, setValue, saveValue, value2, setValue2, not_used, not_used2, setEditItem) => {\r\n if (!value2) setValue2({ ...row });\r\n\r\n let new_row = value2 ? { ...value2 } : { ...row };\r\n\r\n return (\r\n <>\r\n {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditItem({\r\n action: \"EDIT\",\r\n row: row,\r\n });\r\n }}\r\n >\r\n EDIT\r\n \r\n \r\n {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditItem({\r\n action: \"DUPLICATE\",\r\n row: row,\r\n });\r\n }}\r\n >\r\n DUPLICATE\r\n \r\n \r\n {\r\n setValue(\"HISTORY\");\r\n setValue2(row);\r\n }}\r\n >\r\n HISTORY\r\n \r\n \r\n {\r\n if (value === \"DELETE\") saveValue(row, \"DELETE\");\r\n else setValue(\"DELETE\");\r\n }}\r\n >\r\n \r\n {value === \"DELETE\" ? \"CONFIRM?\" : \"DELETE\"}\r\n \r\n >\r\n );\r\n },\r\n};\r\n\r\nexport default function ManageProductList(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n // const { materials, setMaterials, pricefile, setPricefile, pricefileDescSummary, setPricefileDescSummary } = props;\r\n\r\n // const config = useSelector((state) => state.config);\r\n const [intialise, setIntialise] = React.useState(false);\r\n // const [pricefile, setPricefile] = React.useState(null);\r\n // const [pricefileDescSummary, setPricefileDescSummary] = React.useState(null);\r\n const [cdsOffering, setCDSOffering] = React.useState(null);\r\n const [lldOffering, setLLDOffering] = React.useState(null);\r\n\r\n const [materials, setMaterials] = React.useState(null);\r\n const [pricefile, setPricefile] = React.useState(null);\r\n const [pricefileDescSummary, setPricefileDescSummary] = React.useState(null);\r\n // const [cds_docs, setCDSOffering] = React.useState(null);\r\n // const [lld_docs, setLLDOffering] = React.useState(null);\r\n const [materialsKeys, setMaterialsKeys] = React.useState(null);\r\n\r\n // const [materials, setMaterials] = React.useState(null);\r\n // const [mergedOffering, setMergedOffering] = React.useState(null);\r\n\r\n const [tableRows, setTableRows] = React.useState([]);\r\n\r\n const [searchFilter, setSearchFilter] = React.useState(\"\");\r\n const [categoryFilter, setCategoryFilter] = React.useState(\"\");\r\n const [brandFilter, setBrandFilter] = React.useState(\"\");\r\n const [editCell, setEditCell] = React.useState(null);\r\n const [showLoading, setShowLoading] = React.useState(false);\r\n const [saving, setSaving] = React.useState({}); // not fast enough! hackign with a global var\r\n if (window.saving === undefined) window.saving = {};\r\n\r\n const [page, setPage] = React.useState(0);\r\n const [rowsPerPage, setRowsPerPage] = React.useState(100);\r\n const [numFilteredItems, setNumFilteredItems] = React.useState(0);\r\n\r\n const [value, setValue] = React.useState(\"\");\r\n const [value2, setValue2] = React.useState(\"\");\r\n\r\n const [editItem, setEditItem] = React.useState(false);\r\n const [tabHasFocus, setTabHasFocus] = React.useState(true);\r\n\r\n useEffect(() => {\r\n const handleFocus = () => {\r\n setTabHasFocus(true);\r\n setIntialise(false);\r\n };\r\n\r\n const handleBlur = () => {\r\n setTabHasFocus(false);\r\n };\r\n\r\n window.addEventListener(\"focus\", handleFocus);\r\n window.addEventListener(\"blur\", handleBlur);\r\n\r\n return () => {\r\n window.removeEventListener(\"focus\", handleFocus);\r\n window.removeEventListener(\"blur\", handleBlur);\r\n };\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n \r\n if (!intialise) {\r\n setShowLoading(true);\r\n let api_url = API_BASE() + \"admin/GetPriceFileData\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n let pricefile = json[\"PRICE_FILE\"];\r\n pricefile[\"data\"].sort((a, b) => {\r\n return a.ProductIndex.localeCompare(b.ProductIndex);\r\n });\r\n\r\n //RehydratePriceFile\r\n pricefile = RehydrateThumbnails(pricefile);\r\n\r\n setPricefile(pricefile);\r\n\r\n setCDSOffering(json[\"CEN_OFFERING\"]);\r\n setLLDOffering(json[\"LLD_OFFERING\"]);\r\n if (json?.[\"MATERIALS\"]) setMaterials(json[\"MATERIALS\"]);\r\n\r\n setIntialise(true);\r\n setShowLoading(false);\r\n\r\n // // merg will only have the common colours\r\n // let merged = { colour_map: {}, colour_arrays: {} };\r\n // for (let lld_colour_map_key in json[\"LLD_OFFERING\"].colour_map) {\r\n // for (let cds_colour_map_key in json[\"CEN_OFFERING\"].colour_map) {\r\n // if (lld_colour_map_key === cds_colour_map_key) {\r\n // merged.colour_map[cds_colour_map_key] =\r\n // json[\"CEN_OFFERING\"].colour_map[cds_colour_map_key];\r\n // }\r\n // }\r\n // }\r\n // for (let lld_colour_array_key in json[\"LLD_OFFERING\"].colour_arrays) {\r\n // for (let cds_colour_array_key in json[\"CEN_OFFERING\"].colour_arrays) {\r\n // if (lld_colour_array_key === cds_colour_array_key) {\r\n // merged.colour_arrays[cds_colour_array_key] =\r\n // json[\"CEN_OFFERING\"].colour_arrays[cds_colour_array_key];\r\n // }\r\n // }\r\n // }\r\n\r\n // setMergedOffering(merged);\r\n })\r\n .catch((e) => {\r\n setIntialise(true);\r\n \r\n setPricefile(null);\r\n setShowLoading(false);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n React.useEffect(() => {\r\n let table_rows = [];\r\n let row_i = 0;\r\n let start_i = page * rowsPerPage;\r\n let end_i = start_i + rowsPerPage;\r\n if (rows)\r\n rows.map((row, index) => {\r\n if (\r\n searchFilter &&\r\n !(\r\n row.ProductCode +\r\n row.ProductIndex +\r\n row.ProductDescription +\r\n row.PromptTextCodes +\r\n row.AncillaryParts\r\n )\r\n .toUpperCase()\r\n .includes(searchFilter.toUpperCase())\r\n )\r\n return null;\r\n if (brandFilter && brandFilter != \"\" && row.Brand !== brandFilter) return null;\r\n if (categoryFilter && categoryFilter != \"\" && !row.GroupingName.includes(categoryFilter)) return null;\r\n\r\n row_i++;\r\n\r\n if (row_i < start_i) return null;\r\n if (row_i > end_i) return null;\r\n\r\n table_rows.push(\r\n \r\n {columns.map((column) => {\r\n if (column?.hideInTable) return null;\r\n let value = row[column.id];\r\n\r\n return (\r\n {\r\n \r\n if (editCell || column?.editor === undefined) {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditCell(null);\r\n } else {\r\n setValue(value);\r\n setValue2(\"\");\r\n setEditCell({\r\n anchorEl: e.currentTarget,\r\n row: row,\r\n column: { ...column },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n {column.format && value !== undefined ? column.format(value, row) : value}\r\n {window.saving &&\r\n window.saving?.[row.id] &&\r\n column?.id === window.saving?.[row.id] && }\r\n {window.saving &&\r\n window.saving?.[row.id] &&\r\n \"Error:\" + column?.id === window.saving?.[row.id] && (\r\n \r\n )}\r\n \r\n );\r\n })}\r\n {\r\n if (editCell || menu_columm?.editor === undefined) {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditCell(null);\r\n } else {\r\n setValue(value);\r\n setEditCell({\r\n anchorEl: e.currentTarget,\r\n row: row,\r\n column: { ...menu_columm },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n \r\n {window.saving &&\r\n window.saving?.[row.id] &&\r\n menu_columm?.id === window.saving?.[row.id] && }\r\n {window.saving &&\r\n window.saving?.[row.id] &&\r\n \"Error:\" + menu_columm?.id === window.saving?.[row.id] && (\r\n \r\n )}\r\n \r\n \r\n );\r\n });\r\n setNumFilteredItems(row_i);\r\n setTableRows(table_rows);\r\n }, [pricefile, searchFilter, brandFilter, categoryFilter, saving, page, rowsPerPage]);\r\n\r\n React.useEffect(() => {\r\n if (pricefile) {\r\n let summary = {};\r\n for (let item of pricefile[\"data\"]) {\r\n summary[item.ProductIndex] = item.ProductDescription;\r\n }\r\n setPricefileDescSummary(summary);\r\n }\r\n }, [pricefile]);\r\n\r\n let noJobMessage = \"Items Loading...\";\r\n let rows = pricefile?.[\"data\"];\r\n\r\n const CustomTooltip = withStyles({\r\n tooltip: {\r\n color: \"write\",\r\n backgroundColor: \"white\",\r\n fontWeight: \"bold\",\r\n fontSize: \"12px\",\r\n border: \"1px solid #8A8B8A\",\r\n maxWidth: \"400px\",\r\n marginLeft: \"200px\",\r\n \"& > span\": {\r\n left: \"5px !important\",\r\n color: \"#8A8B8A\",\r\n },\r\n },\r\n })(Tooltip);\r\n\r\n const saveValue = (row, parameter, value, parameter2 = null, value2) => {\r\n setEditCell(null);\r\n setValue(\"\");\r\n setValue2(\"\");\r\n\r\n if (!row) {\r\n return;\r\n }\r\n\r\n if (parameter2 && row[parameter] === value && row[parameter2] === value2) {\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n return;\r\n }\r\n if (\r\n parameter !== \"DELETE\" &&\r\n parameter !== \"ADD\" &&\r\n parameter !== \"EDIT\" &&\r\n row[parameter] === value &&\r\n parameter2 === null\r\n ) {\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n return;\r\n }\r\n\r\n let new_row = { ...row };\r\n\r\n window.saving[row.id] = parameter;\r\n setSaving({ ...window.saving });\r\n\r\n let api_url = API_BASE() + \"admin/UpdatePriceFile?action=Update_\" + parameter.replace(\" \", \"_\");\r\n if (parameter === \"DELETE\") {\r\n api_url = API_BASE() + \"admin/UpdatePriceFile?action=delete\";\r\n setShowLoading(true);\r\n } else if (parameter === \"ADD\") {\r\n let max = 0;\r\n for (let item of pricefile[\"data\"]) {\r\n if (Number(item.id) > max) {\r\n max = Number(item.id);\r\n }\r\n }\r\n new_row.id = max + 1;\r\n api_url = API_BASE() + \"admin/UpdatePriceFile?action=add\";\r\n setShowLoading(true);\r\n } else if (parameter === \"EDIT\") {\r\n setShowLoading(true);\r\n } else {\r\n new_row[parameter] = value;\r\n if (parameter2) new_row[parameter2] = value2;\r\n }\r\n\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(new_row),\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n let new_row_server = await response.json();\r\n let new_pricefile = { ...pricefile };\r\n\r\n if (parameter === \"DELETE\") {\r\n new_pricefile[\"data\"] = new_pricefile[\"data\"].filter(function (item) {\r\n return item.id !== new_row_server.id;\r\n });\r\n } else if (parameter === \"ADD\") {\r\n new_pricefile[\"data\"].push(new_row);\r\n } else {\r\n new_pricefile[\"data\"] = new_pricefile[\"data\"].map((item, index) => {\r\n if (item?.id === new_row_server?.id) {\r\n return new_row_server;\r\n } else {\r\n return item;\r\n }\r\n });\r\n }\r\n\r\n new_pricefile[\"data\"].sort((a, b) => {\r\n return a.ProductIndex.localeCompare(b.ProductIndex);\r\n });\r\n\r\n setPricefile(new_pricefile);\r\n\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n } else {\r\n throw \"Error saving values\";\r\n }\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n setShowLoading(false);\r\n })\r\n .catch((e) => {\r\n //try again\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(new_row),\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n let new_row_server = await response.json();\r\n let new_pricefile = { ...pricefile };\r\n\r\n if (parameter === \"DELETE\") {\r\n new_pricefile[\"data\"] = new_pricefile[\"data\"].filter(function (item) {\r\n return item.id !== new_row_server.id;\r\n });\r\n } else if (parameter === \"ADD\") {\r\n new_pricefile[\"data\"].push(new_row);\r\n } else {\r\n new_pricefile[\"data\"] = new_pricefile[\"data\"].map((item, index) => {\r\n if (item?.id === new_row_server?.id) {\r\n return new_row_server;\r\n } else {\r\n return item;\r\n }\r\n });\r\n }\r\n\r\n new_pricefile[\"data\"].sort((a, b) => {\r\n return a.ProductIndex.localeCompare(b.ProductIndex);\r\n });\r\n setPricefile(new_pricefile);\r\n\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n } else {\r\n throw \"Error saving values\";\r\n }\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n setShowLoading(false);\r\n })\r\n .catch((e) => {\r\n \r\n // setSaving({ ...saving, [row.id]: \"Error:\" + saving[row.id] });\r\n window.saving[row.id] = \"Error:\" + window.saving[row.id];\r\n setSaving({ ...window.saving });\r\n setShowLoading(false);\r\n });\r\n });\r\n };\r\n\r\n const deleteRow = (row) => {\r\n setEditCell(null);\r\n setValue(\"\");\r\n setValue2(\"\");\r\n\r\n if (!row) {\r\n return;\r\n }\r\n window.saving[row.id] = menu_columm.id;\r\n setSaving({ ...window.saving });\r\n\r\n let api_url = API_BASE() + \"admin/UpdatePriceFile?action=delete\";\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(row),\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n let new_row_server = await response.json();\r\n let new_pricefile = { ...pricefile };\r\n\r\n new_pricefile[\"data\"] = new_pricefile[\"data\"].filter(function (item) {\r\n return item.id !== new_row_server.id;\r\n });\r\n new_pricefile[\"data\"].sort((a, b) => {\r\n return a.ProductIndex.localeCompare(b.ProductIndex);\r\n });\r\n setPricefile(new_pricefile);\r\n\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n } else {\r\n throw \"Error saving values\";\r\n }\r\n window.saving[row.id] = null;\r\n setSaving({ ...window.saving });\r\n })\r\n .catch((e) => {\r\n \r\n // setSaving({ ...saving, [row.id]: \"Error:\" + saving[row.id] });\r\n window.saving[row.id] = \"Error:\" + window.saving[row.id];\r\n setSaving({ ...window.saving });\r\n });\r\n };\r\n\r\n let new_row = value2 ? { ...value2 } : {};\r\n\r\n return (\r\n setEditCell(null)}>\r\n \r\n
{\r\n setEditItem({\r\n action: \"NEW\",\r\n row: {\r\n id: \"\",\r\n ProductCode: \"\",\r\n ProductDescription: \"\",\r\n ProductIndex: \"\",\r\n GroupingName: categoryFilter ? categoryFilter : \"Misc\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n Brand: \"\",\r\n Hidden: \"0\",\r\n State: {},\r\n },\r\n });\r\n }}\r\n disabled={!pricefile}\r\n >\r\n ADD NEW\r\n \r\n\r\n
{\r\n setCategoryFilter(e.target.value);\r\n setPage(0);\r\n }}\r\n />\r\n {\r\n setBrandFilter(e.target.value);\r\n setPage(0);\r\n }}\r\n />\r\n
\r\n \r\n \r\n {\r\n if (e.key === \"Enter\") {\r\n e.target.blur();\r\n }\r\n }}\r\n InputProps={{\r\n disableUnderline: true,\r\n }}\r\n onChange={(e) => {\r\n // if (categoryFilter !== \"\");\r\n setSearchFilter(e.target.value);\r\n }}\r\n onBlur={(e) => {\r\n setSearchFilter(e.target.value);\r\n setPage(0);\r\n }}\r\n />\r\n {\r\n setSearchFilter(\"\");\r\n setPage(0);\r\n }}\r\n style={{}}\r\n >\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {columns.map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {(!rows || rows.length === 0 || showLoading) && (\r\n \r\n )}\r\n {tableRows} \r\n {(!rows || rows.length === 0) && {noJobMessage}
}\r\n
\r\n \r\n {\r\n return (\r\n from +\r\n \"-\" +\r\n to +\r\n \" of \" +\r\n (count !== -1 ? count : \"more than \" + to) +\r\n (rows && count < rows.length ? \" (\" + rows.length + \" total)\" : \"\")\r\n );\r\n }}\r\n onChangePage={(event, newPage) => {\r\n setPage(newPage);\r\n }}\r\n onChangeRowsPerPage={(event) => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n }}\r\n style={{\r\n maxHeight: \"39px\",\r\n overflow: \"hidden\",\r\n marginTop: \"-10px\",\r\n }}\r\n />\r\n {/* setEditCell(null)}>\r\n \r\n Editing '{editCell?.col_id}' for '{editCell?.row?.ProductCode}'\r\n \r\n \r\n \r\n To subscribe to this website, please enter your email address here. We will send updates\r\n occasionally.\r\n \r\n \r\n \r\n setEditCell(null)}>Cancel \r\n setEditCell(null)}>Subscribe \r\n \r\n */}\r\n {editItem && (\r\n {\r\n setEditItem(false);\r\n }}\r\n config={{\r\n cdsOffering: cdsOffering,\r\n lldOffering: lldOffering,\r\n // mergedOffering: mergedOffering,\r\n pricefileDescSummary: pricefileDescSummary,\r\n materials: materials,\r\n }}\r\n saveValue={(row, param) => {\r\n saveValue(row, param);\r\n setEditItem(false);\r\n }}\r\n />\r\n )}\r\n {value === \"HISTORY\" && (\r\n {\r\n setEditItem(false);\r\n setValue(\"\");\r\n setValue2(\"\");\r\n }}\r\n columns={columns}\r\n config={{\r\n cdsOffering: cdsOffering,\r\n lldOffering: lldOffering,\r\n // mergedOffering: mergedOffering,\r\n pricefileDescSummary: pricefileDescSummary,\r\n materials: materials,\r\n }}\r\n // saveValue={(row, param) => {\r\n // saveValue(row, param);\r\n // setEditItem(false);\r\n // }}\r\n />\r\n )}\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n {\" \"}\r\n \r\n \r\n \r\n setEditCell(null)}\r\n style={{ color: \"white\", position: \"absolute\", right: \"5px\" }}\r\n >\r\n \r\n \r\n\r\n {editCell?.column?.editor(\r\n editCell?.row,\r\n value,\r\n setValue,\r\n saveValue,\r\n value2,\r\n setValue2,\r\n pricefileDescSummary,\r\n materials,\r\n // editCell?.row[\"Brand\"] === \"CDS\"\r\n // ? cdsOffering\r\n // : editCell?.row[\"Brand\"] === \"LLD\"\r\n // ? lldOffering\r\n // : {},\r\n // : mergedOffering,\r\n setEditItem\r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport * as BSL_Common from \"../components/BSL_CommonControls\";\r\nimport { IconButton } from \"@material-ui/core\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flex: 1,\r\n maxWidth: \"90%\",\r\n minWidth: \"600px\",\r\n },\r\n container: {\r\n height: \"90%\",\r\n maxHeight: \"800px\",\r\n },\r\n row: {\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n categoryHeadingCell: {\r\n textAlign: \"center\",\r\n backgroundColor: Palette.FieldersOrange + \" !important\",\r\n padding: \"2px !important\",\r\n borderTopLeftRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n borderLeft: \"1px solid white !important\",\r\n borderRight: \"1px solid white !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n categoryHeadingCellBlank: {\r\n textAlign: \"center\",\r\n backgroundColor: \"#ffffff !important\",\r\n padding: \"2px !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n // padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: Palette.FieldersBlue,\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n headingRow: {\r\n backgroundColor: Palette.FieldersBlue,\r\n },\r\n editor: {\r\n border: \"1px solid grey\",\r\n width: \"40px\",\r\n },\r\n}));\r\n\r\nconst wz_columns = () => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"MaxInternalSpan\",\r\n label: \"Internal\",\r\n grouping: \"Default Spans (1 Side)\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxEndSpan\",\r\n label: \"End\",\r\n grouping: \"Default Spans (1 Side)\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxOverhang\",\r\n label: \"Overhang\",\r\n grouping: \"Default Spans (1 Side)\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxInternalSpan_2Sides\",\r\n label: \"Internal\",\r\n grouping: \"2 Sides Blocked\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxEndSpan_2Sides\",\r\n label: \"End\",\r\n grouping: \"2 Sides Blocked\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxOverhang_2Sides\",\r\n label: \"Overhang\",\r\n grouping: \"2 Sides Blocked\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxInternalSpan_3Sides\",\r\n label: \"Internal\",\r\n grouping: \"3 Sides Blocked\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxEndSpan_3Sides\",\r\n label: \"End\",\r\n grouping: \"3 Sides Blocked\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxOverhang_3Sides\",\r\n label: \"Overhang\",\r\n grouping: \"3 Sides Blocked\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxInternalSpan_0Sides\",\r\n label: \"Internal\",\r\n grouping: \"Freestanding\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxEndSpan_0Sides\",\r\n label: \"End\",\r\n grouping: \"Freestanding\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"MaxOverhang_0Sides\",\r\n label: \"Overhang\",\r\n grouping: \"Freestanding\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n];\r\n\r\nexport default function ManageMaterialsSpans(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { row, saveValue, onClose } = props;\r\n const [spans, setSpans] = React.useState({ ...row.Spans });\r\n const [displayData, setDisplayData] = React.useState(JSON.stringify(row.Spans, null, 4));\r\n const [displayDataValidJSON, setDisplayDataValidJSON] = React.useState(true);\r\n\r\n const [edit, setEdit] = React.useState(null);\r\n\r\n const checkValidJSON = (str) => {\r\n try {\r\n JSON.parse(str);\r\n } catch (e) {\r\n setDisplayDataValidJSON(false);\r\n return false;\r\n }\r\n setDisplayDataValidJSON(true);\r\n return true;\r\n };\r\n\r\n const setSpanValue = (parent, parameter, value) => {\r\n let data = { ...spans };\r\n if (parent) {\r\n if (data?.[parent] === undefined) data[parent] = {};\r\n data[parent][parameter] = Number(value);\r\n if (value === \"\") delete data[parent][parameter];\r\n } else {\r\n data[parameter] = Number(value);\r\n if (value === \"\") delete data[parameter][parameter];\r\n }\r\n setSpans(data);\r\n setDisplayData(JSON.stringify(data, null, 4));\r\n };\r\n\r\n // React.useEffect(() => {\r\n // setDisplayData(getData());\r\n // }, [MaxInternalSpan, MaxEndSpan, MaxOverhang]);\r\n\r\n const getData = () => {\r\n let data = \"\";\r\n return data;\r\n };\r\n\r\n const getGroupHeaders = (columns) => {\r\n let grouping_headers = [];\r\n\r\n let last_grouping = undefined;\r\n let num_in_this_group = -1;\r\n let header_i = 0;\r\n for (let column of columns()) {\r\n if (column?.hideInTable) continue;\r\n let this_grouping = column?.grouping;\r\n if (\r\n this_grouping !== last_grouping ||\r\n (this_grouping === undefined && last_grouping) ||\r\n num_in_this_group > 8\r\n ) {\r\n //change in grouping. print cell\r\n\r\n let cell_style = {};\r\n if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n grouping_headers.push(\r\n \r\n {last_grouping ? last_grouping : \"\"}\r\n \r\n );\r\n header_i++;\r\n last_grouping = this_grouping;\r\n num_in_this_group = 0;\r\n } else {\r\n num_in_this_group++;\r\n }\r\n }\r\n\r\n if (num_in_this_group > 0) {\r\n let cell_style = {};\r\n if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n grouping_headers.push(\r\n \r\n {last_grouping ? last_grouping : \"\"}\r\n \r\n );\r\n }\r\n return grouping_headers;\r\n };\r\n\r\n let keys = [\"N1\", \"N2\", \"N3\", \"N4\", \"N5\", \"N6\", \"C1\", \"C2\", \"C3\", \"C4\"];\r\n\r\n return (\r\n {\r\n if (!displayDataValidJSON) {\r\n alert(\"JSON is not valid. You cannot save this data. Fix it up and try again.\");\r\n } else {\r\n saveValue(props.section, props.ref_key, props.row, \"Spans\", spans);\r\n }\r\n }}\r\n button2Text=\"Cancel\"\r\n button2Click={onClose}\r\n style={{ maxWidth: \"initial\" }}\r\n fullWidth={true}\r\n maxWidth={\"xl\"}\r\n >\r\n \r\n \r\n \r\n setSpanValue(null, \"MaxInternalSpan\", e.target.value)}\r\n onChange={(val) => setSpanValue(null, \"MaxInternalSpan\", val)}\r\n onBlur={(val) => setSpanValue(null, \"MaxInternalSpan\", val)}\r\n />\r\n setSpanValue(null, \"MaxEndSpan\", e.target.value)}\r\n onChange={(val) => setSpanValue(null, \"MaxEndSpan\", val)}\r\n onBlur={(val) => setSpanValue(null, \"MaxEndSpan\", val)}\r\n />\r\n setSpanValue(null, \"MaxOverhang\", e.target.value)}\r\n onChange={(val) => setSpanValue(null, \"MaxOverhang\", val)}\r\n onBlur={(val) => setSpanValue(null, \"MaxOverhang\", val)}\r\n />\r\n \r\n \r\n \r\n \r\n {getGroupHeaders(wz_columns)} \r\n \r\n {wz_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n {keys.map((key, index) => {\r\n return (\r\n \r\n {wz_columns().map((column) => {\r\n let inherit = false;\r\n let inherit_value = 0;\r\n if (column.id.includes(\"MaxInternalSpan\")) {\r\n inherit_value = spans?.MaxInternalSpan;\r\n if (spans?.[key]?.MaxInternalSpan !== undefined)\r\n inherit_value = spans?.[key]?.MaxInternalSpan;\r\n }\r\n if (column.id.includes(\"MaxEndSpan\")) {\r\n inherit_value = spans?.MaxEndSpan;\r\n if (spans?.[key]?.MaxEndSpan !== undefined)\r\n inherit_value = spans?.[key]?.MaxEndSpan;\r\n }\r\n if (column.id.includes(\"MaxOverhang\")) {\r\n inherit_value = spans?.MaxOverhang;\r\n if (spans?.[key]?.MaxOverhang !== undefined)\r\n inherit_value = spans?.[key]?.MaxOverhang;\r\n }\r\n let value = spans?.[key]?.[column.id];\r\n if (value === undefined && column.id !== \"Key\") inherit = true;\r\n\r\n let display_value = \"\";\r\n if (column.id === \"Key\") display_value = key;\r\n else if (inherit) display_value = inherit_value;\r\n else display_value = value;\r\n\r\n return (\r\n \r\n \r\n {inherit && (\r\n
\r\n → inherited\r\n
\r\n )}\r\n {edit === key + \",\" + column.id ? (\r\n
\r\n \r\n setSpanValue(key, column.id, e.target.value)\r\n }\r\n onKeyPress={(e) => {\r\n if (\r\n e.key === \"Escape\" ||\r\n e.key === \"Enter\"\r\n ) {\r\n setEdit(null);\r\n }\r\n }}\r\n />\r\n setEdit(null)}\r\n style={{\r\n height: \"16px\",\r\n width: \"16px\",\r\n }}\r\n >\r\n \r\n \r\n
\r\n ) : (\r\n
setEdit(key + \",\" + column.id)}\r\n >\r\n {column.format\r\n ? column.format(display_value, row)\r\n : display_value}\r\n
\r\n )}\r\n
\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n \r\n */}\r\n \r\n {displayDataValidJSON ? \"VALID JSON\" : \"NOT VALID JSON\"}\r\n
\r\n \r\n {/* \r\n {displayData}\r\n
*/}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport Slider from \"@material-ui/core/Slider\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport BSL_ControlContainer from \"./BSL_ControlContainer\";\r\nimport { Tooltip } from \"@material-ui/core\";\r\nimport { BaseURL } from \"../components/Common\";\r\nimport BSL_TextInput from \"./BSL_TextInput\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n slider: {\r\n // overflow: \"hidden\"\r\n // width: '77%',\r\n // marginLeft: '20px',\r\n },\r\n slider_mark: {\r\n color: Palette.Control.PaleBlue,\r\n font: (theme.brand.LYSAGHT ? \"10px \" : \"12px \") + theme.typography.fontFamily,\r\n lineHeight: \"2.2\",\r\n },\r\n slider_mark_disabled: {\r\n color: \"aaaaaa\",\r\n fontStyle: \"italic\",\r\n font: (theme.brand.LYSAGHT ? \"10px \" : \"12px \") + theme.typography.fontFamily,\r\n lineHeight: \"2.2\",\r\n },\r\n mark: {\r\n backgroundColor: \"#6B8799\",\r\n width: \"1px\",\r\n height: \"8px\",\r\n marginTop: \"6px\",\r\n },\r\n thumb: {\r\n background: \"url(\" + BaseURL(\"images/thumb.svg\") + \")\",\r\n width: \"28px\",\r\n height: \"28px\",\r\n boxShadow: \"none\",\r\n marginTop: \"-12px\",\r\n marginLeft: \"-13px\",\r\n backgroundSize: \"28px 28px\",\r\n boxShadow: \"none !important\",\r\n borderRadius: \"0%\",\r\n },\r\n rail: {\r\n background: Palette.Control.FieldersDarkBlue,\r\n opacity: 0.8,\r\n },\r\n label: {\r\n padding: \"0px 7px 0 px 0px\",\r\n margin: \"7px 7px\",\r\n font: (theme.brand.LYSAGHT ? \"14px \" : \"14px \") + theme.typography.fontFamily,\r\n color: Palette.Control.FieldersDarkBlue,\r\n minWidth: \"40px\",\r\n whiteSpace: \"nowrap\",\r\n },\r\n label_disabled: {\r\n padding: \"0px 7px 0 px 0px\",\r\n margin: \"7px 7px\",\r\n font: (theme.brand.LYSAGHT ? \"14px \" : \"14px \") + theme.typography.fontFamily,\r\n color: \"aaaaaa\",\r\n fontStyle: \"italic\",\r\n minWidth: \"40px\",\r\n whiteSpace: \"nowrap\",\r\n },\r\n}));\r\n\r\n// function BSL_ThumbComponent(props) {\r\n// return (\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// );\r\n// }\r\n\r\nconst BSL_ToolTip = withStyles((theme) => ({\r\n tooltip: {\r\n backgroundColor: Palette.Control.FieldersDarkBlue,\r\n color: \"white\",\r\n },\r\n arrow: {\r\n color: Palette.Control.FieldersDarkBlue,\r\n },\r\n}))(Tooltip);\r\n\r\nfunction ValueLabelComponent(props) {\r\n const { children, open, value } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport default function BSL_Slider(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const [value, setValue] = React.useState(props.value);\r\n\r\n function valuetext(value) {\r\n return `${value}°C`;\r\n }\r\n\r\n let textFieldStyle = props?.editableTextStyle ? props?.editableTextStyle : {};\r\n\r\n return (\r\n \r\n \r\n
{\r\n setValue(val);\r\n if (props.onChangeStep) props.onChangeStep(e, val);\r\n }}\r\n onChangeCommitted={(e, val) => {\r\n setValue(null);\r\n if (props.onChange) props.onChange(e, val);\r\n }}\r\n valueLabelDisplay=\"auto\"\r\n // onChange={(e, value) => { let rounded_val = Math.round(value / 50) * 50; this.props.updateAreaSpecification(areaIndex, BASIC_SPECS_SECTIONS.SHAPE, \"Length\", rounded_val); this.updateSVG(); }}\r\n />\r\n {props?.editableTextField && !props?.customTextField && (\r\n {\r\n setValue(null);\r\n\r\n let new_val = Number(val);\r\n let min = props?.min ? Number(props?.min) : 0;\r\n if (new_val < min) new_val = Number(min);\r\n if (props?.max && new_val > Number(props?.max)) new_val = Number(props?.max);\r\n\r\n props.onChange(null, new_val);\r\n }}\r\n onBlur={(val) => {\r\n setValue(null);\r\n\r\n let new_val = Number(val);\r\n let min = props?.min ? Number(props?.min) : 0;\r\n if (new_val < min) new_val = Number(min);\r\n if (props?.max && new_val > Number(props?.max)) new_val = Number(props?.max);\r\n\r\n props.onChange(null, new_val);\r\n }}\r\n InputProps={{ style: { borderWidth: \"0px\" } }}\r\n inputPropsStyle={{ borderWidth: \"0px\" }}\r\n endAdornment={props?.endAdornment ? props.endAdornment : props?.suffix}\r\n // onBlur={(val) => updateMarkup(key, \"DisplayName\", val)}\r\n />\r\n )}\r\n {!props?.editableTextField && !props?.customTextField && (\r\n \r\n {props.valueLabelFormat\r\n ? props.valueLabelFormat(value ? value : props.value)\r\n : value\r\n ? parseFloat(value.toFixed(2))\r\n : parseFloat(props.value.toFixed(2))}\r\n {props?.suffix ? props?.suffix : \"\"}\r\n
\r\n )}\r\n {props?.customTextField && props.customTextField(value ? value : props.value)}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport BSL_TextInput from \"../components/BSL_TextInput\";\r\nimport { fetchTimeout, GetHTMLColour, toNumber } from \"../components/Common\";\r\nimport { Palette, API_BASE } from \"../AppConfig\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport { Chip, IconButton, LinearProgress, Paper, Popper } from \"@material-ui/core\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport RemoveIcon from \"@material-ui/icons/Remove\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\n\r\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\r\nimport \"react-json-view-lite/dist/index.css\";\r\n\r\n// import PRICEFILE from \"../bin/PRICE_FILE\";\r\nimport Draggable from \"react-draggable\";\r\nimport Autocomplete from \"react-autocomplete\";\r\n\r\nimport SwipeableViews from \"react-swipeable-views\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport ManageMaterialsSpans from \"./ManageMaterialsSpans\";\r\nimport BSL_ControlContainer from \"../components/BSL_ControlContainer\";\r\nimport BSL_Slider from \"../components/BSL_Slider\";\r\nimport { ChromePicker } from \"react-color\";\r\nimport ColourChip from \"../components/ColourChip\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n // width: \"98%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // height: \"90%\",\r\n // overflow: \"scroll\",\r\n // fontSize: \"small\",\r\n },\r\n container: {\r\n height: \"90vh\",\r\n maxHeight: \"calc(100vh - 175px)\",\r\n },\r\n row: {\r\n \"tr:hover\": {\r\n backgroundColor: \"rgb(7, 50, 50, 0.42)\",\r\n },\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n \"&:hover\": {\r\n backgroundColor: \"rgb(7, 177, 77, 0.42)\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n categoryHeadingCell: {\r\n textAlign: \"center\",\r\n backgroundColor: Palette.FieldersOrange + \" !important\",\r\n padding: \"2px !important\",\r\n borderTopLeftRadius: \"5px\",\r\n borderTopRightRadius: \"5px\",\r\n borderLeft: \"1px solid white !important\",\r\n borderRight: \"1px solid white !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n categoryHeadingCellBlank: {\r\n textAlign: \"center\",\r\n backgroundColor: \"#ffffff !important\",\r\n padding: \"2px !important\",\r\n position: \"sticky\",\r\n top: \"0px !important\",\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n textTransform: \"uppercase\",\r\n color: \"#ffffff\",\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n fontFamily: theme.typography.fontFamilySecondary,\r\n backgroundColor: Palette.FieldersBlue,\r\n lineHeight: \"normal\",\r\n zIndex: \"5\",\r\n top: \"15px\",\r\n },\r\n headingRow: {\r\n backgroundColor: Palette.FieldersBlue,\r\n },\r\n drag_bar: {\r\n width: \"30px\",\r\n height: \"1px\",\r\n marginBottom: \"1px\",\r\n background: \"#00000030\",\r\n },\r\n moreButton: {\r\n padding: \"0px\",\r\n borderRadius: \"0%\",\r\n },\r\n}));\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `full-width-tab-${index}`,\r\n \"aria-controls\": `full-width-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n \r\n {value === index && (\r\n \r\n {children} \r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nconst default_cad_settings_columns = () => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"100px\",\r\n minWidth: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Value\",\r\n label: \"Value\",\r\n format: (value, row) => {\r\n return (\r\n \r\n {value} {row.SystemDefault ? \" (System Default Value: \" + row.SystemDefault + \")\" : \"\"}\r\n \r\n );\r\n },\r\n },\r\n];\r\nconst colour_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"100px\",\r\n minWidth: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Col1\",\r\n label: \"Colour 1 (or topside)\",\r\n grouping: \"Specifications\",\r\n format: (value, row) => {\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n },\r\n editor: (section, key, row, value, setValue, saveValue) => {\r\n return (\r\n <>\r\n
\r\n setValue(colour.hex)}\r\n // presetColors={colour_presets}\r\n />\r\n\r\n saveValue(section, key, row, \"Col1\", value)}>UPDATE \r\n >\r\n );\r\n },\r\n style: {\r\n width: \"50px\",\r\n },\r\n },\r\n {\r\n id: \"Col2\",\r\n label: \"Colour 2 (or bottomside)\",\r\n grouping: \"Specifications\",\r\n format: (value, row) => {\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n },\r\n editor: (section, key, row, value, setValue, saveValue) => {\r\n return (\r\n <>\r\n {/* setValue(colour)}\r\n onChange={(colour) => setValue(colour)}\r\n /> */}\r\n
\r\n setValue(colour.hex)}\r\n // presetColors={colour_presets}\r\n />\r\n\r\n saveValue(section, key, row, \"Col2\", value)}>UPDATE \r\n >\r\n );\r\n },\r\n style: {\r\n width: \"50px\",\r\n },\r\n },\r\n {\r\n id: \"Contrast\",\r\n label: \"Contrast\",\r\n grouping: \"Specifications\",\r\n editor: (section, key, row, value, setValue, saveValue) => {\r\n return (\r\n <>\r\n
\r\n setValue(colour.hex)}\r\n // presetColors={colour_presets}\r\n />\r\n\r\n saveValue(section, key, row, \"Contrast\", value)}>UPDATE \r\n >\r\n );\r\n },\r\n style: {\r\n width: \"50px\",\r\n },\r\n },\r\n {\r\n id: \"Opacity\",\r\n label: \"Opacity\",\r\n grouping: \"Specifications\",\r\n format: (value, row) => {\r\n return value * 100 + \"%\";\r\n },\r\n editor: (section, key, row, value, setValue, saveValue) => {\r\n return (\r\n <>\r\n {\r\n setValue(val / 100);\r\n }}\r\n onChangeStep={(e, val) => {\r\n setValue(val / 100);\r\n }}\r\n />\r\n\r\n saveValue(section, key, row, \"Opacity\", value)}>UPDATE \r\n >\r\n );\r\n },\r\n style: {\r\n width: \"50px\",\r\n },\r\n },\r\n {\r\n id: \"Code\",\r\n label: \"Code\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n },\r\n];\r\n\r\nconst colour_default = {\r\n Col1: \"#FFFFFF\",\r\n Col2: \"#FFFFFF\",\r\n Contrast: \"#000000\",\r\n Opacity: 1,\r\n Code: \"\",\r\n};\r\n\r\nconst colour_array_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"100px\",\r\n minWidth: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"ARRAY_DATA\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80%\",\r\n },\r\n format: (value) => {\r\n if (value && colourMapKeys && colourArrayKeys) {\r\n let list = value;\r\n let output = [];\r\n for (let colour of list) {\r\n var top_bg_colour = GetHTMLColour(colour)[0];\r\n var bottom_bg2_colour = GetHTMLColour(colour)[1];\r\n var contrast = GetHTMLColour(colour)[2];\r\n let background = top_bg_colour;\r\n if (top_bg_colour === bottom_bg2_colour) background = top_bg_colour;\r\n else\r\n background =\r\n \"linear-gradient(135deg, \" + top_bg_colour + \" 50%, \" + bottom_bg2_colour + \" 50%)\";\r\n\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push(\r\n <>\r\n {/* \r\n */}\r\n \r\n {colour}\r\n >\r\n );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n editor: (\r\n section,\r\n key,\r\n row,\r\n value,\r\n setValue,\r\n saveValue,\r\n value2,\r\n setValue2,\r\n not_used,\r\n materials,\r\n setEditItem\r\n ) => {\r\n let original_value = JSON.stringify(value);\r\n\r\n let colour_keys = [...Object.keys(materials.colour_map)];\r\n let value_colours = value;\r\n let colours_chips = [];\r\n for (let colour of value_colours) {\r\n colours_chips.push(\r\n <>\r\n \r\n \r\n {colour} \r\n >\r\n }\r\n onDelete={() => {\r\n const filteredItems = value.filter((item) => item !== colour);\r\n setValue(filteredItems);\r\n }}\r\n />\r\n \r\n >\r\n );\r\n }\r\n\r\n let helperText = [];\r\n helperText.push(\r\n <>\r\n currently: \r\n {original_value}\r\n \r\n >\r\n );\r\n\r\n return (\r\n \r\n {colours_chips}
\r\n {\r\n if (item === null || item === undefined || value === null) return true;\r\n if (item.toLowerCase().startsWith(value.toLowerCase().substring(0, 3))) return true;\r\n if (item.toLowerCase().indexOf(value.toLowerCase()) > -1) return true;\r\n return false;\r\n }}\r\n autoHighlight={false}\r\n getItemValue={(item) => item}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n wrapperStyle={{\r\n zIndex: \"999999\",\r\n }}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n marginTop: \"-21px\",\r\n textAlign: \"left\",\r\n maxHeight: \"250px\",\r\n overflowY: \"auto\",\r\n color: \"black\",\r\n }}\r\n inputProps={{\r\n style: {\r\n zIndex: \"999999\",\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n {\r\n let new_value = [...value];\r\n new_value.push(e.target.value);\r\n setValue(new_value);\r\n setValue2(\"\");\r\n }}\r\n onChange={(value) => {\r\n setValue2(value);\r\n }}\r\n InputProps={{\r\n style: { fontSize: \"80%\" },\r\n ...props,\r\n }}\r\n helperText={helperText}\r\n helperTextStyle={\r\n helperText.length > 0\r\n ? {\r\n whiteSpace: \"break-spaces\",\r\n backgroundColor: \"#ffe7c3\",\r\n padding: \"5px\",\r\n borderRadius: \"5px\",\r\n }\r\n : {}\r\n }\r\n />\r\n );\r\n }}\r\n value={value2}\r\n onChange={(e) => setValue2(e.target.value)}\r\n onSelect={(val) => {\r\n let new_value = [...value];\r\n new_value.push(val);\r\n setValue(new_value);\r\n setValue2(\"\");\r\n }}\r\n />\r\n saveValue(section, key, value, \"ARRAY_DATA\")}>UPDATE \r\n \r\n );\r\n },\r\n },\r\n];\r\n\r\nconst slat_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Name\",\r\n label: \"Name (Offering ID)\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"Width\",\r\n label: \"Width\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Depth\",\r\n label: \"Depth\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value && value?.split !== undefined && colourMapKeys && colourArrayKeys) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else if (colourArrayKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n style: {\r\n width: \"120px\",\r\n minWidth: \"120px\",\r\n },\r\n autoComplete: colourArrayKeys,\r\n },\r\n {\r\n id: \"Product Code\",\r\n label: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Post Code\",\r\n label: \"Post Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Retainer Code\",\r\n label: \"Retainer Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n];\r\n\r\nconst slat_default = {\r\n Depth: \"0\",\r\n Name: \"\",\r\n \"Post Code\": \"\",\r\n \"Product Code\": \"\",\r\n \"Retainer Code\": \"\",\r\n Width: \"0\",\r\n};\r\n\r\nconst infill_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key / Offering ID\",\r\n style: {\r\n width: \"100px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"name\",\r\n label: \"Display Name\",\r\n style: {\r\n width: \"100px\",\r\n },\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value && value?.split !== undefined && colourMapKeys && colourArrayKeys) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else if (colourArrayKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n style: {\r\n width: \"120px\",\r\n minWidth: \"120px\",\r\n },\r\n autoComplete: colourArrayKeys,\r\n },\r\n {\r\n id: \"allow_display_colour\",\r\n label: \"Allow Colour Selector\",\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"default_colour\",\r\n label: \"Default Colour\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n autoComplete: colourMapKeys,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"thumbnail\",\r\n label: \"Thumbnail\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value)\r\n return (\r\n \r\n );\r\n return \"\";\r\n },\r\n style: {\r\n width: \"80px\",\r\n },\r\n },\r\n {\r\n id: \"code\",\r\n label: \"Product Code\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"type\",\r\n label: \"Type\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n format: (val, row) => (val === 1 ? \"Vertical (per LM)\" : \"Rectangular Sheet\"),\r\n grouping: \"Specifications\",\r\n select: [\r\n { Key: 1, Display: \"Vertical (per LM)\" },\r\n { Key: 3, Display: \"Rectangular Sheet\" },\r\n ],\r\n },\r\n {\r\n id: \"coverage\",\r\n label: \"Coverage\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n helperText:\r\n \"for 'Vertical (per LM)' this is the sheet width.. for 'Rectangular Sheet' this is the mm2 coverage.\",\r\n },\r\n {\r\n id: \"allow_cyclonic\",\r\n label: \"Allow Cyclonic\",\r\n format: (val, row) => (val === false ? \"No\" : \"Yes\"),\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n];\r\n\r\nconst infill_default = {\r\n name: \"\",\r\n colours: \"\",\r\n default_colour: \"\",\r\n allow_display_colour: true,\r\n texture: {\r\n filename: \"qdrender.jpg\",\r\n has_alpha: false,\r\n scale_mm: 20,\r\n },\r\n thumbnail: \"\",\r\n allow_cyclonic: true,\r\n};\r\n\r\nconst downpipe_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Name\",\r\n label: \"Name (Offering ID)\",\r\n style: {\r\n width: \"160px\",\r\n },\r\n },\r\n {\r\n id: \"name\",\r\n label: \"Display Name\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n },\r\n {\r\n id: \"thumbnail\",\r\n label: \"Thumbnail\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value)\r\n return (\r\n \r\n );\r\n return \"\";\r\n },\r\n style: {\r\n width: \"80px\",\r\n },\r\n },\r\n {\r\n id: \"Width\",\r\n label: \"Width\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Depth\",\r\n label: \"Depth\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"default_colour\",\r\n label: \"Default Colour\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n autoComplete: colourMapKeys,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value && value?.split !== undefined && colourMapKeys && colourArrayKeys) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else if (colourArrayKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n style: {\r\n width: \"120px\",\r\n minWidth: \"120px\",\r\n },\r\n autoComplete: colourArrayKeys,\r\n },\r\n {\r\n id: \"PVC\",\r\n label: \"Material\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n format: (val, row) => (val == \"1\" ? \"PVC\" : \"Steel\"),\r\n select: [\r\n { Key: \"0\", Display: \"Steel\" },\r\n { Key: \"1\", Display: \"PVC\" },\r\n ],\r\n },\r\n {\r\n id: \"Shape Index\",\r\n label: \"Shape\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n format: (val, row) => (val == \"1\" ? \"Round\" : \"Quad\"),\r\n select: [\r\n { Key: \"1\", Display: \"Round\" },\r\n { Key: \"2\", Display: \"Quad\" },\r\n ],\r\n },\r\n {\r\n id: \"Product Code\",\r\n label: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Pop Code\",\r\n label: \"Pop Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Strap Code\",\r\n label: \"Strap Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Elbow\",\r\n label: \"Elbow Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Overhang Offset Code\",\r\n label: \"Overhang Offset Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Max Overhang Offset Span\",\r\n label: \"Max Overhang Offset Span (mm)\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n allCaps: true,\r\n },\r\n];\r\n\r\nconst downpipe_default = {\r\n Depth: \"0\",\r\n Name: \"NAME REQUIRED\",\r\n \"Pop Code\": \"\",\r\n \"Product Code\": \"\",\r\n PVC: \"0\",\r\n \"Shape Index\": \"1\",\r\n \"Strap Code\": \"\",\r\n Width: \"0\",\r\n};\r\n\r\nconst gutter_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Name\",\r\n label: \"Name (Offering ID)\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n },\r\n },\r\n {\r\n id: \"Display Name\",\r\n label: \"Display Name\",\r\n alt_id: \"Output Name\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n },\r\n {\r\n id: \"thumbnail\",\r\n label: \"Thumbnail\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value)\r\n return (\r\n \r\n );\r\n return \"\";\r\n },\r\n style: {\r\n width: \"80px\",\r\n },\r\n },\r\n {\r\n id: \"Width\",\r\n label: \"Width\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"easy_fix_allowed\",\r\n label: \"Allow Easy Fix Mitres\",\r\n grouping: \"Specifications\",\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"hand_made_mitres_allowed\",\r\n label: \"Hand Made Mitres\",\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"default_colour\",\r\n label: \"Default Colour\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n autoComplete: colourMapKeys,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value && value?.split !== undefined && colourMapKeys && colourArrayKeys) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else if (colourArrayKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n style: {\r\n width: \"120px\",\r\n minWidth: \"120px\",\r\n },\r\n autoComplete: colourArrayKeys,\r\n },\r\n {\r\n id: \"Product Code\",\r\n label: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Easy Fix Mitre Code (External)\",\r\n label: \"Easy Fix Mitre Code (External 90° ONLY))\",\r\n grouping: \"Mitre Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Easy Fix Mitre Code (Internal)\",\r\n label: \"Easy Fix Mitre Code (Internal 90° ONLY)\",\r\n grouping: \"Mitre Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Mitre Code (External)\",\r\n label: \"Custom Mitre Code (External, not 90°)\",\r\n grouping: \"Mitre Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Mitre Code (Internal)\",\r\n label: \"Custom Mitre Code (Internal, not 90°)\",\r\n grouping: \"Mitre Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Stop End Left Code\",\r\n label: \"Stop End Left Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Stop End Right Code\",\r\n label: \"Stop End Right Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Strap Code\",\r\n label: \"Strap Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n];\r\n\r\nconst gutter_default = {\r\n \"Box Gutter\": \"0\",\r\n \"Easy Fix Mitre Code (External)\": \"\",\r\n \"Easy Fix Mitre Code (Internal)\": \"\",\r\n \"Mitre Code (External)\": \"\",\r\n \"Mitre Code (Internal)\": \"\",\r\n Name: \"NAME REQUIRED\",\r\n \"Display Name\": \"\",\r\n \"Product Code\": \"\",\r\n \"Stop End Left Code\": \"\",\r\n \"Stop End Right Code\": \"\",\r\n \"Strap Code\": \"\",\r\n Width: \"\",\r\n};\r\n\r\nconst beam_gama_options = [\r\n \"656510\",\r\n \"1086510\",\r\n \"1586510\",\r\n \"2086510\",\r\n \"50x50x1.6\",\r\n \"50x50x2.0\",\r\n \"50x50x2.5\",\r\n \"50x50x3.0\",\r\n \"50x50x4.0\",\r\n \"50x50x5.0\",\r\n \"60x60x1.6\",\r\n \"65x65x2.0\",\r\n \"65x65x2.5\",\r\n \"65x65x3.0\",\r\n \"75x75x2.0\",\r\n \"75x75x3.0\",\r\n \"90x90x2.0\",\r\n \"90x90x3.5\",\r\n \"90x90x5\",\r\n \"100x100x2.0\",\r\n \"100x100x3.0\",\r\n \"100x100x4.0\",\r\n \"100x50x1.6\",\r\n \"100x50x2.0\",\r\n \"100x50x2.5\",\r\n \"100x50x3.0\",\r\n \"100x50x4.0\",\r\n \"100x50x5.0\",\r\n \"125x125x4.0\",\r\n \"125x125x5.0\",\r\n \"150x50x2.0\",\r\n \"150x50x2.5\",\r\n \"150x50x3.0\",\r\n \"150x50x4.0\",\r\n \"150x50x5.0\",\r\n \"AL75x75x2\",\r\n \"AL90x90x2\",\r\n \"FL10011\",\r\n \"FL15015\",\r\n \"FL20020\",\r\n];\r\n\r\nconst sheet_gama_options = [\r\n \"Ampelite Hr1 Polycarbonate Corrugated\",\r\n \"Ampelite Hr1 Polycarbonate Greca\",\r\n \"Ampelite SolaFrost Polycarbonate Corrugated\",\r\n \"Ampelite Solasafe Polycarbonate Corrugated\",\r\n \"Ampelite Solasafe Polycarbonate Greca\",\r\n \"Ampelite Solasafe Polycarbonate TL5\",\r\n \"Blue Orb .6bmt C/Bond\",\r\n \"Blue Orb .6bmt Zinc\",\r\n \"Cent 310 Deck\",\r\n \"Cent 310 Deck Alsynite\",\r\n \"Cent 310 Deck Polycarbonate\",\r\n \"Corrugated - C/Bond 0.42\",\r\n \"Corrugated - C/Bond D/S 0.42\",\r\n \"Corrugated - C/Bond 0.48\",\r\n \"Corrugated - Galv\",\r\n \"Corrugated - Zinc\",\r\n \"Hirib 0.42 G550 - C/Bond\",\r\n \"Hirib 0.42 G550 - C/Bond D/S\",\r\n \"Hirib 0.42 G550 - Zinc\",\r\n \"Hirib Alsynite Ultra 8oz\",\r\n \"Hirib Polycarbonate\",\r\n \"M-CLAD 0.42\",\r\n \"M-CLAD 0.42 D/S\",\r\n \"M-CLAD 0.48 (TL5)\",\r\n \"M-CLAD Polycarbonate 0.8mm\",\r\n \"TL5 0.42\",\r\n \"TL5 0.42 D/S\",\r\n \"TL5 0.48\",\r\n \"TL5 Polycarbonate 0.8mm\",\r\n \"SolarSpan 200\",\r\n \"SolarSpan 175\",\r\n \"SolarSpan 150\",\r\n \"SolarSpan 125\",\r\n \"SolarSpan 100\",\r\n \"SolarSpan 75\",\r\n \"SolarSpan 50\",\r\n \"Insulroof 200\",\r\n \"Insulroof 150\",\r\n \"Insulroof 125\",\r\n \"Insulroof 100\",\r\n \"Insulroof 50\",\r\n \"Insulroof 75\",\r\n \"Versiclad Versalink 1000 Smooth 100mm\",\r\n \"Versiclad Versalink 1000 Smooth 50mm\",\r\n \"Versiclad Versalink 1000 Smooth 75mm\",\r\n \"Versiclad Versalink 1000 Luxline 100mm\",\r\n \"Versiclad Versalink 1000 Luxline 50mm\",\r\n \"Versiclad Versalink 1000 Luxline 75mm\",\r\n \"Versiclad Corrolink-S Smooth 125mm\",\r\n \"Versiclad Corrolink-S Smooth 100mm\",\r\n \"Versiclad Corrolink-S Smooth 50mm\",\r\n \"Versiclad Corrolink-S Smooth 75mm\",\r\n \"Versiclad Corrolink-S Luxline 125mm\",\r\n \"Versiclad Corrolink-S Luxline 100mm\",\r\n \"Versiclad Corrolink-S Luxline 50mm\",\r\n \"Versiclad Corrolink-S Luxline 75mm\",\r\n \"FLATDEK\",\r\n \"FLATDEK II\",\r\n \"FLATDEK 310\",\r\n \"TRIMDEK\",\r\n \"SPANDEK 0.42\",\r\n \"SPANDEK 0.48\",\r\n \"KLIP-LOK 0.42\",\r\n \"Apollo Trimlink 50mm\",\r\n \"Apollo Trimlink 75mm\",\r\n \"Apollo Trimlink 100mm\",\r\n \"Apollo Trimlink 125mm\",\r\n \"Apollo Trimlink 150mm\",\r\n \"Apollo Trimlink 175mm\",\r\n \"Apollo Trimlink 200mm\",\r\n \"Apollo Corrugated 50mm\",\r\n \"Apollo Corrugated 75mm\",\r\n \"Apollo Corrugated 100mm\",\r\n \"Apollo Corrugated 125mm\",\r\n \"Apollo Corrugated 150mm\",\r\n];\r\nconst beam_colummns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Name\",\r\n label: \"Name (Offering ID)\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n },\r\n },\r\n {\r\n id: \"Display Name\",\r\n alt_id: \"Output Name\",\r\n label: \"Display Name\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n },\r\n validate: \"name\",\r\n },\r\n {\r\n id: \"thumbnail\",\r\n label: \"Thumbnail\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value)\r\n return (\r\n \r\n );\r\n return \"\";\r\n },\r\n style: {\r\n width: \"80px\",\r\n },\r\n },\r\n {\r\n id: \"Height\",\r\n label: \"Height\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Depth\",\r\n label: \"Depth\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value && value?.split !== undefined && colourMapKeys && colourArrayKeys) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else if (colourArrayKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n style: {\r\n width: \"120px\",\r\n minWidth: \"120px\",\r\n },\r\n autoComplete: colourArrayKeys,\r\n },\r\n {\r\n id: \"Engineering ID\",\r\n label: \"Engineering ID\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n select: beam_gama_options,\r\n },\r\n {\r\n id: \"Product Code\",\r\n label: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_90Deg_Bracket_Code\",\r\n label: \"Beam_90Deg_Bracket_Code\",\r\n grouping: \"Beam To Beam Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_Angle_Bracket_Code\",\r\n label: \"Beam_Angle_Bracket_Code\",\r\n grouping: \"Beam To Beam Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_45Deg_Bracket_Code\",\r\n label: \"Beam_45Deg_Bracket_Code\",\r\n grouping: \"Beam To Beam Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_to_Beam_Compound_Angle_Bracket_Code\",\r\n label: \"Beam_to_Beam_Compound_Angle_Bracket_Code\",\r\n grouping: \"Beam To Beam Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_To_Beam_Joiner_Connector_Code\",\r\n label: \"Beam_To_Beam_Joiner_Connector_Code\",\r\n grouping: \"Beam End To End Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_Joined_to_Beam_Angled_Bracket_Code\",\r\n label: \"Beam_Joined_to_Beam_Angled_Bracket_Code\",\r\n grouping: \"Beam End To End Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Internal_Bracket_Code\",\r\n label: \"Internal_Bracket_Code\",\r\n grouping: \"Beam End To End Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"Corner_Beam_to_Beam_Bracket_Code\",\r\n label: \"Corner_Beam_to_Beam_Bracket_Code\",\r\n grouping: \"Beam End To End Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Corner_Beam_with_100_Hip_Lower_Bracket_Code\",\r\n label: \"Corner_Beam_with_100_Hip_Lower_Bracket_Code\",\r\n grouping: \"Flat Hip Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Corner_Beam_with_150_Hip_Lower_Bracket_Code\",\r\n label: \"Corner_Beam_with_150_Hip_Lower_Bracket_Code\",\r\n grouping: \"Flat Hip Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_to_Fascia_Bracket_Code\",\r\n label: \"Beam_to_Fascia_Bracket_Code\",\r\n grouping: \"Attachment Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Rafter_to_Fascia_Bracket_Code\",\r\n label: \"Rafter_to_Fascia_Bracket_Code\",\r\n grouping: \"Attachment Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Rafter_to_Fascia_Non_Std_Bracket_Code\",\r\n label: \"Rafter_to_Fascia_Non_Std_Bracket_Code\",\r\n grouping: \"Attachment Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_to_Wall_Bracket_Code\",\r\n label: \"Beam_to_Wall_Bracket_Code\",\r\n grouping: \"Attachment Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Flat_Hip_Beam_Top_to_Fascia_Corner_Bracket_Code\",\r\n label: \"Flat_Hip_Beam_Top_to_Fascia_Corner_Bracket_Code\",\r\n grouping: \"Attachment Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"DG_Hip_Rafter_Upper_Bracket_Code\",\r\n label: \"DG_Hip_Rafter_Upper_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Rafter_to_End_Beam_Bracket_Code\",\r\n label: \"Rafter_to_End_Beam_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Portal_Rafter_to_Post_Connector_Code\",\r\n label: \"Portal_Rafter_to_Post_Connector_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Sunken_Purlin_Rafter_to_End_Beam_Bracket_Code\",\r\n label: \"Sunken_Purlin_Rafter_to_End_Beam_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Portal_Rafter_to_Post_Sunken_Purlin_Connector_Code\",\r\n label: \"Portal_Rafter_to_Post_Sunken_Purlin_Connector_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Double_Hip_Rafter_Upper_Bracket_Code\",\r\n label: \"Double_Hip_Rafter_Upper_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Hip_Rafter_Upper_Bracket_Code\",\r\n label: \"Single_Hip_Rafter_Upper_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Hip_Rafter_Lower_Bracket_Code\",\r\n label: \"Hip_Rafter_Lower_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Hip_Rafter_Lower_Non_Std_Bracket_Code\",\r\n label: \"Hip_Rafter_Lower_Non_Std_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Jack_Rafter_Upper_Bracket_Code\",\r\n label: \"Jack_Rafter_Upper_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Jack_Rafter_Lower_Bracket_Code\",\r\n label: \"Jack_Rafter_Lower_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Hip Side Connector Lower Bracket Code\",\r\n label: \"Hip Side Connector Lower Bracket Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Sunken_Purlin_to_Rafter_Saddle_Bracket_Code\",\r\n label: \"Sunken_Purlin_to_Rafter_Saddle_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Portal_Hip_Beam_Connector_Code\",\r\n label: \"Portal_Hip_Beam_Connector_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Apex_Portal_Connector_Code\",\r\n label: \"Apex_Portal_Connector_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Apex_Connector_Code\",\r\n label: \"Apex_Connector_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Apex_with_Collar_Single_Connector_Code\",\r\n label: \"Apex_with_Collar_Single_Connector_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Apex_with_Collar_Double_Connector_Code\",\r\n label: \"Apex_with_Collar_Double_Connector_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Collar_Tie_to_Rafter_Bracket_Code\",\r\n label: \"Collar_Tie_to_Rafter_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Gable_End_Infill_Apex_Strut_Bracket_Code\",\r\n label: \"Gable_End_Infill_Apex_Strut_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Purlin_to_Hip_Rafter_Bracket_Code\",\r\n label: \"Purlin_to_Hip_Rafter_Bracket_Code\",\r\n grouping: \"Gable Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Eaves_Overhang_Connector_Code\",\r\n label: \"Eaves_Overhang_Connector_Code\",\r\n grouping: \"Other Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Ceiling_Fan_to_Rafter_Bracket_Code\",\r\n label: \"Ceiling_Fan_to_Rafter_Bracket_Code\",\r\n grouping: \"Other Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Ceiling_Fan_to_Downlight_Tray_Bracket_Code\",\r\n label: \"Ceiling_Fan_to_Downlight_Tray_Bracket_Code\",\r\n grouping: \"Other Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Beam_End_Cap_Bracket_Code\",\r\n label: \"Beam_End_Cap_Bracket_Code\",\r\n grouping: \"Other Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"End_Cap_Code\",\r\n label: \"End_Cap_Code\",\r\n grouping: \"Other Codes\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Curve_Rafter_to_Edge_Beam_Bracket_Code\",\r\n label: \"Curve_Rafter_to_Edge_Beam_Bracket_Code\",\r\n grouping: \"Curved Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Curve_Rafter_to_Infill_Beam_Bracket_Code\",\r\n label: \"Curve_Rafter_to_Infill_Beam_Bracket_Code\",\r\n grouping: \"Curved Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Gazebo_6_Sided_Connector_Code\",\r\n label: \"Gazebo_6_Sided_Connector_Code\",\r\n grouping: \"Gazebo Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Gazebo_8_Sided_Connector_Code\",\r\n label: \"Gazebo_8_Sided_Connector_Code\",\r\n grouping: \"Gazebo Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"BBQ_Main_End_Cap_Bracket_Code\",\r\n label: \"BBQ_Main_End_Cap_Bracket_Code\",\r\n grouping: \"BBQ Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"BBQ_Purlin_Connector_Bracket_Code\",\r\n label: \"BBQ_Purlin_Connector_Bracket_Code\",\r\n grouping: \"BBQ Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Cantilever_Insert_Code_Not_Used\",\r\n label: \"Cantilever_Insert_Code_Not_Used\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"Cantilever_End_Cap_Bracket_Code\",\r\n label: \"Cantilever_End_Cap_Bracket_Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"Joist_Connector_Code\",\r\n label: \"Joist_Connector_Code\",\r\n grouping: \"Deck Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Outside_Beam\",\r\n label: \"Outside Beam (RHS Sleeve)\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n allCaps: true,\r\n },\r\n];\r\n\r\nconst beam_default = {\r\n Name: \"REQUIRED\",\r\n Depth: \"0\",\r\n Height: \"0\",\r\n};\r\n\r\nconst post_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Name\",\r\n label: \"Name (Offering ID)\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n },\r\n },\r\n {\r\n id: \"Display Name\",\r\n alt_id: \"Output Name\",\r\n label: \"Display Name\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n },\r\n validate: \"name\",\r\n },\r\n {\r\n id: \"thumbnail\",\r\n label: \"Thumbnail\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value)\r\n return (\r\n \r\n );\r\n return \"\";\r\n },\r\n style: {\r\n width: \"80px\",\r\n },\r\n },\r\n {\r\n id: \"Section Kind\",\r\n label: \"Section Kind\",\r\n grouping: \"Specifications\",\r\n format: (val, row) => (val === 1 ? \"RHS/SHS\" : val === 2 ? \"Box\" : \"Undefined\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: 1, Display: \"RHS/SHS\" },\r\n { Key: 2, Display: \"Box\" },\r\n ],\r\n },\r\n {\r\n id: \"Width\",\r\n label: \"Width\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Depth\",\r\n label: \"Depth\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Specifications\",\r\n format: (value) => {\r\n if (value && value?.split !== undefined && colourMapKeys && colourArrayKeys) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else if (colourArrayKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n style: {\r\n width: \"120px\",\r\n minWidth: \"120px\",\r\n },\r\n autoComplete: colourArrayKeys,\r\n },\r\n {\r\n id: \"allow_notched\",\r\n label: \"Allow Notched\",\r\n grouping: \"Specifications\",\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"allow_side\",\r\n label: \"Allow Side Attach\",\r\n grouping: \"Specifications\",\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"allow_behind\",\r\n label: \"Allow Behind\",\r\n grouping: \"Specifications\",\r\n format: (val, row) => (val === true ? \"Yes\" : \"No\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n\r\n {\r\n id: \"allow_freestanding\",\r\n label: \"Allow In Freestanding\",\r\n grouping: \"Specifications\",\r\n format: (val, row) => (val === false ? \"No\" : \"Yes\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"max_length\",\r\n label: \"Max Height\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Engineering ID\",\r\n label: \"Engineering ID\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n select: beam_gama_options,\r\n },\r\n {\r\n id: \"Product Code\",\r\n label: \"Product Code\",\r\n grouping: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Product Code Notched\",\r\n label: \"Notched\",\r\n grouping: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Product Code Flanged\",\r\n label: \"Flanged\",\r\n grouping: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Product Code Flanged Notched\",\r\n label: \"Flanged Notched\",\r\n grouping: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Base_Plate_Code_External\",\r\n label: \"Base_Plate_Code_External\",\r\n grouping: \"Base Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Base_Plate_Code_Flat_Internal\",\r\n label: \"Base_Plate_Code_Flat_Internal\",\r\n grouping: \"Base Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Base_Plate_Code_Gable_Internal\",\r\n label: \"Base_Plate_Code_Gable_Internal\",\r\n grouping: \"Base Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"Heavy_Footing_Bracket\",\r\n label: \"Heavy_Footing_Bracket\",\r\n grouping: \"Base Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Inground_Connector_Code\",\r\n label: \"Inground_Connector_Code\",\r\n grouping: \"Base Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"allow_flanged\",\r\n label: \"Allow Flanged Base\",\r\n grouping: \"Base Connectors\",\r\n format: (val, row) => (val === false ? \"No\" : \"Yes\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: false, Display: \"No\" },\r\n { Key: true, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"Cantilever_Insert_Code\",\r\n label: \"Cantilever_Insert_Code\",\r\n grouping: \"Top Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"External_Bracket_Code\",\r\n label: \"External_Bracket_Code\",\r\n grouping: \"Top Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Post_Top_Connection_Post_Behind_Bolt\",\r\n label: \"Post_Top_Connection_Post_Behind_Bolt\",\r\n grouping: \"Top Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"End Cap\",\r\n label: \"End Cap\",\r\n grouping: \"Top Connectors\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Shoe Code\",\r\n label: \"Shoe Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n allCaps: true,\r\n },\r\n {\r\n id: \"Outside_Post\",\r\n label: \"Outside_Post\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n allCaps: true,\r\n },\r\n];\r\n\r\nconst post_default = {\r\n Name: \"REQUIRED\",\r\n Depth: \"0\",\r\n Height: \"0\",\r\n};\r\n\r\nconst sheet_columns = (productlist_autocompleteOptions, colourMapKeys, colourArrayKeys) => [\r\n {\r\n id: \"Key\",\r\n label: \"Key\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"3\",\r\n fontWeight: \"600\",\r\n },\r\n headerStyle: {\r\n width: \"160px\",\r\n minWidth: \"160px\",\r\n position: \"sticky\",\r\n left: \"0\",\r\n zIndex: \"6\",\r\n fontWeight: \"600\",\r\n },\r\n },\r\n {\r\n id: \"Name\",\r\n label: \"Name (Offering ID)\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n },\r\n },\r\n {\r\n id: \"Display Name\",\r\n alt_id: \"Output Name\",\r\n label: \"Display Name\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n },\r\n validate: \"name\",\r\n },\r\n {\r\n id: \"Cover\",\r\n label: \"Cover\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Sheet Width\",\r\n label: \"Sheet Width\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n hideInTable: false,\r\n },\r\n {\r\n id: \"Sheet Height\",\r\n label: \"Sheet Height\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n hideInTable: false,\r\n },\r\n {\r\n id: \"Min Length\",\r\n label: \"Min Length\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Min Pitch\",\r\n label: \"Min Pitch\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Roof Profile Type\",\r\n label: \"Roof Profile Type\",\r\n grouping: \"Specifications\",\r\n format: (val, row) => (val == \"1\" ? \"Corrugated\" : \"Ribbed\"),\r\n style: {\r\n width: \"50px\",\r\n },\r\n select: [\r\n { Key: \"1\", Display: \"Corrugated\" },\r\n { Key: \"2\", Display: \"Ribbed\" },\r\n ],\r\n },\r\n {\r\n id: \"Spans\",\r\n label: \"Spans (Int/End/OH)\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n format: (val, row) => {\r\n let i = val?.MaxInternalSpan;\r\n let e = val?.MaxEndSpan;\r\n let o = val?.MaxOverhang;\r\n\r\n let Wzs = \"\";\r\n\r\n for (let key in val) {\r\n if (key.length < 3) {\r\n Wzs += (Wzs === \"\" ? \"\" : \",\") + key;\r\n }\r\n }\r\n return (\r\n <>\r\n \r\n {i}/{e}/{o}\r\n
\r\n \r\n {Wzs}\r\n
\r\n >\r\n );\r\n },\r\n editor: (section, key, row, value, setValue, saveValue) => {\r\n return (\r\n saveValue(null)}\r\n saveValue={saveValue}\r\n />\r\n );\r\n },\r\n validate: \"numbersOnly\",\r\n },\r\n {\r\n id: \"Mass\",\r\n label: \"Mass (kg/m2)\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n validate: \"numeric\",\r\n },\r\n {\r\n id: \"Engineering ID\",\r\n label: \"Engineering ID\",\r\n grouping: \"Specifications\",\r\n style: {\r\n width: \"160px\",\r\n minWidth: \"120px\",\r\n },\r\n validate: \"name\",\r\n selectStyle: { width: \"600px\", flex: \"none\" },\r\n select: sheet_gama_options,\r\n },\r\n {\r\n id: \"Product Code\",\r\n label: \"Product Code\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Back Channel\",\r\n label: \"Back Channel\",\r\n grouping: \"Back Channel\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Back Channel Angle\",\r\n label: \"Back Channel Angle\",\r\n grouping: \"Back Channel\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Barge Capping\",\r\n label: \"Standard\",\r\n grouping: \"Barge Capping\",\r\n style: {\r\n width: \"120px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Barge Capping Overhang\",\r\n label: \"...with Overhang\",\r\n grouping: \"Barge Capping\",\r\n style: {\r\n width: \"120px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Barge Capping Overhang With Purlin\",\r\n label: \"... Overhang with Purlin\",\r\n grouping: \"Barge Capping\",\r\n style: {\r\n width: \"120px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Rear Barge Capping\",\r\n label: \"Rear Barge Capping (overrides barge capping)\",\r\n grouping: \"Barge Capping\",\r\n style: {\r\n width: \"120px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n helperText: \"this setting overrrides barge code, such as for insulated panel... leave blank to use Barge Code.\",\r\n },\r\n {\r\n id: \"Rear Barge Capping Overhang\",\r\n label: \"Rear Barge Capping Overhang\",\r\n grouping: \"Barge Capping\",\r\n style: {\r\n width: \"120px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n helperText:\r\n \"this setting overrrides barge code, such as for insulated panel... leave blank to use Rear Barge Capping.\",\r\n },\r\n {\r\n id: \"Front Overhang Flashing\",\r\n label: \"Front Overhang Flashing\",\r\n grouping: \"Barge Capping\",\r\n style: {\r\n width: \"120px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n helperText: \"a front overhang flashing, such as insulated panel 'FOF'... Leave blank to not include one.\",\r\n },\r\n {\r\n id: \"Gable Front Overhang Flashing\",\r\n label: \"Gable Front Overhang Flashing\",\r\n grouping: \"Barge Capping\",\r\n style: {\r\n width: \"120px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n helperText:\r\n \"a GABLE front overhang flashing, such as insulated panel 'FOFG'... Leave blank to not include one.\",\r\n },\r\n {\r\n id: \"Cover Sheet Code\",\r\n label: \"Cover Sheet Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Gutter Clip Code\",\r\n label: \"Gutter Clip Code\",\r\n grouping: \"Other Items\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n validate: \"name\",\r\n autoComplete: productlist_autocompleteOptions,\r\n },\r\n {\r\n id: \"Use Return Gutter\",\r\n label: \"Use Return Gutter on Overhangs\",\r\n grouping: \"Other Items\",\r\n format: (val, row) => (val === 1 ? \"Yes\" : \"No\"),\r\n style: {\r\n width: \"80px\",\r\n },\r\n select: [\r\n { Key: 0, Display: \"No\" },\r\n { Key: 1, Display: \"Yes\" },\r\n ],\r\n },\r\n {\r\n id: \"colours\",\r\n label: \"Colours\",\r\n grouping: \"Offering Settings\",\r\n format: (value) => {\r\n if (value && value?.split !== undefined && colourMapKeys && colourArrayKeys) {\r\n let list = value.split(\",\");\r\n let output = [];\r\n for (let colour of list) {\r\n if (colourMapKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else if (colourArrayKeys.includes(colour.trim()))\r\n output.push({(output.length === 0 ? \"\" : \",\") + colour} );\r\n else\r\n output.push(\r\n \r\n {(output.length === 0 ? \"\" : \",\") + colour}{\" \"}\r\n \r\n \r\n );\r\n }\r\n return output;\r\n }\r\n return \"\";\r\n },\r\n style: {\r\n width: \"120px\",\r\n minWidth: \"120px\",\r\n },\r\n autoComplete: colourArrayKeys,\r\n hideInTable: true,\r\n },\r\n {\r\n id: \"texture_filename\",\r\n label: \"Texture Filename\",\r\n grouping: \"Offering Settings\",\r\n style: {\r\n width: \"80px\",\r\n },\r\n hideInTable: true,\r\n },\r\n];\r\n\r\nconst sheet_default = {\r\n Name: \"REQUIRED\",\r\n Depth: \"0\",\r\n Height: \"0\",\r\n \"Roof Profile Type\": \"1\",\r\n \"Use Return Gutter\": 1,\r\n};\r\n\r\nconst menu_columm = {\r\n id: \"Menu\",\r\n label: \"Menu\",\r\n editor: (section, key, row, value, setValue, saveValue, value2, setValue2, not_used, materials, setEditItem) => {\r\n let key_split = key.split(\"|\");\r\n if (value === \"DUPLICATE\") {\r\n return (\r\n <>\r\n {\r\n \r\n if (!value2) {\r\n alert(\"A Key is required to duplicate this item\");\r\n return;\r\n }\r\n if (materials?.[section]?.[value2]) {\r\n alert(\"This key already exists\");\r\n return;\r\n }\r\n setValue(\"\");\r\n setValue2(\"\");\r\n saveValue(section, key, row, \"ADD\", e.target.value);\r\n }}\r\n onChange={(val) => {\r\n setValue2(val);\r\n }}\r\n helperText={\r\n materials?.[section]?.[value2] !== undefined\r\n ? \"This key is not valid or already exists\"\r\n : \"Enter a new Key for this item\"\r\n }\r\n />\r\n\r\n {\r\n if (!value2) {\r\n alert(\"A Key is required to duplicate this item\");\r\n return;\r\n }\r\n if (materials?.[section]?.[value2]) {\r\n alert(\"This key already exists\");\r\n return;\r\n }\r\n setValue(\"\");\r\n setValue2(\"\");\r\n saveValue(section, value2, row, \"ADD\", value2);\r\n }}\r\n >\r\n DUPLICATE\r\n \r\n {\r\n setValue(\"\");\r\n }}\r\n >\r\n CANCEL\r\n \r\n >\r\n );\r\n }\r\n if (value === \"ADD VARIATION\") {\r\n return (\r\n <>\r\n {\r\n \r\n if (!value2) {\r\n alert(\"A Key is required to add a variation this item\");\r\n return;\r\n }\r\n if (materials?.[section]?.[value2]) {\r\n alert(\"This key already exists\");\r\n return;\r\n }\r\n setValue(\"\");\r\n setValue2(\"\");\r\n saveValue(section, key + \"|Variations\", { Name: e.target.value }, \"ADD\", e.target.value);\r\n }}\r\n onChange={(val) => {\r\n setValue2(val);\r\n }}\r\n helperText={\r\n materials?.[section]?.[value2] !== undefined\r\n ? \"This key is not valid or already exists\"\r\n : \"Enter a new Key for this item\"\r\n }\r\n />\r\n {/* key: {key} */}\r\n {\r\n if (!value2) {\r\n alert(\"A Key is required to duplicate this item\");\r\n return;\r\n }\r\n if (materials?.[section]?.[value2]) {\r\n alert(\"This key already exists\");\r\n return;\r\n }\r\n setValue(\"\");\r\n setValue2(\"\");\r\n saveValue(section, key + \"|Variations\", { Name: value2 }, \"ADD\", value2);\r\n }}\r\n >\r\n ADD VARIATION\r\n \r\n {\r\n setValue(\"\");\r\n }}\r\n >\r\n CANCEL\r\n \r\n >\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n setValue2(\"\");\r\n setValue(\"DUPLICATE\");\r\n }}\r\n >\r\n DUPLICATE\r\n \r\n {section !== \"colour_map\" && section !== \"colour_arrays\" && (\r\n <>\r\n {\r\n setValue2(\"\");\r\n setValue(\"ADD VARIATION\");\r\n }}\r\n disabled={key_split.length > 3}\r\n >\r\n ADD VARIATION UNDER THIS ITEM\r\n \r\n \r\n >\r\n )}\r\n {\r\n if (value === \"DELETE\") saveValue(section, key, row, \"DELETE\");\r\n else setValue(\"DELETE\");\r\n }}\r\n >\r\n \r\n {value === \"DELETE\" ? \"CONFIRM?\" : \"DELETE\"}\r\n \r\n >\r\n );\r\n },\r\n};\r\n\r\nexport default function ManageMaterials(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const theme = useTheme();\r\n\r\n // const {\r\n // materials,\r\n // setMaterials,\r\n // pricefile,\r\n // setPricefile,\r\n // pricefileDescSummary,\r\n // setPricefileDescSummary,\r\n // cds_docs,\r\n // setCDSOffering,\r\n // lld_docs,\r\n // setLLDOffering,\r\n // } = props;\r\n\r\n const [tab, setTab] = React.useState(0);\r\n\r\n const [intialise, setIntialise] = React.useState(false);\r\n // const [materials, setMaterials] = React.useState(null);\r\n // const [pricefile, setPricefile] = React.useState(null);\r\n // const [pricefileDescSummary, setPricefileDescSummary] = React.useState(null);\r\n\r\n const [materials, setMaterials] = React.useState(null);\r\n const [pricefile, setPricefile] = React.useState(null);\r\n const [pricefileDescSummary, setPricefileDescSummary] = React.useState(null);\r\n const [cds_docs, setCDSOffering] = React.useState(null);\r\n const [lld_docs, setLLDOffering] = React.useState(null);\r\n const [materialsKeys, setMaterialsKeys] = React.useState(null);\r\n\r\n const [autocompleteOptions, setAutocompleteOptions] = React.useState(null);\r\n const [thumbs, setThumbs] = React.useState({});\r\n const [colourArrayKeys, setColourArrayKeys] = React.useState([]);\r\n const [colourMapKeys, setColourMapKeys] = React.useState([]);\r\n\r\n const [editCell, setEditCell] = React.useState(null);\r\n const [editItem, setEditItem] = React.useState(false);\r\n const [value, setValue] = React.useState(\"\");\r\n const [value2, setValue2] = React.useState(\"\");\r\n const [saving, setSaving] = React.useState({}); // not fast enough! hackign with a global var\r\n if (window.saving === undefined) window.saving = {};\r\n\r\n const [slatRows, setSlatRows] = React.useState([]);\r\n const [infillRows, setInfillRows] = React.useState([]);\r\n const [downpipeRows, setDownpipeRows] = React.useState([]);\r\n const [gutterRows, setGutterRows] = React.useState([]);\r\n const [beamRows, setBeamRows] = React.useState([]);\r\n const [postRows, setPostRows] = React.useState([]);\r\n const [sheetRows, setSheetRows] = React.useState([]);\r\n const [colourRows, setColourRows] = React.useState([]);\r\n const [colourArrayRows, setColourArrayRows] = React.useState([]);\r\n const [defaultCADSettingsRows, setDefaultCADSettingsRows] = React.useState([]);\r\n\r\n const [showVariations, setShowVariations] = React.useState({});\r\n\r\n const toggleShowVariation = (key) => {\r\n let new_showVariations = { ...showVariations };\r\n if (new_showVariations[key] !== undefined) delete new_showVariations[key];\r\n else new_showVariations[key] = true;\r\n setShowVariations(new_showVariations);\r\n \r\n };\r\n\r\n React.useEffect(() => {\r\n if (pricefile) {\r\n let summary = {};\r\n let options = [];\r\n let thumbs = {};\r\n for (let item of pricefile[\"data\"]) {\r\n summary[item.ProductIndex] = item.ProductDescription;\r\n options.push(item.ProductIndex + \" - \" + item.ProductDescription);\r\n if (item.Image_b64) thumbs[item.ProductIndex] = item.Image_b64;\r\n }\r\n setPricefileDescSummary(summary);\r\n setAutocompleteOptions(options);\r\n setThumbs(thumbs);\r\n }\r\n }, [pricefile]);\r\n\r\n React.useEffect(() => {\r\n if (materials) {\r\n if (!window?.config) window.config = {};\r\n window.config.colour_map = { ...materials?.colour_map };\r\n setColourArrayKeys(Object.keys(materials?.colour_arrays));\r\n setColourMapKeys(Object.keys(materials?.colour_map));\r\n }\r\n }, [materials]);\r\n\r\n React.useEffect(() => {\r\n if (!intialise) {\r\n let api_url = API_BASE() + \"admin/GetOfferingFile?name=MATERIALS\";\r\n fetchTimeout(api_url, {\r\n method: \"GET\",\r\n })\r\n .then((response) => response.json())\r\n .then((json) => {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditCell(null);\r\n\r\n setMaterials(json?.MATERIALS);\r\n setPricefile(json?.PRICE_FILE);\r\n setIntialise(true);\r\n })\r\n .catch((e) => {\r\n \r\n setMaterials(null);\r\n });\r\n }\r\n }, [intialise]);\r\n\r\n let row_i = 0;\r\n let row_i_base = 0;\r\n\r\n const createRows = (\r\n section,\r\n data,\r\n columns,\r\n default_item = {},\r\n add_new_row = true,\r\n parent,\r\n grandparent,\r\n greatgrandparent,\r\n greatgreatgrandparent,\r\n parent_background,\r\n parent_key\r\n ) => {\r\n let table_rows = [];\r\n\r\n let keys = null;\r\n if (data) keys = Object.keys(data).sort();\r\n\r\n if (keys)\r\n keys.map((key, index) => {\r\n let row = data[key];\r\n if (row?.hideInTable) return null;\r\n\r\n let full_path_key = parent_key ? parent_key + \"|\" + key : key;\r\n row_i++;\r\n if (!parent) row_i_base++;\r\n\r\n let row_background = row_i_base % 2 === 0 ? \"#e7ebee\" : \"#ffffff\";\r\n if (parent) row_background = row_i % 2 === 0 ? \"#f8f4df\" : \"#fffef8\";\r\n\r\n let visible = true;\r\n if (parent) {\r\n visible = false;\r\n if (showVariations[parent_key.split(\"|\")[0]] !== undefined) visible = true;\r\n }\r\n\r\n table_rows.push(\r\n \r\n {columns.map((column) => {\r\n if (column?.hideInTable) return null;\r\n\r\n let value = \"\";\r\n if (column.id === \"ARRAY_DATA\") {\r\n value = row;\r\n } else {\r\n value = row?.[column.id];\r\n if (value === undefined) value = row?.[column.id.replaceAll(\"_\", \" \")];\r\n if (value === undefined) value = row?.[column.id.replaceAll(\" \", \"_\")];\r\n if (value === undefined && column.alt_id) {\r\n value = row?.[column.alt_id];\r\n if (value === undefined) {\r\n value = row?.[column.alt_id.replaceAll(\"_\", \" \")];\r\n }\r\n if (value === undefined) {\r\n value = row?.[column.alt_id.replaceAll(\" \", \"_\")];\r\n }\r\n }\r\n }\r\n\r\n let display_value = value;\r\n\r\n let inherited = false;\r\n let padding_left = null;\r\n let background = row_background;\r\n\r\n let warning = false;\r\n let thumb = null;\r\n if (column.autoComplete && value) {\r\n let value_to_check = value.replaceAll(\"\", \"\").replaceAll(\"\", \"\").split(\"^\")[0];\r\n let value2_to_check = value.includes(\"^\")\r\n ? value.replaceAll(\"\", \"\").replaceAll(\"\", \"\").split(\"^\")[1]\r\n : null;\r\n\r\n if (column?.format === undefined) {\r\n let found = false;\r\n let autoComplete_list = null;\r\n\r\n if (\r\n typeof column.autoComplete === \"object\" &&\r\n !Array.isArray(column.autoComplete)\r\n ) {\r\n autoComplete_list = Object.keys(column.autoComplete);\r\n } else autoComplete_list = column.autoComplete;\r\n\r\n if (autoComplete_list && Array.isArray(autoComplete_list))\r\n for (let item of autoComplete_list) {\r\n if (item === value_to_check) found = true;\r\n if (item.split(\"-\")[0].trim() === value_to_check) found = true;\r\n if (value2_to_check) {\r\n if (item === value2_to_check) found = true;\r\n if (item.split(\"-\")[0].trim() === value2_to_check) found = true;\r\n }\r\n if (found) break;\r\n }\r\n if (!found) warning = true;\r\n\r\n if (value.includes(\"\")) warning = false;\r\n if (value === \" \") warning = false;\r\n }\r\n\r\n if (thumbs[value_to_check]) thumb = thumbs[value_to_check];\r\n if (!thumb && value2_to_check && thumbs[value2_to_check])\r\n thumb = thumbs[value2_to_check];\r\n }\r\n\r\n if (column.id === \"Key\") {\r\n value = key;\r\n display_value = value;\r\n if (parent) {\r\n padding_left = \"50px\";\r\n display_value = \"➥\" + key;\r\n background =\r\n \"linear-gradient(90deg,\" +\r\n parent_background +\r\n \" 34px\" +\r\n \",#acacac 40px, blanchedalmond 20px)\";\r\n if (grandparent)\r\n background =\r\n \"linear-gradient(90deg,\" +\r\n parent_background +\r\n \" 34px\" +\r\n \",#acacac 40px, blanchedalmond 20px, #f0dbba 65px)\";\r\n if (greatgrandparent)\r\n background =\r\n \"linear-gradient(90deg,\" +\r\n parent_background +\r\n \" 34px\" +\r\n \",#acacac 40px, blanchedalmond 20px, #f0dbba 65px, #e1c8a0 85px)\";\r\n }\r\n if (grandparent) {\r\n padding_left = \"60px\";\r\n display_value = \"➥\" + key;\r\n }\r\n if (greatgrandparent) {\r\n padding_left = \"70px\";\r\n display_value = \"➥➥\" + key;\r\n }\r\n if (greatgreatgrandparent) {\r\n padding_left = \"80px\";\r\n display_value = \"➥➥➥\" + key;\r\n }\r\n } else if (value === undefined && column.id === \"Name\") {\r\n display_value = key;\r\n inherited = true;\r\n } else if (value === undefined && parent?.[column.id] != undefined) {\r\n display_value = parent[column.id];\r\n inherited = true;\r\n } else if (value === undefined && grandparent?.[column.id] != undefined) {\r\n display_value = grandparent[column.id];\r\n inherited = true;\r\n } else if (value === undefined && greatgrandparent?.[column.id] != undefined) {\r\n display_value = greatgrandparent[column.id];\r\n inherited = true;\r\n } else if (value === undefined && greatgreatgrandparent?.[column.id] != undefined) {\r\n display_value = greatgreatgrandparent[column.id];\r\n inherited = true;\r\n }\r\n\r\n if (inherited) {\r\n background = \"blanchedalmond\";\r\n if (greatgrandparent) background = \"#f2ddbd\";\r\n }\r\n\r\n if (column.select) {\r\n let value_to_check = value;\r\n if (inherited) value_to_check = display_value;\r\n let found = false;\r\n for (var item of column.select) {\r\n if (typeof item === \"string\") {\r\n if (value_to_check === item) found = true;\r\n if (item === \"0\" && item == value_to_check) found = true;\r\n if (toNumber(item) > 0 && toNumber(item) == value_to_check) found = true;\r\n }\r\n if (typeof item === \"object\") {\r\n if (item?.Key === value_to_check) found = true;\r\n if (item?.Key === false && !value_to_check) found = true;\r\n if (item?.Key === true && value_to_check === true) found = true;\r\n if (item?.Key === \"0\" && item?.Key == value_to_check) found = true;\r\n if (toNumber(item?.Key) > 0 && toNumber(item?.Key) == value_to_check)\r\n found = true;\r\n }\r\n if (found) break;\r\n }\r\n if (!found) warning = true;\r\n if (value_to_check === \" \") warning = false;\r\n }\r\n\r\n return (\r\n {\r\n if (editCell || editCell?.noEdit) {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditCell(null);\r\n } else {\r\n setValue(value);\r\n setValue2(\"\");\r\n setEditCell({\r\n anchorEl: e.currentTarget,\r\n section: section,\r\n key: full_path_key,\r\n row: row,\r\n column: { ...column },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n {inherited && (\r\n
\r\n {column.id === \"Name\" ? \"→ inherited →\" : \"↓ inherited ↓\"}\r\n
\r\n )}\r\n
\r\n {thumb && (\r\n
\r\n )}\r\n {column.format ? column.format(display_value, row) : display_value}\r\n {warning && (\r\n
\r\n )}\r\n {window.saving &&\r\n window.saving?.[section + \"_\" + full_path_key] &&\r\n column?.id === window.saving?.[section + \"_\" + full_path_key] && (\r\n
\r\n )}\r\n {window.saving &&\r\n window.saving?.[section + \"_\" + full_path_key] &&\r\n \"Error:\" + column?.id ===\r\n window.saving?.[section + \"_\" + full_path_key] && (\r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n })}\r\n\r\n {\r\n if (editCell || menu_columm?.editor === undefined) {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditCell(null);\r\n } else {\r\n setValue(value);\r\n setEditCell({\r\n anchorEl: e.currentTarget,\r\n section: section,\r\n key: full_path_key,\r\n row: row,\r\n column: { ...menu_columm },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n \r\n {window.saving &&\r\n window.saving?.[section + \"_\" + full_path_key] &&\r\n [\"DELETE\", \"ADD\"].includes(window.saving?.[section + \"_\" + full_path_key]) && (\r\n \r\n )}\r\n {window.saving &&\r\n window.saving?.[section + \"_\" + full_path_key] &&\r\n [\"Error:DELETE\"].includes(window.saving?.[section + \"_\" + full_path_key]) && (\r\n \r\n )}\r\n \r\n \r\n );\r\n\r\n if (row.Variations && Object.keys(row.Variations).length > 0) {\r\n if (!parent)\r\n table_rows.push(\r\n \r\n {\r\n toggleShowVariation(key);\r\n }}\r\n >\r\n \r\n {/* import AddCircleOutlineIcon from '@mui/icons-material/AddCircleOutline'; */}\r\n
{\r\n toggleShowVariation(key);\r\n }}\r\n style={{\r\n height: \"14px\",\r\n width: \"17px\",\r\n padding: \"0px\",\r\n }}\r\n >\r\n {showVariations[key] ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\" \"}\r\n VARIATIONS ({Object.keys(row.Variations).length})\r\n
\r\n \r\n \r\n \r\n );\r\n\r\n table_rows.push(\r\n createRows(\r\n section,\r\n row.Variations,\r\n columns,\r\n default_item,\r\n false,\r\n row,\r\n parent,\r\n grandparent,\r\n greatgrandparent,\r\n parent_background ? parent_background : row_background,\r\n full_path_key\r\n )\r\n );\r\n }\r\n });\r\n\r\n if (add_new_row) {\r\n row_i++;\r\n table_rows.push(\r\n \r\n {columns.map((column) => {\r\n let value = \"\";\r\n return (\r\n {\r\n if (editCell || menu_columm?.editor === undefined) {\r\n setValue(\"\");\r\n setValue2(\"\");\r\n setEditCell(null);\r\n } else {\r\n setValue(value);\r\n setEditCell({\r\n anchorEl: e.currentTarget,\r\n section: section,\r\n key: \"Key\",\r\n row: default_item,\r\n column: {\r\n id: \"ADD\",\r\n label: \"New Key\",\r\n style: {\r\n width: \"50px\",\r\n },\r\n },\r\n });\r\n }\r\n e.stopPropagation();\r\n }}\r\n >\r\n {window.saving &&\r\n window.saving?.[section + \"_Key\"] &&\r\n \"ADD\" === window.saving?.[section + \"_Key\"] && }\r\n {window.saving &&\r\n window.saving?.[section + \"_Key\"] &&\r\n \"Error:\" + \"ADD\" === window.saving?.[section + \"_Key\"] && (\r\n \r\n )}\r\n {column.id === \"Key\" && + Add New Row }\r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n return table_rows;\r\n };\r\n\r\n const getGroupHeaders = (columns) => {\r\n let grouping_headers = [];\r\n\r\n let last_grouping = undefined;\r\n let num_in_this_group = -1;\r\n let header_i = 0;\r\n for (let column of columns()) {\r\n if (column?.hideInTable) continue;\r\n let this_grouping = column?.grouping;\r\n if (\r\n this_grouping !== last_grouping ||\r\n (this_grouping === undefined && last_grouping) ||\r\n num_in_this_group > 8\r\n ) {\r\n //change in grouping. print cell\r\n\r\n let cell_style = {};\r\n if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n grouping_headers.push(\r\n \r\n {last_grouping ? last_grouping : \"\"}\r\n \r\n );\r\n header_i++;\r\n last_grouping = this_grouping;\r\n num_in_this_group = 0;\r\n } else {\r\n num_in_this_group++;\r\n }\r\n }\r\n\r\n if (num_in_this_group > 0) {\r\n let cell_style = {};\r\n if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n grouping_headers.push(\r\n \r\n {last_grouping ? last_grouping : \"\"}\r\n \r\n );\r\n }\r\n return grouping_headers;\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!materials) return;\r\n\r\n setDefaultCADSettingsRows(\r\n createRows(\r\n \"default_cad_settings\",\r\n materials?.default_cad_settings\r\n ? materials.default_cad_settings\r\n : {\r\n BARGE_CAPPING_EXTRA: {\r\n Value: 165,\r\n SystemDefault: 165,\r\n },\r\n BEAM_CUT_EXTRA: {\r\n Value: 30,\r\n SystemDefault: 30,\r\n },\r\n BOX_GUTTER_WIDTH_EXTRA: {\r\n Value: 150,\r\n SystemDefault: 150,\r\n },\r\n BOX_GUTTER_WIDTH_EXTRA: {\r\n Value: 150,\r\n SystemDefault: 150,\r\n },\r\n COLLAR_TIE_RATIO: {\r\n Value: 0.3,\r\n SystemDefault: 0.3,\r\n },\r\n DOWNLIGHT_FLASHING_EXTRA: {\r\n Value: 250,\r\n SystemDefault: 250,\r\n },\r\n DOWNPIPE_LOW_HEIGHT: {\r\n Value: 100,\r\n SystemDefault: 100,\r\n },\r\n DOWNPIPE_OFFSET_TOLERANCE: {\r\n Value: 175,\r\n SystemDefault: 175,\r\n },\r\n DOWNPIPE_REQ_AREA: {\r\n Value: 50,\r\n SystemDefault: 50,\r\n },\r\n DOUBLE_RISER_BRACKET_WIDTH: {\r\n Value: 210,\r\n SystemDefault: 210,\r\n },\r\n FLASHING_CUT_EXTRA: {\r\n Value: 200,\r\n SystemDefault: 200,\r\n },\r\n FREESPAN_BEAM_CUT_EXTRA: {\r\n Value: 30,\r\n SystemDefault: 30,\r\n },\r\n FREESPAN_DEPTH: {\r\n Value: 109,\r\n SystemDefault: 109,\r\n },\r\n PORTAL_GABLE_GAZEBO_PURLIN_CUT_EXTRA: {\r\n QQKey: \"GABLE_HIP_ROOF_GAZEBO_PURLIN_CUT_EXTRA\",\r\n Value: 50,\r\n SystemDefault: 50,\r\n },\r\n PORTAL_GABLE_TOP_PURLIN_OFFSET: {\r\n QQKey: \"GABLE_HIP_TOP_PURLIN_OFFSET\",\r\n Value: 45,\r\n SystemDefault: 45,\r\n },\r\n PORTAL_GABLE_TOP_PURLIN_OFFSET2: {\r\n QQKey: \"GABLE_HIP_TOP_PURLIN_OFFSET2\",\r\n Value: 45,\r\n SystemDefault: 45,\r\n },\r\n PORTAL_GABLE_SQUARE_BARGE_RETURN: {\r\n QQKey: \"SQUARE_BARGE_RETURN\",\r\n Value: 20,\r\n SystemDefault: 20,\r\n hideInTable: true,\r\n },\r\n PORTAL_GABLE_FREESPAN_HEIGHT_DIFFERENCE: {\r\n QQKey: \"FREESPAN_HEIGHT_DIFFERENCE\",\r\n Value: 97,\r\n SystemDefault: 97,\r\n hideInTable: true,\r\n },\r\n GUTTER_END_EXTRA: {\r\n QQKey: \"GUTTER_END_EXTRA\",\r\n Value: 200,\r\n SystemDefault: 200,\r\n },\r\n GUTTER_LAP_EXTRA: {\r\n QQKey: \"GUTTER_LAP_EXTRA\",\r\n Value: 100,\r\n SystemDefault: 100,\r\n },\r\n GUTTER_MAX_LENGTH: {\r\n QQKey: \"GUTTER_MAX_LENGTH\",\r\n Value: 8000,\r\n SystemDefault: 8000,\r\n },\r\n GUTTER_MITRE_EXTRA: {\r\n QQKey: \"GUTTER_MITRE_EXTRA\",\r\n Value: 200,\r\n SystemDefault: 200,\r\n },\r\n HIP_CAPPING_EXTRA: {\r\n QQKey: \"HIP_CAPPING_EXTRA\",\r\n Value: 300,\r\n SystemDefault: 300,\r\n },\r\n HIP_JUNCTION_HIP_END_EXTENSION: {\r\n QQKey: \"HIP_JUNCTION_HIP_END_EXTENSION\",\r\n Value: 150,\r\n SystemDefault: 150,\r\n },\r\n INFILL_BEAM_EXTRA: {\r\n QQKey: \"INFILL_BEAM_EXTRA\",\r\n Value: 100,\r\n SystemDefault: 100,\r\n },\r\n INFILL_FLASHING_EXTRA: {\r\n QQKey: \"INFILL_FLASHING_EXTRA\",\r\n Value: 250,\r\n SystemDefault: 250,\r\n },\r\n INFILL_TRIM_FLASHING_EXTRA: {\r\n QQKey: \"INFILL_TRIM_FLASHING_EXTRA\",\r\n Value: 350,\r\n SystemDefault: 350,\r\n },\r\n MAX_FLASHING_LENGTH: {\r\n QQKey: \"MAX_FLASHING_LENGTH\",\r\n Value: 6100,\r\n SystemDefault: 6100,\r\n },\r\n MAX_SLAT_PANEL_LENGTH: {\r\n QQKey: \"MAX_SLAT_PANEL_LENGTH\",\r\n Value: 4000,\r\n SystemDefault: 4000,\r\n },\r\n MAX_SLAT_PANEL_LENGTH: {\r\n QQKey: \"MAX_SLAT_PANEL_LENGTH\",\r\n Value: 4000,\r\n SystemDefault: 4000,\r\n },\r\n MAX_SOLARSPAN_FLASHING_LENGTH: {\r\n QQKey: \"MAX_SOLARSPAN_FLASHING_LENGTH\",\r\n Value: 7500,\r\n SystemDefault: 7500,\r\n },\r\n MIN_POST_HEIGHT: {\r\n QQKey: \"MIN_POST_HEIGHT\",\r\n Value: 2000,\r\n SystemDefault: 2000,\r\n },\r\n PORTAL_INFILL_STRUT_EXTRA: {\r\n QQKey: \"PORTAL_STRUT_EXTRA\",\r\n Value: 200,\r\n SystemDefault: 200,\r\n },\r\n POST_EXTRA: {\r\n QQKey: \"POST_EXTRA\",\r\n Value: 100,\r\n SystemDefault: 100,\r\n },\r\n RAFTER_BRACKET_OFFSET: {\r\n QQKey: \"RAFTER_BRACKET_OFFSET\",\r\n Value: 100,\r\n SystemDefault: 100,\r\n },\r\n SHEET_INTO_GUTTER: {\r\n QQKey: \"SHEET_INTO_GUTTER\",\r\n Value: 60,\r\n SystemDefault: 60,\r\n },\r\n SHEET_INTO_GUTTER_SOLARSPAN: {\r\n QQKey: \"SHEET_INTO_GUTTER_SOLARSPAN\",\r\n Value: 60,\r\n SystemDefault: 60,\r\n },\r\n MAX_INFILL_SHEET_PANEL_LENGTH: {\r\n QQKey: \"MAX_SHEET_PANEL_LENGTH\",\r\n Value: 4000,\r\n SystemDefault: 4000,\r\n },\r\n SHEET_PANEL_FLASHING_DEPTH: {\r\n QQKey: \"SHEET_PANEL_FLASHING_DEPTH\",\r\n Value: 38,\r\n SystemDefault: 38,\r\n },\r\n SHEET_RIDGE_OFFSET: {\r\n QQKey: \"SHEET_RIDGE_OFFSET\",\r\n Value: 10,\r\n SystemDefault: 10,\r\n },\r\n SHEET_TAPER_EXTRA: {\r\n QQKey: \"SHEET_TAPER_EXTRA\",\r\n Value: 200,\r\n SystemDefault: 200,\r\n },\r\n POST_SET_INTO_FOOTING_DISTANCE: {\r\n QQKey: \"SET_INTO_FOOTING_DISTANCE\",\r\n Value: 500,\r\n SystemDefault: 500,\r\n },\r\n SET_INTO_FOOTING_DISTANCE_CANTILEVER: {\r\n QQKey: \"SET_INTO_FOOTING_DISTANCE_CANTILEVER\",\r\n Value: 300,\r\n SystemDefault: 300,\r\n hideInTable: true,\r\n },\r\n SKILLION_ROOF_SHEET_EXT: {\r\n QQKey: \"SKILLION_ROOF_SHEET_EXT\",\r\n Value: 50,\r\n SystemDefault: 50,\r\n },\r\n WALL_PORTAL_OFFSET: {\r\n QQKey: \"WALL_PORTAL_OFFSET\",\r\n Value: 50,\r\n SystemDefault: 50,\r\n },\r\n FREESTANDING_SLAT_POST: {\r\n QQKey: \"FREESTANDING_SLAT_POST\",\r\n Value: \"50mm x 50mm x 3mm P/C\",\r\n SystemDefault: \"50mm x 50mm x 3mm P/C\",\r\n },\r\n PORTAL_GAZEBO_POST: {\r\n QQKey: \"GABLE_HIP_GAZEBO_POST\",\r\n Value: \"656510\",\r\n SystemDefault: \"656510\",\r\n },\r\n PORTAL_ON_TOP_BEAM: {\r\n QQKey: \"GABLE_HIP_ON_TOP_BEAM\",\r\n Value: \"656510\",\r\n SystemDefault: \"656510\",\r\n },\r\n PORTAL_ON_TOP_PURLIN: {\r\n QQKey: \"GABLE_HIP_ON_TOP_PURLIN\",\r\n Value: \"656510\",\r\n SystemDefault: \"656510\",\r\n },\r\n GUTTER_BEAM: {\r\n QQKey: \"GUTTER_BEAM\",\r\n Value: \"1586510\",\r\n SystemDefault: \"1586510\",\r\n },\r\n ON_TOP_BEAM: {\r\n QQKey: \"ON_TOP_BEAM\",\r\n Value: \"656510\",\r\n SystemDefault: \"656510\",\r\n },\r\n PORTAL_STRUT_BEAM: {\r\n QQKey: \"STRUT_BEAM\",\r\n Value: \"656510\",\r\n SystemDefault: \"656510\",\r\n },\r\n },\r\n default_cad_settings_columns(),\r\n {\r\n Value: \"\",\r\n SystemDefault: \"\",\r\n }\r\n )\r\n );\r\n\r\n setColourRows(\r\n createRows(\r\n \"colour_map\",\r\n materials.colour_map,\r\n colour_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n colour_default\r\n )\r\n );\r\n\r\n setColourArrayRows(\r\n createRows(\r\n \"colour_arrays\",\r\n materials.colour_arrays,\r\n colour_array_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n []\r\n )\r\n );\r\n setSlatRows(\r\n createRows(\r\n \"SLATS\",\r\n materials.SLATS,\r\n slat_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n slat_default\r\n )\r\n );\r\n setInfillRows(\r\n createRows(\r\n \"INFILLS\",\r\n materials.INFILLS,\r\n infill_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n infill_default\r\n )\r\n );\r\n setDownpipeRows(\r\n createRows(\r\n \"DOWNPIPES\",\r\n materials.DOWNPIPES,\r\n downpipe_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n downpipe_default\r\n )\r\n );\r\n setGutterRows(\r\n createRows(\r\n \"GUTTERS\",\r\n materials.GUTTERS,\r\n gutter_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n gutter_default\r\n )\r\n );\r\n setBeamRows(\r\n createRows(\r\n \"BEAMS\",\r\n materials.BEAMS,\r\n beam_colummns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n beam_default\r\n )\r\n );\r\n setPostRows(\r\n createRows(\r\n \"POSTS\",\r\n materials.POSTS,\r\n post_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n post_default\r\n )\r\n );\r\n setSheetRows(\r\n createRows(\r\n \"SHEETS\",\r\n materials.SHEETS,\r\n sheet_columns(autocompleteOptions, colourMapKeys, colourArrayKeys),\r\n post_default\r\n )\r\n );\r\n }, [materials, autocompleteOptions, colourArrayKeys, saving, showVariations]);\r\n\r\n const saveValue = (section, key, row, parameter, value, parameter2 = null, value2) => {\r\n setEditCell(null);\r\n setValue(\"\");\r\n setValue2(\"\");\r\n\r\n \r\n if (!row) {\r\n return;\r\n }\r\n\r\n if (parameter === \"Key\" && value === key) {\r\n window.saving[section + \"_\" + key] = null;\r\n setSaving({ ...window.saving });\r\n return;\r\n }\r\n if (parameter2 && row[parameter] === value && row[parameter2] === value2) {\r\n window.saving[section + \"_\" + key] = null;\r\n setSaving({ ...window.saving });\r\n return;\r\n }\r\n if (\r\n parameter !== \"DELETE\" &&\r\n parameter !== \"ADD\" &&\r\n parameter !== \"EDIT\" &&\r\n parameter !== \"ARRAY_DATA\" &&\r\n row[parameter] === value &&\r\n parameter2 === null\r\n ) {\r\n window.saving[section + \"_\" + key] = null;\r\n setSaving({ ...window.saving });\r\n return;\r\n }\r\n\r\n let new_row = Array.isArray(row) ? [...row] : { ...row };\r\n\r\n window.saving[section + \"_\" + key] = parameter;\r\n setSaving({ ...window.saving });\r\n\r\n let api_url = API_BASE() + \"admin/UpdateMaterials?action=Update_\" + parameter.replaceAll(\" \", \"_\");\r\n\r\n if (parameter === \"ARRAY_DATA\") {\r\n api_url = API_BASE() + \"admin/UpdateMaterials?action=ARRAY_DATA\";\r\n new_row = row;\r\n value = row;\r\n } else if (parameter === \"DELETE\") {\r\n api_url = API_BASE() + \"admin/UpdateMaterials?action=delete\";\r\n } else if (parameter === \"ADD\") {\r\n if (materials[section][value] != null) {\r\n window.saving[section + \"_\" + key] = null;\r\n setSaving({ ...window.saving });\r\n return;\r\n }\r\n api_url = API_BASE() + \"admin/UpdateMaterials?action=add\";\r\n\r\n if (key.endsWith(\"|Variations\")) {\r\n window.saving[section + \"_\" + key.replace(\"|Variations\", \"\")] = parameter;\r\n setSaving({ ...window.saving });\r\n }\r\n } else {\r\n if (new_row[parameter.replaceAll(\" \", \"_\")] !== undefined) parameter = parameter.replaceAll(\" \", \"_\");\r\n new_row[parameter] = value;\r\n if (value === null || (value === \"\" && new_row[parameter] !== undefined)) {\r\n delete new_row[parameter];\r\n }\r\n if (parameter2) new_row[parameter2] = value2;\r\n }\r\n\r\n fetchTimeout(api_url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n section: section,\r\n key: key,\r\n value: value,\r\n row: new_row,\r\n }),\r\n })\r\n .then(async (response) => {\r\n if (response.status >= 200 && response.status <= 300) {\r\n let newMaterials = await response.json();\r\n\r\n setMaterials(newMaterials);\r\n } else {\r\n throw \"Error saving values\";\r\n }\r\n window.saving[section + \"_\" + key] = null;\r\n setSaving({ ...window.saving });\r\n\r\n if (key.endsWith(\"|Variations\")) {\r\n window.saving[section + \"_\" + key.replace(\"|Variations\", \"\")] = null;\r\n setSaving({ ...window.saving });\r\n }\r\n })\r\n .catch((e) => {\r\n \r\n // setSaving({ ...saving, [row.id]: \"Error:\" + saving[row.id] });\r\n window.saving[section + \"_\" + key] = \"Error:\" + window.saving[section + \"_\" + key];\r\n setSaving({ ...window.saving });\r\n\r\n if (key.endsWith(\"|Variations\")) {\r\n window.saving[section + \"_\" + key.replace(\"|Variations\", \"\")] =\r\n \"Error:\" + window.saving[section + \"_\" + key];\r\n setSaving({ ...window.saving });\r\n }\r\n });\r\n };\r\n\r\n function padTo2Digits(num) {\r\n return num.toString().padStart(2, \"0\");\r\n }\r\n\r\n function formatDate(date) {\r\n return [padTo2Digits(date.getDate()), padTo2Digits(date.getMonth() + 1), date.getFullYear()].join(\"-\");\r\n }\r\n\r\n const DownloadOfferingFile = () => {\r\n var element = document.createElement(\"a\");\r\n element.setAttribute(\r\n \"href\",\r\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(JSON.stringify(materials, null, 4))\r\n );\r\n element.setAttribute(\"download\", \"MATERIALS.SETTINGS.\" + formatDate(new Date()) + \".json\");\r\n\r\n element.style.display = \"none\";\r\n document.body.appendChild(element);\r\n\r\n element.click();\r\n\r\n document.body.removeChild(element);\r\n };\r\n\r\n const dragOver = (e) => {\r\n let newvalue2 = { ...value2 };\r\n newvalue2.background = \"#111111AA\";\r\n setValue2(newvalue2);\r\n e.preventDefault();\r\n };\r\n const dragLeave = (e) => {\r\n let newvalue2 = { ...value2 };\r\n newvalue2.background = \"rgb(134 134 134 / 36%)\";\r\n setValue2(newvalue2);\r\n e.preventDefault();\r\n };\r\n const fileDrop = (e) => {\r\n let newvalue2 = { ...value2 };\r\n newvalue2.background = \"rgb(134 134 134 / 36%)\";\r\n setValue2(newvalue2);\r\n e.preventDefault();\r\n const files = e.dataTransfer.files;\r\n\r\n if (files.length) {\r\n handleFiles(files);\r\n }\r\n };\r\n\r\n const uploadFile = (e) => {\r\n if (e?.target?.files) handleFiles(e.target.files);\r\n };\r\n\r\n const handleFiles = (files) => {\r\n if (files.length === 0) return;\r\n let file = files[0];\r\n if (\r\n file.name.toLowerCase().endsWith(\".png\") ||\r\n file.name.toLowerCase().endsWith(\".jpg\") ||\r\n file.name.toLowerCase().endsWith(\".gif\")\r\n ) {\r\n if (file.size > 10000) {\r\n alert(\"File is too big! Less thank 10kB please\");\r\n return;\r\n }\r\n\r\n \r\n var reader = new FileReader();\r\n reader.onload = function (e) {\r\n \r\n setValue(e.target.result);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n };\r\n\r\n let editCellType = \"None\";\r\n let editCellHelperText = \"\";\r\n if (editCell?.column?.editor === undefined) {\r\n if (editCell?.column?.id) editCellType = \"Text\";\r\n if (editCell?.column?.autoComplete) editCellType = \"Autocomplete\";\r\n if (editCell?.column?.select) editCellType = \"Select\";\r\n if (editCell?.column?.id === \"thumbnail\") editCellType = \"Thumbnail\";\r\n\r\n if (editCell?.row?.[editCell?.column?.id]) {\r\n if (editCell?.column?.format)\r\n editCellHelperText =\r\n \"currently: \" + editCell?.column?.format(editCell?.row?.[editCell?.column?.id], editCell?.row);\r\n else editCellHelperText = \"currently: \" + editCell?.row?.[editCell?.column?.id];\r\n }\r\n\r\n if (editCell?.column?.helperText) {\r\n editCellHelperText += \" ... \" + editCell?.column?.helperText;\r\n }\r\n }\r\n\r\n let autoComplete_list = null;\r\n if (editCell?.column?.autoComplete && typeof editCell?.column?.autoComplete === \"object\") {\r\n if (Array.isArray(editCell?.column?.autoComplete)) autoComplete_list = editCell?.column?.autoComplete;\r\n else autoComplete_list = Object.keys(editCell?.column?.autoComplete);\r\n }\r\n\r\n // let num_in_this_group = -1;\r\n // let header_i = 0;\r\n // for (let column of beam_colummns()) {\r\n // if (column?.hideInTable) continue;\r\n // let this_grouping = column?.grouping;\r\n // if (this_grouping !== last_grouping || (this_grouping === undefined && last_grouping)) {\r\n // //change in grouping. print cell\r\n\r\n // let cell_style = {};\r\n // if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n // beam_grouping_headers.push(\r\n // \r\n // {last_grouping ? last_grouping : \"\"}\r\n // \r\n // );\r\n // header_i++;\r\n // last_grouping = this_grouping;\r\n // num_in_this_group = 0;\r\n // } else {\r\n // num_in_this_group++;\r\n // }\r\n // }\r\n\r\n // if (num_in_this_group > 0) {\r\n // let cell_style = {};\r\n // if (header_i % 2 === 0) cell_style.background = \"#936a2b !important\";\r\n\r\n // beam_grouping_headers.push(\r\n // \r\n // {last_grouping ? last_grouping : \"\"}\r\n // \r\n // );\r\n // }\r\n\r\n return (\r\n \r\n {!intialise &&
}\r\n {materials && (\r\n <>\r\n {/*
Download Current Materials File \r\n
{\r\n if (level <= 0) return true;\r\n else return false;\r\n }}\r\n style={darkStyles}\r\n /> */}\r\n\r\n \r\n setTab(newValue)}\r\n indicatorColor=\"primary\"\r\n textColor=\"primary\"\r\n variant=\"fullWidth\"\r\n aria-label=\"full width tabs example\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n setTab(index)}\r\n >\r\n \r\n \r\n \r\n \r\n {getGroupHeaders(sheet_columns)} \r\n \r\n {sheet_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label.replaceAll(\"_\", \" \")}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {sheetRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(beam_colummns)} \r\n \r\n {beam_colummns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label.replaceAll(\"_\", \" \")}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {beamRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(post_columns)} \r\n \r\n {post_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label.replaceAll(\"_\", \" \")}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {postRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(gutter_columns)} \r\n \r\n {gutter_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {gutterRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(downpipe_columns)} \r\n \r\n {downpipe_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {downpipeRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(slat_columns)} \r\n \r\n {slat_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {slatRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(infill_columns)} \r\n \r\n {infill_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {infillRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(colour_array_columns)}\r\n \r\n \r\n {colour_array_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {colourArrayRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(colour_columns)} \r\n \r\n {colour_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {colourRows} \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {getGroupHeaders(default_cad_settings_columns)} \r\n \r\n {default_cad_settings_columns().map((column) =>\r\n column?.hideInTable ? null : (\r\n \r\n {column.label}\r\n \r\n )\r\n )}\r\n {/* */}\r\n \r\n \r\n \r\n {defaultCADSettingsRows} \r\n
\r\n \r\n \r\n \r\n >\r\n )}\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n \r\n setEditCell(null)}\r\n style={{ color: \"white\", position: \"absolute\", right: \"5px\" }}\r\n >\r\n \r\n \r\n\r\n {editCell?.column?.editor !== undefined &&\r\n editCell?.column?.editor(\r\n editCell.section,\r\n editCell.key,\r\n editCell?.row,\r\n value,\r\n setValue,\r\n saveValue,\r\n value2,\r\n setValue2,\r\n pricefileDescSummary,\r\n materials,\r\n setEditItem\r\n )}\r\n\r\n {editCellType === \"Autocomplete\" && (\r\n <>\r\n {\r\n if (item.toLowerCase().startsWith(value.toLowerCase().substring(0, 4)))\r\n return true;\r\n if (item.toLowerCase().indexOf(value.toLowerCase()) > -1) return true;\r\n return false;\r\n }}\r\n getItemValue={(item) => item}\r\n autoHighlight={false}\r\n renderItem={(item, highlighted) => (\r\n \r\n {item}\r\n
\r\n )}\r\n menuStyle={{\r\n zIndex: \"999999\",\r\n position: \"absolute\",\r\n backgroundColor: \"whitesmoke\",\r\n boxShadow: \"1px 1px 4px\",\r\n fontSize: \"12px\",\r\n left: \"auto\",\r\n top: \"auto\",\r\n marginLeft: \"9px\",\r\n // marginTop: \"-33px\",\r\n lineHeight: 1.4,\r\n width: \"350px\",\r\n textAlign: \"left\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n }}\r\n inputProps={{\r\n style: {\r\n font: \"200 12px Univers45\",\r\n width: \"95%\",\r\n padding: \"4px 0px 4px 8px !important\",\r\n },\r\n }}\r\n renderInput={(props) => {\r\n return (\r\n \r\n saveValue(\r\n editCell.section,\r\n editCell.key,\r\n editCell.row,\r\n editCell?.column?.id,\r\n e.target.value\r\n )\r\n }\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={editCellHelperText}\r\n />\r\n );\r\n }}\r\n value={value}\r\n // onChange={(e) => setValue(e.target.value.split(\"-\")[0].trim())}\r\n onSelect={(val) => setValue(val.split(\"-\")[0].trim())}\r\n />\r\n \r\n {value2 !== \"NO BUTTON\" && (\r\n \r\n saveValue(\r\n editCell.section,\r\n editCell.key,\r\n editCell.row,\r\n editCell?.column?.id,\r\n value\r\n )\r\n }\r\n >\r\n UPDATE\r\n \r\n )}\r\n >\r\n )}\r\n\r\n {editCellType === \"Text\" && (\r\n <>\r\n \r\n saveValue(\r\n editCell.section,\r\n editCell.key,\r\n editCell.row,\r\n editCell?.column?.id,\r\n e.target.value\r\n )\r\n }\r\n onChange={(value) => {\r\n setValue(value);\r\n }}\r\n helperText={editCellHelperText}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n \r\n saveValue(\r\n editCell.section,\r\n editCell.key,\r\n editCell.row,\r\n editCell?.column?.id,\r\n value\r\n )\r\n }\r\n >\r\n UPDATE\r\n \r\n )}\r\n >\r\n )}\r\n\r\n {editCellType === \"Select\" && (\r\n <>\r\n {\r\n setValue(val);\r\n e.stopPropagation();\r\n }}\r\n helperText={editCellHelperText}\r\n />\r\n\r\n {value2 !== \"NO BUTTON\" && (\r\n \r\n saveValue(\r\n editCell.section,\r\n editCell.key,\r\n editCell.row,\r\n editCell?.column?.id,\r\n value\r\n )\r\n }\r\n >\r\n UPDATE\r\n \r\n )}\r\n >\r\n )}\r\n\r\n {editCellType === \"Thumbnail\" && (\r\n <>\r\n \r\n setValue(\"\")}\r\n style={{\r\n color: \"black\",\r\n position: \"absolute\",\r\n right: \"5px\",\r\n marginTop: \"12px\",\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n {\"Click or Drag & Drop image file to upload\"}\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n saveValue(\r\n editCell.section,\r\n editCell.key,\r\n editCell.row,\r\n editCell?.column?.id,\r\n value\r\n )\r\n }\r\n >\r\n UPDATE\r\n \r\n >\r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport SegmentedButtonGroup from \"../components/SegmentedButtonGroup\";\r\nimport ManageColours from \"./ManageColours\";\r\nimport ManageUsers from \"./ManageUsers\";\r\nimport DebugTools from \"./DebugTools\";\r\nimport SystemTools from \"./SystemTools\";\r\nimport ManageOffering from \"./ManageOffering\";\r\nimport ManageProductList from \"./ManageProductList\";\r\nimport ManageMaterials from \"./ManageMaterials\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n padding: \"20px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"calc(100% - 46px)\",\r\n },\r\n});\r\n\r\nexport default function Admin(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [page, setPage] = React.useState(props?.page ? props?.page : null);\r\n const user = useSelector((state) => state.app.user);\r\n\r\n // const [materials, setMaterials] = React.useState(null);\r\n // const [pricefile, setPricefile] = React.useState(null);\r\n // const [pricefileDescSummary, setPricefileDescSummary] = React.useState(null);\r\n // const [cds_docs, setCDSOffering] = React.useState(null);\r\n // const [lld_docs, setLLDOffering] = React.useState(null);\r\n // const [materialsKeys, setMaterialsKeys] = React.useState(null);\r\n\r\n let functions = [{ Key: \"Manage Users\", Display: \"Manage Businesses/Users\" }];\r\n\r\n if (user?.Role === 99) {\r\n functions = [\r\n { Key: \"Manage Users\", Display: \"Businesses/Users\" },\r\n { Key: \"System\", Display: \"Announcements\" },\r\n { Key: \"Product List\", Display: \"Product List\" },\r\n { Key: \"Manage Materials\", Display: \"Materials\" },\r\n { Key: \"Manage Offering\", Display: \"Offering\" },\r\n { Key: \"Diagnostics\", Display: \"Diagnostics\" },\r\n // { Key: \"Colour List\", Display: \"Colour List\" },\r\n ];\r\n }\r\n\r\n return (\r\n \r\n {\r\n setPage(val);\r\n }}\r\n style={{\r\n flex: \"inherit\",\r\n }}\r\n />\r\n\r\n {page === \"Colour List\" && }\r\n {/* {page === \"Product List\" && !window.debug && (\r\n \r\n )} */}\r\n {page === \"Product List\" && (\r\n \r\n )}\r\n {page === \"Manage Offering\" && (\r\n \r\n )}\r\n {page === \"Manage Materials\" && (\r\n \r\n )}\r\n {page === \"Manage Users\" && }\r\n {page === \"Diagnostics\" && }\r\n {page === \"System\" && }\r\n
\r\n );\r\n}\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { BaseURL, deepCopy, getCookie, objectByString, saveJobBasic, shadeColor } from \"../components/Common\";\r\n// import { Auth } from 'aws-amplify';\r\nimport { Palette, MANUFACTURER } from \"../AppConfig\";\r\nimport * as PaperIO from \"../components_designer/layout/PaperFunctions\";\r\n\r\n// Material UI\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport deepPurple from \"@material-ui/core/colors/deepPurple\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\n\r\n// Redux Actions\r\nimport { DESIGNER_PAGE, MAIN_PAGE, changePage } from \"../redux_store/appState\";\r\nimport ManageUser from \"./ManageUser\";\r\nimport { Drawer, Paper } from \"@material-ui/core\";\r\nimport Admin from \"../admin/Admin\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n position: \"fixed\",\r\n zIndex: 9999,\r\n textAlign: \"left\",\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n font: \"22pt \" + theme.typography.fontFamily,\r\n },\r\n menuButton: {\r\n // marginLeft: 20,\r\n marginRight: -12,\r\n },\r\n backButton: {\r\n // marginLeft: 20,\r\n marginRight: 0,\r\n },\r\n purpleAvatar: {\r\n margin: 5,\r\n color: \"#fff\",\r\n backgroundColor: deepPurple[500],\r\n marginBottom: \"6px\",\r\n alignSelf: \"flex-end\",\r\n border: theme.brand.FIELDERS ? \"2px solid white\" : \"0px solid white\",\r\n cursor: \"pointer\",\r\n },\r\n compactAvatar: {\r\n width: \"28px\",\r\n height: \"28px\",\r\n margin: \"2px\",\r\n fontSize: \"small\",\r\n },\r\n expandIcon: {\r\n marginBottom: \"16px\",\r\n alignSelf: \"flex-end\",\r\n color: theme.brand.FIELDERS ? \"white\" : Palette.Lysaght.DarkBlue,\r\n cursor: \"pointer\",\r\n },\r\n designer: {\r\n color: \"#5AC3E4\",\r\n font: \"38pt \" + Palette.Lysaght.FontFamily,\r\n fontWeight: 900,\r\n paddingLeft: \"5px\",\r\n // transform: 'scale(0.93,1.0)',\r\n },\r\n userName: {\r\n font: \"9pt \" + theme.typography.fontFamily,\r\n fontWeight: \"600\",\r\n },\r\n userNameLysaght: {\r\n color: Palette.Lysaght.DarkBlue,\r\n font: \"600 14pt \" + Palette.Lysaght.FontFamily,\r\n textTransform: \"uppercase\",\r\n },\r\n businessName: {\r\n font: \"7pt \" + theme.typography.fontFamily,\r\n fontWeight: \"100\",\r\n },\r\n businessNameLysaght: {\r\n font: \"10pt \" + Palette.Lysaght.FontFamily,\r\n fontWeight: \"100\",\r\n color: \"black\",\r\n },\r\n testHeader: {\r\n font: \"7pt \" + theme.typography.fontFamily,\r\n fontWeight: \"100\",\r\n marginBottom: theme.brand.FIELDERS ? \"1px\" : \"5px\",\r\n marginLeft: \"20px\",\r\n alignSelf: \"flex-end\",\r\n },\r\n testHeaderLg: {\r\n marginBottom: theme.brand.FIELDERS ? \"0px\" : \"10px\",\r\n font: \"9pt \" + theme.typography.fontFamily,\r\n },\r\n greybar: {\r\n width: \"1px\",\r\n color: \"#E4E4E3\",\r\n backgroundColor: \"#E4E4E3\",\r\n height: \"32px\",\r\n margin: \"6px 4px 6px 10px\",\r\n },\r\n admin_drawer_root: {\r\n top: \"0px\",\r\n left: \"0px\",\r\n width: \"95%\",\r\n height: \"-webkit-fill-available\",\r\n display: \"flex\",\r\n overflow: \"hidden\",\r\n position: \"fixed\",\r\n textAlign: \"left\",\r\n borderLeft: \"3px solid #0000001f\",\r\n borderRadius: \"0px\",\r\n flexDirection: \"column\",\r\n backdropFilter: \"blur(4px)\",\r\n backgroundColor: \"#edf0f3e8\",\r\n // paddingTop: \"103px\",\r\n },\r\n}));\r\n\r\nexport default function TopBar(props) {\r\n // class TopBar extends Component {\r\n\r\n const dispatch = useDispatch();\r\n const classes = useStyles();\r\n const app = useSelector((state) => state.app);\r\n const job = useSelector((state) => state.job);\r\n const { page, user } = app;\r\n\r\n const [openManageUser, setOpenManageUser] = React.useState(false);\r\n const [adminDrawer, setAdminDrawer] = React.useState(null);\r\n\r\n const this_MANUFACTURER = objectByString(MANUFACTURER, window.brand);\r\n\r\n React.useEffect(() => {\r\n if (!user || !app.logged_user_code) return;\r\n\r\n if (job?.id || window.loading_job_id) {\r\n let id = job?.id ? job?.id : window.loading_job_id;\r\n document.title = \"#\" + id + \" - \" + this_MANUFACTURER.SoftwareName + (window.debug ? \" : Debug\" : \"\");\r\n let url = \"/app\";\r\n if (window.debug) {\r\n let locref = window.location.href;\r\n if (locref.includes(\"use_cache\")) url += \"?use_cache\";\r\n if (locref.includes(\"no_eng\")) url += \"_no_eng\";\r\n }\r\n url += \"/?job=\" + id;\r\n\r\n if (window.location.href.toLowerCase().includes(\"brand=centenary\")) url += \"&brand=centenary\";\r\n window.history.replaceState(null, document.title, url);\r\n } else {\r\n document.title = this_MANUFACTURER.SoftwareName + (window.debug ? \" : Debug\" : \"\");\r\n let url = \"/app/\";\r\n if (window.location.href.toLowerCase().includes(\"brand=centenary\")) url += \"?brand=centenary\";\r\n window.history.replaceState(null, document.title, url);\r\n }\r\n }, [job, page]);\r\n\r\n let display_name = \"No User Loaded\";\r\n let display_business_name = \"\";\r\n let let_user_code = \"?\";\r\n if (user) {\r\n if (user.DisplayName) display_name = user.DisplayName;\r\n else if (user.FirstName) display_name = user.FirstName + \" \" + user.LastName;\r\n else display_name = user.id;\r\n display_business_name = user.BusinessDetails.Name;\r\n let_user_code = user.UserCode;\r\n }\r\n\r\n let compact = false;\r\n if (page === DESIGNER_PAGE) compact = true;\r\n\r\n let display_role = user?.RoleName;\r\n if (display_role)\r\n display_role = display_role\r\n .replace(/([A-Z])/g, \" $1\")\r\n .trim()\r\n .replace(\"B B C\", \"BBC\");\r\n\r\n let this_Palette = objectByString(Palette, user?.Brand || window.brand);\r\n let background_colour = String(this_Palette?.prod);\r\n if (window.beta) {\r\n background_colour = String(this_Palette?.beta);\r\n } else if (window.location.href.includes(\"localhost\")) {\r\n background_colour = String(this_Palette?.debug);\r\n } else if (window.location.href.includes(\"test.\")) {\r\n background_colour = String(this_Palette?.test);\r\n }\r\n\r\n React.useEffect(() => {\r\n if (window.beta) {\r\n background_colour = String(this_Palette?.beta);\r\n }\r\n }, [window.beta]);\r\n\r\n let background_colour_grad =\r\n \"linear-gradient(0.25turn, \" + background_colour + \", \" + shadeColor(background_colour, 12) + \")\";\r\n // if (window.test) background_colour = 'linear-gradient(0.25turn, #c78219, #f49507)';\r\n // if (window.debug) background_colour = 'linear-gradient(0.25turn, #565656, #AAAAAA)';\r\n\r\n let logoImg = this_MANUFACTURER?.Logo;\r\n\r\n let user_token = getCookie(\"CDS_token\");\r\n let user_SFusername = getCookie(\"SF_user\");\r\n\r\n return (\r\n \r\n
\r\n \r\n {/* {page === DESIGNER_PAGE &&\r\n changePage(MAIN_PAGE)}>\r\n \r\n \r\n } */}\r\n \r\n {this_MANUFACTURER.Name === \"Fielders\" && logoImg && (\r\n
\r\n )}\r\n {this_MANUFACTURER.Name === \"Lysaght\" && (\r\n <>\r\n
\r\n
\r\n
\r\n DESIGNER\r\n
\r\n >\r\n )}\r\n {window.beta || window.test || window.debug ? (\r\n
\r\n {window.beta ? \"BETA\" : window.debug ? \"DEBUG\" : \"TEST\"} ENVIRONMENT\r\n
\r\n ) : null}\r\n
\r\n\r\n {!compact && (\r\n \r\n \r\n {display_name}\r\n \r\n {display_role && (\r\n \r\n {display_role} User\r\n \r\n )}\r\n \r\n {display_business_name}\r\n \r\n
\r\n )}\r\n (window.debug ? dispatch(loadUser(user.Email)) : \"\")}\r\n onClick={() => setOpenManageUser(!openManageUser)}\r\n >\r\n {user?.Avatar ? \"\" : let_user_code}\r\n \r\n setOpenManageUser(!openManageUser)}\r\n />\r\n {/* \r\n \r\n */}\r\n \r\n {/* */}\r\n \r\n {openManageUser && (\r\n
setOpenManageUser(!openManageUser)} />\r\n )}\r\n\r\n {Number(user?.Role) >= 91 && (\r\n <>\r\n setAdminDrawer(\"Colour List\")}\r\n color=\"primary\"\r\n style={{\r\n alignSelf: \"center\",\r\n zIndex: \"9999\",\r\n position: \"fixed\",\r\n right: \"102px\",\r\n borderBottomLeftRadius: \"10px\",\r\n borderBottomRightRadius: \"10px\",\r\n padding: \"5px 10px\",\r\n border: \"5px\",\r\n lineHeight: \"1\",\r\n fontSize: \"small\",\r\n boxShadow: \"rgb(255 255 255 / 45%) 2px 2px 4px\",\r\n }}\r\n >\r\n Admin\r\n \r\n setAdminDrawer(null)} disableEnforceFocus>\r\n \r\n \r\n >\r\n )}\r\n {!window.location.href.toLowerCase().includes(\"preprod\") && user?.BetaUser === \"true\" && (\r\n <>\r\n {\r\n if (job) {\r\n var save_job = deepCopy(job);\r\n\r\n if (app?.user && save_job)\r\n save_job.LastEditor = {\r\n id: app.user.id,\r\n DisplayName: app.user.DisplayName,\r\n UserCode: app.user.UserCode,\r\n _session_id: \"\",\r\n _ts: Date.now(),\r\n };\r\n\r\n saveJobBasic(save_job, false);\r\n window.svg = null;\r\n window.svg_data = null;\r\n window.job = null;\r\n PaperIO.ClearAll();\r\n\r\n // dispatch(changePage(MAIN_PAGE));\r\n }\r\n window.location.href = window.location.href.includes(\"lysaght\")\r\n ? `https://preprod.lysaghtlivingdesigner.lysaght.com/app/?init-beta=\"\"&CTK=${user_token}&SFU=${user_SFusername}`\r\n : `https://preprod.centenarydesignsuite.fielders.com.au/app/?init-beta=\"\"&CTK=${user_token}&SFU=${user_SFusername}`;\r\n }}\r\n color=\"primary\"\r\n style={{\r\n alignSelf: \"center\",\r\n zIndex: \"9999\",\r\n position: \"fixed\",\r\n right: \"180px\",\r\n borderBottomLeftRadius: \"10px\",\r\n borderBottomRightRadius: \"10px\",\r\n padding: \"5px 10px\",\r\n border: \"5px\",\r\n lineHeight: \"1\",\r\n fontSize: \"small\",\r\n boxShadow: \"rgb(255 255 255 / 45%) 2px 2px 4px\",\r\n }}\r\n >\r\n Pre\r\n \r\n >\r\n )}\r\n {window.beta && (\r\n <>\r\n \r\n (window.location.href =\r\n window.brand === \"Lysaght\"\r\n ? `https://lysaghtlivingdesigner.lysaght.com/app/`\r\n : `https://centenarydesignsuite.fielders.com.au/`)\r\n }\r\n color=\"primary\"\r\n style={{\r\n alignSelf: \"center\",\r\n zIndex: \"9999\",\r\n position: \"fixed\",\r\n right: \"180px\",\r\n borderBottomLeftRadius: \"10px\",\r\n borderBottomRightRadius: \"10px\",\r\n padding: \"5px 10px\",\r\n border: \"5px\",\r\n lineHeight: \"1\",\r\n fontSize: \"small\",\r\n boxShadow: \"rgb(255 255 255 / 45%) 2px 2px 4px\",\r\n }}\r\n >\r\n Prod\r\n \r\n >\r\n )}\r\n \r\n );\r\n}\r\n\r\n// export default connect(mapStateToProps, importedActions)(withStyles(styles)(TopBar));\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\n/**\r\n * Custom React Hook: useWindowDimensions\r\n *\r\n * Description:\r\n * This hook provides the current dimensions of the browser window, updating dynamically on window resize.\r\n *\r\n * @returns {{ width: number, height: number }} - An object containing the current window width and height.\r\n */\r\nfunction getWindowDimensions() {\r\n const { innerWidth: width, innerHeight: height } = window;\r\n return {\r\n width,\r\n height,\r\n };\r\n}\r\n\r\n/**\r\n * Custom React Hook: addNewHistoryLine\r\n *\r\n * Description:\r\n * This hook assigns a history line to the job with the current date / time.\r\n *\r\n * @returns {{ jobState: node }} - An object containing the current job history.\r\n */\r\nexport function addNewHistoryLine({ jobState, historyLine }) {\r\n jobState.History = jobState.History || [];\r\n jobState.History.push({ ...historyLine, Date: new Date(Date.now()).toUTCString() });\r\n return jobState.History; // Return if required\r\n}\r\n\r\naddNewHistoryLine.propTypes = {\r\n jobState: PropTypes.node.isRequired,\r\n historyLine: PropTypes.node.isRequired,\r\n};\r\n\r\n/**\r\n * Custom React Hook: useWindowDimensions\r\n *\r\n * Description:\r\n * This hook returns an object containing the current dimensions of the browser window.\r\n * It automatically updates on window resize.\r\n *\r\n * @returns {{ width: number, height: number }} - An object containing the current window width and height.\r\n */\r\nexport function useWindowDimensions() {\r\n const [windowDimensions, setWindowDimensions] = React.useState(getWindowDimensions());\r\n\r\n React.useEffect(() => {\r\n /**\r\n * Event handler for window resize\r\n */\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n // Attach event listener for window resize\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n // Detach event listener on component unmount\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n}\r\n\r\nuseWindowDimensions.propTypes = {\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n};\r\n\r\n/**\r\n * Function: getD365CustomerCodes\r\n *\r\n * Description:\r\n * This function retrieves D365 customer codes based on provided parameters and if the state is active.\r\n *\r\n * @param {Object} options - An object containing parameters for retrieving D365 customer codes.\r\n * @param {Object} options.job - The job object.\r\n * @param {Object} options.app - The app object.\r\n * @param {Object} options.config - The config object.\r\n * @param {Function} options.dispatch - The dispatch function for updating state.\r\n * @param {Function} options.updateCustomer - The function to update customer information.\r\n * @param {string} options.get_tier - The tier to be retrieved.\r\n * @returns {string} - The D365 customer code.\r\n */\r\nexport function getD365CustomerCodes({ job, app, config, dispatch, updateCustomer, get_tier }) {\r\n // Check if DStateActive and Code changed\r\n const currentRegion = app?.offerings?.[window.brand]?.Regions?.[config?.region?.id]?.region;\r\n\r\n let update_tier;\r\n\r\n /**\r\n * Helper Function: findTierInCategory\r\n *\r\n * Description:\r\n * Finds the tier in a specific category within the pricing_accounts object.\r\n *\r\n * @param {string} category - The category to search for.\r\n * @returns {Object | undefined} - The tier object if found, otherwise undefined.\r\n */\r\n const findTierInCategory = (category) => {\r\n return currentRegion?.pricing_accounts[category].find((obj) => obj[\"CUST CODE\"].includes(get_tier));\r\n };\r\n\r\n if (job?.Customer?.UsingD365Code !== true) {\r\n // Check if pricing_accounts is an object\r\n if (\r\n typeof currentRegion?.pricing_accounts === \"object\" &&\r\n currentRegion?.pricing_accounts !== null &&\r\n currentRegion?.D365_State_Active === true\r\n ) {\r\n // Iterate over each category in pricing_accounts\r\n for (const category in currentRegion.pricing_accounts) {\r\n if (Object.prototype.hasOwnProperty.call(currentRegion.pricing_accounts, category)) {\r\n // Find the matching CUST CODE in the current category\r\n const foundTier = findTierInCategory(category);\r\n\r\n // If found, update update_tier and customer tier code and break the loop\r\n if (foundTier && foundTier?.D365_CODE) {\r\n update_tier = foundTier.D365_CODE;\r\n dispatch(updateCustomer(\"DistLevel\", update_tier));\r\n dispatch(updateCustomer(\"UsingD365Code\", true));\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Assuming you want to update get_tier with the found CUST CODE\r\n return update_tier?.[\"CUST CODE\"] || get_tier;\r\n}\r\n\r\ngetD365CustomerCodes.propTypes = {\r\n job: PropTypes.object,\r\n app: PropTypes.object,\r\n config: PropTypes.object,\r\n dispatch: PropTypes.func,\r\n updateCustomer: PropTypes.func,\r\n get_tier: PropTypes.string,\r\n};\r\n\r\n/**\r\n * Function: convertValueLabels\r\n *\r\n * Description:\r\n * Converts an array of strings into an array of objects with the same value and label.\r\n *\r\n * @param {string[]} values - An array of strings to be converted.\r\n * @returns {Object[]} - An array of objects with value and label properties.\r\n */\r\nexport const convertValueLabels = (values) => {\r\n return values.map((v) => {\r\n return { value: v, label: v };\r\n });\r\n};\r\n\r\n// Prop types for convertValueLabels function\r\nconvertValueLabels.propTypes = {\r\n values: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport { BaseURL } from \"../components/Common\";\r\nimport { Palette } from \"../AppConfig\";\r\n\r\n// Material UI\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport EventAvailable from \"@material-ui/icons/EventAvailable\";\r\n\r\nimport { changeMainPage, toggleAPP } from \"../redux_store/appState\";\r\nimport { Badge } from \"@material-ui/core\";\r\nimport { useWindowDimensions } from \"../helper/Helper\";\r\n\r\n// const drawerWidth = 260;\r\n// const toolDrawerWidth = 160;\r\n\r\nconst useStyles = makeStyles({\r\n root: {},\r\n drawer: {\r\n width: \"80px\",\r\n flexShrink: 0,\r\n whiteSpace: \"nowrap\",\r\n overflowX: \"hidden\",\r\n zIndex: 100,\r\n paddingTop: \"120px\",\r\n display: \"inline\",\r\n backgroundColor: \"#F4F4F4\",\r\n // borderRight: '1px solid rgba(0, 0, 0, 0.2)',\r\n },\r\n drawerList: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n selected: {\r\n background: \"#002D6222\",\r\n borderRight: \"4px solid \" + Palette.FieldersBlue,\r\n // color: \"white !important\",\r\n \"&:hover\": {\r\n backgroundColor: \"#6B879988\",\r\n // color: \"white !important\",\r\n },\r\n },\r\n grayedOut: {\r\n opacity: \"0.5\",\r\n },\r\n selectedContent: {\r\n color: \"white\",\r\n },\r\n imageIcon: {\r\n height: \"100%\",\r\n },\r\n iconRoot: {\r\n textAlign: \"center\",\r\n width: \"36px\",\r\n height: \"36px\",\r\n },\r\n iconText: {\r\n fontSize: \"13px\",\r\n textAlign: \"center\",\r\n marginTop: \"8px\",\r\n },\r\n});\r\n\r\nconst StyledListItem = withStyles({\r\n root: {\r\n // paddingLeft: \"0px\",\r\n color: \"rgba(0, 0, 0, 0.54)\",\r\n },\r\n})(ListItem);\r\n\r\nconst StyledListItemIcon = withStyles({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n width: \"48px\",\r\n minWidth: \"48px\",\r\n color: Palette.FieldersBlue,\r\n marginTop: \"4px\",\r\n },\r\n})(ListItemIcon);\r\n\r\nexport default function Main_ToolBar() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const app = useSelector((state) => state.app);\r\n const user = useSelector((state) => state.app.user);\r\n const main_page = useSelector((state) => state.app.MAIN_PAGE);\r\n const number_orders_to_process = useSelector((state) => state.app.number_orders_to_process);\r\n const { height } = useWindowDimensions();\r\n const [debugShow, setDebugShow] = React.useState(true);\r\n\r\n const handleHelp = () => {\r\n if (main_page?.page !== \"Orders\") dispatch(toggleAPP(\"help_open\", !app?.help_open));\r\n };\r\n\r\n return (\r\n \r\n \r\n {/* */}\r\n {\r\n dispatch(changeMainPage(\"Recall\"));\r\n }}\r\n >\r\n \r\n \r\n {window.FIELDERS ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n Jobs
\r\n \r\n \r\n\r\n {user?.Role && user?.Role >= 90 && user?.Role !== 92 && (\r\n {\r\n dispatch(changeMainPage(\"Orders\"));\r\n }}\r\n >\r\n \r\n \r\n {/* */}\r\n {window.FIELDERS ? (\r\n \r\n ) : (\r\n \r\n )}\r\n Orders
\r\n \r\n \r\n \r\n )}\r\n\r\n {user?.Role && user?.Role >= 90 && user?.Role !== 92 && window.LYSAGHT && (\r\n {\r\n dispatch(changeMainPage(\"WorkArounds\"));\r\n }}\r\n >\r\n \r\n \r\n {/* */}\r\n {window.LYSAGHT ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n Work \r\n Arounds\r\n
\r\n \r\n \r\n \r\n )}\r\n\r\n {/* {\r\n dispatch(changeMainPage(\"News\"));\r\n }}\r\n >\r\n \r\n \r\n {window.FIELDERS ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n News
\r\n \r\n */}\r\n\r\n {window.brand === \"Lysaght\" && (\r\n \r\n
\r\n \r\n {/* */}\r\n \r\n \r\n \r\n Help
\r\n \r\n \r\n
\r\n )}\r\n {/* */}\r\n
\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles, withStyles, createStyles } from \"@material-ui/core/styles\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { updateRecallListFromWeb } from \"../redux_store/appState\";\r\nimport { updateJobHistory, updateJobStatus } from \"../redux_store/jobState\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport DoneIcon from \"@material-ui/icons/Done\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport { addNewHistoryLine } from \"../helper/Helper\";\r\n\r\nlet Fielders = false;\r\nlet Lysaght = false;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n LysaghtRoot: {\r\n backgroundColor: \"#E9EEF6\",\r\n borderRadius: \"10px !important\",\r\n color: \"#3b64ab\",\r\n height: \"20px\",\r\n \"& > svg\": {\r\n visibility: \"hidden\",\r\n width: \"0px\",\r\n height: \"0px\",\r\n },\r\n \"& > div > div\": {\r\n visibility: \"hidden\",\r\n width: \"0px !important\",\r\n height: \"0px !important\",\r\n margin: \"0px !important\",\r\n },\r\n },\r\n FildersRoot: {\r\n border: \"3px solid #5E3CBA\",\r\n backgroundColor: \"#eae5f6\",\r\n borderColor: \"#5E3CBA\",\r\n color: \"#5E3CBA\",\r\n },\r\n root: {\r\n borderRadius: \"6px\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n font: \"9pt \" + theme.typography.fontFamily,\r\n padding: \"2px 4px 1px 4px\",\r\n margin: \"4px 0px\",\r\n width: \"fit-content\",\r\n minWidth: \"80px\",\r\n },\r\n selectRoot: {\r\n \"&:hover\": { backgroundColor: \"#3b64ab\" },\r\n },\r\n menuItem: {\r\n font: \"10pt \" + theme.typography.fontFamily,\r\n },\r\n loading: {\r\n width: \"10px !important\",\r\n height: \"10px !important\",\r\n display: \"block\",\r\n position: \"absolute\",\r\n top: \"11px\",\r\n right: \"-15px\",\r\n },\r\n}));\r\n\r\nconst CustomMenuItem = withStyles((theme) =>\r\n Lysaght\r\n ? createStyles({\r\n root: {\r\n lineHeight: 0.1,\r\n paddingTop: \"3px\",\r\n paddingBottom: \"3px\",\r\n \"&$selected\": {\r\n backgroundColor: Palette.Lysaght.DarkBlue,\r\n color: \"white\",\r\n },\r\n },\r\n selected: {},\r\n })\r\n : createStyles({})\r\n)(MenuItem);\r\n\r\nexport default function BSL_StatusChip(props) {\r\n Lysaght = window.brand === \"Lysaght\";\r\n Fielders = window.brand === \"Fielders\";\r\n\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const [loading, setLoading] = React.useState(false);\r\n const [tempValue, setTempValue] = React.useState(null);\r\n const user = useSelector((state) => state.app.user);\r\n const business_code = user?.BusinessDetails?.Code;\r\n const { status, job_id, history } = props;\r\n\r\n const handleSelected = () =>\r\n Lysaght && (\r\n \r\n \r\n
\r\n );\r\n\r\n const MenuItems = (value) => {\r\n return value.map((e) => (\r\n \r\n {handleSelected()}\r\n {e === \"New\" ? \"Lead\" : e}\r\n \r\n ));\r\n };\r\n\r\n return (\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n {\r\n if (!business_code) return;\r\n setLoading(true);\r\n setTempValue(e.target.value);\r\n\r\n let currentJobHistory = { history };\r\n if (!currentJobHistory) currentJobHistory = { History: [] };\r\n\r\n currentJobHistory = addNewHistoryLine({\r\n jobState: currentJobHistory,\r\n historyLine: { Status: e.target.value },\r\n });\r\n\r\n if (props.newJobState) {\r\n let updateState = props.newJobState;\r\n updateState.Status = e.target.value;\r\n if (!updateState.History) updateState.History = [];\r\n updateState.History.push(currentJobHistory[0]);\r\n props.setNewJobState(updateState);\r\n }\r\n\r\n dispatch(updateJobHistory({ business_code, job_id, new_history: currentJobHistory }));\r\n dispatch(updateJobStatus(business_code, job_id, e.target.value)).then((result) => {\r\n if (result === \"OK\") {\r\n dispatch(updateRecallListFromWeb(user.BusinessDetails.Code)).then((result) => {\r\n setLoading(false);\r\n setTempValue(null);\r\n });\r\n } else {\r\n setLoading(false);\r\n setTempValue(null);\r\n }\r\n });\r\n }}\r\n disableUnderline\r\n className={`${classes.root} ${Fielders && classes.FildersRoot} ${Lysaght && classes.LysaghtRoot}`}\r\n SelectDisplayProps={{\r\n style: Fielders ? { padding: \"0px 24px 0px 0px\" } : { padding: \"0px\" },\r\n }}\r\n inputProps={Fielders && { MenuProps: { disableScrollLock: true } }}\r\n MenuProps={{\r\n anchorOrigin: {\r\n vertical: \"bottom\",\r\n horizontal: \"left\",\r\n },\r\n transformOrigin: {\r\n vertical: \"top\",\r\n horizontal: \"left\",\r\n },\r\n getContentAnchorEl: null,\r\n }}\r\n >\r\n {MenuItems([\r\n \"New\",\r\n \"Design\",\r\n \"Quoted\",\r\n \"Won\",\r\n \"Lost\",\r\n \"Deposit Received\",\r\n \"With Engineer\",\r\n \"With Council\",\r\n \"Invoiced\",\r\n \"Ordered\",\r\n \"Delivered\",\r\n \"Construction\",\r\n \"Complete\",\r\n ])}\r\n \r\n {loading && }\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { Palette } from \"../AppConfig\";\r\nimport Menu from \"@material-ui/core/Menu\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\n\r\nexport const ContextMenu = withStyles({\r\n paper: {\r\n border: \"1px solid \" + Palette.Control.DarkBlueTrans,\r\n },\r\n})((props) => (\r\n \r\n));\r\n\r\nexport const ContextMenuItem = withStyles((theme) => ({\r\n root: {\r\n font: \"16px 'Univers45', sans-serif\",\r\n padding: \"12px 14px 12px 24px\",\r\n \"&:hover\": {\r\n backgroundColor: Palette.Control.LightGrey,\r\n \"& .MuiListItemIcon-root, & .MuiListItemText-primary\": {\r\n // color: theme.palette.common.white,\r\n },\r\n },\r\n },\r\n}))(MenuItem);\r\n","/* eslint-disable react/jsx-pascal-case */\r\nimport React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport ReactTimeAgo from \"react-time-ago\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport { Palette, API_BASE } from \"../AppConfig\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport CardActions from \"@material-ui/core/CardActions\";\r\nimport BSL_StatusChip from \"../components/BSL_StatusChip\";\r\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport { ContextMenu, ContextMenuItem } from \"../components/BSL_ContextMenu\";\r\n\r\nimport BSL_Dialog from \"../components/BSL_Dialog\";\r\nimport { updateAPP, MAIN_PAGE, updateUserFromWeb } from \"../redux_store/appState\";\r\nimport { changePage, DESIGNER_PAGE, saveUserToWeb } from \"../redux_store/appState\";\r\nimport {\r\n updateDesigner,\r\n resetDesigner,\r\n SHOW_LOADING_BACKDROP,\r\n setDesignerLoadingBackdrop,\r\n} from \"../redux_store/appState\";\r\nimport { loadJob } from \"../redux_store/jobState\";\r\nimport BSL_Button from \"../components/BSL_Button\";\r\nimport { CircularProgress } from \"@material-ui/core\";\r\nimport { updateJobStatus } from \"../redux_store/jobState\";\r\nimport { updateRecallListFromWeb } from \"../redux_store/appState\";\r\nimport { BaseURL } from \"../components/Common\";\r\n\r\nconst styles = {\r\n card: {\r\n // height: \"100%\",\r\n flex: \"1\",\r\n margin: \"15px\",\r\n display: \"flex\",\r\n position: \"relative\",\r\n flexDirection: \"column\",\r\n border: `1px solid white`,\r\n transition: \"border .15s ease-in, opacity .15s ease-in-out\", // add opacity transition\r\n opacity: 0, // initially set opacity to 0\r\n animation: \"$fadeIn .5s ease-in-out forwards\", // add animation to fade in\r\n },\r\n LysaghtCard: {\r\n \"&:hover\": {\r\n border: `1px solid ${Palette.Lysaght.DarkBlue}`,\r\n },\r\n },\r\n cardWidthLimit: {\r\n maxWidth: 500,\r\n minWidth: 300,\r\n },\r\n media: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n objectFit: \"contain\",\r\n width: \"128px\",\r\n height: \"128px\",\r\n \"&:hover\": {\r\n backgroundColor: Palette.Control.LightGrey,\r\n },\r\n },\r\n content: {\r\n flex: \"1\",\r\n display: \"flex\",\r\n textAlign: \"left\",\r\n flexDirection: \"column\",\r\n },\r\n contentLysaght: {\r\n \"& h3\": {\r\n font: \"600 14pt \" + Palette.Lysaght.FontFamily,\r\n textTransform: \"uppercase\",\r\n color: Palette.Lysaght.DarkBlue,\r\n },\r\n \"& p\": {\r\n font: \"200 0.85rem / 1.5 \" + Palette.Lysaght.FontFamily,\r\n },\r\n },\r\n typography: {\r\n margin: \"20px\",\r\n },\r\n actionblock: {\r\n bottom: \"0px\",\r\n backgroundColor: Palette.Control.LightGrey,\r\n fontSize: \"11px\",\r\n display: \"flex\",\r\n },\r\n moreButton: {\r\n padding: \"0px\",\r\n borderRadius: \"0%\",\r\n },\r\n orderDetailsBG: {\r\n width: \"0px\",\r\n height: \"0\",\r\n borderLeft: \"241px solid transparent\",\r\n borderBottom: \"50px solid #dedfe5\",\r\n position: \"absolute\",\r\n bottom: \"31px\",\r\n right: \"0px\",\r\n },\r\n orderDetails: {\r\n position: \"absolute\",\r\n bottom: \"33px\",\r\n right: \"10px\",\r\n zIndex: \"2\",\r\n color: \"black\",\r\n cursor: \"pointer\",\r\n textAlign: \"right\",\r\n },\r\n backdropLoader: {\r\n position: \"absolute\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n zIndex: \"100\",\r\n background: \"#c4c3cf66\",\r\n },\r\n // add keyframes for animation\r\n \"@keyframes fadeIn\": {\r\n \"0%\": {\r\n opacity: 0,\r\n },\r\n \"100%\": {\r\n opacity: 1,\r\n },\r\n },\r\n};\r\n\r\nfunction JobCard(props) {\r\n const dispatch = useDispatch();\r\n const [open, setOpen] = React.useState(false);\r\n const [updating, setUpdating] = React.useState(false);\r\n const [deleteKey, setDeleteKey] = React.useState(null);\r\n const [jobDeletion, setJobDeletion] = React.useState(false);\r\n const [menuAnchor, setMenuAnchor] = React.useState(null);\r\n const [loadingJobClicked, setLoadingJobClicked] = React.useState(false);\r\n\r\n const { classes, row, businessCode, setLoading } = props;\r\n\r\n // Redux\r\n const app = useSelector((state) => state.app);\r\n const config = useSelector((state) => state.config);\r\n const { user, logged_user_code } = app;\r\n\r\n // Buisness Code\r\n let business_code = user?.BusinessDetails?.Code;\r\n if (businessCode) business_code = businessCode;\r\n\r\n const handleClickOpen = (e) => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = (e) => {\r\n setOpen(false);\r\n };\r\n\r\n const handleMenuClick = (event) => {\r\n setMenuAnchor(event.currentTarget);\r\n };\r\n\r\n const handleMenuClose = () => {\r\n setMenuAnchor(null);\r\n };\r\n\r\n const handlePinJob = () => {\r\n // Close menu\r\n handleMenuClose();\r\n\r\n // Update User State With Pinned / UnPinned\r\n dispatch(updateUserFromWeb(logged_user_code)).then((user_data) => {\r\n let pinned_jobs = user_data?.pinned_jobs ?? [];\r\n const selectedJob = row.id;\r\n\r\n // Check if user pinned already\r\n if (pinned_jobs.includes(selectedJob)) {\r\n // Remove Pinned Job and save user data, through filter\r\n // (can be changed to indexing, for performance improvements)\r\n pinned_jobs = pinned_jobs.filter((e) => e !== selectedJob);\r\n } else {\r\n pinned_jobs.push(selectedJob);\r\n }\r\n\r\n let new_user_data = {\r\n ...user_data,\r\n pinned_jobs,\r\n };\r\n\r\n dispatch(saveUserToWeb(new_user_data, true, false));\r\n });\r\n };\r\n\r\n const handleDuplicateQuote = () => {\r\n if (!business_code) return;\r\n\r\n if (!config?.id || !config?.roofsheet_types) {\r\n alert(\"Configuration not fully loaded yet ... please wait a moment and try again.\");\r\n } else {\r\n dispatch(loadJob(business_code, row.id, user)).then(() => {\r\n dispatch(updateAPP(MAIN_PAGE, { page: \"Duplicate\" }));\r\n });\r\n }\r\n };\r\n\r\n const deleteQuoteAsk = () => {\r\n setDeleteKey(true);\r\n setJobDeletion(true);\r\n };\r\n\r\n const deleteJob = () => {\r\n setUpdating(true);\r\n setDeleteKey(false);\r\n dispatch(updateJobStatus(business_code, row.id, \"DELETED\")).then((result) => {\r\n if (result === \"OK\") {\r\n dispatch(updateRecallListFromWeb(business_code, \"ARCHIVED\")).then((result) => {\r\n setUpdating(false);\r\n });\r\n\r\n dispatch(updateRecallListFromWeb(business_code)).then((result) => {\r\n setUpdating(false);\r\n });\r\n } else {\r\n setUpdating(false);\r\n }\r\n });\r\n };\r\n const archiveJob = () => {\r\n setUpdating(true);\r\n dispatch(updateJobStatus(business_code, row.id, row.Status === \"ARCHIVED\" ? \"LEAD\" : \"ARCHIVED\")).then(\r\n (result) => {\r\n if (result === \"OK\") {\r\n dispatch(updateRecallListFromWeb(business_code, \"ARCHIVED\")).then((result) => {\r\n setUpdating(false);\r\n });\r\n\r\n dispatch(updateRecallListFromWeb(business_code)).then((result) => {\r\n setUpdating(false);\r\n });\r\n } else {\r\n setUpdating(false);\r\n }\r\n }\r\n );\r\n };\r\n\r\n const testJob = () => {\r\n setUpdating(true);\r\n dispatch(updateJobStatus(business_code, row.id, row.Status === \"TEST\" ? \"New\" : \"TEST\")).then((result) => {\r\n if (result === \"OK\") {\r\n dispatch(updateRecallListFromWeb(business_code, \"TEST\")).then((result) => {\r\n setUpdating(false);\r\n });\r\n\r\n dispatch(updateRecallListFromWeb(business_code)).then((result) => {\r\n setUpdating(false);\r\n });\r\n } else {\r\n setUpdating(false);\r\n }\r\n });\r\n };\r\n\r\n const mainAction = () => {\r\n if (!jobDeletion) {\r\n if (!business_code) return;\r\n if (loadingJobClicked) return;\r\n setLoadingJobClicked(true);\r\n\r\n dispatch(changePage(DESIGNER_PAGE));\r\n dispatch(setDesignerLoadingBackdrop(\"Loading #\" + row.id + \" - \" + row.Customer.JobName));\r\n dispatch(loadJob(business_code, row.id, user, props?.containerMode ? props?.containerMode : \"\")).then(\r\n (result) => {\r\n if (!result) {\r\n dispatch(\r\n setDesignerLoadingBackdrop(\r\n mainAction()}>\r\n \r\n \r\n \r\n \r\n Error Loading # {row.id} - {row.Customer.JobName} ... try again?\r\n \r\n \r\n
\r\n )\r\n );\r\n setLoadingJobClicked(false);\r\n } else {\r\n dispatch(updateDesigner(SHOW_LOADING_BACKDROP, false));\r\n dispatch(resetDesigner());\r\n setLoadingJobClicked(false);\r\n }\r\n }\r\n );\r\n }\r\n\r\n if (jobDeletion) setJobDeletion(false);\r\n };\r\n\r\n // const { anchorEl } = this.state;\r\n // const open = Boolean(anchorEl);\r\n\r\n // showPopover = event => {\r\n // this.setState({\r\n // anchorEl: event.currentTarget,\r\n // });\r\n // };\r\n\r\n // closePopover = () => {\r\n // this.setState({\r\n // anchorEl: null,\r\n // });\r\n // };\r\n\r\n // let detail_text = \"\";\r\n // if (props.detail_text) detail_text = props.detail_text.split(' ').map((item, i) => {\r\n // return {item} ;\r\n // });\r\n // let sub_detail_text = \"\";\r\n // if (props.sub_detail_text) sub_detail_text = props.sub_detail_text.split(' ').map((item, i) => {\r\n // return {item} ;\r\n // });\r\n\r\n let date = new Date(row._ts * 1000);\r\n\r\n // var randomNum = Math.round(Math.random() * 10000);\r\n\r\n let image_url = API_BASE() + \"svg/\" + row.id + \"/layout.svg\";\r\n\r\n let actions = null;\r\n\r\n let job_name = row && row?.Customer?.JobName ? row?.Customer?.JobName : \"[Unnamed]\";\r\n\r\n let ordered_time = \"\";\r\n if (row.OrderTimestamp)\r\n ordered_time = (\r\n <>\r\n \r\n Ordered {row?.OrderBy ? \"by \" + row?.OrderBy + \" \" : \"\"}\r\n \r\n >\r\n );\r\n\r\n actions = (\r\n (mainAction ? mainAction() : null)} className={classes.actionblock}>\r\n #{row.id}
\r\n \r\n Last Edited {row?.UserCode ? \"by \" + row?.UserCode + \" \" : \"\"}\r\n \r\n {ordered_time}\r\n
\r\n \r\n );\r\n\r\n let ordered = row?.OrderStatus;\r\n const Reviewed = \"REVIEWED\";\r\n let order_text = row?.OrderStatus?.toUpperCase();\r\n let bg_color = \"#dedfe5\";\r\n if (row.OrderStatus === Reviewed) bg_color = \"darkorange\";\r\n if (row.OrderStatus === \"ACCEPTED\") bg_color = \"#008200\";\r\n\r\n let disableDelete = false;\r\n if (\r\n row?.OrderStatus?.toUpperCase() === \"ORDERED'\" ||\r\n row?.OrderStatus?.toUpperCase() === \"PENDING\" ||\r\n row?.OrderStatus?.toUpperCase() === \"REVIEWED\" ||\r\n row?.OrderStatus?.toUpperCase() === \"ACCEPTED\"\r\n ) {\r\n disableDelete = true;\r\n }\r\n\r\n return (\r\n (mainAction ? mainAction() : null)}\r\n className={\r\n classes.card +\r\n (props.noMaxWidth ? \"\" : \" \" + classes.cardWidthLimit) +\r\n (window.brand === \"Fielders\" ? \"\" : \" \" + classes.LysaghtCard)\r\n }\r\n style={props.disabled ? { opacity: \"0.5\" } : {}}\r\n >\r\n {updating && (\r\n \r\n \r\n
\r\n )}\r\n\r\n {ordered && (\r\n <>\r\n (mainAction ? mainAction() : null)}\r\n style={{\r\n borderBottom: \"50px solid \" + bg_color,\r\n marginBottom: ordered_time ? \"16px\" : \"0px\",\r\n }}\r\n >
\r\n (mainAction ? mainAction() : null)}\r\n style={\r\n row.OrderStatus === Reviewed || row.OrderStatus === \"ACCEPTED\"\r\n ? {\r\n color: \"white\",\r\n marginBottom: ordered_time ? \"16px\" : \"0px\",\r\n }\r\n : { marginBottom: ordered_time ? \"16px\" : \"0px\" }\r\n }\r\n >\r\n ORDER\r\n \r\n {order_text}\r\n
\r\n >\r\n )}\r\n \r\n {\r\n handleClickOpen();\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n {row && (\r\n \r\n \r\n
\r\n
\r\n {job_name}\r\n \r\n
{\r\n e.stopPropagation();\r\n handleMenuClick(e);\r\n }}\r\n >\r\n \r\n
\r\n
\r\n
\r\n {row.DesignSummary ? row.DesignSummary : \"[No Design Summary]\"}\r\n \r\n {row.FormattedAddress ? row.FormattedAddress : \"[No Address]\"}\r\n \r\n
\r\n\r\n \r\n {row.Status !== \"ARCHIVED\" && (\r\n
\r\n )}\r\n
\r\n {row.pinned &&
}\r\n
\r\n
\r\n \r\n )}\r\n \r\n {row?.DOrderStatus && (\r\n \r\n D365 Status \r\n {row.DOrderStatus} \r\n
\r\n )}\r\n {actions}\r\n \r\n\r\n {\r\n e.stopPropagation();\r\n }}\r\n id=\"customized-menu\"\r\n menuAnchor={menuAnchor}\r\n open={Boolean(menuAnchor)}\r\n onClose={handleMenuClose}\r\n disableScrollLock={true}\r\n >\r\n Pin / UnPin \r\n \r\n Duplicate Job\r\n \r\n \r\n {row.Status === \"ARCHIVED\" ? \"Un-Archive\" : \"Archive\"} Job\r\n \r\n \r\n Delete Job\r\n \r\n {/* Delete Job */}\r\n \r\n\r\n setDeleteKey(false)}\r\n button1Text=\"Delete\"\r\n button1Click={() => deleteJob()}\r\n button2Text=\"No\"\r\n button2Click={() => setDeleteKey(false)}\r\n >\r\n \r\n
Are you sure you would like to delete this job ({job_name})?
\r\n
\r\n \r\n \r\n );\r\n //}\r\n}\r\nconst mapStateToProps = (state) => ({\r\n // posts: state.posts\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(withStyles(styles)(JobCard));\r\n\r\nconst useStyles = makeStyles({\r\n root: {},\r\n media: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n objectFit: \"contain\",\r\n width: \"93%\",\r\n height: \"93%\",\r\n padding: \"10px 20px\",\r\n },\r\n});\r\n\r\nfunction SimpleDialog(props) {\r\n const classes = useStyles();\r\n const { onClose, selectedValue, open, image_url, mainAction } = props;\r\n\r\n const handleClose = () => {\r\n onClose();\r\n };\r\n\r\n return (\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n {\r\n if (mainAction) mainAction();\r\n handleClose();\r\n }}\r\n style={{ marginRight: \"10px\" }}\r\n />\r\n \r\n
\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Palette, API_BASE } from \"../AppConfig\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ReactTimeAgo from \"react-time-ago\";\r\nimport { changePage, DESIGNER_PAGE, saveUserToWeb, updateUserFromWeb } from \"../redux_store/appState\";\r\nimport {\r\n updateDesigner,\r\n resetDesigner,\r\n SHOW_LOADING_BACKDROP,\r\n setDesignerLoadingBackdrop,\r\n} from \"../redux_store/appState\";\r\nimport { loadJob } from \"../redux_store/jobState\";\r\nimport BSL_StatusChip from \"../components/BSL_StatusChip\";\r\nimport { ContextMenu, ContextMenuItem } from \"../components/BSL_ContextMenu\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\r\nimport { updateAPP, MAIN_PAGE } from \"../redux_store/appState\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport { BaseURL } from \"../components/Common\";\r\n\r\nconst columns = [\r\n // { id: 'DistributorName', label: 'Distributor', minWidth: 100 },\r\n {\r\n id: \"Pin\",\r\n label: \"PIN\",\r\n },\r\n { id: \"Thumbnail\", label: \"\" },\r\n {\r\n id: \"Customer.JobName\",\r\n label: \"Job\\u00a0Name\",\r\n style: {\r\n color: Palette.FieldersBlue,\r\n fontWeight: window.FIELDERS ? \"600\" : \"inherit\",\r\n },\r\n // minWidth: 140,\r\n // align: 'right',\r\n format: (value) => value.toLocaleString(\"en-US\"),\r\n },\r\n {\r\n id: \"Customer.FirstName\",\r\n label: \"First\\u00a0Name\",\r\n // minWidth: 140,\r\n // align: 'right',\r\n format: (value) => value.toLocaleString(\"en-US\"),\r\n },\r\n {\r\n id: \"Customer.LastName\",\r\n label: \"Last\\u00a0Name\",\r\n // minWidth: 140,\r\n // align: 'right',\r\n format: (value) => value.toLocaleString(\"en-US\"),\r\n },\r\n {\r\n id: \"Address.FormattedStreetAddress\",\r\n label: \"Site\\u00a0Street\\u00a0Address\",\r\n // minWidth: 170,\r\n // align: 'right',\r\n },\r\n {\r\n id: \"Address.Suburb\",\r\n label: \"Site\\u00a0Suburb\",\r\n // minWidth: 170,\r\n // align: 'right',\r\n },\r\n {\r\n id: \"DesignSummary\",\r\n label: \"Structure\\u00a0Type\",\r\n // minWidth: 170,\r\n // align: 'right',\r\n format: (value) => value.replace(\"/n\", ),\r\n },\r\n {\r\n id: \"id\",\r\n label: \"JOB\\u00a0#\",\r\n minWidth: 100,\r\n format: (value) => \"#\" + value,\r\n },\r\n {\r\n id: \"Status\",\r\n label: \"Status\",\r\n },\r\n {\r\n id: \"_ts\",\r\n label: \"Last Edited\",\r\n minWidth: 100,\r\n format: (value, row) => {\r\n // \r\n let date = new Date(value * 1000);\r\n // \r\n return (\r\n <>\r\n {row?.UserCode ? \"by \" + row?.UserCode + \" \" : \"\"}\r\n \r\n >\r\n );\r\n },\r\n },\r\n];\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n // height: '95%',\r\n flex: \"1\",\r\n width: \"100%\",\r\n maxHeight: \"100%\",\r\n margin: \"10px 10px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n },\r\n container: {\r\n // maxHeight: \"calc(100% - 55px)\",\r\n },\r\n rowCell: {\r\n fontSize: \"12px\",\r\n border: \"none\",\r\n padding: \"2px 0px 2px 24px\",\r\n color: theme.brand.FIELDERS ? \"inherit\" : Palette.Lysaght.MidGrey,\r\n },\r\n headingCell: {\r\n fontSize: \"11px\",\r\n border: \"none\",\r\n padding: \"0px 0px 0px 24px\",\r\n textTransform: \"uppercase\",\r\n color: Palette.FieldersBlue,\r\n fontWeight: theme.brand.FIELDERS ? \"inherit\" : \"600\",\r\n },\r\n thumbnail: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n objectFit: \"contain\",\r\n width: \"32px\",\r\n height: \"32px\",\r\n },\r\n hideImage: {\r\n objectFit: \"contain\",\r\n visibility: \"hidden\",\r\n display: \"flex\",\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n transition: \"all 0.2s ease\",\r\n maxWidth: \"0px\",\r\n },\r\n showImage: {\r\n objectFit: \"contain\",\r\n display: \"flex\",\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n transition: \"all 0.2s ease\",\r\n maxWidth: \"400px\",\r\n maxHeight: \"400px\",\r\n },\r\n thumbnailTooltip: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n transition: \"all 0.2s ease\",\r\n objectFit: \"contain\",\r\n display: \"flex\",\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n maxWidth: \"400px\",\r\n maxHeight: \"400px\",\r\n width: \"100%\",\r\n flex: 1,\r\n zIndex: 999,\r\n },\r\n editButton: {\r\n cursor: \"pointer\",\r\n color: Palette.FieldersBlue,\r\n \"&:hover\": {\r\n backgroundColor: \"#d5d5d5\",\r\n cursor: \"pointer\",\r\n },\r\n },\r\n moreButton: {\r\n padding: \"0px\",\r\n borderRadius: \"0%\",\r\n },\r\n no_job_message: {\r\n width: \"100%\",\r\n height: \"100px\",\r\n textAlign: \"center\",\r\n paddingTop: \"40px\",\r\n fontStyle: \"italic\",\r\n color: \"grey\",\r\n fontSize: \"20px\",\r\n },\r\n}));\r\n\r\nexport default function RecallTable(props) {\r\n // \r\n const classes = useStyles();\r\n const { searchFilter, businessCode, show_archived_list, noJobMessage } = props;\r\n // const [page, setPage] = React.useState(0);\r\n const page = 0;\r\n const [menuAnchor, setMenuAnchor] = React.useState(null);\r\n const [menuJobId, setMenuJobId] = React.useState(null);\r\n const [loadingJobClicked, setLoadingJobClicked] = React.useState(false);\r\n // const [rowsPerPage, setRowsPerPage] = React.useState(Math.trunc((window.innerHeight-300)/40));\r\n // const [rowsPerPage, setRowsPerPage] = React.useState(1000);\r\n const rowsPerPage = 1000;\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [img_url_show, setimg_url_show] = React.useState(false);\r\n const [showImage, setShowImage] = React.useState({ visible: false, image: \"\" });\r\n const user = useSelector((state) => state.app.user);\r\n const logged_user_code = useSelector((state) => state.app.logged_user_code);\r\n // const pinnedJobs = user?.pinned_jobs ?? [];\r\n // const user_id = user.id;\r\n let business_code = user.BusinessDetails.Code;\r\n if (businessCode) business_code = businessCode;\r\n\r\n const handleMenuClick = (event, id) => {\r\n setMenuAnchor(event.currentTarget);\r\n setMenuJobId(id);\r\n };\r\n\r\n const handleMenuClose = () => {\r\n setMenuAnchor(null);\r\n };\r\n\r\n const handleDuplicateQuote = () => {\r\n dispatch(loadJob(business_code, menuJobId, user)).then(() => {\r\n dispatch(updateAPP(MAIN_PAGE, { page: \"Duplicate\" }));\r\n });\r\n };\r\n\r\n const handlePinJob = () => {\r\n // Close menu\r\n handleMenuClose();\r\n\r\n // Update User State With Pinned / UnPinned\r\n dispatch(updateUserFromWeb(logged_user_code)).then((user_data) => {\r\n let pinned_jobs = user_data?.pinned_jobs ?? [];\r\n const selectedJob = menuJobId;\r\n\r\n // Check if user pinned already\r\n if (pinned_jobs.includes(selectedJob)) {\r\n // Remove Pinned Job and save user data, through filter\r\n // (can be changed to indexing, for performance improvements)\r\n pinned_jobs = pinned_jobs.filter((e) => e !== selectedJob);\r\n } else {\r\n pinned_jobs.push(selectedJob);\r\n }\r\n\r\n let new_user_data = {\r\n ...user_data,\r\n pinned_jobs,\r\n };\r\n\r\n dispatch(saveUserToWeb(new_user_data, true, false));\r\n });\r\n };\r\n\r\n // const CustomTooltip = withStyles({\r\n // tooltip: {\r\n // color: \"write\",\r\n // backgroundColor: \"white\",\r\n // fontWeight: \"bold\",\r\n // fontSize: \"12px\",\r\n // border: \"1px solid #8A8B8A\",\r\n // maxWidth: \"400px\",\r\n // marginLeft: \"200px\",\r\n // \"& > span\": {\r\n // left: \"5px !important\",\r\n // color: \"#8A8B8A\",\r\n // },\r\n // },\r\n // })(Tooltip);\r\n\r\n // React.useEffect(() => {\r\n // function handleResize() {\r\n // setRowsPerPage(Math.trunc((window.innerHeight-300)/40));\r\n // }\r\n\r\n // window.addEventListener('resize', handleResize)\r\n // })\r\n\r\n const handleClickOpen = (img) => {\r\n setimg_url_show(img);\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const dispatch = useDispatch();\r\n\r\n const openJob = (event, id, name) => {\r\n if (loadingJobClicked) return;\r\n setLoadingJobClicked(true);\r\n\r\n dispatch(changePage(DESIGNER_PAGE));\r\n dispatch(setDesignerLoadingBackdrop(\"Loading #\" + id + \" - \" + name));\r\n\r\n dispatch(loadJob(business_code, id, user, props?.containerMode ? props?.containerMode : \"\")).then((result) => {\r\n if (!result) {\r\n dispatch(\r\n setDesignerLoadingBackdrop(\r\n openJob(event, id, name)}>\r\n \r\n \r\n \r\n \r\n Error Loading # {id} - {name} ... try again?\r\n \r\n \r\n
\r\n )\r\n );\r\n setLoadingJobClicked(false);\r\n } else {\r\n dispatch(updateDesigner(SHOW_LOADING_BACKDROP, false));\r\n dispatch(resetDesigner());\r\n setLoadingJobClicked(false);\r\n }\r\n });\r\n };\r\n\r\n let rows = [];\r\n if (props.jobs !== undefined) rows = props.jobs;\r\n\r\n function MouseOver(id, event) {\r\n let srcImage = API_BASE() + \"svg/\" + id + \"/layout.svg\";\r\n let posY = event.clientY + window.pageYOffset;\r\n\r\n if (event.clientY < 325) {\r\n posY -= 50;\r\n } else {\r\n posY -= 200;\r\n }\r\n\r\n setShowImage({\r\n image: srcImage,\r\n positionX: event.clientX + 25,\r\n positionY: posY,\r\n visible: true,\r\n });\r\n }\r\n function MouseOut(id, event) {\r\n setShowImage({ ...showImage, visible: false });\r\n }\r\n\r\n \r\n\r\n const addImagePop = () => (\r\n \r\n
\r\n {/*
\r\n
\r\n
*/}\r\n
\r\n );\r\n\r\n return (\r\n <>\r\n {addImagePop()}\r\n \r\n \r\n \r\n \r\n \r\n {columns.map((column) => (\r\n \r\n {column.label}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n {rows &&\r\n rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row, index) => {\r\n let hide = false;\r\n if (\r\n searchFilter &&\r\n !JSON.stringify(row).toUpperCase().includes(searchFilter.toUpperCase())\r\n )\r\n hide = true;\r\n\r\n return (\r\n \r\n {columns.map((column) => {\r\n let value = row[column.id];\r\n if (column.id.includes(\".\")) {\r\n let section = column.id.split(\".\")[0];\r\n let subsection = column.id.split(\".\")[1];\r\n value = row[section][subsection];\r\n }\r\n\r\n if (column.id === \"Pin\" && row.pinned)\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n if (column.id === \"Address.FormattedStreetAddress\")\r\n value = row[\"Address\"][\"FormattedAddress\"].split(\",\")[0].trim();\r\n if (column.id === \"DesignSummary\") {\r\n return (\r\n \r\n {value ? value : \"[Design not defined]\"}\r\n \r\n \r\n );\r\n }\r\n if (column.id === \"Thumbnail\") {\r\n let image_url = API_BASE() + \"svg/\" + row.id + \"/layout.svg\";\r\n\r\n return (\r\n MouseOver(row.id, e)}\r\n onMouseLeave={(e) => MouseOut(row.id, e)}\r\n key={row.code + \"-\" + column.id}\r\n align={column.align}\r\n className={classes.rowCell}\r\n >\r\n handleClickOpen(image_url)}\r\n >\r\n \r\n \r\n \r\n );\r\n\r\n // return (\r\n // \r\n // \r\n // handleClickOpen(image_url)}\r\n // >\r\n // \r\n // \r\n // >\r\n // }\r\n // >\r\n // handleClickOpen(image_url)}\r\n // >\r\n // \r\n // \r\n // \r\n // \r\n // );\r\n }\r\n if (column.id === \"Status\") {\r\n return (\r\n // eslint-disable-next-line react/jsx-pascal-case\r\n \r\n );\r\n }\r\n return (\r\n \r\n openJob(event, row.id, row.Customer.JobName)\r\n : () => {}\r\n }\r\n className={classes.rowCell}\r\n style={column.style ? column.style : {}}\r\n >\r\n {column.format && value !== undefined\r\n ? column.format(value, row)\r\n : value}\r\n \r\n );\r\n })}\r\n openJob(event, row.id, row.Customer.JobName)}\r\n >\r\n EDIT\r\n \r\n \r\n {\r\n handleMenuClick(e, row.id);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n {rows.length === 0 && {noJobMessage}
}\r\n
\r\n \r\n {/* */}\r\n \r\n\r\n \r\n \r\n >\r\n );\r\n}\r\n\r\nconst useStyles2 = makeStyles({\r\n root: {},\r\n media: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n objectFit: \"contain\",\r\n width: \"93%\",\r\n height: \"93%\",\r\n padding: \"10px 20px\",\r\n },\r\n});\r\n\r\nfunction SimpleDialog(props) {\r\n const classes = useStyles2();\r\n const { onClose, selectedValue, open, image_url } = props;\r\n\r\n const handleClose = () => {\r\n onClose();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { connect } from \"react-redux\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport JobCard from \"./JobCard\";\r\nimport RecallTable from \"./RecallTable\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\n\r\nconst styles = {\r\n card: {\r\n maxWidth: 345,\r\n },\r\n media: {\r\n // ⚠️ object-fit is not supported by IE 11.\r\n objectFit: \"cover\",\r\n },\r\n searchbox: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.5)\",\r\n },\r\n iconButton: {\r\n padding: \"2px\",\r\n },\r\n searchtext: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.5)\",\r\n },\r\n recall_grid_container: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n marginTop: \"8px\",\r\n },\r\n jobCardSkeleton: {\r\n flex: 1,\r\n border: \"1px solid white\",\r\n margin: \"15px\",\r\n display: \"flex\",\r\n position: \"relative\",\r\n transition: \" border .15s ease-in\",\r\n flexDirection: \"column\",\r\n },\r\n jobTableSkeleton: {\r\n flex: 1,\r\n margin: \"15px\",\r\n display: \"flex\",\r\n position: \"relative\",\r\n flexDirection: \"column\",\r\n },\r\n no_job_message: {\r\n width: \"100%\",\r\n height: \"100px\",\r\n textAlign: \"center\",\r\n paddingTop: \"40px\",\r\n fontStyle: \"italic\",\r\n color: \"grey\",\r\n fontSize: \"20px\",\r\n },\r\n};\r\n\r\nfunction RecallQuotesLayout(props) {\r\n const user = useSelector((state) => state.app.user);\r\n const pinnedJobs = user?.pinned_jobs ?? [];\r\n const { classes, searchFilter, businessCode, setLoading, noJobMessage, displayMode, jobs, containerMode, loading } =\r\n props;\r\n let rows = [];\r\n if (jobs !== undefined) rows = jobs;\r\n\r\n // Sorts all pinned jobs as start of array\r\n pinnedJobs.map((e) => rows.sort((x, y) => (x.id === e ? -1 : y.id === e ? 1 : 0)));\r\n\r\n // Create new rows with pinned parameter\r\n let newRows = [];\r\n if (rows && rows.length > 0)\r\n rows.forEach((e) => {\r\n if (pinnedJobs.includes(e.id)) {\r\n let val = { ...e, pinned: true };\r\n // pass in the pinned\r\n newRows.push(val);\r\n } else {\r\n newRows.push(e);\r\n }\r\n });\r\n\r\n if (loading) {\r\n if (displayMode === \"Table\") {\r\n return (\r\n \r\n \r\n \r\n
\r\n );\r\n } else {\r\n return (\r\n \r\n {[...Array(20)].map((e, i) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {displayMode === \"Table\" ? (\r\n \r\n ) : (\r\n \r\n {newRows &&\r\n newRows.map &&\r\n newRows.map((row, index) => {\r\n if (searchFilter && !JSON.stringify(row).toUpperCase().includes(searchFilter.toUpperCase()))\r\n return <>>;\r\n return (\r\n
\r\n );\r\n })}\r\n {noJobMessage && rows && rows.length === 0 && (\r\n
{noJobMessage}
\r\n )}\r\n
\r\n )}\r\n >\r\n );\r\n}\r\nconst mapStateToProps = (state) => ({\r\n // posts: state.posts\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(withStyles(styles)(RecallQuotesLayout));\r\n","export const bom_area_data = {\r\n QUOTE: {\r\n ID: \"K9FTMC0379\",\r\n \"Order Lock\": \"True\",\r\n \"Engineering Lock\": \"False\",\r\n \"Date Ordered\": \"6/08/2020 3:27:46 PM\",\r\n \"Order Val\": \"3944.27\",\r\n \"Order Val Text\": \"3944.27\",\r\n \"Order Ver\": \"3.3.10\",\r\n \"Date Created\": \"14/07/2020 11:48:28 AM\",\r\n Program: \"Centenary\",\r\n \"Program Version\": \"3.3.11\",\r\n \"File Type Version\": \"1.0\",\r\n \"Data Version\": \"01/01/08\",\r\n QuoteIdentificationNumber: \"K9FTMC0379_20200810_121030\",\r\n HasOtherProducts: \"0\",\r\n \"Hide Dimensions On Quote\": \"False\",\r\n DesignSummary: \"Flat Roof (2.0°)\",\r\n },\r\n BUSINESS: {\r\n CODE: \"FTM\",\r\n NAME: \"Fielders Marion\",\r\n CONTACT: \"\",\r\n ABN: \"\",\r\n BUILDINGLICENCE: \"\",\r\n EMAIL: \"\",\r\n PHONE: \"\",\r\n FAX: \"\",\r\n KEY: \"\",\r\n STREET: \"\",\r\n SUBURB: \"\",\r\n POSTCODE: \"\",\r\n STATE: \"SA\",\r\n TimeDropFee: \"40.00\",\r\n DELIVERY: \"130\",\r\n TYPE: \"<>Dist 0.125\",\r\n VARS: \"<>priDisc|4.05*priCustType|Retail-4.05*priCustDisc|*priDeli|130*priPack|145*cusRef|SFCSMAR*cus1|All Dist*cusVal1|1.0*cus2|*cusVal2|*cus3|*cusVal3|*cus4|*cusVal4|*cus5|*cusVal5|*cus6|*cusVal6|*cus7|*cusVal7|*cus8|*cusVal8|*cus9|*cusVal9|*cus10|*cusVal10|*useWebOpt|1*userMisc|150.00*userCoun|180.00*userTrav|40.00*userPost|35.00*userAtta|100.00*userFlat|20.00*userFla4|25.00*userPitc|30.00*userGabl|30*userHip|35*userDutc|35*userAngl|10*userManR|230.00*margGST|10*margMarg|20*margComm|10*margBuff|5*ppDep|0*ppDepS|0*pp1|0*pp2|0*orderEmail|*busType|90*cF1|Cost*cFV1|1*cFVc1|1*cF2|Dist 0*cFV2|2.31*cFVc2|2.31*cF3|Dist 0.125*cFV3|2.40*cFVc3|2.40*cF4|Dist 0.25*cFV4|2.47*cFVc4|2.47*cF5|Dist 0.5*cFV5|2.60*cFVc5|2.60*cF6|Dist 1*cFV6|2.68*cFVc6|2.68*cF7|Dist 1.5*cFV7|3.00*cFVc7|3.00*cF8|Dist 2*cFV8|3.16*cFVc8|3.16*cF9|Dist 3*cFV9|3.20*cFVc9|3.20*cF10|Trade*cFV10|3.63*cFVc10|3.44*cF11|Retail*cFV11|4.05*cFVc11|4.05*oVer|1*state_factors|true*cPfs|0.99*cPfs_all|0.99|0.96|0.96|0.96|0.96|0.96|0.97*priPOL|1.06*priPOL_all|1.06|1|1|1|1\",\r\n LOGONum_lines: \"0\",\r\n LOGOB64Zip: \"False\",\r\n LyvesCustomerReference: \"SFCSMAR\",\r\n },\r\n AreaSpecifications: [\r\n {\r\n UnsupportedItems: {},\r\n AreaIndex: 0,\r\n IsExtraArea: false,\r\n DesignType: 0,\r\n SheetDirection: \"Front\",\r\n DesignSubType: 0,\r\n DesignSubTypeSetType4: 1,\r\n Projection: 4100,\r\n Length: 4000,\r\n Height: 3000,\r\n TLength: 3000,\r\n TWidth: 3000,\r\n TOffset: 1500,\r\n Pitch: 2.0,\r\n AreaJoin: {\r\n JoinAngle: 0,\r\n JoinOffset: 0,\r\n JoinPoint: \"0, 0\",\r\n JoinType: 0,\r\n JoinHipCapping: 1,\r\n JoinStructuralBackChannel: 1,\r\n OmitJoinPosts: 0,\r\n HipJunctionDir: 0,\r\n JoinGutter: 2,\r\n JoinArea: 0,\r\n JoinBoxGutterWidth: 190,\r\n JoinMultipleAreaBeam: \"1586510\",\r\n JoinMultipleAreaBeamList: \"Box\",\r\n JoinBeamEngineering: -1.0,\r\n },\r\n Attachment: 4,\r\n RoofSheet: \"Corrugated - C/Bond 0.48 (Non Trafficable)\",\r\n RoofSheetDescClean: \"Corrugated Colorbond 0.48 (Non Trafficable)\",\r\n RoofSheetColour: \"Basalt/Grey\",\r\n AttachmentLeft: 0,\r\n AttachmentRight: 0,\r\n AttachmentTop: 1,\r\n AttachmentBottom: 0,\r\n SubRoofType: \"\",\r\n OH_Front: \"30\",\r\n OH_Back: \"0\",\r\n OH_Left: \"0\",\r\n OH_Right: \"0\",\r\n SkylightType: \"Ampelite Solasafe Polycarbonate Corrugated\",\r\n SubSkylightType: \"\",\r\n SkylightColour: \"Clear AM\",\r\n BeamType1: \"1586510\",\r\n BeamList1: \"Fascia Box\",\r\n BeamName1: \"Fascia\",\r\n BeamType2: \"1586510\",\r\n BeamList2: \"Box\",\r\n BeamName2: \"\",\r\n BeamType3: \"1586510\",\r\n BeamList3: \"Box\",\r\n BeamName3: \"\",\r\n BeamType4: \"1586510\",\r\n BeamList4: \"Fascia Box\",\r\n BeamName4: \"\",\r\n BeamColour: \"Surfmist\",\r\n BeamColour2: \"Surfmist\",\r\n BeamColour3: \"Surfmist\",\r\n BeamColourMatchBeam: \"\",\r\n BeamColour2MatchBeam: \"\",\r\n BeamColour3MatchBeam: \"\",\r\n PostType: \"656508\",\r\n PostList: \"Box\",\r\n PostColour: \"Surfmist\",\r\n GutterType: \"Fascia Gutter\",\r\n GutterColour: \"Surfmist\",\r\n BoxGutterColour: \"Surfmist\",\r\n BoxGutterColourMatchBeam: \"\",\r\n RidgeColourMatchString: \"\",\r\n FlashingColourMatchString: \"\",\r\n DownpipeType: \"75mm Round Downpipe\",\r\n DownpipeColour: \"White\",\r\n FootingType: 0,\r\n NSPCColour: \"\",\r\n FlashingColour: \"Surfmist\",\r\n RidgeColour: \"Surfmist\",\r\n PostSpacing: \"6000\",\r\n BeamSpacing: \"6000\",\r\n AutoDesignSpacings: true,\r\n MembersLocked: false,\r\n GutterSelectionMade: true,\r\n GutterColourSelectionMade: true,\r\n RoofSelectionMade: true,\r\n RoofColourSelectionMade: true,\r\n SkylightSelectionMade: true,\r\n SkylightColourSelectionMade: true,\r\n DownpipeSelectionMade: true,\r\n DownpipeColourSelectionMade: true,\r\n BargeColourSelectionMade: true,\r\n FootingSelectionMade: true,\r\n Beam1ColourSelectionMade: 1,\r\n Beam2ColourSelectionMade: 1,\r\n Beam3ColourSelectionMade: 1,\r\n Beam4ColourSelectionMade: 1,\r\n PostColourSelectionMade: 1,\r\n FrontGutter: 1,\r\n BackGutter: 0,\r\n LeftGutter: 0,\r\n RightGutter: 0,\r\n OmitLeftBeam: 0,\r\n OmitRightBeam: 0,\r\n BoxGutterWidth: 190,\r\n DoubleBoxGutterWidth: 250,\r\n EasyFixMitres: 0,\r\n HandMadeMitres: 0,\r\n SlottedGutter: 0,\r\n ReturnGutter: 1,\r\n ExternalConnectors: 1,\r\n ExternalPostConnectors: 0,\r\n PostAlignment: false,\r\n AlignPostToBeams: 1,\r\n MatchSideBeams: false,\r\n InternalPosts: 0,\r\n CornerPostsFullHeight: 1,\r\n IntermediatePostsFullHeight: 0,\r\n RoofRolling: \"Top Side\",\r\n SkylightRolling: \"Under Side\",\r\n SheetLaying: 0,\r\n SheetLayingOffset: 0,\r\n RiserBracketSpacing: 1200,\r\n DecksJoistSpacing: 600,\r\n DecksPostOffset: false,\r\n DecksJoistsOnTop: false,\r\n FullLengthGutter: false,\r\n InfillEndAlign1: 0,\r\n InfillEndAlign2: 0,\r\n GableInfill1: \"Plain Stucco\",\r\n GableInfillFrontColour: \"Plain\",\r\n GableInfill2: \"Plain Stucco\",\r\n GableInfillBackColour: \"Plain\",\r\n GableInfillFrontFlashingColour: \"Classic Cream\",\r\n GableInfillBackFlashingColour: \"Classic Cream\",\r\n GableInfillFrontFlashingColourMatch: \"\",\r\n GableInfillBackFlashingColourMatch: \"\",\r\n GableInfillBeamHigh: 0,\r\n GableNumInternalRafters: -1,\r\n GableNumInternalPortals: 1,\r\n GableNumExtraPurlins: 0,\r\n GableRidgeBeam: 0,\r\n GableIsSlimline: 0,\r\n GableSoakerFlashing: 150,\r\n GableDownlightFlashing: 0,\r\n RotateArea: 0,\r\n CARPORTS_InfillBeamType: \"656508\",\r\n CARPORTS_MaxPortalSpacing: 0,\r\n CantileverRHS_InsertLength: 2300,\r\n Cantilever_AllowInfills: false,\r\n NumBeamAdjustments: 0,\r\n CARPORTS_NumPortals: 3,\r\n CARPORTS_Door1: \"None\",\r\n CARPORTS_Door2: \"None\",\r\n CARPORTS_HasCrossBracing: 0,\r\n CARPORTS_FrontOverhangLeft: 0,\r\n CARPORTS_FrontOverhangRight: 0,\r\n CARPORTS_BackOverhangLeft: 0,\r\n CARPORTS_BackOverhangRight: 0,\r\n CARPORTS_FrontBackspanLeft: 600,\r\n CARPORTS_FrontBackspanRight: 600,\r\n CARPORTS_BackBackspanLeft: 600,\r\n CARPORTS_BackBackspanRight: 600,\r\n CARPORTS_LeftOverhangFront: 0,\r\n CARPORTS_LeftOverhangBack: 0,\r\n CARPORTS_RightOverhangFront: 0,\r\n CARPORTS_RightOverhangBack: 0,\r\n CARPORTS_LeftBackspanFront: 600,\r\n CARPORTS_RightBackspanFront: 600,\r\n CARPORTS_LeftBackspanBack: 600,\r\n CARPORTS_RightBackspanBack: 600,\r\n HasPreviousArea: false,\r\n HasNextArea: false,\r\n HasHipOrDutchEnds: false,\r\n CARPORTS_RoofType1: 0,\r\n CARPORTS_RoofType2: 0,\r\n CARPORTS_HipAngle1: 45.0,\r\n CARPORTS_HipAngle2: 45.0,\r\n CARPORTS_HipPortalPost1: 1,\r\n CARPORTS_HipPortalPost2: 1,\r\n CARPORTS_HasInfillBeams1: 1,\r\n CARPORTS_HasInfillBeams2: 1,\r\n CARPORTS_HasFinial1: 0,\r\n CARPORTS_HasFinial2: 0,\r\n CARPORTS_NumExtraFinials: 0,\r\n InfillNotSupplied: false,\r\n Ratio_beamEpsilon: -1.0,\r\n Ratio_beam2Epsilon: -1.0,\r\n Ratio_beam3Epsilon: -1.0,\r\n Ratio_beam4Epsilon: -1.0,\r\n Ratio_columnEpsilon: -1.0,\r\n Ratio_Returnstring: \"-1,-1,-1,-1,-1\",\r\n Ratio_HashCode: 1454898511,\r\n EngineeringOutput: {},\r\n Ratio_EngineeringVersion: \"\",\r\n ActualStructureWidth: 4100,\r\n ActualStructureLength: 4000,\r\n SupplementaryEngineeringText: \"\",\r\n SlatType: \"FS70\",\r\n SlatColour: \"Paperbark\",\r\n SlatRetainerSpacing: \"10\",\r\n SlatAlignmentLastSelection: 0,\r\n SlatNumSlatsLast: 15,\r\n FootingWidth: 900,\r\n FootingDepth: 950,\r\n FrontOpening: 3,\r\n LeftOpening: 0,\r\n RightOpening: 0,\r\n FrontOpeningType: \"Door\",\r\n LeftOpeningType: \"Door\",\r\n RightOpeningType: \"Door\",\r\n WallColour: \"Monument\",\r\n ShedRoofSheet: \"Corrugated\",\r\n ShedWallSheet: \"TL5\",\r\n WarningMessage: \"\",\r\n DesignSubTypeIsForwardFlat: true,\r\n DesignIsForwardFlat: true,\r\n HasAngleCutouts: false,\r\n NumberOfFinials: 0,\r\n NumberOfGableEnds: 0,\r\n NumberOfInfills: 0,\r\n NumberOfHipEnds: 0,\r\n NumberOfDutchGableEnds: 0,\r\n NumberOfHipOrDutchEndsWithPosts: 0,\r\n NumberOfGazeboEnds: 0,\r\n NumberOfGableIntersections: 0,\r\n GetRHSInFasciaLength: 0,\r\n GetDownlightFlashingLength: 0,\r\n GetBoxGutterLength: 0,\r\n FasciaBeamColour: \"Surfmist\",\r\n EdgeBeamColour: \"Surfmist\",\r\n PurlinColour: \"Surfmist\",\r\n RafterColour: \"Surfmist\",\r\n Index: 0,\r\n Description: \"Flat Roof (2.0°)\",\r\n IsPortalGable: false,\r\n NumInternalPurlins: \"2.00\",\r\n NumSkylights: 0,\r\n },\r\n {\r\n UnsupportedItems: {},\r\n AreaIndex: 1,\r\n IsExtraArea: false,\r\n DesignType: 0,\r\n SheetDirection: \"Front\",\r\n DesignSubType: 0,\r\n DesignSubTypeSetType4: 1,\r\n Projection: 4100,\r\n Length: 4000,\r\n Height: 3000,\r\n TLength: 3000,\r\n TWidth: 3000,\r\n TOffset: 1500,\r\n Pitch: 2.0,\r\n AreaJoin: {\r\n JoinAngle: 0,\r\n JoinOffset: 0,\r\n JoinPoint: \"0, 0\",\r\n JoinType: 0,\r\n JoinHipCapping: 1,\r\n JoinStructuralBackChannel: 1,\r\n OmitJoinPosts: 0,\r\n HipJunctionDir: 0,\r\n JoinGutter: 2,\r\n JoinArea: 0,\r\n JoinBoxGutterWidth: 190,\r\n JoinMultipleAreaBeam: \"1586510\",\r\n JoinMultipleAreaBeamList: \"Box\",\r\n JoinBeamEngineering: -1.0,\r\n },\r\n Attachment: 4,\r\n RoofSheet: \"Corrugated - C/Bond 0.48 (Non Trafficable)\",\r\n RoofSheetDescClean: \"Corrugated Colorbond 0.48 (Non Trafficable)\",\r\n RoofSheetColour: \"Basalt/Grey\",\r\n AttachmentLeft: 0,\r\n AttachmentRight: 0,\r\n AttachmentTop: 1,\r\n AttachmentBottom: 0,\r\n SubRoofType: \"\",\r\n OH_Front: \"30\",\r\n OH_Back: \"0\",\r\n OH_Left: \"0\",\r\n OH_Right: \"0\",\r\n SkylightType: \"Ampelite Solasafe Polycarbonate Corrugated\",\r\n SubSkylightType: \"\",\r\n SkylightColour: \"Clear AM\",\r\n BeamType1: \"1586510\",\r\n BeamList1: \"Fascia Box\",\r\n BeamName1: \"Fascia\",\r\n BeamType2: \"1586510\",\r\n BeamList2: \"Box\",\r\n BeamName2: \"\",\r\n BeamType3: \"1586510\",\r\n BeamList3: \"Box\",\r\n BeamName3: \"\",\r\n BeamType4: \"1586510\",\r\n BeamList4: \"Fascia Box\",\r\n BeamName4: \"\",\r\n BeamColour: \"Surfmist\",\r\n BeamColour2: \"Surfmist\",\r\n BeamColour3: \"Surfmist\",\r\n BeamColourMatchBeam: \"\",\r\n BeamColour2MatchBeam: \"\",\r\n BeamColour3MatchBeam: \"\",\r\n PostType: \"656508\",\r\n PostList: \"Box\",\r\n PostColour: \"Surfmist\",\r\n GutterType: \"Fascia Gutter\",\r\n GutterColour: \"Surfmist\",\r\n BoxGutterColour: \"Surfmist\",\r\n BoxGutterColourMatchBeam: \"\",\r\n RidgeColourMatchString: \"\",\r\n FlashingColourMatchString: \"\",\r\n DownpipeType: \"75mm Round Downpipe\",\r\n DownpipeColour: \"White\",\r\n FootingType: 0,\r\n NSPCColour: \"\",\r\n FlashingColour: \"Surfmist\",\r\n RidgeColour: \"Surfmist\",\r\n PostSpacing: \"6000\",\r\n BeamSpacing: \"6000\",\r\n AutoDesignSpacings: true,\r\n MembersLocked: false,\r\n GutterSelectionMade: true,\r\n GutterColourSelectionMade: true,\r\n RoofSelectionMade: true,\r\n RoofColourSelectionMade: true,\r\n SkylightSelectionMade: true,\r\n SkylightColourSelectionMade: true,\r\n DownpipeSelectionMade: true,\r\n DownpipeColourSelectionMade: true,\r\n BargeColourSelectionMade: true,\r\n FootingSelectionMade: true,\r\n Beam1ColourSelectionMade: 1,\r\n Beam2ColourSelectionMade: 1,\r\n Beam3ColourSelectionMade: 1,\r\n Beam4ColourSelectionMade: 1,\r\n PostColourSelectionMade: 1,\r\n FrontGutter: 1,\r\n BackGutter: 0,\r\n LeftGutter: 0,\r\n RightGutter: 0,\r\n OmitLeftBeam: 0,\r\n OmitRightBeam: 0,\r\n BoxGutterWidth: 190,\r\n DoubleBoxGutterWidth: 250,\r\n EasyFixMitres: 0,\r\n HandMadeMitres: 0,\r\n SlottedGutter: 0,\r\n ReturnGutter: 1,\r\n ExternalConnectors: 1,\r\n ExternalPostConnectors: 0,\r\n PostAlignment: false,\r\n AlignPostToBeams: 1,\r\n MatchSideBeams: false,\r\n InternalPosts: 0,\r\n CornerPostsFullHeight: 1,\r\n IntermediatePostsFullHeight: 0,\r\n RoofRolling: \"Top Side\",\r\n SkylightRolling: \"Under Side\",\r\n SheetLaying: 0,\r\n SheetLayingOffset: 0,\r\n RiserBracketSpacing: 1200,\r\n DecksJoistSpacing: 600,\r\n DecksPostOffset: false,\r\n DecksJoistsOnTop: false,\r\n FullLengthGutter: false,\r\n InfillEndAlign1: 0,\r\n InfillEndAlign2: 0,\r\n GableInfill1: \"Plain Stucco\",\r\n GableInfillFrontColour: \"Plain\",\r\n GableInfill2: \"Plain Stucco\",\r\n GableInfillBackColour: \"Plain\",\r\n GableInfillFrontFlashingColour: \"Classic Cream\",\r\n GableInfillBackFlashingColour: \"Classic Cream\",\r\n GableInfillFrontFlashingColourMatch: \"\",\r\n GableInfillBackFlashingColourMatch: \"\",\r\n GableInfillBeamHigh: 0,\r\n GableNumInternalRafters: -1,\r\n GableNumInternalPortals: 1,\r\n GableNumExtraPurlins: 0,\r\n GableRidgeBeam: 0,\r\n GableIsSlimline: 0,\r\n GableSoakerFlashing: 150,\r\n GableDownlightFlashing: 0,\r\n RotateArea: 0,\r\n CARPORTS_InfillBeamType: \"656508\",\r\n CARPORTS_MaxPortalSpacing: 0,\r\n CantileverRHS_InsertLength: 2300,\r\n Cantilever_AllowInfills: false,\r\n NumBeamAdjustments: 0,\r\n CARPORTS_NumPortals: 3,\r\n CARPORTS_Door1: \"None\",\r\n CARPORTS_Door2: \"None\",\r\n CARPORTS_HasCrossBracing: 0,\r\n CARPORTS_FrontOverhangLeft: 0,\r\n CARPORTS_FrontOverhangRight: 0,\r\n CARPORTS_BackOverhangLeft: 0,\r\n CARPORTS_BackOverhangRight: 0,\r\n CARPORTS_FrontBackspanLeft: 600,\r\n CARPORTS_FrontBackspanRight: 600,\r\n CARPORTS_BackBackspanLeft: 600,\r\n CARPORTS_BackBackspanRight: 600,\r\n CARPORTS_LeftOverhangFront: 0,\r\n CARPORTS_LeftOverhangBack: 0,\r\n CARPORTS_RightOverhangFront: 0,\r\n CARPORTS_RightOverhangBack: 0,\r\n CARPORTS_LeftBackspanFront: 600,\r\n CARPORTS_RightBackspanFront: 600,\r\n CARPORTS_LeftBackspanBack: 600,\r\n CARPORTS_RightBackspanBack: 600,\r\n HasPreviousArea: false,\r\n HasNextArea: false,\r\n HasHipOrDutchEnds: false,\r\n CARPORTS_RoofType1: 0,\r\n CARPORTS_RoofType2: 0,\r\n CARPORTS_HipAngle1: 45.0,\r\n CARPORTS_HipAngle2: 45.0,\r\n CARPORTS_HipPortalPost1: 1,\r\n CARPORTS_HipPortalPost2: 1,\r\n CARPORTS_HasInfillBeams1: 1,\r\n CARPORTS_HasInfillBeams2: 1,\r\n CARPORTS_HasFinial1: 0,\r\n CARPORTS_HasFinial2: 0,\r\n CARPORTS_NumExtraFinials: 0,\r\n InfillNotSupplied: false,\r\n Ratio_beamEpsilon: -1.0,\r\n Ratio_beam2Epsilon: -1.0,\r\n Ratio_beam3Epsilon: -1.0,\r\n Ratio_beam4Epsilon: -1.0,\r\n Ratio_columnEpsilon: -1.0,\r\n Ratio_Returnstring: \"-1,-1,-1,-1,-1\",\r\n Ratio_HashCode: 1454898511,\r\n EngineeringOutput: {},\r\n Ratio_EngineeringVersion: \"\",\r\n ActualStructureWidth: 4100,\r\n ActualStructureLength: 4000,\r\n SupplementaryEngineeringText: \"\",\r\n SlatType: \"FS70\",\r\n SlatColour: \"Paperbark\",\r\n SlatRetainerSpacing: \"10\",\r\n SlatAlignmentLastSelection: 0,\r\n SlatNumSlatsLast: 15,\r\n FootingWidth: 900,\r\n FootingDepth: 950,\r\n FrontOpening: 3,\r\n LeftOpening: 0,\r\n RightOpening: 0,\r\n FrontOpeningType: \"Door\",\r\n LeftOpeningType: \"Door\",\r\n RightOpeningType: \"Door\",\r\n WallColour: \"Monument\",\r\n ShedRoofSheet: \"Corrugated\",\r\n ShedWallSheet: \"TL5\",\r\n WarningMessage: \"\",\r\n DesignSubTypeIsForwardFlat: true,\r\n DesignIsForwardFlat: true,\r\n HasAngleCutouts: false,\r\n NumberOfFinials: 0,\r\n NumberOfGableEnds: 0,\r\n NumberOfInfills: 0,\r\n NumberOfHipEnds: 0,\r\n NumberOfDutchGableEnds: 0,\r\n NumberOfHipOrDutchEndsWithPosts: 0,\r\n NumberOfGazeboEnds: 0,\r\n NumberOfGableIntersections: 0,\r\n GetRHSInFasciaLength: 0,\r\n GetDownlightFlashingLength: 0,\r\n GetBoxGutterLength: 0,\r\n FasciaBeamColour: \"Surfmist\",\r\n EdgeBeamColour: \"Surfmist\",\r\n PurlinColour: \"Surfmist\",\r\n RafterColour: \"Surfmist\",\r\n Index: 1,\r\n Description: \"Flat Roof (2.0°)\",\r\n IsPortalGable: false,\r\n NumInternalPurlins: \"2.00\",\r\n NumSkylights: 0,\r\n },\r\n ],\r\n PricingData: {\r\n overall_markup: 1.17432,\r\n area_pricing: {\r\n 0: 1.17432,\r\n },\r\n fielders_material_markup_factor: 2.4,\r\n fielders_material_markup_factor_type: \"Dist 0.125\",\r\n fielders_material_discount_factor: 0.0,\r\n fielders_material_markup_overall: 2.4,\r\n fielders_pricing_factors: {\r\n FIELDERS: 1.0,\r\n CURVED: 1.0,\r\n DECK: 0.78,\r\n \"CARPORT HIP\": 0.89,\r\n \"PITCHED FREESPAN\": 1.0,\r\n RHS: 0.75,\r\n FLAT: 1.0,\r\n CDECKPOLYCARB: 0.7155,\r\n POLYCARB: 1.06,\r\n SOLARSPAN: 1.0,\r\n SLATS: 1.7,\r\n PITCHED: 1.0,\r\n \"BBQ SHELTER\": 1.06,\r\n \"PITCHED FREESTANDING\": 1.0,\r\n \"FLAT FREESTANDING\": 1.0,\r\n \"CARPORT GAZEBO\": 1.0,\r\n ALL: 1.17432,\r\n \"CARPORT T-JUNCTION\": 1.0,\r\n \"GALV FLAT\": 0.6658,\r\n \"CARPORT JUNCTION\": 1.0,\r\n \"CARPORT FREESTANDING\": 0.99,\r\n \"CARPORT FREESPAN\": 1.09,\r\n \"CARPORT POLYCARBONATE\": 0.96,\r\n INFILLS: 1.0,\r\n \"CARPORT DUTCH GABLE\": 0.89,\r\n \"PITCHED SLIMLINE\": 1.0,\r\n \"FLAT POLYCARBONATE\": 1.0,\r\n FREESTANDING: 1.0,\r\n \"PITCHED POLYCARBONATE\": 1.0,\r\n HARDWARE: 1.09,\r\n SWAGE: 0.85,\r\n BUYINS: 0.5,\r\n \"CANTILEVER ROOF\": 1.03,\r\n },\r\n promotion_Factor: 1.0,\r\n },\r\n};\r\n\r\nexport const order_items = {\r\n items: [\r\n {\r\n Add: true,\r\n Category: \"STEEL ROOFING\",\r\n Code: \"SSIP50\",\r\n Desc: \"Bondor Solarspan Plain 50mm Thick Insulated Panel ****\",\r\n Use: \"\",\r\n Colour: \"Basalt/Grey\",\r\n Area: \"1\",\r\n Qty: \"4 x 4163\",\r\n Length: \"4163\",\r\n CodeBase: \"SSIP50\",\r\n CodeAppend: \"\",\r\n DescAppend: \"Under Side Cut back foam 60mm for Fascia Flashing\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"IRSS50****\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[ {\"Code\":\"SSTS14125\", \"Use\":\"Solarspan Roof Fix\", \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}]}',\r\n PromptCodes: \"SSC SSCB LAYING\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"SSIP50\",\r\n Fielders_Code: \"SHBF14125A150\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SSTS14125\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n Desc: \"BF 14-14X125 H/H Screw + Neo CL4 (Pkt 150)\",\r\n Length: \"\",\r\n PromptCodes: 'AltIndex=\"SSTS14125_1,TS14135P\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"150\",\r\n SubTotalCost: null,\r\n Use: \"Solarspan Roof Fix\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 40,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n Qty: \"40\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n FixedItemLength: null,\r\n Unit: \"150\",\r\n UnitPackingSize: 150,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n deleted: false,\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 16652,\r\n Table: [\r\n {\r\n QtyString: \"4 x 4163\",\r\n Qty: \"4\",\r\n Length: \"4163\",\r\n Use: \"\",\r\n UnitPrice: 49.975301376000004,\r\n TotalPrice: 832.18871851315214,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 17.732000000000003,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"93.69\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 0.65,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"4 x 4163\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 49.975301376000004,\r\n TotalPriceLastCalculated: 832.18871851315214,\r\n TotalePriceLastCalculated: 1560.1258799999998,\r\n TotalCostBaseLastCalculated: 346.74529938048011,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"no_match\",\r\n Image_b64: \"\",\r\n deleted: false,\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"SS50BC12SM\",\r\n Desc: \"Solarspan 50 Back Channel 1.20 (Suit 50mm Panel) Powdercoated\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"\",\r\n Qty: \"1 x 4000 (Back Channel)\",\r\n Length: \"4000\",\r\n CodeBase: \"SS50BC12SM\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CF12GA3004\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"POWBCR\",\r\n PromptCodes: \"MAX_LM=7500\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"SS50BC12SM\",\r\n Fielders_Code: \"PDCBKC\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"POWBCR\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty\",\r\n Desc: \"Powder Coating Back Channel P/M\",\r\n Length: \"4000\",\r\n PromptCodes: 'PCP Desc=\"P/Coat\"',\r\n DescAppend: \"\",\r\n Category: \"Miscellaneous Items\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"LM\",\r\n SubTotalCost: null,\r\n Use: \"SS50BC12SM Part (Back Channel)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4000,\r\n Table: [\r\n {\r\n QtyString: \"=Qty\",\r\n Qty: \"1\",\r\n Length: \"4000\",\r\n Use: \"Back Channel\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n deleted: true,\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4000,\r\n Table: [\r\n {\r\n QtyString: \"1 x 4000 (Back Channel)\",\r\n Qty: \"1\",\r\n Length: \"4000\",\r\n Use: \"Back Channel\",\r\n UnitPrice: 27.3175955136,\r\n TotalPrice: 109.2703820544,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 9.6927,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"22.40\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 x 4000 (Back Channel)\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: null,\r\n Image_b64: \"\",\r\n deleted: true,\r\n },\r\n {\r\n Add: true,\r\n Category: \"Gutters & Accessories\",\r\n Code: \"FGLSE\",\r\n Desc: \"Fascia Gutter LH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"FGLSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSEL**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"6xRI43100\",\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"FGR\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGLSE\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*6\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"FGLSE Part\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 6,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*6\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"FGR\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 2.00104128,\r\n TotalPrice: 2.00104128,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 0.71,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"0.71\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 2.00104128,\r\n TotalPriceLastCalculated: 2.00104128,\r\n TotalePriceLastCalculated: 0.71,\r\n TotalCostBaseLastCalculated: 0.83376719999999993,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Gutters & Accessories\",\r\n Code: \"FG\",\r\n Desc: \"Fascia Gutter **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 x 4400\",\r\n Length: \"4400\",\r\n CodeBase: \"FGR\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (Return)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGF55SM\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[ {\"Code\":\"JSTRAP\", \"Use\" : \"Gutter Clip\", \"Qty\" : \"=(Length/1000)\", \"Conditions\":{ \"Area.RoofSheet\" : \"!=*SOLARSPAN*\", \"DescAppend\" : \"!=*Return*\" }}, {\"Code\":\"HICL\", \"Use\" : \"Gutter Clip\", \"Qty\" : \"=(Length/1000)\", \"Conditions\":{ \"Area.RoofSheet\" : \"!=*SOLARSPAN*\", \"DescAppend\" : \"=*Return*\" }}, {\"Code\":\"REFLDG\", \"Use\" : \"Refold Gutter Fee\", \"Qty\" : \"=Qty\", \"Conditions\":{ \"DescAppend\" : \"=*Return*\" }}, {\"Code\":\"TLGCL\", \"Use\" : \"Solarspan Gutter Clip\", \"Qty\" : \"=(Length/1000)\", \"Conditions\":{ \"Area.RoofSheet\":\"=*SOLARSPAN*\" }}, {\"Code\":\"RI43100\", \"Qty\" : \"=Qty*12\"}]}',\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"REFLDG\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"REFLDG\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty\",\r\n Desc: \"Refold Gutter Fee\",\r\n Length: \"4400\",\r\n PromptCodes: \"\",\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"LM\",\r\n SubTotalCost: null,\r\n Use: \"Refold Gutter Fee\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4400,\r\n Table: [\r\n {\r\n QtyString: \"=Qty\",\r\n Qty: \"1\",\r\n Length: \"4400\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: [\r\n {\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=BASE_COLOUR_REF=Plain\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TSW1016B8100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"SCTF Part (TLGCL Part (Solarspan Gutter Clip))\",\r\n Colour: \"Plain\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 10,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 3,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"CTSC\",\r\n AncillaryParts: \"2xTSW1016B8100\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SCTF\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*1\",\r\n Desc: \"Custom Timber (Suspension) Clip\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"Timber Susp. Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"TLGCL Part (Solarspan Gutter Clip)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 2,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Galvanised\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"TL5HRGCGA\",\r\n AncillaryParts: \"1xSCTF\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TLGCL\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=(Length/1000)\",\r\n Desc: \"Tl-5/Hi-Rib Gutter Clip Galv\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"Gutter Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Solarspan Gutter Clip\",\r\n Colour: \"Galvanised\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=(Length/1000)\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=(Length/1000)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*12\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"FG Part\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 12,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*12\",\r\n Qty: \"12\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*12\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4400,\r\n Table: [\r\n {\r\n QtyString: \"1 x 4400\",\r\n Qty: \"1\",\r\n Length: \"4400\",\r\n Use: \"\",\r\n UnitPrice: 13.258730419199999,\r\n TotalPrice: 58.338413844479994,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 4.7044,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"10.63\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 x 4400\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 13.258730419199999,\r\n TotalPriceLastCalculated: 58.338413844479994,\r\n TotalePriceLastCalculated: 46.772,\r\n TotalCostBaseLastCalculated: 24.307672435199997,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Gutters & Accessories\",\r\n Code: \"FGRSE\",\r\n Desc: \"Fascia Gutter RH Stop End **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 (Gutter Fix)\",\r\n Length: \"\",\r\n CodeBase: \"FGRSE\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"FGSER**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"6xRI43100\",\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"FGR\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGRSE\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*6\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"FGRSE Part (Gutter Fix)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 6,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*6\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"FGR\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1 (Gutter Fix)\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"Gutter Fix\",\r\n UnitPrice: 2.00104128,\r\n TotalPrice: 2.00104128,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 0.71,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"0.71\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 (Gutter Fix)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 2.00104128,\r\n TotalPriceLastCalculated: 2.00104128,\r\n TotalePriceLastCalculated: 0.71,\r\n TotalCostBaseLastCalculated: 0.83376719999999993,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Downpipes & Accessories\",\r\n Code: \"PVC75\",\r\n Desc: \"75mm Pvc Stormwater Pipe 6000mm\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"1 x 2762\",\r\n Length: \"2762\",\r\n CodeBase: \"DP75ROUND_INTERNAL\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"PVCSP756000\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"4xST75Z\",\r\n PromptCodes: \"Length=6000 AltIndex=DP75ROUND_INTERNAL\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"DP75ROUND_INTERNAL\",\r\n Fielders_Code: \"DPBR75ZLF\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"ST75Z\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"75mm Rnd Downpipe Strap Zincalume\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"D/P Strap\"',\r\n DescAppend: \"\",\r\n Category: \"Downpipes & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"PVC75 Part\",\r\n Colour: \"Zincalume\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 2762,\r\n Table: [\r\n {\r\n QtyString: \"1 x 2762\",\r\n Qty: \"1\",\r\n Length: \"2762\",\r\n Use: \"\",\r\n UnitPrice: 29.592864,\r\n TotalPrice: 29.592864,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 10.5,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"13.97\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 x 2762\",\r\n FixedItemLength: \"6000\",\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 29.592864,\r\n TotalPriceLastCalculated: 29.592864,\r\n TotalePriceLastCalculated: 13.97,\r\n TotalCostBaseLastCalculated: 12.33036,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Downpipes & Accessories\",\r\n Code: \"PO75Z\",\r\n Desc: \"75mm Rnd Pop (Suit Pvc & Metal) Zincalume\",\r\n Use: \"\",\r\n Colour: \"Zincalume\",\r\n Area: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"PO75Z\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"DPPR75ZLF\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"8xRI43100\",\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"PVC75\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"PO75Z\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*8\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"PO75Z Part\",\r\n Colour: \"Zincalume\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 8,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*8\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*8\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n deleted: true,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"PVC75\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 3.1002048000000006,\r\n TotalPrice: 3.1002048000000006,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 1.1,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"7.00\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 3.1002048000000006,\r\n TotalPriceLastCalculated: 3.1002048000000006,\r\n TotalePriceLastCalculated: 7,\r\n TotalCostBaseLastCalculated: 1.2917520000000002,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"SS50FOF\",\r\n Desc: \"Solarspan 50 Fascia Overhang Flash (Suit 50mm Panel) **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 x 4000 (Solarspan Flashing 50)\",\r\n Length: \"4000\",\r\n CodeBase: \"SS50FOF\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNSSFFO5550**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4000,\r\n Table: [\r\n {\r\n QtyString: \"1 x 4000 (Solarspan Flashing 50)\",\r\n Qty: \"1\",\r\n Length: \"4000\",\r\n Use: \"Solarspan Flashing 50\",\r\n UnitPrice: 8.2597910975999991,\r\n TotalPrice: 33.039164390399996,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 2.9307,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"9.46\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 x 4000 (Solarspan Flashing 50)\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: null,\r\n Image_b64: \"\",\r\n deleted: true,\r\n },\r\n {\r\n Add: true,\r\n Category: \"FLASHING\",\r\n Code: \"SS50USB\",\r\n Desc: \"Solarspan 50 Uni Side Barge Flash (Suit 50mm Panel) **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"2 x 4268 (Solarspan Barge Capping 50)\",\r\n Length: \"4268\",\r\n CodeBase: \"SS50USB\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNSSFUSB5550**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 2,\r\n Length: 8536,\r\n Table: [\r\n {\r\n QtyString: \"2 x 4268 (Solarspan Barge Capping 50)\",\r\n Qty: \"2\",\r\n Length: \"4268\",\r\n Use: \"Solarspan Barge Capping 50\",\r\n UnitPrice: 17.9490584448,\r\n TotalPrice: 153.21316288481279,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 6.3686,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"14.99\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"2 x 4268 (Solarspan Barge Capping 50)\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: null,\r\n Image_b64: \"\",\r\n deleted: true,\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB158\",\r\n Desc: \"Cen Box Beam 158 X 65 X 0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 x 3870 (Fascia Beam)|1 x 4007 (Area 1-Left Intermediate Beam)|1 x 4007 (Area 1-Right Intermediate Beam)\",\r\n Length: \"3870\",\r\n CodeBase: \"BB158\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB9515865H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 3,\r\n Length: 11884,\r\n Table: [\r\n {\r\n QtyString:\r\n \"1 x 3870 (Fascia Beam)|1 x 4007 (Area 1-Left Intermediate Beam)|1 x 4007 (Area 1-Right Intermediate Beam)\",\r\n Qty: \"1\",\r\n Length: \"3870\",\r\n Use: \"Fascia Beam\",\r\n UnitPrice: 31.6979030592,\r\n TotalPrice: 122.670884839104,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString:\r\n \"1 x 3870 (Fascia Beam)|1 x 4007 (Area 1-Left Intermediate Beam)|1 x 4007 (Area 1-Right Intermediate Beam)\",\r\n Qty: \"1\",\r\n Length: \"4007\",\r\n Use: \"Area 1-Left Intermediate Beam\",\r\n UnitPrice: 31.6979030592,\r\n TotalPrice: 127.01349755821441,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString:\r\n \"1 x 3870 (Fascia Beam)|1 x 4007 (Area 1-Left Intermediate Beam)|1 x 4007 (Area 1-Right Intermediate Beam)\",\r\n Qty: \"1\",\r\n Length: \"4007\",\r\n Use: \"Area 1-Right Intermediate Beam\",\r\n UnitPrice: 31.6979030592,\r\n TotalPrice: 127.01349755821441,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 11.2469,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"58.41\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString:\r\n \"1 x 3870 (Fascia Beam)|1 x 4007 (Area 1-Left Intermediate Beam)|1 x 4007 (Area 1-Right Intermediate Beam)\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 31.6979030592,\r\n TotalPriceLastCalculated: 376.69787995553287,\r\n TotalePriceLastCalculated: 694.14443999999992,\r\n TotalCostBaseLastCalculated: 156.95744998147202,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"BEAMS\",\r\n Code: \"BB656575\",\r\n Desc: \"Cen Box Beam 65 X 65 X 0.95BMT **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"3 x 3600 (Post)\",\r\n Length: \"3600\",\r\n CodeBase: \"BB656575\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CBB956565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 3,\r\n Length: 10800,\r\n Table: [\r\n {\r\n QtyString: \"3 x 3600 (Post)\",\r\n Qty: \"3\",\r\n Length: \"3600\",\r\n Use: \"Post\",\r\n UnitPrice: 21.5875715328,\r\n TotalPrice: 233.14577255423998,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 7.6596,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"28.76\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"3 x 3600 (Post)\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 21.5875715328,\r\n TotalPriceLastCalculated: 233.14577255423998,\r\n TotalePriceLastCalculated: 310.608,\r\n TotalCostBaseLastCalculated: 97.1440718976,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK16565G\",\r\n Desc: \"Cen BK1 6565 Galv Con\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"1 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"BK16565G\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK16565GA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[ {\"Code\":\"TS1220100B8\", \"Colour\":\"Area.PostColour\", \"Qty\" : \"4\"}, {\"Code\":\"TS1016100B8\", \"Colour\":\"Area.PostColour\", \"Qty\" : \"4\"}]}',\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: \"BASE_COLOUR_REF=Area.PostColour\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK16565G\",\r\n Fielders_Code: \"SHBF1220**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1220100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK16565G Part (For Post)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: \"BASE_COLOUR_REF=Area.PostColour\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK16565G\",\r\n Fielders_Code: \"SHBF1016N**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1016100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK16565G Part (For Post)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1 (For Post)\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"For Post\",\r\n UnitPrice: 4.28391936,\r\n TotalPrice: 4.28391936,\r\n BracketData: {\r\n BracketType: \"BK1\",\r\n Angle1: 0,\r\n UpDown: \"Down\",\r\n Angle2: 0,\r\n LeftRight: \"RH\",\r\n RotationAngle: 0,\r\n TopTabLength: 54,\r\n SideTabLength: 30,\r\n TopTabStyle: \"Upright - Standard\",\r\n ftt: 0,\r\n BeamSize: \"1586510\",\r\n },\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 1.52,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"12.91\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 (For Post)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 4.28391936,\r\n TotalPriceLastCalculated: 4.28391936,\r\n TotalePriceLastCalculated: 12.91,\r\n TotalCostBaseLastCalculated: 1.7849664,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK215865\",\r\n Desc: \"Cen BK2 15865 **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"2 (For Fascia Beam)|1 (Area 1-For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n Length: \"\",\r\n CodeBase: \"BK215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK215865CON**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK215865\",\r\n Fielders_Code: \"SHBF1220**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1220100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK215865 Part (For Fascia Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 16,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK215865\",\r\n Fielders_Code: \"SHBF1016N**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1016100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK215865 Part (For Fascia Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 16,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString:\r\n \"2 (For Fascia Beam)|1 (Area 1-For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n Use: \"For Fascia Beam\",\r\n UnitPrice: 9.18787968,\r\n TotalPrice: 18.37575936,\r\n BracketData: {\r\n BracketType: \"BK2\",\r\n Angle1: 0,\r\n UpDown: \"Down\",\r\n Angle2: 0,\r\n LeftRight: \"RH\",\r\n RotationAngle: 0,\r\n TopTabLength: 54,\r\n SideTabLength: 30,\r\n TopTabStyle: \"Upright - Standard\",\r\n ftt: 0,\r\n BeamSize: \"1586510\",\r\n },\r\n },\r\n {\r\n QtyString:\r\n \"2 (For Fascia Beam)|1 (Area 1-For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"Area 1-For Left Intermediate Beam\",\r\n UnitPrice: 9.18787968,\r\n TotalPrice: 9.18787968,\r\n BracketData: {\r\n BracketType: \"BK2\",\r\n Angle1: 0,\r\n UpDown: \"Down\",\r\n Angle2: 0,\r\n LeftRight: \"RH\",\r\n RotationAngle: 0,\r\n TopTabLength: 54,\r\n SideTabLength: 30,\r\n TopTabStyle: \"Upright - Standard\",\r\n ftt: 0,\r\n BeamSize: \"1586510\",\r\n },\r\n },\r\n {\r\n QtyString:\r\n \"2 (For Fascia Beam)|1 (Area 1-For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"Area 1-For Right Intermediate Beam\",\r\n UnitPrice: 9.18787968,\r\n TotalPrice: 9.18787968,\r\n BracketData: {\r\n BracketType: \"BK2\",\r\n Angle1: 0,\r\n UpDown: \"Down\",\r\n Angle2: 0,\r\n LeftRight: \"RH\",\r\n RotationAngle: 0,\r\n TopTabLength: 54,\r\n SideTabLength: 30,\r\n TopTabStyle: \"Upright - Standard\",\r\n ftt: 0,\r\n BeamSize: \"1586510\",\r\n },\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 3.26,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"18.34\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString:\r\n \"2 (For Fascia Beam)|1 (Area 1-For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 9.18787968,\r\n TotalPriceLastCalculated: 36.75151872,\r\n TotalePriceLastCalculated: 73.36,\r\n TotalCostBaseLastCalculated: 15.3131328,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK2215865\",\r\n Desc: \"Cen BK22 15865 Brkt With Stop End **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"1 (For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n Length: \"\",\r\n CodeBase: \"BK2215865\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK22158CBSE**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK2215865\",\r\n Fielders_Code: \"SHBF1220**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1220100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK2215865 Part (For Left Intermediate Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 8,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK2215865\",\r\n Fielders_Code: \"SHBF1016N**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1016100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK2215865 Part (For Left Intermediate Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 8,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: null,\r\n BracketData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 2,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1 (For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"For Left Intermediate Beam\",\r\n UnitPrice: 11.63985984,\r\n TotalPrice: 11.63985984,\r\n BracketData: {\r\n BracketType: \"BK22\",\r\n Angle1: 0,\r\n UpDown: \"Down\",\r\n Angle2: 0,\r\n LeftRight: \"RH\",\r\n Angle1_DownOrRHIsNegative: false,\r\n Angle2_RHIsNegative: true,\r\n RotationAngle: 0,\r\n TopTabLength: 54,\r\n SideTabLength: 30,\r\n TopTabStyle: \"Upright - Standard\",\r\n ftt: 0,\r\n BeamSize: \"1586510\",\r\n },\r\n },\r\n {\r\n QtyString: \"1 (For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"Area 1-For Right Intermediate Beam\",\r\n UnitPrice: 11.63985984,\r\n TotalPrice: 11.63985984,\r\n BracketData: {\r\n BracketType: \"BK22\",\r\n Angle1: 0,\r\n UpDown: \"Down\",\r\n Angle2: 0,\r\n LeftRight: \"RH\",\r\n Angle1_DownOrRHIsNegative: false,\r\n Angle2_RHIsNegative: true,\r\n RotationAngle: 0,\r\n TopTabLength: 54,\r\n SideTabLength: 30,\r\n TopTabStyle: \"Upright - Standard\",\r\n ftt: 0,\r\n BeamSize: \"1586510\",\r\n },\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 4.13,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"19.09\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 (For Left Intermediate Beam)|1 (Area 1-For Right Intermediate Beam)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 11.63985984,\r\n TotalPriceLastCalculated: 23.27971968,\r\n TotalePriceLastCalculated: 38.18,\r\n TotalCostBaseLastCalculated: 9.6998832,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"BRACKETS\",\r\n Code: \"BK26DEG\",\r\n Desc: \"Cen BK26 Verandah Fascia Support Brkt Double End Galv\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"5 (Rafter Bracket)\",\r\n Length: \"\",\r\n CodeBase: \"BK26DEG\",\r\n CodeAppend: \"\",\r\n DescAppend: \"(fixed to Metal Fascia)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBK26VFSBDEGA\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[ {\"Code\":\"BNW1060Z\", \"Use\":\"Rafter Bracket Fix\", \"Qty\":\"3\"}, {\"Code\":\"BNW1020\", \"Qty\":\"1\", \"Use\":\"Metal Fascia Fix\", \"Conditions\":{ \"Desc\":\"=*Metal Fascia*\" }}, {\"Code\":\"10X50P\", \"Qty\":\"1\", \"Use\":\"Rafter Bracket Fascia Fix\", \"Conditions\":{ \"Desc\":\"!=*Metal Fascia*\" }}]}',\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK26DEG\",\r\n Fielders_Code: \"BNW1060ZP\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"BNW1060Z\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*3\",\r\n Desc: \"Cen Bolt Nut Washer (Zinc) 10X60\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x60mm Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Rafter Bracket Fix (Rafter Bracket)\",\r\n Colour: \"Zinc\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 15,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*3\",\r\n Qty: \"15\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*3\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK26DEG\",\r\n Fielders_Code: \"BNWHH1020ZP\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"BNW1020\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*1\",\r\n Desc: \"M10X20 G4.60 H/H Zinc (BNW)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x20mm Hex Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Metal Fascia Fix (Rafter Bracket)\",\r\n Colour: \"Zinc\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n BracketData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"5 (Rafter Bracket)\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"Rafter Bracket\",\r\n UnitPrice: 13.922737920000001,\r\n TotalPrice: 69.6136896,\r\n BracketData: {\r\n BracketType: \"BK26\",\r\n Angle1: 0,\r\n UpDown: \"Down\",\r\n Angle2: 0,\r\n LeftRight: \"RH\",\r\n RotationAngle: 0,\r\n TopTabLength: 54,\r\n SideTabLength: 30,\r\n TopTabStyle: \"Upright - Standard\",\r\n ftt: 0,\r\n BeamSize: \"1586510\",\r\n },\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 4.94,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"22.61\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"5 (Rafter Bracket)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 13.922737920000001,\r\n TotalPriceLastCalculated: 69.6136896,\r\n TotalePriceLastCalculated: 113.05,\r\n TotalCostBaseLastCalculated: 29.005704,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"CONNECTORS\",\r\n Code: \"CON16565\",\r\n Desc: \"Cen CON1 65x65 Galv Inground Connector\",\r\n Use: \"\",\r\n Colour: \"Galvanised\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CON16565\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNCON165GA\",\r\n \"CL DATA\": {},\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: '{\"AncillaryParts\":[ {\"Code\":\"10X90\", \"Colour\":\"Area.PostColour\", \"Qty\" : \"2\"}]}',\r\n PromptCodes: \"\",\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: \"BASE_COLOUR_REF=Area.PostColour\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"CON16565\",\r\n Fielders_Code: \"BN1090**\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"10X90\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"Cen Bolt Nut G4.6 10X90 **\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"CON16565 Part (For Post)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 6,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: null,\r\n BracketData: {},\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 3,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"3 (For Post)\",\r\n Qty: \"3\",\r\n Length: \"\",\r\n Use: \"For Post\",\r\n UnitPrice: 12.4738149312,\r\n TotalPrice: 37.4214447936,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 4.4259,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"17.18\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"3 (For Post)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 12.4738149312,\r\n TotalPriceLastCalculated: 37.4214447936,\r\n TotalePriceLastCalculated: 51.54,\r\n TotalCostBaseLastCalculated: 15.592268664,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"10X90\",\r\n Desc: \"Cen Bolt Nut G4.6 10X90 **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"3 (Post Fix)\",\r\n Length: \"\",\r\n CodeBase: \"10X90\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"BN1090**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 3,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"3 (Post Fix)\",\r\n Qty: \"3\",\r\n Length: \"\",\r\n Use: \"Post Fix\",\r\n UnitPrice: 0.73789947302399994,\r\n TotalPrice: 2.2136984190719997,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 0.261818,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"1.89\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"3 (Post Fix)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 6,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 0.73789947302399994,\r\n TotalPriceLastCalculated: 6.641095257216,\r\n TotalePriceLastCalculated: 17.009999999999998,\r\n TotalCostBaseLastCalculated: 2.76712302384,\r\n },\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: \"BASE_COLOUR_REF=Area.PostColour\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"CON16565\",\r\n Fielders_Code: \"BN1090**\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"10X90\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"Cen Bolt Nut G4.6 10X90 **\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"CON16565 Part (For Post)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 6,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 6,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"RI43100\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"54 (Back Channel Fix)|28 (Area 1-Barge Capping Fix)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n Children: null,\r\n \"Parent Item\": \"SS50BC12SM\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 82,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"54 (Back Channel Fix)|28 (Area 1-Barge Capping Fix)\",\r\n Qty: \"54\",\r\n Length: \"\",\r\n Use: \"Back Channel Fix\",\r\n UnitPrice: 4.9459540032000007,\r\n TotalPrice: 267.08151617280004,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString: \"54 (Back Channel Fix)|28 (Area 1-Barge Capping Fix)\",\r\n Qty: \"28\",\r\n Length: \"\",\r\n Use: \"Area 1-Barge Capping Fix\",\r\n UnitPrice: 4.9459540032000007,\r\n TotalPrice: 138.48671208960002,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 1.7549000000000001,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"9.74\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"54 (Back Channel Fix)|28 (Area 1-Barge Capping Fix)\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 24,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*12\",\r\n Qty: \"12\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 4.9459540032000007,\r\n TotalPriceLastCalculated: 9.8919080064000013,\r\n TotalePriceLastCalculated: 19.48,\r\n TotalCostBaseLastCalculated: 4.1216283360000006,\r\n },\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"FGR\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGLSE\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*6\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"FGLSE Part\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 6,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*6\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*12\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"FG Part\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 12,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*12\",\r\n Qty: \"12\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*12\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"FGR\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGRSE\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*6\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"FGRSE Part (Gutter Fix)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 6,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*6\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 24,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*12\",\r\n Qty: \"12\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*6\",\r\n Qty: \"6\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_not_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"RI43100\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Use: \"\",\r\n Colour: \"Aluminium\",\r\n Area: \"1\",\r\n Qty: \"14 (Downpipe Fix)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n Children: null,\r\n \"Parent Item\": \"PVC75\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 14,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"14 (Downpipe Fix)\",\r\n Qty: \"14\",\r\n Length: \"\",\r\n Use: \"Downpipe Fix\",\r\n UnitPrice: 4.9459540032000007,\r\n TotalPrice: 69.243356044800009,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 1.7549000000000001,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"9.74\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"14 (Downpipe Fix)\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: null,\r\n deleted: true,\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"TS1016100B8\",\r\n Desc: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"10 (Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHBF1016N**100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 22,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"10 (Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"Beam Fix\",\r\n UnitPrice: 14.579812235520002,\r\n TotalPrice: 145.7981223552,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString: \"10 (Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Qty: \"12\",\r\n Length: \"\",\r\n Use: \"Area 1-CON1 Fix\",\r\n UnitPrice: 14.579812235520002,\r\n TotalPrice: 174.95774682624003,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 5.173140000000001,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"4.746\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"10 (Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 28,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 14.579812235520002,\r\n TotalPriceLastCalculated: 14.579812235520002,\r\n TotalePriceLastCalculated: 4.746,\r\n TotalCostBaseLastCalculated: 6.0749217648000009,\r\n },\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: \"BASE_COLOUR_REF=Area.PostColour\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK16565G\",\r\n Fielders_Code: \"SHBF1016N**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1016100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK16565G Part (For Post)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK215865\",\r\n Fielders_Code: \"SHBF1016N**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1016100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK215865 Part (For Fascia Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 16,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK2215865\",\r\n Fielders_Code: \"SHBF1016N**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1016100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK2215865 Part (For Left Intermediate Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 8,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 28,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"TS1220100B8P\",\r\n Desc: \"BF 12-14X20 H/H Screw No Neo B8 Plain (Pkt 100)\",\r\n Use: \"\",\r\n Colour: \"Plain\",\r\n Area: \"1\",\r\n Qty: \"4 (BK1 Fix)|8 (Area 1-BK215865 Fix)|8 (Area 1-BK2215865 Fix)|10 (Area 1-Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHBF1220N100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=TS1220CS',\r\n Children: null,\r\n \"Parent Item\": \"BK16565G\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n 1: null,\r\n 2: null,\r\n 3: null,\r\n 4: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 42,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString:\r\n \"4 (BK1 Fix)|8 (Area 1-BK215865 Fix)|8 (Area 1-BK2215865 Fix)|10 (Area 1-Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"BK1 Fix\",\r\n UnitPrice: 10.75207392,\r\n TotalPrice: 43.00829568,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString:\r\n \"4 (BK1 Fix)|8 (Area 1-BK215865 Fix)|8 (Area 1-BK2215865 Fix)|10 (Area 1-Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"Area 1-BK215865 Fix\",\r\n UnitPrice: 10.75207392,\r\n TotalPrice: 86.01659136,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString:\r\n \"4 (BK1 Fix)|8 (Area 1-BK215865 Fix)|8 (Area 1-BK2215865 Fix)|10 (Area 1-Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"Area 1-BK2215865 Fix\",\r\n UnitPrice: 10.75207392,\r\n TotalPrice: 86.01659136,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString:\r\n \"4 (BK1 Fix)|8 (Area 1-BK215865 Fix)|8 (Area 1-BK2215865 Fix)|10 (Area 1-Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"Area 1-Beam Fix\",\r\n UnitPrice: 10.75207392,\r\n TotalPrice: 107.52073920000001,\r\n CuttingData: null,\r\n },\r\n {\r\n QtyString:\r\n \"4 (BK1 Fix)|8 (Area 1-BK215865 Fix)|8 (Area 1-BK2215865 Fix)|10 (Area 1-Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n Qty: \"12\",\r\n Length: \"\",\r\n Use: \"Area 1-CON1 Fix\",\r\n UnitPrice: 10.75207392,\r\n TotalPrice: 129.02488704,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 3.8150000000000004,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"3.621\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString:\r\n \"4 (BK1 Fix)|8 (Area 1-BK215865 Fix)|8 (Area 1-BK2215865 Fix)|10 (Area 1-Beam Fix)|12 (Area 1-CON1 Fix)\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 10.75207392,\r\n TotalPriceLastCalculated: 10.75207392,\r\n TotalePriceLastCalculated: 3.621,\r\n TotalCostBaseLastCalculated: 4.4800308000000006,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"HARDWARE\",\r\n Code: \"TS1245B8100\",\r\n Desc: \"BF 12-14X51 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"20 (Barge Capping Fix)\",\r\n Length: \"\",\r\n CodeBase: \"MSJ\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SHBF1251**100\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"100\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: '**=Plain Desc=\"12x45mm Screw(s)\" AltIndex=TS1245',\r\n Children: null,\r\n \"Parent Item\": \"SS50USB\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 20,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"20 (Barge Capping Fix)\",\r\n Qty: \"20\",\r\n Length: \"\",\r\n Use: \"Barge Capping Fix\",\r\n UnitPrice: 29.697228167040002,\r\n TotalPrice: 593.94456334080007,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 10.537030000000002,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"9.667\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"20 (Barge Capping Fix)\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 29.697228167040002,\r\n TotalPriceLastCalculated: 29.697228167040002,\r\n TotalePriceLastCalculated: 9.667,\r\n TotalCostBaseLastCalculated: 12.373845069600002,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Miscellaneous Items\",\r\n Code: \"CPACK\",\r\n Desc: \"Centenary Packing And Instructions\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"CPACK\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNPI\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"$$=0.01\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0.01,\r\n TotalPrice: 0.01,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 0.001,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"0.001\",\r\n PricingOverride: \"0.01\",\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 0.01,\r\n TotalPriceLastCalculated: 0.01,\r\n TotalePriceLastCalculated: 0.001,\r\n TotalCostBaseLastCalculated: 0.01,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Miscellaneous Items\",\r\n Code: \"SILC\",\r\n Desc: \"300G Silicone Sealant Clear\",\r\n Use: \"\",\r\n Colour: \"Clear\",\r\n Area: \"\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: \"SILC\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SEALCL\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 8.99059392,\r\n TotalPrice: 8.99059392,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 3.19,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"2.8\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 8.99059392,\r\n TotalPriceLastCalculated: 8.99059392,\r\n TotalePriceLastCalculated: 2.8,\r\n TotalCostBaseLastCalculated: 3.7460808,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Miscellaneous Items\",\r\n Code: \"CBBS65\",\r\n Desc: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n Use: \"\",\r\n Colour: \"Surfmist\",\r\n Area: \"1\",\r\n Qty: \"3 (For Post)\",\r\n Length: \"\",\r\n CodeBase: \"CBBS65\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"CNBBPS6565H**\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 3,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"3 (For Post)\",\r\n Qty: \"3\",\r\n Length: \"\",\r\n Use: \"For Post\",\r\n UnitPrice: 15.3601056,\r\n TotalPrice: 46.080316800000006,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 5.45,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"14.08\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"3 (For Post)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 15.3601056,\r\n TotalPriceLastCalculated: 46.080316800000006,\r\n TotalePriceLastCalculated: 42.24,\r\n TotalCostBaseLastCalculated: 19.200132,\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Add: true,\r\n Category: \"Miscellaneous Items\",\r\n Code: \"SSVS\",\r\n Desc: \"Bondor Solarspan Vermin Strip (VS2500)\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"2 (Solarspan Vermin Strip)\",\r\n Length: \"\",\r\n CodeBase: \"SSVS\",\r\n CodeAppend: \"\",\r\n DescAppend: \"\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"SSVS\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: \"\",\r\n PromptCodes: \"\",\r\n Children: null,\r\n \"Parent Item\": \"SSIP50\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 2,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"2 (Solarspan Vermin Strip)\",\r\n Qty: \"2\",\r\n Length: \"\",\r\n Use: \"Solarspan Vermin Strip\",\r\n UnitPrice: 5.636736,\r\n TotalPrice: 11.273472,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 2,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"2.001\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"2 (Solarspan Vermin Strip)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: null,\r\n Image_b64: \"\",\r\n deleted: true,\r\n },\r\n {\r\n Add: null,\r\n Category: \"Miscellaneous Items\",\r\n Code: \"BSUC\",\r\n Desc: \"Bondor Delivery Charge - Metro Only\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: null,\r\n Qty: \"1\",\r\n Length: \"\",\r\n CodeBase: null,\r\n CodeAppend: null,\r\n DescAppend: \"\",\r\n \"CL ID\": null,\r\n Fielders_Code: \"BSUCHRG\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"EA\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Children: null,\r\n \"Parent Item\": null,\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"1\",\r\n Qty: \"1\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 450,\r\n TotalPrice: 450,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 450,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"300\",\r\n PricingOverride: \"450\",\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n LinkedItemsData: {\r\n Items: [],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n matched_state: null,\r\n Image_b64: \"\",\r\n deleted: true,\r\n },\r\n {\r\n Add: true,\r\n Category: \"Gutters & Accessories\",\r\n Code: \"REFLDG\",\r\n Desc: \"Refold Gutter Fee\",\r\n Use: \"\",\r\n Colour: \"\",\r\n Area: \"1\",\r\n Qty: \"1 x 4400 (Return fold for FG)\",\r\n Length: \"4400\",\r\n CodeBase: \"FGR\",\r\n CodeAppend: \"\",\r\n DescAppend: \" (Return)\",\r\n \"CL ID\": \"0\",\r\n Fielders_Code: \"REFLDG\",\r\n \"CL DATA\": {\r\n 0: null,\r\n },\r\n \"CL HEADERS\": null,\r\n Locked: false,\r\n SubTotalCost: null,\r\n UnitCost: null,\r\n Unit: \"LM\",\r\n MarkupFactor: null,\r\n AncillaryParts: null,\r\n PromptCodes: null,\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: null,\r\n CuttingData: {\r\n 0: null,\r\n },\r\n ProductListItem: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4400,\r\n Table: [\r\n {\r\n QtyString: \"1 x 4400 (Return fold for FG)\",\r\n Qty: \"1\",\r\n Length: \"4400\",\r\n Use: \"Return fold for FG\",\r\n UnitPrice: 6.14404224,\r\n TotalPrice: 27.033785856,\r\n CuttingData: null,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 2.18,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"2.18\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"1 x 4400 (Return fold for FG)\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 1,\r\n LinkedLength: 4400,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty\",\r\n Qty: \"1\",\r\n Length: \"4400\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"1 x 4400\",\r\n UnitPriceLastCalculated: 6.14404224,\r\n TotalPriceLastCalculated: 54.067571712,\r\n TotalePriceLastCalculated: 19.184,\r\n TotalCostBaseLastCalculated: 22.528154880000002,\r\n },\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"REFLDG\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"REFLDG\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty\",\r\n Desc: \"Refold Gutter Fee\",\r\n Length: \"4400\",\r\n PromptCodes: \"\",\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"LM\",\r\n SubTotalCost: null,\r\n Use: \"Refold Gutter Fee\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4400,\r\n Table: [\r\n {\r\n QtyString: \"=Qty\",\r\n Qty: \"1\",\r\n Length: \"4400\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 1,\r\n AreasAllTheSame: true,\r\n TotalLength: 4400,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty\",\r\n Qty: \"1\",\r\n Length: \"4400\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"1 x 4400\",\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"SSIP50\",\r\n Fielders_Code: \"SHBF14125A150\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SSTS14125\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"BF 14-14X125 H/H Screw + Neo CL4 (Pkt 150)\",\r\n Length: \"0\",\r\n PromptCodes: 'AltIndex=\"SSTS14125_1,TS14135P\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"150\",\r\n SubTotalCost: null,\r\n Use: \"Solarspan Roof Fix\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 89.1838,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"1.15\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"150\",\r\n UnitPackingSize: 150,\r\n LinkedQty: 40,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n Qty: \"40\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 251.3527680384,\r\n TotalPriceLastCalculated: 251.3527680384,\r\n TotalePriceLastCalculated: 1.15,\r\n TotalCostBaseLastCalculated: 104.73032001600001,\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n deleted: false,\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"SSIP50\",\r\n Fielders_Code: \"SHBF14125A150\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SSTS14125\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n Desc: \"BF 14-14X125 H/H Screw + Neo CL4 (Pkt 150)\",\r\n Length: \"\",\r\n PromptCodes: 'AltIndex=\"SSTS14125_1,TS14135P\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"150\",\r\n SubTotalCost: null,\r\n Use: \"Solarspan Roof Fix\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 40,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n Qty: \"40\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n FixedItemLength: null,\r\n Unit: \"150\",\r\n UnitPackingSize: 150,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n deleted: false,\r\n },\r\n ],\r\n TotalQty: 40,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=((Area.NumInternalPurlins+2)*5)*Qty\",\r\n Qty: \"40\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"no_match\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"SS50BC12SM\",\r\n Fielders_Code: \"PDCBKC\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"POWBCR\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"Powder Coating Back Channel P/M\",\r\n Length: \"0\",\r\n PromptCodes: 'PCP Desc=\"P/Coat\"',\r\n DescAppend: \"\",\r\n Category: \"Miscellaneous Items\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"LM\",\r\n SubTotalCost: null,\r\n Use: \"SS50BC12SM Part (Back Channel)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 4,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"9.2501\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 0.5,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n deleted: true,\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"SS50BC12SM\",\r\n Fielders_Code: \"PDCBKC\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"POWBCR\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty\",\r\n Desc: \"Powder Coating Back Channel P/M\",\r\n Length: \"4000\",\r\n PromptCodes: 'PCP Desc=\"P/Coat\"',\r\n DescAppend: \"\",\r\n Category: \"Miscellaneous Items\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"LM\",\r\n SubTotalCost: null,\r\n Use: \"SS50BC12SM Part (Back Channel)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"\",\r\n QtyCalculated: {\r\n Qty: 1,\r\n Length: 4000,\r\n Table: [\r\n {\r\n QtyString: \"=Qty\",\r\n Qty: \"1\",\r\n Length: \"4000\",\r\n Use: \"Back Channel\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty\",\r\n FixedItemLength: null,\r\n Unit: \"LM\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n deleted: true,\r\n },\r\n ],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: null,\r\n },\r\n {\r\n Children: [\r\n {\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=BASE_COLOUR_REF=Plain\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TSW1016B8100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"SCTF Part (TLGCL Part (Solarspan Gutter Clip))\",\r\n Colour: \"Plain\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 3,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"CTSC\",\r\n AncillaryParts: \"2xTSW1016B8100\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SCTF\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*1\",\r\n Desc: \"Custom Timber (Suspension) Clip\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"Timber Susp. Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"TLGCL Part (Solarspan Gutter Clip)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 2,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Galvanised\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"TL5HRGCGA\",\r\n AncillaryParts: \"1xSCTF\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TLGCL\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"Tl-5/Hi-Rib Gutter Clip Galv\",\r\n Length: \"0\",\r\n PromptCodes: 'Desc=\"Gutter Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Solarspan Gutter Clip\",\r\n Colour: \"Galvanised\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 0.113,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"0.113\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 5,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=(Length/1000)\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 0.31847558400000003,\r\n TotalPriceLastCalculated: 1.5923779200000001,\r\n TotalePriceLastCalculated: 0.56500000000000006,\r\n TotalCostBaseLastCalculated: 0.6634908,\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: [\r\n {\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=BASE_COLOUR_REF=Plain\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TSW1016B8100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"SCTF Part (TLGCL Part (Solarspan Gutter Clip))\",\r\n Colour: \"Plain\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 10,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 3,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"CTSC\",\r\n AncillaryParts: \"2xTSW1016B8100\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SCTF\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*1\",\r\n Desc: \"Custom Timber (Suspension) Clip\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"Timber Susp. Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"TLGCL Part (Solarspan Gutter Clip)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 2,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Galvanised\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"TL5HRGCGA\",\r\n AncillaryParts: \"1xSCTF\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TLGCL\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=(Length/1000)\",\r\n Desc: \"Tl-5/Hi-Rib Gutter Clip Galv\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"Gutter Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Solarspan Gutter Clip\",\r\n Colour: \"Galvanised\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=(Length/1000)\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=(Length/1000)\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 5,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=(Length/1000)\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n },\r\n {\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=BASE_COLOUR_REF=Plain\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TSW1016B8100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"SCTF Part (TLGCL Part (Solarspan Gutter Clip))\",\r\n Colour: \"Plain\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 3,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"CTSC\",\r\n AncillaryParts: \"2xTSW1016B8100\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SCTF\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"Custom Timber (Suspension) Clip\",\r\n Length: \"0\",\r\n PromptCodes: 'Desc=\"Timber Susp. Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"TLGCL Part (Solarspan Gutter Clip)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 0.206,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"0.213\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 5,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 0.580583808,\r\n TotalPriceLastCalculated: 2.90291904,\r\n TotalePriceLastCalculated: 1.065,\r\n TotalCostBaseLastCalculated: 1.2095496,\r\n },\r\n level: 2,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=BASE_COLOUR_REF=Plain\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TSW1016B8100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"SCTF Part (TLGCL Part (Solarspan Gutter Clip))\",\r\n Colour: \"Plain\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 10,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 3,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"CTSC\",\r\n AncillaryParts: \"2xTSW1016B8100\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"SCTF\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*1\",\r\n Desc: \"Custom Timber (Suspension) Clip\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"Timber Susp. Clip\"',\r\n DescAppend: \"\",\r\n Category: \"Gutters & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"TLGCL Part (Solarspan Gutter Clip)\",\r\n Colour: \"\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 2,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 5,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=BASE_COLOUR_REF=Plain\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TSW1016B8100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Length: \"0\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"SCTF Part (TLGCL Part (Solarspan Gutter Clip))\",\r\n Colour: \"Plain\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 6.3765,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"4.746\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 10,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 17.971323552,\r\n TotalPriceLastCalculated: 17.971323552,\r\n TotalePriceLastCalculated: 4.746,\r\n TotalCostBaseLastCalculated: 7.48805148,\r\n },\r\n level: 3,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=GalvanisedBASE_COLOUR_REF=BASE_COLOUR_REF=Plain\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"FGR\",\r\n Fielders_Code: \"SWBF1016N100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TSW1016B8100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*2\",\r\n Desc: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"SCTF Part (TLGCL Part (Solarspan Gutter Clip))\",\r\n Colour: \"Plain\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 10,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*2\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 3,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 10,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*2\",\r\n Qty: \"10\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"DP75ROUND_INTERNAL\",\r\n Fielders_Code: \"DPBR75ZLF\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"ST75Z\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"75mm Rnd Downpipe Strap Zincalume\",\r\n Length: \"0\",\r\n PromptCodes: 'Desc=\"D/P Strap\"',\r\n DescAppend: \"\",\r\n Category: \"Downpipes & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"PVC75 Part\",\r\n Colour: \"Zincalume\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 0.41,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"6.20\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: \"1\",\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 4,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 1.15553088,\r\n TotalPriceLastCalculated: 4.62212352,\r\n TotalePriceLastCalculated: 24.8,\r\n TotalCostBaseLastCalculated: 1.9258848,\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"DP75ROUND_INTERNAL\",\r\n Fielders_Code: \"DPBR75ZLF\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"ST75Z\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"75mm Rnd Downpipe Strap Zincalume\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"D/P Strap\"',\r\n DescAppend: \"\",\r\n Category: \"Downpipes & Accessories\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"PVC75 Part\",\r\n Colour: \"Zincalume\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 4,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"PVC75\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"PO75Z\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"0\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"PO75Z Part\",\r\n Colour: \"Zincalume\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 1.7549000000000001,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"9.74\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n deleted: true,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"PVC75\",\r\n ExtraData: \"BASE_COLOUR_REF=\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"PO75Z\",\r\n Fielders_Code: \"RIVETBF43**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"RI43100\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*8\",\r\n Desc: \"Rivet 4-3 (Pkt 100) **\",\r\n Length: \"\",\r\n PromptCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"PO75Z Part\",\r\n Colour: \"Zincalume\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 8,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*8\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*8\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n deleted: true,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 0,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: null,\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: \"BASE_COLOUR_REF=Area.PostColour\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK16565G\",\r\n Fielders_Code: \"SHBF1220**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1220100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Length: \"0\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK16565G Part (For Post)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 4.78292,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"5.838\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 28,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 13.480028674559998,\r\n TotalPriceLastCalculated: 13.480028674559998,\r\n TotalePriceLastCalculated: 5.838,\r\n TotalCostBaseLastCalculated: 5.6166786144,\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB656575\",\r\n ExtraData: \"BASE_COLOUR_REF=Area.PostColour\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK16565G\",\r\n Fielders_Code: \"SHBF1220**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1220100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK16565G Part (For Post)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 4,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK215865\",\r\n Fielders_Code: \"SHBF1220**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1220100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK215865 Part (For Fascia Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 16,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"BB158\",\r\n ExtraData: \"BASE_COLOUR_REF=Surfmist\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK2215865\",\r\n Fielders_Code: \"SHBF1220**100\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"TS1220100B8\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*4\",\r\n Desc: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"100\",\r\n SubTotalCost: null,\r\n Use: \"BK2215865 Part (For Left Intermediate Beam)\",\r\n Colour: \"Surfmist\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 8,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*4\",\r\n FixedItemLength: null,\r\n Unit: \"100\",\r\n UnitPackingSize: 100,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 28,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"4\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"16\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n {\r\n QtyString: \"=Qty*4\",\r\n Qty: \"8\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK26DEG\",\r\n Fielders_Code: \"BNW1060ZP\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"BNW1060Z\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"Cen Bolt Nut Washer (Zinc) 10X60\",\r\n Length: \"0\",\r\n PromptCodes: 'Desc=\"10x60mm Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Rafter Bracket Fix (Rafter Bracket)\",\r\n Colour: \"Zinc\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 0.17767000000000002,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"2.35\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 15,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*3\",\r\n Qty: \"15\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 0.50073944256,\r\n TotalPriceLastCalculated: 7.5110916384,\r\n TotalePriceLastCalculated: 35.25,\r\n TotalCostBaseLastCalculated: 3.1296215160000003,\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK26DEG\",\r\n Fielders_Code: \"BNW1060ZP\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"BNW1060Z\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*3\",\r\n Desc: \"Cen Bolt Nut Washer (Zinc) 10X60\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x60mm Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Rafter Bracket Fix (Rafter Bracket)\",\r\n Colour: \"Zinc\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 15,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*3\",\r\n Qty: \"15\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*3\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 15,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*3\",\r\n Qty: \"15\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n },\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK26DEG\",\r\n Fielders_Code: \"BNWHH1020ZP\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"BNW1020\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"0\",\r\n Desc: \"M10X20 G4.60 H/H Zinc (BNW)\",\r\n Length: \"0\",\r\n PromptCodes: 'Desc=\"10x20mm Hex Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Metal Fascia Fix (Rafter Bracket)\",\r\n Colour: \"Zinc\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 0,\r\n Length: 0,\r\n Table: [],\r\n Pricing: {\r\n BasePrice: 0.145406,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n ePricing: \"0.57\",\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1.09,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"0\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 5,\r\n LinkedLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n UnitPriceLastCalculated: 0.409807617408,\r\n TotalPriceLastCalculated: 2.04903808704,\r\n TotalePriceLastCalculated: 2.8499999999999996,\r\n TotalCostBaseLastCalculated: 0.8537658696,\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n LinkedItemsData: {\r\n Items: [\r\n {\r\n Children: null,\r\n \"Parent Item\": \"\",\r\n ExtraData: \"BASE_COLOUR_REF=Zinc\",\r\n \"CL HEADERS\": \"\",\r\n CodeBase: \"BK26DEG\",\r\n Fielders_Code: \"BNWHH1020ZP\",\r\n AncillaryParts: \"\",\r\n \"CL DATA\": \"\",\r\n MarkupFactor: null,\r\n Code: \"BNW1020\",\r\n UnitCost: null,\r\n CodeAppend: \"\",\r\n Qty: \"=Qty*1\",\r\n Desc: \"M10X20 G4.60 H/H Zinc (BNW)\",\r\n Length: \"\",\r\n PromptCodes: 'Desc=\"10x20mm Hex Bolt(s)\"',\r\n DescAppend: \"\",\r\n Category: \"HARDWARE\",\r\n Locked: false,\r\n \"CL ID\": \"0\",\r\n Unit: \"EA\",\r\n SubTotalCost: null,\r\n Use: \"Metal Fascia Fix (Rafter Bracket)\",\r\n Colour: \"Zinc\",\r\n Add: true,\r\n Area: \"1\",\r\n QtyCalculated: {\r\n Qty: 5,\r\n Length: 0,\r\n Table: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n Pricing: {\r\n BasePrice: 99999,\r\n AreaMarkupFactor: 1.17432,\r\n PromotionFactor: 1,\r\n PricingOverride: null,\r\n ItemMarkupFactor: 1,\r\n FieldersMarkup: 2.4,\r\n },\r\n QtyString: \"=Qty*1\",\r\n FixedItemLength: null,\r\n Unit: \"EA\",\r\n UnitPackingSize: 1,\r\n LinkedQty: 0,\r\n LinkedLength: 0,\r\n LinkedTable: [],\r\n LinkedSummary: \"\",\r\n },\r\n level: 1,\r\n ProductListItem: \"\",\r\n Image_b64: \"\",\r\n },\r\n ],\r\n TotalQty: 5,\r\n AreasAllTheSame: true,\r\n TotalLength: 0,\r\n LinkedTable: [\r\n {\r\n QtyString: \"=Qty*1\",\r\n Qty: \"5\",\r\n Length: \"\",\r\n Use: \"\",\r\n UnitPrice: 0,\r\n TotalPrice: 0,\r\n },\r\n ],\r\n LinkedSummary: \"\",\r\n ChildContainer: true,\r\n },\r\n matched_state: \"perfect_match qty_matched\",\r\n },\r\n ],\r\n total_price: 2190.6084988695811,\r\n cost_base: 912.75937452899211,\r\n price_error_summary:\r\n \"- Insulated panel deliveries may incur extra charges. Any additional delivery charges will be passed on, if applicable. Please contact the Fielders Branch when in doubt.\\r\\n\",\r\n total_eprice: 3118.0933200000013,\r\n};\r\n\r\nexport const product_database = {\r\n data: [\r\n {\r\n DT_RowId: \"row_2\",\r\n id: \"2\",\r\n ProductCode: \"BN10120**\",\r\n ProductDescription: \"Cen Bolt Nut G4.6 10X120 **\",\r\n ProductIndex: \"10X120\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824060\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.5295\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.094\",\r\n PromptTextCodes: 'Desc=\"10x120mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"3.91\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_3\",\r\n id: \"3\",\r\n ProductCode: \"BN10170**\",\r\n ProductDescription: \"Cen Bolt Nut G4.6 10X170 **\",\r\n ProductIndex: \"10X170\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824061\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.7385\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.12\",\r\n PromptTextCodes: 'Desc=\"10x170mm Bolt(s)\" AltIndex=CBNW10150G',\r\n Colours: \"\",\r\n LiveCost: \"4.79\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_4\",\r\n id: \"4\",\r\n ProductCode: \"BNW1050ZP\",\r\n ProductDescription: \"Cen Bolt Nut Washer 10X50 Zinc Plated\",\r\n ProductIndex: \"10X50P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824258\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.133\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.052\",\r\n PromptTextCodes: 'Desc=\"10x50mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"1.10\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_5\",\r\n id: \"5\",\r\n ProductCode: \"BN1090**\",\r\n ProductDescription: \"Cen Bolt Nut G4.6 10X90 **\",\r\n ProductIndex: \"10X90\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824063\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2402\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.076\",\r\n PromptTextCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"1.89\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_6\",\r\n id: \"6\",\r\n ProductCode: \"PVCDA656590R\",\r\n ProductDescription: \"90mm to 65X65 Adaptor PVC\",\r\n ProductIndex: \"90-656\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"803069\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.04\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.076\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.18\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_7\",\r\n id: \"7\",\r\n ProductCode: \"CNAFS2412DG\",\r\n ProductDescription: \"2440 X 1220 6.0mm Acrylic Flat Sheet Dark Grey\",\r\n ProductIndex: \"AFS24126\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"400010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"145\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"21.25\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Dark Grey\",\r\n LiveCost: \"120\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_8\",\r\n id: \"8\",\r\n ProductCode: \"CNAFS2412CL\",\r\n ProductDescription: \"2440 X 1220 6.0mm Acrylic Flat Sheet Clear\",\r\n ProductIndex: \"AFS24126CL\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"400010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"240\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"21.25\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Clear\",\r\n LiveCost: \"100\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_9\",\r\n id: \"9\",\r\n ProductCode: \"ACU503216SM65\",\r\n ProductDescription: \"Bondor Aluminium U Channel 50X32X1.6 6500LM Offwhite\",\r\n ProductIndex: \"BAUCOW\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"490005\",\r\n SellingUOM: \"EA\",\r\n Cost: \"42.18\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5\",\r\n PromptTextCodes: \"Length=7500\",\r\n Colours: \"White\",\r\n LiveCost: \"45.78\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_10\",\r\n id: \"10\",\r\n ProductCode: \"CBB9510865H**\",\r\n ProductDescription: \"Cen Box Beam 108 X 65 X 0.95BMT **\",\r\n ProductIndex: \"BB108\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"367\",\r\n SubGroup: \"195108\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.3265\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.7522\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Classic Cream,\\nGully,\\nMangrove,\\nMonument,\\nPaperbark,\\nSurfmist,\\nWallaby,\\nWoodland Grey\",\r\n LiveCost: \"48.53\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_11\",\r\n id: \"11\",\r\n ProductCode: \"CBB9515865H**\",\r\n ProductDescription: \"Cen Box Beam 158 X 65 X 0.95BMT **\",\r\n ProductIndex: \"BB158\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"367\",\r\n SubGroup: \"195158\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.2469\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4.5248\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Classic Cream,\\nGully,\\nMangrove,\\nMonument,\\nPaperbark,\\nSurfmist,\\nWallaby,\\nWoodland Grey\",\r\n LiveCost: \"58.41\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_12\",\r\n id: \"12\",\r\n ProductCode: \"CBB9520865H**\",\r\n ProductDescription: \"Cen Box Beam 208 X 65 X 0.95BMT **\",\r\n ProductIndex: \"BB208\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"367\",\r\n SubGroup: \"195208\",\r\n SellingUOM: \"LM\",\r\n Cost: \"13.1513\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5.291\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Classic Cream,\\nGully,\\nMangrove,\\nMonument,\\nPaperbark,\\nSurfmist,\\nWallaby,\\nWoodland Grey\",\r\n LiveCost: \"68.57\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_663\",\r\n id: \"663\",\r\n ProductCode: \"CNBK215865CONGA\",\r\n ProductDescription: \"Cen BK2 15865 Galvanised\",\r\n ProductIndex: \"BK215865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"102031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.00\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.202\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.34\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_13\",\r\n id: \"13\",\r\n ProductCode: \"CBB956565H**\",\r\n ProductDescription: \"Cen Box Beam 65 X 65 X 0.95BMT **\",\r\n ProductIndex: \"BB656575\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"367\",\r\n SubGroup: \"195650\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7.6596\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.0816\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Classic Cream,\\nGully,\\nMangrove,\\nMonument,\\nPaperbark,\\nSurfmist,\\nWallaby,\\nWoodland Grey\",\r\n LiveCost: \"28.76\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_14\",\r\n id: \"14\",\r\n ProductCode: \"BKCTL530GA7500\",\r\n ProductDescription: \"7500LM 30mm Back Channel Tl-5 Galv Powder Coated\",\r\n ProductIndex: \"BC3075G\",\r\n GroupingName: \"Back Channel\",\r\n ProductGroup: \"848\",\r\n SubGroup: \"309526\",\r\n SellingUOM: \"EA\",\r\n Cost: \"11.1379\",\r\n MfgLocations: \"500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"8.01\",\r\n PromptTextCodes: \"PC/G Length=7500 AltIndex=BC30_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"61.67\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"POWBCR\",\\n \"Length\":7500},\\n {\"Code\":\"BI3599\"},\\n {\"Code\":\"RI43100\",\\n \"Qty\":\"50\"}\\n]}\\n',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_15\",\r\n id: \"15\",\r\n ProductCode: \"BKCCDK50H**7500\",\r\n ProductDescription: \"7500LM 50mm Back Channel **\",\r\n ProductIndex: \"BC5075\",\r\n GroupingName: \"Back Channel\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"309511\",\r\n SellingUOM: \"EA\",\r\n Cost: \"19.5151\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"7.9275\",\r\n PromptTextCodes: \"Length=7500 AltIndex=BC50_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"86.11\",\r\n AncillaryParts: \"1xBI5599(Back Channel Insert) 50xRI43100(Back Channel Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_16\",\r\n id: \"16\",\r\n ProductCode: \"BKCCDK50GA7500\",\r\n ProductDescription: \"7500LM 50mm Back Channel Galv\",\r\n ProductIndex: \"BC5075G\",\r\n GroupingName: \"Back Channel\",\r\n ProductGroup: \"848\",\r\n SubGroup: \"309511\",\r\n SellingUOM: \"EA\",\r\n Cost: \"15.2905\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"10.0305\",\r\n PromptTextCodes: \"Length=7500\",\r\n Colours: \"\",\r\n LiveCost: \"63.15\",\r\n AncillaryParts: \"1xBI5599(Back Channel Insert) 50xRI43100(Back Channel Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_17\",\r\n id: \"17\",\r\n ProductCode: \"BKCSRB25GA7500\",\r\n ProductDescription: \"7500LM 25mm Back Channel Corr Powder Coated\",\r\n ProductIndex: \"BCC75G\",\r\n GroupingName: \"Back Channel\",\r\n ProductGroup: \"848\",\r\n SubGroup: \"309536\",\r\n SellingUOM: \"EA\",\r\n Cost: \"11.1379\",\r\n MfgLocations: \"500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"8.01\",\r\n PromptTextCodes: \"PC/G Length=7500 AltIndex=BCC_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"52.60\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"POWBCR\",\\n \"Length\":7500},\\n {\"Code\":\"BI2599\"},\\n {\"Code\":\"RI43100\",\\n \"Qty\":\"50\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_18\",\r\n id: \"18\",\r\n ProductCode: \"TSSRB24**\",\r\n ProductDescription: \"Corr S-Rib Fibreglass 8Oz (2400Gsm) **\",\r\n ProductIndex: \"BCG-8CLEA\",\r\n GroupingName: \"Fibreglass Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"124001\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.44\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"2\",\r\n PromptTextCodes: \"F8\",\r\n Colours: \"Opal\",\r\n LiveCost: \"28.43\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRCAYmADn10AAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAYUExURf///+/v7/f39+fn597e3tbW1s7Ozr29vec5KDgAAAABdFJOUwBA5thmAAADUElEQVR42u2VwXbbNhBFKbkfYBJq1gapDzAwkNaRMUS39SEIb9uSGP5Ayvx+H+Q0UY9TR04W3RSHh9Tmzpt5MwNV1f/nR4+iavfwfeiGqc/M5IZq21RV+ybYeSejDzlykvSwl/dVZ65Et0dyMvmDeB9Wjk9rH3vJ9zdyX1XfirF1hsPgwLrj6vkIPq3jmFaRLomtbsbbV1hPYVZeULKwZ5ldLxJ5WVmWVfJBlqlyJYv2a6wOk/Ihmp3MTE8fHD/9yZxWzuPHuUeAIAFZNHuRuxc5qz47c5yJgjhC0T4skXmZDzPEkX2WjACLfEQK/yzAGX3Ip8KqXh69WyYHzvlfVi4BUhQIjyKSZcXnj0tdbjqOpnYz2b34YrrzAc7xMvWwjVG6JHBc8CTy2wVMdU2z0S77RsmgKGRCgMH5UnVfAoSFRygmiSmjf+8vc25VMGBOug7zmVOUMvl3SLr0vEfmMcUlB+BzkvDFMWdtlx50e5w7u5NTR09T549I2gtm1cF77mUeYyiy0JYLWDW6G01h63YP1sK1GohyvCJAwMBwEA6AOc1nOH6ut2k1+1Yf5qbtZGjtMdMeARRROpcwE2NikDpeRZslP/6t27Y6gHXZtnWYtFHpscOceDJuodJ0T0W4pB77QuL7qVNbbTfpBLa3uoG4sseps4jSeQVNoiIM9x2My1w2pTy/ftnhRjcIoG9/EqNu9x/Idj/jFx3lgaisCfZ0dhhUDDtIRpDPndreVduOoduJb0vVyqLXnelkQtnoOJ8joO6IukHiub8czhYBNnCt3YTYll7XVr3LhqA5AIYmY825NB3yuX+xVgYBdMhIYS9Go1dTXSOMeZ61UjJc5xTdGPmrO0220kYvk6aaslV0Tt2UYeXnljnxPDL966XQhlOLaVm8Jjp3m9Kw8yjAl9yz5+xfuZNwUWDU55pg4e8a7ZbTztNhNiV3yGe2r99nyldbhXxNrcqOP99QuJNDJB7dffXNs6Xebgjr5VUxzZeS0/l9BVxp7E5nDmVgaCfkcDOOniKr2yvg8+mGu0qd0EPl2RxQAQ98LfupAMcWtpOLeE7qTTDopvwXmRF+sbdvg8/nBvWaLjBd49dLfQUHd0xX+/XyuB+BN/ru++H//vwFlbgnU4v3xJ8AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_19\",\r\n id: \"19\",\r\n ProductCode: \"BHS1025ZN\",\r\n ProductDescription: \"M10X25 Button Head Socket Screw \",\r\n ProductIndex: \"BHSS1025SL\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"210802\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.12\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.0254\",\r\n PromptTextCodes: 'Desc=\"10x25mm But/Head Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"0.3328\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_20\",\r\n id: \"20\",\r\n ProductCode: \"ISPE251257600B\",\r\n ProductDescription: \"Foam Closed Cell Polyethylene PE 25X12.5 7600mm Black\",\r\n ProductIndex: \"BI2599\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"699\",\r\n SubGroup: \"851820\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.22\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: 'Length=7600 Desc=\"Channel Foam\" AltIndex=BI2599_INTERNAL',\r\n Colours: \"Black\",\r\n LiveCost: \"18.11\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_21\",\r\n id: \"21\",\r\n ProductCode: \"ISPE351257600B\",\r\n ProductDescription: \"Foam Closed Cell Polyethylene PE 35X12.5 7600mm Black\",\r\n ProductIndex: \"BI3599\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"699\",\r\n SubGroup: \"851830\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.58\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.25\",\r\n PromptTextCodes: 'Length=7600 Desc=\"Channel Foam\" AltIndex=BI3599',\r\n Colours: \"Black\",\r\n LiveCost: \"17.27\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_22\",\r\n id: \"22\",\r\n ProductCode: \"ISPE551257600B\",\r\n ProductDescription: \"Foam Closed Cell Polyethylene PE 55X12.5 7600mm Black\",\r\n ProductIndex: \"BI5599\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"699\",\r\n SubGroup: \"851840\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.66\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.25\",\r\n PromptTextCodes: 'Length=7600 Desc=\"Channel Foam\" AltIndex=\"BI55_INTERNAL,BI5599_INTERNAL\"',\r\n Colours: \"Black\",\r\n LiveCost: \"22.23\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_23\",\r\n id: \"23\",\r\n ProductCode: \"CNBK10108HCL**\",\r\n ProductDescription: \"Cen BK10 10865 DG Hipraft Con Lower **\",\r\n ProductIndex: \"BK1010865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"110021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.8246\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.16\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"3.3283\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJUAAACeBAMAAADJS1W/AAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMDo1NDowOSArMDkzMJwTQyYAAAAHdElNRQfiAxsKGCN6C9aaAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAACpQTFRF////7+/v5+fn1tbWlJSUra2tY2Nje3t7UlJSISEhKSkpQkJCGBgYMTExj7ZxxQAAAAF0Uk5TAEDm2GYAAAYZSURBVHja7doxb9tGGAZgiYraxYOL1JmFOoBXJbbgVUHPoNHCQJvGtUenQ5MfQEC0DW8GSNmanKIFGg+JUaBDNHZQQS9JBLdSzkBbFOhg/5iSPN7dx+ORvI8WMhS9LUT0gPfevaREulab2ZibHfW/pQ5reWaW1Vm7PyPr9qbrrLVnYi1uusee89UsrMUtNwj83tq9G1v15S0/CIKR56y1bmhZnZgKRr5HHt7Msjq9mAqtcJbtm1hWxz0OuOU5n97AihYwEFbBLMutcAE5FVv5syy1FlnqyYis3E1WYtU7KSq2fC+nSsWWpVDM8nM22VwxJaOCluc8xFqNTZVKrJz4C6zFLMWtcJbzGCsuszpGPp/llwhLTT1taWeZY9X1lLR8zSbTW+FeOA6KLY/cN7I0C5ixwlm2DKzbuRS0slXSWOFeCHKHDzD1ep21Opt+YGSFs5wvtnIWUGepVVKset4C6qxwlu18q9HZLqbSlrLJUlb+XsixPOdenlW0gNlNkakStBrrpZRqpWYJreYe3oLXa2jd/RVvwSpB69GwguWTLzSWtX16hbc88lhjNTZouRVkLPtMYy3s0ld463D9mcZaGVSxnI2xxtoa0ucVrP5F1rLWT+kl2vLIucYKo69i2cNpK2Mt7BlZyqY4/JzSrLVyTukUbTmf6aww+ipWn9KuakXR0wnW8si1xmqG0VODja9YdngGO6r18W4VK4qenqlWFL2Jld4UTrj49I1qbZ1GFrZEUfQZq7EeUdgSeXYYPR0rVvOgkhUtfsa6248tZImcKPqMtXJdyYqip9P5lGWx6LGFJPHi07TViE8WW6LwIhF/qpWyFvYqWWzxeYkSa4VFjyyks6GzHrHokSVy+hqLR4+0kujpC2jx6HGF5NHT19Di0eMKyaPnhZxLRY+zouszBRt/Lh09qpA8+pRl2Tx6+g5hEX4GF8BqiugxlifOYAotET2mkJ44gwmwPhTRY0rk7IpPtcB5HVWy5Bl0pXXrQBw1LyS7Pmesxr44Ss3Pyz3VWZYrrasq1gtp1cHhcktsiqHWeioPm5fIkx96Bjq0XcmS2Y+BBZbkubl1rrVW5WHzEuVYSwNMibgF2lLZ4ptCby2gSuQlluzjpCUtcKEotUZez2WWbB5tA8u8kKMeITazQPO64D5kXMiIIsQtsIwLyShiu0oh/4CWWSE9h7ARz7InP/RSWrCQVwYUm6UnrRPwfWLLpJCAimcJCvkWWuWFTKIicpZqiRKrvJAKFc2y3Lo0o8JZerJ5F8Ba6hdbMCo+erDcLWndKb5D6ihi92SLJ8AqLqSWCjFQSGgVFHLkEf2wlRLx7+TgsLJZs6mLgbUKKAKatyMt62lOIX2HGFl/Sqv2RB5+VZ561jqBlraQxRTpyea9AZaukLkLqLHGwNKUqCj1ZFOcG1rlFLH7ekstpO+UUtCKfo9ySy2kZ0ARWxYyKhG3PkjfbY0otZDKcwBWyNIF5ANYXfB8ApTIIPVk7OsteYecmJ5VuPG1FrhDXhpTsEQvwfMcefh3hCWb9xpa4vDP5la6kPI5kzj8SyVrDCzx9XditLXYSBdSWKuD5OA7c4rYA2GdAEvcIRHRQ2sHWOI35D8YSzYP7C9ZyEOMJW6rU9BHWUhE9KDc8PpVu7WP3vUEFPIkZSXd+g1liUI+gBYv5E84K2nepA0t/nsUE70s5OU8tGrs6+8UE31YoqGMHj5zv8buemCdpS3WrR9wFi9kN22xQv6NtAZip0KL/YbERc/vkOxBE7CO8NHzQo4V684R8iIRW6yQfylWXEhk9LyQXdXax0efFDJ52wTeW4XdmiCjT6zUs0deSGz0SSHfZq0hOvrEeqxa9fArKzb6sESnVH22nRQScWvk1rWIPmWdo67PiXWefd8RlXswRVNxuU+y1mofH31cyAdZa+kId60XVjtr3dnDR0/sXXZ9VqzmAT76qNy6d9JNF09FJdK9d2/0wEBYXY1lff1tNHqZUWi5P7Y1Vn05Hivxf9mMh4Hrfj+vseCofxIPpjP3id51v6uVWKkBXXYycRoMd79BWXB8FI9FkEa7spUKInblv/8Tf9P8Pq1/AfmMevh+U5XGAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_24\",\r\n id: \"24\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen Bk10 158X65 DG Hipraft Con Lower Colour Coated (Non Standard) **\",\r\n ProductIndex: \"BK1010865CDNS\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.16\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"2.8246\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_25\",\r\n id: \"25\",\r\n ProductCode: \"CNBK10158HCL**\",\r\n ProductDescription: \"Cen BK10 15865 DG Hipraft Con Lower **\",\r\n ProductIndex: \"BK1015865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"110031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.8246\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.16\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"3.3283\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_26\",\r\n id: \"26\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen Bk10 158X65 Dg Hipraft Con Lower Colour Coated (Non Standard) **\",\r\n ProductIndex: \"BK1015865CDNS\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.16\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"2.8246\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_27\",\r\n id: \"27\",\r\n ProductCode: \"CNBK1065HCL**\",\r\n ProductDescription: \"Cen BK10 6565 DG Hipraft Lower **\",\r\n ProductIndex: \"BK106565\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"110011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.43\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.124\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.21\",\r\n AncillaryParts: \"2xTS1220100B8 2xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_28\",\r\n id: \"28\",\r\n ProductCode: \"CNBK11HCU@@**\",\r\n ProductDescription: \"Cen BK11 @@ Hipraft Upper **\",\r\n ProductIndex: \"BK11\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"111011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.33\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.22\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.13\",\r\n AncillaryParts: \"2xTS1220100B8 2xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUMAAABPBAMAAACDqLr7AAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMDo1NTo1NiArMDkzMM15VpUAAAAHdElNRQfiAxsKGitG5jwqAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5+fnxsbG1tbW7+/v9/f3tbW1oKCgiIiId3d3HBwcAAAASkpKYmJivb29OTk5/kDh2QAAAAF0Uk5TAEDm2GYAAAOrSURBVHja7dm/TttAHAdwJwQWpCoCXiB/yFhFFaJraNMdRVUfIJVIWRlyDFB1wwxduoCr5gVon4B0bytdxFokrKJKhXeoQKl9jmOffef7+c6OTZXv6MTnj3P3+50Nmpb3LGcNmBPnxDkxv8TNQ3zxo9/KK7G0c4itjK2M0HX+iIXeJ+xk7OTuKCllIsRHU59HJMrX+SAu+X0UMSGlInHzDQ5mHMw3xfJRITJ8GF+MGVFSShMbh5gZJtEu8n55lsTCzgHmhUe0ci/XiuITC4HygBMlW1FM4lK0D2MzmmgrT2IWeRziUu8qkje6NHRdP4You2kQmeVL+U51/Qh1q7fIUv4SKWMUOYzYEPhMw/b1q5Pcon2YElTkAGLjINpHphe9rVK5Qfv6QKy8BygFxKj2QqbXNJzpZaQBVIpaURRR0F6waZLl97vKzWNbeSVU3p1cyxBF5Wte6v7lp67sxiO+ivaR6dWR2Ocp30OUe1CioHxJ9+MsP76yZynFDZNZ5EFiYxfQXaKWX4QSgZTfg0qKKGgv8aaXo9QByvt+k0UUtBdnc0N77GvXtUL4YFlbYHz1xlaKF6avFTnEBVF5RE9vzRqiwzrI/rrd1gHKu5M/HnHXME2u0bwULr+KfZesg894Z9yAWtHfs3cu8aluGU1jEIKOSPcTLr86i7geRawKG+bZ5+FweN5yiR1yX0gfUFAyvaHNN4GJppUmh/cF/yRjeEQntwgdDwwb6j5bgRKjXEJKRCsJD4/2prfpEIuB03oIGacq3SVW7FZ0bJKlR368D95HlSkRcLcpx1J+HH7Foy59uJ4jIicesaA+WDppTomLWVMeMLHsbYBPsrZwsu0RV7K2PFhizfekU8wa878Ry9rzLFUVf+02fcQCdTRLYtP/BJdPYsu/HbOJ5WyJtRBm+npFwTMk2tcvCoiK5bJmN9sthc1q3d+kt/3EJHbAWnt7+u4rr2xveQNS79HK24vf56StPmaCxLAvEWWFInbkB6q1tYiUFJQ0sSg5Sv2FJoy0MgHiBsA3UW7JjN+kiPHfXjZaUJ+0kiaW0vXJKcvSxDUpn5PFOMoWRQRveio+Vwlt6wEi6LQ1VZ6bNuRyk84NJ1bash6OUtiKgsTOTH0gZQxiBdz+JJSr/OuuA4lp+py8XAUSmX8cg28faSjdf2zwibPyOSmtxiXKbR/JKoNEX+/mPf3NQulr625Bh4gZ+gJKNjFz3yREGSau1FJpz/LKSoiY38yJc2JesvwPls88Unk3w/sAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_29\",\r\n id: \"29\",\r\n ProductCode: \"CNBK110865FBGA\",\r\n ProductDescription: \"Cen BK1 10865 Galv Con\",\r\n ProductIndex: \"BK110865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"101075\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.64\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.58\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.91\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_30\",\r\n id: \"30\",\r\n ProductCode: \"CNBK115865GA\",\r\n ProductDescription: \"Cen BK1 15865 Galv Con\",\r\n ProductIndex: \"BK115865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"101035\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.73\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1261\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.91\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARcAAACIBAMAAAA/urLFAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyMSBNYXIgMjAxOCAxMjowNDozMCArMDkzMEJpBGIAAAAHdElNRQfiAxsKFxKsTcpvAAAACXBIWXMAAArwAAAK8AFCrDSYAAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f35+fn3t7ezs7OtbW1pKSkkJCQ1tbW7+/vwcHBZmZmPT09MTExKSkpISEh5QP3egAAAAF0Uk5TAEDm2GYAAAVbSURBVHja7Zw9c9tGEIaJVEYqharoSg6VGaq0hoWdMqZmYnV2RMrjzjMm6WEvcCaonLgxK0dspNY2Gf0BDwowtQpA/gOh3Loh6L/gA/ghfN3d7uGAY6G3JDnDZ3Zf7O4tBiiVbpWv9L2fVCOspA0PWy+3VFMsVK63TPtyRzWGL6026trul6+bAHN6eGxOrubzDYCp7I5Mm6BsAAwxbteefJlvAkz5TSvI0AbAEOP2iXHnmwBDMmROPs/nGwCj18dL4yqH0aoHa+OqhjkdhIyrFqYSNa5KmHBpUQ1T8Xvi1Xy+ATBa7SA9LMXDaKnGVQOj14lxaSjFwlCNqwDG74mMsBQJQ4ybVlqUwAwHx3TjFgtT8XuiO+epCBityjFugTCnb1r8DBUDQ+mJKmBIaQEYtxgYoHGLgEkb5lTBlAdQ4+YOE/REoHFzhtGCUwgOJS8Y+jBXOAxrmCsaZog2bm4wpLSgjZsXzFAwQxlhTu8lP+MPc7nAlOvNzv3YZ/piMyfMIggTLAQnT6KfoXqiNJjV4edFJCwZjJsBprIq9BGYOwIVNzOMdubPkEE2IjA/mv9lRMHDhK+XGMzngmGi14tamNj1ohKm7F8v4UtXHUxKK5YNc315H8bil5Z4oZcL47m2dfQQcMep8iBthpQJ400dq9/v936/x0FZzJDJQi8R5tq1+4GMo7+YwaG2YmkwnhuEZaH2xUOGcamtWBbM1LH7IRm9R+9oGaK3YjkwJENWP6rOxzQjs4+nMmCWxo2rnTCyVmMffiTArI0bl/E8amTuDJkZxktmKBSci5tc6Q9GvNE6K0zMuMngPPqHb1w5MNQMhYx8tL+1vP/OHWezwFCMGw9O+2Kvxs1QVhhOhsK5Ak75wjBM48YFnPIFYTxwWHwU6JQvBgMw7lqI46kIDMy42LCIwWAyhDueomGYxrWJQt9iFwhYGGaGbPJlp9MRyZAADMe4rvFh7/yczJT4DKFhuKXl03Kg+qUPLi2iMHzj9oIerQWbL5G9ChgGVHGbF/s/V8U3X0AYaGkx2s2m+EIQBpNfaUHDeFNUTxRFAcHk0hPFYHLqiSIwuJ6YcTfJgbkuxrgQGNQwZ06yojBhMMbNGQZj3JxhUKUlZxhchnKF8ZAZkgXjPUnCYEqLTBjv8nUchllaTLqTMsM41tNSFOaKVVpMMm7nFZmZ1YstkO+YNsstE8d43mg0Rl3pMJ5jvI8v3bR/mW6xXwW7Fn23Kxlmah2lrCPvdlkwJ28Dem04lgrjOSepK35tt8WiaX/cPz+vDtJYxGEc6w/aCrt8wAqOP+K20n8gCEOMu1OiSquN+yISg3GMxyWm9EGrIJip9exdiadtZq5kwXj2CejeFMfIUmAc6z30UagfDpHBQcJMrZf8DN0E52yEwkHBkNLyGI4S4PyKyRUGxrGe4R9WKyOMDIeZ2X/y7htmM7INhknriVBVBoDg+KMFEAZn3ISGXCObrtVrdCEw0NJCl17n5Mr8RP7hGADjWh+yP2VZ5hSdp1sQmJnV3smM4ovdPduNv/e4aeL2RLgqg2MWTqfJMTCoJ8I1ZBcdJkx248alMY3MgkH0RESuGEamw5DSIlRxucEZjrAw+J4IF3UMpMC4co0bF6V7psKQnijZuHFptRYQxjEkVFxucFK6ZxJmavXyzNCNkkUnDkOM+zr7/8CU6J4xmP/p58Q8tB0tOhGYmSU2zIlL2x1TYBzjt+JfyKCHuucNzMxS9G6I7fUYuIKR3xPhWnfPBcw3R8YwJ65lRQ5gZnavYOMmdDbuLmAkDnPi0snZ05xIHubE5S9RTt6qplhJq+5vyLtebnUrxfoOIBy70cehrn4AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_31\",\r\n id: \"31\",\r\n ProductCode: \"CNBK13CPHR**\",\r\n ProductDescription: \"Cen BK13 DG Purl/Hipraft **\",\r\n ProductIndex: \"BK13\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"113011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.99\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.162\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.40\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_32\",\r\n id: \"32\",\r\n ProductCode: \"CNBK14CHPHRL**\",\r\n ProductDescription: \"Cen BK14LH Hip Purl/Hipraft LH **\",\r\n ProductIndex: \"BK14LH\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"114011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.11\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.94\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAACOBAMAAAAY6ApVAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyOCBNYXIgMjAxOCAwODozMToxNSArMDkzMANvBRQAAAAHdElNRQfiAxsWATh+Uux6AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f33t7e5+fnvb29OTk5CAgIAAAAd3d3WlpaHBwc7+/v1tbWnJycEBAQzs7OE/xY1wAAAAF0Uk5TAEDm2GYAAAkjSURBVHja7Zv7axzXFccntmjl2MLuHxAwQsErZyX3l0JKKIStjFMHyaVEGSsP5Uf/VvrI5kiLNS5CsCunEsW1WamJTTAWk64TNaQqkTIVMoMNljNOjSuzkiIpoZU69iZelzTBblNM77kzOzuPO+Odxyptme9PErsz89E59zzumSuOixUrVqxYsWLFivX/rvcAXnkz1fntiG+7dWFp+Fne71U86Oo+/PdvhUXY1/nUyI1uMPSJz+vpRRmhpGqXl3qGfBtp+586FyZLooFQRpXGc+P8yz7vVMTLBw5Jv+8c7ykUChpTZmyI2/WAC7coq4unqlYQEKAnl1voTCUVXe3woJvYtPUIffoHkqZ3F08ZSONjK46vt3QsLlQ+1xBKvcNjuaEvPlecugI/9Gtl7a6vSibNrfY8pz8y0zN2SPliNbfYO6EDZKCslssTE2NjuREWQlWy+lO/MFs0mrOSXXNL3d1VK5SJFSYKPbmRjgVFTirekvcTr8lKFvzCcI34rCOwITH17qGRMyA89XHzgwDMSgCo0EcWzYVgNCSSPpJclIWUHxRFyaY5bqeQvAg/8Q3DzevL8ZwkzZD1+7YdZnYynWJ640a5/DoLk3+H3PXuipzv8w/DfQcEirP+GE2CzztsI/azntlOVjP8iGWZa+Sm+RXyhSCp/QD0Zalx8Oriyw6YWSgxaFSS1ZbTDJg9cHo1n0kql30nYao/wHpTmRqH45r6LSAzJMyf2abectKoeKXAgEnirc5icB8NAkNS8dnmXqRJX5ixWiYLJR5enVZvOmj+Rsy4c4C5mpbGh/DrRf/BTZWHE83LWlb51Oqh75N6el6aVu/YafjMSAsc8wqrdngyEMyOrDDY3EZpjlq8hOXum+fJD2h4i1rJt4WUF4wcJLipssJ1RXPVX00w0306jHRQGLQ9q211+LriCYMZJ5C24p8pr6FxSl+ZwjrdOQYIQ2i8H830U0AYbjukybJIYCgI1XQ8Q369rf143zdNoCSsqQHKpBDLo0jzpkFzb3y4aiWfNLLYHxSG2wEkVWk0cOtpRtmc9F6wTn0Y2E9oG0wn8l5cOAKDRhKR1oeuBAxuqkagqTaRR5rXnDBTrFTsuWh+FhyGuwrr+LSWXuvCqdLw635o5HwIP3Hc43py02Lc2eTMwh0/NO3wizA0d4XX6W3msZ8Q/uygSai3fdCECG6qPcLb9GltkxhVLzpoZtRnaqeRxYFQMKSEa3+7PKpWM56ZhtlSufopHAwp4XoZusReOP8qn6jZNvPwRkgasVIU99GMc9JO8z4M1gojqz8PCdMAGf1eLWdw4Tg2MqPC57XSHAjrJ9JPVZKbfIO6yp6OszUXhr3hgpvaJk/2hLpxaAJ8yVamRmulkdVwwY1qgkyFRqauummzDV9rQ8ELoWEITboSMvIwI6qmVEGuCaYd3glPo5VwTfO05fql1VOiQeupyyGTsKZHoJr45TVnOp6urYTLapBtrkMPw7kqTRe6auMJK83NWmjuhg9u1JcmTykJpLHu8KahlqLZFj64qQ6aG4YWXDiD/kt4FMFNdcO8d8PuWLAG+D/Bu9lK4qcBZlhsFYUXTDRZgDtWmv2eJbyNL5dPJ4Nuc1k0elFMLOaSuG6et9LcF0662kYW4QjACSWS4NZpVujTRLJ/ST4KkHnMSrMGrs3WVbJ0tywPyGLQbS6DBmjiV0+KcBaXzTFbYegCt/bmEo4NdvaF2j7ZlacNA3+Me49sm4iB7CV8FFyK5sX0bo7b/xmx0BvR0dCi2Ap9F+DfpCWAfhuMtOZSNMlOZSQLL5DgDrN9sqkBd5LyMkkzK4pcZPTF2QzbNLjgsb0POsNi0+BOU/7BJA4ak+QBr9lgpno32K1fW+46rqeQ2ycHTcloGFiOkvi04iXw+8LHU49Dv9FsEUet22GmRK8SLhczUcKYm61mnjG69p4JtMO1SGm2VUs4SX3CB3aaOa+GIuw216GEUcKx1RpwLJtZDxo5H3Kb69A34KUKDXHUeQfNjAdNsBcJXjoIv9Of1sIcbc3AZ240V4O9SPBSEfSXOvJ9gD4HjHTJtb2RxWNRwxCatyqLAOAvTpp511lS6HEEQ1lBb6Yw03/kpOlya7bmIw5uzTaVoniF6ShpVDjB9lNUnbDNNil9FbAiSpKWhSGmp/LRJmGDRrNNkj2eJa0fs6GIPripRKGZmqaL7SjiKRbN1aiTsKbtec1TGFG3a6aR+eAvErxto43t29gRRWgyTD/VB6YRNihNq4ujpGzZ2Wxd9n9UozbNwi1q+iw7oqQ/qs5mS1ajLpZV29zEB+xTbWdMqg1FqdlOE9E4gqEmrQyRHjTNdNSU6pglPVqfeEJto/MQdBQzohjtTX2SsKZWSuMaUYTGPi+pn5847kM62SKOyjBhnG/moxtHMHQX3krSHvQ8m2ZGtbY3dUrCmh7KYvtCKiY7ovAlg8VTYd7m1qAiTrZcI4qUcLA0FFGOIxjCF3c4J7ntQnPQ0t7M19NPHE4oBmlr4+IoqctcNCOaCbsLm61W14iyFc16BrdumxRGlJujpDVT0WytV7GsqEEUUs0i6+SYLtMLmHomYZ0GhFS7frbkeKFQsCfkuckqTfGVOsNwO0D4xwE6tXkfMr2OCSSxjXGGYq/fw7BBbNOvAMA5SXyR4+451/Isv5HcLD9hCe//LqF5mp6Xs8Ec/81vDyeMEl6vTtisRujniaPg16QLtMLQN1WfGg1FvTphix7G05VEQ0u2iZ94lNu1J220N/VOwpouGSeordEk4ocZPF+i0UD04wiGlihK75AtssUnyQJHz93TWsM9m+EnfDnFOjSbh7Em7Q3el5RmL/xqU2gOAKNGTavGnrwdZ01Bz5/61UN51hmXqeMTXxmRNVivcQRDSHN4lXWQTdMZ0nDUtRO2iJ5VFQqFw4sjHSyarHA9sSnBjWo0/v8FoFQo9HxPsgbXFC9cgzp3WFVtNdHQf1n4cWFieMhEI0K483K+1DTS/RzYRYw0cbqDjvjnyK+b5Sddq7lhJxJZS4XTU6cg2hc+NWr7xdXuHtFGRJf41wCja0fH4ikb0tcHo2l3o8lxEZzviUINzx75L7BMVbt212UiHCtWrFixYsWKFStWrP9p/Qe0k7F0MQtkLQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_33\",\r\n id: \"33\",\r\n ProductCode: \"CNBK14CHPHRR**\",\r\n ProductDescription: \"Cen BK14RH Hip Purl/Hipraft RH **\",\r\n ProductIndex: \"BK14RH\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"114011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.11\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.94\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_34\",\r\n id: \"34\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK1 5050 Galv Con\",\r\n ProductIndex: \"BK15050\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8\",\r\n MfgLocations: \"\",\r\n Markup: \"\",\r\n MarkupCarport: \"\",\r\n SellingUnitWeight: \"\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"\",\r\n AncillaryParts: \"POWBK 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACbBAMAAADVbMn0AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyMSBNYXIgMjAxOCAxMToyNDoxNCArMDkzMBGl8gMAAAAHdElNRQfiAxsKFjKOONvmAAAACXBIWXMAAArwAAAK8AFCrDSYAAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/v3t7e5+fnwcHBkJCQYmJi9/f3ra2tKSkpISEhzs7OnJyc1tbWNTU1AAAAilHxAAAAAAF0Uk5TAEDm2GYAAARBSURBVHja7dq/axRBFAfwuZxwRQhYpEgjKBamESxSBLQJEmJxjeIuIkcKzQ4RMQSJ1WERJCoYK0kgi6RMYWchCsZyxeJKwRR26qES7m9wdu/O/fVm5s2P12X+gPvce2/35ju7x9jJIl5nztEb00l4mt5Y26VGhLG3T4zMCYMaSeugRrI6iJFhHbTIzMigRObHBiGSG3RIwSBD5goGFVKsgwopGzTIUdkgQWYrBgVSMwiQ+ZrhH6nX4R85AgzfCGj4RVqw4RVpzcKGT0RWh0+k9UFm+EMUhjdE3it/iNLwhLQOVYYfRGN4QXSGD6ShMzwgesMd0fbKA9JqB/d0hivSwBiOCM5wQ5CGE4I1XBBh/EEZDkgTbdgjzXaI65URcnHd1kAjIiRct+sVHkmDyKuCsY28royQNOzkyMS2SR1YJNtcc6QdGhkoZLSB58iWSa9wyDgkFBCzQhBI6/towyBE8k2JEMmDIRlSDJ9USCng2iPKZ5DlkGCNDKIFrGGN7EdB563MqAYqS0QYQdBZkBrlG9sOyQyZ0jgMKqHNChkZQrkKzKMeEmyQwdiAlCYQRCyQglFXGu2k/kNrjpSM6lyakGGOVAyhbBbrCKCgborUjGItsmBoiABGPhdpEDFDQGOsNNufJR9hhEiMoaIIbSaI1BDKk+a2PIgYIH25IRSFYYAMVEYQqAIVGnEw0EjfwcAiTgYScTNwSD9wMlAIVEe4xnmENDAIaOxHnV4Y4QwEAs7j9qo4B048xRl6BJ7H8BX2JM7QIpKZ38oOtN0Ed3DSINLr6qVQutvIw5kakV+7nS+fvvawB0Alorw/esheaRDXexCDeDMUiD9DjugMPCFHfBoyxGOvpIhfA0Y0RsDNDBDRGT4QreEB0RvuCMJwRjCGK4IyjJEfJQRnmCIHZ4sIZIR9HrkhB0ssRwaQsTzoc85dkN33ucEWOWAEf2+ui/NmZI+UDPYIbP9KFkveWSNlg02FEDI8Ps8klkjFYOwKpGQPtS4nlpXUDMbmIaX34uO1ioFGdr+x+poFa+nZ3iegIaklsER2YENMGKWgEKmBVDBIX27gOoZA+hcYc1P0yK9LjDkqWmRHZyDmokO0daRrOnRCUIZWUSIx0kgV+TMIsb8oDfzrWrkyGKiQ+LXJK+ENSceWDzY35Jk+PjZ77dyFleVn7JQUMenVuBaoY+IEL0XMDZmyJEXi43VjQ6J0nh/BSPzbxmDiO0O1JODVFa/aGen0IYWDvbL/Y0Y3QSIORqpECMR2HuM1meizcPzTzRBKbS5VxH7m+ZoK1VnYh8HY40rHKsiqnz8rVhTuv46sYyWliMQrvgzGmkWF0xhlpYB4NRh7uBXVEc9GUeEkvRquibEyQuIH/g3GGiOFExr/p58h8X0aQyhZLSnyhswYKZyyjrHC9+K7hARLp895fIeyjkxZ5DeoDaGcJydO1skyWv8Aubnm/m6D/CQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_35\",\r\n id: \"35\",\r\n ProductCode: \"CNBK15108ECR**\",\r\n ProductDescription: \"Cen BK15 108X65 End Cap Ribbed **\",\r\n ProductIndex: \"BK1510865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"115021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.46\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.112\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.00\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_36\",\r\n id: \"36\",\r\n ProductCode: \"CNBK15158ECR**\",\r\n ProductDescription: \"Cen BK15 158X65 End Cap Ribbed **\",\r\n ProductIndex: \"BK1515865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"115031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.54\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.63\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_37\",\r\n id: \"37\",\r\n ProductCode: \"CNBK15208ECR**\",\r\n ProductDescription: \"Cen BK15 208X65 End Cap Ribbed **\",\r\n ProductIndex: \"BK1520865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"115041\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.65\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.245\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.68\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_38\",\r\n id: \"38\",\r\n ProductCode: \"CNBK1565ECR**\",\r\n ProductDescription: \"Cen BK15 65X65 End Cap Ribbed **\",\r\n ProductIndex: \"BK156565\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"115011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.36\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.098\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.36\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_39\",\r\n id: \"39\",\r\n ProductCode: \"CNBK16565GA\",\r\n ProductDescription: \"Cen BK1 6565 Galv Con\",\r\n ProductIndex: \"BK16565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"101015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.52\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.58\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.91\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"4\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"4\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACbBAMAAADVbMn0AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyMSBNYXIgMjAxOCAxMToyNDoxNCArMDkzMBGl8gMAAAAHdElNRQfiAxsKFjKOONvmAAAACXBIWXMAAArwAAAK8AFCrDSYAAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/v3t7e5+fnwcHBkJCQYmJi9/f3ra2tKSkpISEhzs7OnJyc1tbWNTU1AAAAilHxAAAAAAF0Uk5TAEDm2GYAAARBSURBVHja7dq/axRBFAfwuZxwRQhYpEgjKBamESxSBLQJEmJxjeIuIkcKzQ4RMQSJ1WERJCoYK0kgi6RMYWchCsZyxeJKwRR26qES7m9wdu/O/fVm5s2P12X+gPvce2/35ju7x9jJIl5nztEb00l4mt5Y26VGhLG3T4zMCYMaSeugRrI6iJFhHbTIzMigRObHBiGSG3RIwSBD5goGFVKsgwopGzTIUdkgQWYrBgVSMwiQ+ZrhH6nX4R85AgzfCGj4RVqw4RVpzcKGT0RWh0+k9UFm+EMUhjdE3it/iNLwhLQOVYYfRGN4QXSGD6ShMzwgesMd0fbKA9JqB/d0hivSwBiOCM5wQ5CGE4I1XBBh/EEZDkgTbdgjzXaI65URcnHd1kAjIiRct+sVHkmDyKuCsY28royQNOzkyMS2SR1YJNtcc6QdGhkoZLSB58iWSa9wyDgkFBCzQhBI6/towyBE8k2JEMmDIRlSDJ9USCng2iPKZ5DlkGCNDKIFrGGN7EdB563MqAYqS0QYQdBZkBrlG9sOyQyZ0jgMKqHNChkZQrkKzKMeEmyQwdiAlCYQRCyQglFXGu2k/kNrjpSM6lyakGGOVAyhbBbrCKCgborUjGItsmBoiABGPhdpEDFDQGOsNNufJR9hhEiMoaIIbSaI1BDKk+a2PIgYIH25IRSFYYAMVEYQqAIVGnEw0EjfwcAiTgYScTNwSD9wMlAIVEe4xnmENDAIaOxHnV4Y4QwEAs7j9qo4B048xRl6BJ7H8BX2JM7QIpKZ38oOtN0Ed3DSINLr6qVQutvIw5kakV+7nS+fvvawB0Alorw/esheaRDXexCDeDMUiD9DjugMPCFHfBoyxGOvpIhfA0Y0RsDNDBDRGT4QreEB0RvuCMJwRjCGK4IyjJEfJQRnmCIHZ4sIZIR9HrkhB0ssRwaQsTzoc85dkN33ucEWOWAEf2+ui/NmZI+UDPYIbP9KFkveWSNlg02FEDI8Ps8klkjFYOwKpGQPtS4nlpXUDMbmIaX34uO1ioFGdr+x+poFa+nZ3iegIaklsER2YENMGKWgEKmBVDBIX27gOoZA+hcYc1P0yK9LjDkqWmRHZyDmokO0daRrOnRCUIZWUSIx0kgV+TMIsb8oDfzrWrkyGKiQ+LXJK+ENSceWDzY35Jk+PjZ77dyFleVn7JQUMenVuBaoY+IEL0XMDZmyJEXi43VjQ6J0nh/BSPzbxmDiO0O1JODVFa/aGen0IYWDvbL/Y0Y3QSIORqpECMR2HuM1meizcPzTzRBKbS5VxH7m+ZoK1VnYh8HY40rHKsiqnz8rVhTuv46sYyWliMQrvgzGmkWF0xhlpYB4NRh7uBXVEc9GUeEkvRquibEyQuIH/g3GGiOFExr/p58h8X0aQyhZLSnyhswYKZyyjrHC9+K7hARLp895fIeyjkxZ5DeoDaGcJydO1skyWv8Aubnm/m6D/CQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_40\",\r\n id: \"40\",\r\n ProductCode: \"CNBK166565GA\",\r\n ProductDescription: \"Cen BK16 Galv 65x65 Galv\",\r\n ProductIndex: \"BK166565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"116015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.14\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.138\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.91\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_41\",\r\n id: \"41\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK16 Galv Internal Slab Conn to suit 65x65 SHS \",\r\n ProductIndex: \"BK16RHS6565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.138\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_42\",\r\n id: \"42\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK16 Galv Internal Slab Conn to suit 75x75 SHS \",\r\n ProductIndex: \"BK16RHS7575G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.138\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_43\",\r\n id: \"43\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK16 Galv Internal Slab Conn to suit 90x90 SHS\",\r\n ProductIndex: \"BK16RHS9090G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.138\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_44\",\r\n id: \"44\",\r\n ProductCode: \"CNBK176565HFBGA\",\r\n ProductDescription: \"Cen BK17 65X65 Heavy Footing Bracket Galv\",\r\n ProductIndex: \"BK17G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"117015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10.69\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.782\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"35.85\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATQAAACCBAMAAAA6SylwAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyOCBNYXIgMjAxOCAwODo1MTo0MiArMDkzMGad/70AAAAHdElNRQfiAxsWFiv/bykyAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////vb29b29vAAAAHBwcOTk5lJSUzs7OWlpaEBAQCAgI3t7e9/f31tbW5+fn7+/vhpiS9QAAAAF0Uk5TAEDm2GYAAAUySURBVHja7Zz/axtlHMeTVcrErt1TWTIoFT1njUhh9sl1zXRa24sY9Adtc2P5zXTzVLRgROgPpTBTViNj4Ggju6kwEMH+ojI0bpTAfhr+2hIvHcfB8HfBP2HP81zSxktS73mafPpQ7k37XLjn+TzP6z7Pl89zF3Kh0IHqT4wT2k2TSKsJ7+hgyUJ9vx4wQKBAgQIFChQaiFYRinwC0FKvshmdG3no32AWY9PEYwBomG4U8DscBsaiY188032yo2rZIS2d9m+RIAbOXQ4DUfWOObSlSf8WcWrwAAztgYxoYW40NUALHRNEe7X7aP1iY60CgDYg5rW/ADo0xI02BYY2IYb2GhgaR6BiaJVzYGiXedFeAkPj9hoc2tfyok0GaBBoAFvJgTjvWLtBDbYhvKbKi8Y9QyVGe1PeDp0CQ+OeBgxtC2CGCnptCyK8c6PNQKH1CXYoxFZSYjTBsRagyYomtpW04G72eBcPmdFuAaAJLrkSo0k5QxnatrxjDcRr3Gh5eTvUReMwgEaT12sg04B7UwTnNUE0iA24IJqUd1QuGsAT8EOIBnEfKoj2srxocIsHR0sMzeJ4Lg2MtvWdvGgQ37YIor0iL9qktGiWvGiA6xovGuCzXO4OhZgGhw4N8Fkut9fgnoDzom1C7NcE0X6RF+1nedHehkKrcKO9HqA5Fd4NeOA1adHi8qK5XrslL5qU00DjRbtCDaoQW8kA7TCi8TyOCdACNEHpvIEKDi3Nu8uFQ0vJi2bKiyax1wK0Q4ZmljnRTrGtJATatBBadbxNbr6DaNwd6nptonVmfyffCpDgRXuBPV9T2+Sq/ivqPNpXDA0fb537RgfR3BjKMaozbKzhNhbfiDA80fp0kqFh31f73Fk6bxyM/22VGxby2mDLs477vQHGn/qrJYyx26Gtf+3a+0XH0I6qbKxVMPbZpU9iPMw6FLdcPsLXO4XWPzuRqnktftxXLbMYf0wMSm1eHtK5Dl3GYxk6dO6Sli77qKPvCCk4jiIrF8nxfKivfv6fYxZ6BhGdVFHEeiqHlCyKoIUcyi6WkYGUD9/zg/aw4dR9+uaUorKiLJNjIotILTUZimEoSqxQKOSVHcXSKVrQZD+sJloj/+vaTWyu4kaZ9SMtxQqbq7XeRyiSZfVHDMOIzBmDz5fmycfVG4pSeF/XCld0PU/LpwkO+au1RF/4kjZbSduVbl7IvEvdbF8qzswohQKKEtcQ5XKRBD3O/YSQfWeqjAgBKVZeYtPZKbkj+Qj21l1Mr2VSJi7qBX16LEauXmHeyUWyds4YoqZ2NersU+V1hjxP0tvXy55My/2ZfI/qzdjYoEYWOW1//uJ+EdrJXmDpKA2wo97MTTd+9Yx7M7av0XSQJnfmu4Xm0Ot3qlcpn9c39d3AY+eaMoZ30LqoL1lT9NKta00Ecddr33oz3KtgaJtlp1s6TxNrtJ78R9WEi/a9N2OLFf2MfRzuGhqbT1XqNbspr+61JjRrHsJrH+w0ZQ/5RnM79CRNbncNzY7Sqkt0BShd9bbyuxvVHm8aa9Ul5jVS3j4x5OxHNooitOBUF+oiyzqigaKwMsLCxrMqST6K52N5Jaan2Sqt60V9uoZ2xsv821u01lNDG3+gv5eiqFFZWjcJGsZuONr9SOMGkZbS9OY3g+2hH2gSX6Xl1zWyzv+YnnUDVQ8207pL7CqTThbJGaxmMAtN/6OzDQHKXEteIIwj2fqlLN7bO/6H94zjZLOHk5qW1JUGjaDcMtkaREW2LDwKPy1k1W2svdEeAbB019hG9ghNAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_45\",\r\n id: \"45\",\r\n ProductCode: \"CNBK20DSP**\",\r\n ProductDescription: \"Cen BK20 Decor Strip Pack (3X1200) **\",\r\n ProductIndex: \"BK20\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"120011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.1695\",\r\n MfgLocations: \"300 400 500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.80\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_46\",\r\n id: \"46\",\r\n ProductCode: \"CNBK210865CON**\",\r\n ProductDescription: \"Cen BK2 10865 **\",\r\n ProductIndex: \"BK210865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"102021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.08\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"17.34\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGIAAACtBAMAAAC5NbdcAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMTowNTo0NCArMDkzMDqNMuUAAAAHdElNRQfiAxsKJSiHMUesAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////AAAADAwM9/f3b29vxsbGNTU1jIyMnJyczs7O2tratbW1qamplJSU6+vrvb29ljeKmgAAAAF0Uk5TAEDm2GYAAATDSURBVHja7dnNbxtFFADwKXEjWqDkWc46AnOwlNIb4usP6Eqk8iGXNbtuJAfcRaS9oUS0VSohwJGJ5+CVOHGm/wE5IMStlpoSbsmF7mWlIJC40kOuwHysnZ317Ow8GvWAeIdEyubnN++9nbGzIeT/wEUIWAHw9vK1KyixGPR+e6cJzqfWYiPg8dcfIbz+HZk/tBYser8DC6tVZcIF+LpUZEHgQTnJiaURONZ1SBHTEK6iciQJ3TKTWZHQPizgRBLvwI84kcRRs4YTSUyLW6YXSVLcZVW0p4J1+eNjC+FPBWvZw5t/lovrGZHQHXhQKtaygq2s+QlOsDQ3N5Eiob8s2whKM8S9US4oQJQh23GZiI/qW2oDVt8sEXDjJSfKiuF7xyVi80K6rLSguF/91ig++pLsHYjfBKA0ovz2rz4wCfcN4m5L0RpCy6U8wk1DrwZ1cj/N0fubBcDykN6dbmWNiGE1jKRIf7weuhBCp3iCETiq4NGcnJfpD0GejVLEUdoj9eUU0Ymfy4jpIAzCIxUoFWFWAKlcLhXNnFgRTbFeFTy+Jr53rUUAl8tFUzePrnXlVkKbYx2dI3cyqBe3dOJ9U46+TnyIFgFaGCvX1vEBXryGFfhVdRsROodBjNGijxYeWrhnU0d3CdurLroOVdD0YugUr0q9r4byon9YWSwUviIG8uIPRAptHR1lVbvy4j1ycaOwDr+eFX15kX04WykU13XCIedPCsWaTnwx2Bffn+gr19QxCe151WkYRLN8HgOL+2pNWdXQQvg1rOgovbJZVdtUuT6HUvmOjSjPMWeqw2ZVvqO5SyahPRk6VazwwCAmO2rl6XIY69DvWpMYoysf6+pomyrXnu0eflUm4aF7tacVVWwdRnFGOTqAzeGh5+EDeh6A3lGAnWDbZkepL4Oeh4ff52cr/u3+mEOLS4hV6UX5XfIsBKa7qvCDFcteneao8S9t+xxBsCiEdR1eKnLnrlM888mL+dZ1hGgRVOVDQot3g0uIXav/lFFeeX7mdbRYwp4+Xs3iLFHeB433lWmfU8R5JVZFh5F9DlG5E7asc7R5d3cXyF3TBNVPMnxV/QXyvH13nVS0pDiZFRc1J0N0lZxbkmLfTsSrU/HVrLigO0sGhxNxZ1ZUcjMXYrT8TaQR8u+P+dzzdiHi29tJYR3noDpTBxv6ZOZ3dILF6cLy77XyyvpGdh4VEOEoOXLiSD55SgXP8opkPVZcTogX7x0TJyvIuwCvHox2ZS6deHws74ypIC8ANPiDzJ+4yG7bdFW3SF6wwYNzwB9k0xEjNCNEr4DkVsXiZYCqeBKajFyo01wO7/NwPy/4v6WcA7Ge0RgcqubwAIJZQfYA1uX0xgDTff69+NXbJzrBu/yZfH7KSVR4l2SCdbkxJWKJ2rskG/O8y4I8BGhFFoLXX5MPj38GiKPSVU1aJsg+H4x2D+ZjCxqSsFnW+rntphXkCdTTWQKEVoL8mjYqGYWg/puuSJBHk8GMjiwFeZGNX3R5nDsESHHwHcNPIZteKYPZ1Z67hYTdyzsYQfqsmEeIVbF4C8BN73ZLQe4rJ5mN4PcywD2MIMQVpwtG8J6dHrN2gpDzoUBX7AWLOVemshc8mmjBS8KK/078A2T6ruXKFMlmAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_47\",\r\n id: \"47\",\r\n ProductCode: \"CNBK215865CON**\",\r\n ProductDescription: \"Cen BK2 15865 **\",\r\n ProductIndex: \"BK215865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"102031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.26\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.202\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.34\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_48\",\r\n id: \"48\",\r\n ProductCode: \"CNBK21S62GA\",\r\n ProductDescription: \"Cen BK21 62mm Sleeve Galv\",\r\n ProductIndex: \"BK2164G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"121015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.6301\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0281\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.50\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKkAAAAqBAMAAAA632ZqAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNCBBcHIgMjAxOCAyMDo0MjoyNyArMDkzMMlO6uYAAAAHdElNRQfiBBgLDRfNXd3yAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////tZKSUk9P4uTi5+fn//f35////8HB/7W1/9bW/xgY/6Ki/+fn/1RU/zU1+5+fuU1irgAAAAF0Uk5TAEDm2GYAAADkSURBVHjaY2CgAWCihaGjptLFVCVKgAJOU40FyQXCRsq4TFV0oQCo4nQrBYY6qtLCrc4qNAmBUVNHvKluavQx1fcdENy4d1/r5j8Q6/m/G/fevXvb+xLMe/0PxAax3s1fDxZ5VwtiA+G7d/vB7Bu35r+7pXXv3e97715NgJvK3gEEE2ZM0HKZAWK1zCgB0p3uWyC840C2J4jV4bnFHUKDMYj0AZMlsz3bfXXdO45WdHQPzXAdvClr1FR6m0pRvUUTtzrTpDbEU3OT3cgQFBTC2coQosBUQQFcplILjJo6aiqNTAUAJnPgVdjmuaAAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_49\",\r\n id: \"49\",\r\n ProductCode: \"CNBK220865CON**\",\r\n ProductDescription: \"Cen BK2 20865 **\",\r\n ProductIndex: \"BK220865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"102041\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.38\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.275\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"23.53\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_50\",\r\n id: \"50\",\r\n ProductCode: \"CNBK22108CBSE**\",\r\n ProductDescription: \"Cen BK22 10865 Brkt With Stop End **\",\r\n ProductIndex: \"BK2210865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.88\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"16.71\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_51\",\r\n id: \"51\",\r\n ProductCode: \"CNBK22158CBSE**\",\r\n ProductDescription: \"Cen BK22 15865 Brkt With Stop End **\",\r\n ProductIndex: \"BK2215865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.13\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.398\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"19.09\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_52\",\r\n id: \"52\",\r\n ProductCode: \"CNBK22208CBSE**\",\r\n ProductDescription: \"Cen BK22 20865 Brkt With Stop End **\",\r\n ProductIndex: \"BK2220865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122041\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.38\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.555\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"31.26\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_53\",\r\n id: \"53\",\r\n ProductCode: \"CNBK2265CBSE**\",\r\n ProductDescription: \"Cen BK22 65X65 Brkt With Stop End **\",\r\n ProductIndex: \"BK226565\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.8596\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.185\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"3.3607\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_54\",\r\n id: \"54\",\r\n ProductCode: \"CNBK22L108CB**\",\r\n ProductDescription: \"Cen BK22L-10865 Long Brkt With Stop End **\",\r\n ProductIndex: \"BK22L10865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122061\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.83\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.1508\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.03\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAACmBAMAAABkT7+4AAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMTozMTozOCArMDkzMGfhl/MAAAAHdElNRQfiAxsLAjvYiN4gAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////EBAQBAQEKSkpPT09YmJi5+fnzs7Ovb29lJSUGBgY7+/v9/f3ISEh3t7e1tbWn0roJgAAAAF0Uk5TAEDm2GYAAAJlSURBVHja7dm/axNRHADwr4eKBoWaOLQRyvma0DQI2tYphVDplsUQyNJBiouDSzfBSTMIujSUdjAuvSTF5hVU7GCTDv4DXfwHxKAuhRowW4R73qX3y+u7975II4nNlwyP3Ifve9/v3XDfBAARCgb1UF2/ilHj3+iYXL1lrK2pCMX0knZLrgyXCRflirEfNLwkV4x9pxGEYuyrNoVQTD9wyj2mdJp2nV3uMdVcmvDmS2lFnipAxrj6glZbFpxWOepwYtRIMQLKip1uhHeuNSNJW4WLTiUbQTW25zHK3PGu0TJ6T6TYnWrE2HgVJoVKXzBLnIG4UB3FIfmMUPqjFkJJahwItT1Ug6bGUWqKp974VQKl4jy1hVLVoRo0FeOpil8leaqMUjmUWj2NiqLUokAlqR2iHbf37CgNkiqg1E+PStWCVNNVO/OhINXxqCxGCXbsoE7fFKhZJ2b8quOqOefLhl/t/FfqYA6h6vEFhGpklV9y9aFcwZxrt0/7NVRD1SP1GqW2/k7d5KmaX13jqU2/mjxBlUCp+GlV1X+eC6eoX8VQKtkfahGlSieo+qUTqYpEZczrqvJQrMwG1tWQJFe3NaUaT9V9inf63ZU9icpwd5TeoR6pVrB670wU5UiwAoWo1nhyIWr/5njUxE2PAsiRrOUuR2stR21037/euZMOIV+s1f1o2lIfVeWVoZY989B5QuzlU5rWHzsPSuPJH1PTORKzl58096FrFH2zlUISzsgWrAAK5MZ+dxESKYCXz7MIdWk/TJalyuytUa5cAZwl5MGz/Hre/OQCFcAZ0o0r5HYe/V/Ab8RSkzhxurZLAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_55\",\r\n id: \"55\",\r\n ProductCode: \"CNBK22L158CB**\",\r\n ProductDescription: \"Cen BK22L-15865 Long Brkt With Stop End **\",\r\n ProductIndex: \"BK22L15865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122071\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.1\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.1508\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.3\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAACmBAMAAABkT7+4AAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMTozMTozOCArMDkzMGfhl/MAAAAHdElNRQfiAxsLAjvYiN4gAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////EBAQBAQEKSkpPT09YmJi5+fnzs7Ovb29lJSUGBgY7+/v9/f3ISEh3t7e1tbWn0roJgAAAAF0Uk5TAEDm2GYAAAJlSURBVHja7dm/axNRHADwr4eKBoWaOLQRyvma0DQI2tYphVDplsUQyNJBiouDSzfBSTMIujSUdjAuvSTF5hVU7GCTDv4DXfwHxKAuhRowW4R73qX3y+u7975II4nNlwyP3Ifve9/v3XDfBAARCgb1UF2/ilHj3+iYXL1lrK2pCMX0knZLrgyXCRflirEfNLwkV4x9pxGEYuyrNoVQTD9wyj2mdJp2nV3uMdVcmvDmS2lFnipAxrj6glZbFpxWOepwYtRIMQLKip1uhHeuNSNJW4WLTiUbQTW25zHK3PGu0TJ6T6TYnWrE2HgVJoVKXzBLnIG4UB3FIfmMUPqjFkJJahwItT1Ug6bGUWqKp974VQKl4jy1hVLVoRo0FeOpil8leaqMUjmUWj2NiqLUokAlqR2iHbf37CgNkiqg1E+PStWCVNNVO/OhINXxqCxGCXbsoE7fFKhZJ2b8quOqOefLhl/t/FfqYA6h6vEFhGpklV9y9aFcwZxrt0/7NVRD1SP1GqW2/k7d5KmaX13jqU2/mjxBlUCp+GlV1X+eC6eoX8VQKtkfahGlSieo+qUTqYpEZczrqvJQrMwG1tWQJFe3NaUaT9V9inf63ZU9icpwd5TeoR6pVrB670wU5UiwAoWo1nhyIWr/5njUxE2PAsiRrOUuR2stR21037/euZMOIV+s1f1o2lIfVeWVoZY989B5QuzlU5rWHzsPSuPJH1PTORKzl58096FrFH2zlUISzsgWrAAK5MZ+dxESKYCXz7MIdWk/TJalyuytUa5cAZwl5MGz/Hre/OQCFcAZ0o0r5HYe/V/Ab8RSkzhxurZLAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_56\",\r\n id: \"56\",\r\n ProductCode: \"CNBK22L208CB**\",\r\n ProductDescription: \"Cen BK22L-20865 Long Brkt With Stop End **\",\r\n ProductIndex: \"BK22L20865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122081\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.34\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.555\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"32.69\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAACmBAMAAABkT7+4AAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMTozMTozOCArMDkzMGfhl/MAAAAHdElNRQfiAxsLAjvYiN4gAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////EBAQBAQEKSkpPT09YmJi5+fnzs7Ovb29lJSUGBgY7+/v9/f3ISEh3t7e1tbWn0roJgAAAAF0Uk5TAEDm2GYAAAJlSURBVHja7dm/axNRHADwr4eKBoWaOLQRyvma0DQI2tYphVDplsUQyNJBiouDSzfBSTMIujSUdjAuvSTF5hVU7GCTDv4DXfwHxKAuhRowW4R73qX3y+u7975II4nNlwyP3Ifve9/v3XDfBAARCgb1UF2/ilHj3+iYXL1lrK2pCMX0knZLrgyXCRflirEfNLwkV4x9pxGEYuyrNoVQTD9wyj2mdJp2nV3uMdVcmvDmS2lFnipAxrj6glZbFpxWOepwYtRIMQLKip1uhHeuNSNJW4WLTiUbQTW25zHK3PGu0TJ6T6TYnWrE2HgVJoVKXzBLnIG4UB3FIfmMUPqjFkJJahwItT1Ug6bGUWqKp974VQKl4jy1hVLVoRo0FeOpil8leaqMUjmUWj2NiqLUokAlqR2iHbf37CgNkiqg1E+PStWCVNNVO/OhINXxqCxGCXbsoE7fFKhZJ2b8quOqOefLhl/t/FfqYA6h6vEFhGpklV9y9aFcwZxrt0/7NVRD1SP1GqW2/k7d5KmaX13jqU2/mjxBlUCp+GlV1X+eC6eoX8VQKtkfahGlSieo+qUTqYpEZczrqvJQrMwG1tWQJFe3NaUaT9V9inf63ZU9icpwd5TeoR6pVrB670wU5UiwAoWo1nhyIWr/5njUxE2PAsiRrOUuR2stR21037/euZMOIV+s1f1o2lIfVeWVoZY989B5QuzlU5rWHzsPSuPJH1PTORKzl58096FrFH2zlUISzsgWrAAK5MZ+dxESKYCXz7MIdWk/TJalyuytUa5cAZwl5MGz/Hre/OQCFcAZ0o0r5HYe/V/Ab8RSkzhxurZLAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_57\",\r\n id: \"57\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK22 Con Brkt With Stop End *Non Std* Powder Coated\",\r\n ProductIndex: \"BK22S\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5881\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"3.8758\",\r\n AncillaryParts: \"POWBK 4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_58\",\r\n id: \"58\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK23S RSB Special Galv\",\r\n ProductIndex: \"BK23SG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"68.3201\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"10.34\",\r\n PromptTextCodes: \"D\",\r\n Colours: \"\",\r\n LiveCost: \"68.3201\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_59\",\r\n id: \"59\",\r\n ProductCode: \"CNBK247515PPGA\",\r\n ProductDescription: \"Cen BK24 75 LC 1.50 RSBLC Punched Purlin 2324mm Ea Galv\",\r\n ProductIndex: \"BK24G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"124015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"9.3964\",\r\n MfgLocations: \"300 500 500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5.0263\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"59.20\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_60\",\r\n id: \"60\",\r\n ProductCode: \"CNBK25DRSBFDGA\",\r\n ProductDescription: \"Cen BK25D RSBFD Galv\",\r\n ProductIndex: \"BK25DG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"125015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"19.88\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.37\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"54.91\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64:\r\n \"data:image/gif;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_61\",\r\n id: \"61\",\r\n ProductCode: \"CNBK25SRSBFSGA\",\r\n ProductDescription: \"Cen BK25S RSBFS Galv\",\r\n ProductIndex: \"BK25SG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"125025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"16.72\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.456\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"54.91\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64:\r\n \"data:image/gif;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_62\",\r\n id: \"62\",\r\n ProductCode: \"CNBK26565CON**\",\r\n ProductDescription: \"Cen BK2 6565 **\",\r\n ProductIndex: \"BK26565\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"102011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.91\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.94\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"16.56\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABjBAMAAAAP2sEQAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMTowMToyMCArMDkzMAFGvwsAAAAHdElNRQfiAxsKIx4e0XWzAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////jIyMMTExqamp9/f3tbW1ampqlJSU5ubmxsbGnJycAAAAzs7ODAwM1tbWvb29uXJnEwAAAAF0Uk5TAEDm2GYAAAPXSURBVHja7dhBaxNBFADgsdZSG1uLBUGTg0FasIkHPbQ0VMjBH1AQvChYeijUFCl4CKwX8eat4Cm4ByVgYBFtNjSleYm1LSbETqu1GDFJRfCoB0Hwogd3Znazs5nNJCvqyTkVst/Me29mdmeKkLfm8/j8f/CHAJD2Zn8f9LPGH9PtQA9E4MkXFZvt82s56IN0JJkrlxNW2zolBbXCkBZXlu3n5eAKnNZS8biS5sGST9L9N+NxA2Q7GiGmByL0eecI21PuoAfORLQ4a0qGAKNOdATXsnaHRs3HNSMJZY2AHYByq5BiMGT2fhNAMau0sRTLu4MBGEmmzGiSp3zXzZCM8tRdwS19LmI9H3/0mgCadEmHqy7Ap0c0K1kW0kkTqMUPYg69oeFI3NEmjo9b86BiYR78jWQbTdFaT9wdyNnBO5A7AP2eFndtSsFlLYVg+JKRLmvNQBcB8C2XkoVkgk/XZhWMd8jO+qI3g10R5MjuMypHfsGZuAywLcoPqp7uoEoZHqRTsqQZWOHBcDMoiCHt8UDIQW8BVJWtmVwHOVTpQoS8O8i4A7WA6CYUwbIYUo4A3QTVZuDyXlrhQ6pKc+CA+rOc8DRCArOy7klzYOAZPw+r7Vdr97JXkPMK1niQ72ADhRMcqDeDtDhxDiBUabcNqHYA3nsFdSkIiqvVA5j+DzoAg3TxhT2CXq9gwCs47DWHQ17Bwb8Jpn8P5DmABbDMH7AWBCCOQF/3RXhbtnOQA/oi3ZiOTXoB6sZHf4CAB0LSr3hAzhEKfS9u6+zMNyWAdQ4YB6yUdaqcCdCkF+lM82vpJQfGUAMkcNkGR8PuISk/bvtTTR/FrwQc4EGJ+yhe6CEjOF7GC1LwFDLNn1060z2tgEJP946TQJSCegvASsWNoN6nOXRJQTKL7RajVerKS4A25jjg0aXR3xooyRhUHpvd74RARyLgjz/aOIxgNmUJjGvvjrB7XP88D8Ipu/taYRKb6eLv+4P0eE5A2G0ExYh+0uw9YYSDosgCvjDrg4FRM5oIpHGje382al0AGiNsA/25RE+VWhIKAWzt2qI+Zd8YSFlJDmroPLtZGB92JemHuUY0eGaQv2I0ACC6BowRtAkI2tGMVZx3Ehv00WVZ2kvWsifM7lVchBtIACyHLaDVLQGEre7xOgSjSARdV1lvtNeXYJfeDwvCpY2WNcDv6bwVzTZUEGoPXrBZxC+gsohaAMfSKJLznIpjhShCrYCP3w+b87Q2q91IAhwj1PEmwHOEZCDM7amNYA2CCMkBONsgagPQsXNDFy+TNYfuPpyVdY/+yb9afgGEyna93rwiOQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_63\",\r\n id: \"63\",\r\n ProductCode: \"CNBK26VFSBDEGA\",\r\n ProductDescription: \"Cen BK26 Verandah Fascia Support Brkt Double End Galv\",\r\n ProductIndex: \"BK26DEG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"126015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.94\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"22.61\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BNW1060Z\",\\n \"Use\":\"Rafter Bracket Fix\",\\n \"Qty\":\"3\"},\\n {\"Code\":\"BNW1020\",\\n \"Qty\":\"1\",\\n \"Use\":\"Metal Fascia Fix\",\\n \"Conditions\":{\\n \"Desc\":\"=*Metal Fascia*\"\\n }},\\n {\"Code\":\"10X50P\",\\n \"Qty\":\"1\",\\n \"Use\":\"Rafter Bracket Fascia Fix\",\\n \"Conditions\":{\\n \"Desc\":\"!=*Metal Fascia*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_64\",\r\n id: \"64\",\r\n ProductCode: \"CNBK110865FBGA\",\r\n ProductDescription: \"Cen BK28 Finial Bracket Galv\",\r\n ProductIndex: \"BK28G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"101075\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.19\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.58\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.91\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_65\",\r\n id: \"65\",\r\n ProductCode: \"CNBK29WMBTBWGA\",\r\n ProductDescription: \"Cen BK29 Wall Mount Bracket to Brick Wall Galv\",\r\n ProductIndex: \"BK29G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"129015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.16\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.914\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"83.47\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_66\",\r\n id: \"66\",\r\n ProductCode: \"CNBK30PVFIBGA\",\r\n ProductDescription: \"Cen BK30 Pitched Verandah Front Infill Brkt Galv\",\r\n ProductIndex: \"BK30G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"130015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.026\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0189\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.17\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1495100B8P\",\\n \"Use\":\"BK30 Fix\",\\n \"Qty\" : \"=2*Qty\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_67\",\r\n id: \"67\",\r\n ProductCode: \"CNBK310865C@@**\",\r\n ProductDescription: \"Cen BK3 10865 @@ ** \",\r\n ProductIndex: \"BK310865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"103021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.03\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"MSJ=TRADEGA\",\r\n Colours: \"\",\r\n LiveCost: \"14.34\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAB4BAMAAAC5hUlXAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNCBBcHIgMjAxOCAyMDozODo1NSArMDkzMGoNd5wAAAAHdElNRQfiBBgLCx170pNqAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/vxsbG9/f3nJycf39/Xl5eEBAQAAAA1tbWNTU1HBwcCAgI5+fntbW1vb29pb49RQAAAAF0Uk5TAEDm2GYAAAQVSURBVHja5ddfaBt1HADwn24vfSjbVRl0EKZ1f1CmFgTBx44kS9dZX/ILWdr1QdJryGaEsT+RPgilSX9ejtQO87CBe5AkPa/QvbQ1xjKfiiEbso5t7GUWR1JsV69OHKjMzO8l97d3v7vKxBe/byWffv/c73uXC0L/YeTwp24klsF46PP73Q5E4DAe4IaDvd33d1NJzXusyk6XRTH/AoWMSxCP4yN8hZ+/6UAkqY4FQmbtyaSkRIyrkKVXHIkw6SvxC7/YkKyWZcyTWyTnrPMbCcPkBE486UyYi/7F8sluGjktE6ZjZLTwB430nZEJsy+SZ09025PXvmZa8Vl8+upuW/KnSjy16bz3JTuyDqSxuSyjlVrki7fsyZ0S19NMdCtyteumLXk4UU60it3qanhftyOB9MECfF7HPYznYqjYY0OOzl8+DyRMilH2VV88+rOV5NhcWiZcvMCKiQgr9lrID6zYJClvMCTm+/hkVSOj4oetof0XCk0i/8v+iEiISuqiMAfkS7j63jWNSFItpJFjs4GzkvTwjHJ1mfCSdvoqGRw/GJWkjTEnkvJKJpKyEH8x2nAhkrffLUsr7Ej4f0SW3MnZ7ZPNwLNkkXsJZ4Ys5JBpol8DyayFHFaJJyYPvXbPSp6opFOAXgIfvT1LL9QiHz+VnLJAIX+i94plpcy9bDZstu6Jud1nXUxDln9O9InoWcYV0lHaQj5R/zyukQqVpBSyj9CIVkgnykpNOhAly5ilF3qhbZANd3KISvSr606Ob4OkXMmGOzFkod32g3ovcxQS1gntno79K8RQiNZu2H2iWMqpUM21l7VG4JoL2X/kp29NV/echfR9//s100rlrSS1Co++w04HsH4+aD5pmzPCQfNJWwtZTnoL0V8gx2iFtFtNyLqSWJbxvOmdsjkjY6FOHDpiQ/QbdpLZU/X1L1sPQCMw0d7MCp5y2F1Yhj3FF2ceWbNovcBKeaT6zI9AskbSrk8kX7oDmH15K9lJOPyevnW3gw/UfdnUCSFlsfCGTOBlzHNpWSawGtKqqHzx7YoTOW7cmMen08b1fnBZfvo2220TiBrclOG2r/0W4BSCOgcISde/+QrM6F868efvpVWC2sFkojgOL3rpdzWyuiD/zlAIahuokOsFjE9VSPWERip8QicI+aFKEeN4kmSGFFJn2X4jQY+ThF8AAyU/UJ5STxuSiaCdMNg8xqESIYmVLQ8yNW6DKYNJkokCGbcl6B2oUh3GoUXC0whqPwqdgIF0aQpB7etQZRiGpxMYDPLA8EKKTtCBEpmYC8acCLoDnSw4E3RFIHzSmaBdp5qnMeRA0POD8vJUxffpBD13d6YCaOK7QjCGaNHmw81l5AVEjx2dl+JyLuQcO3wjbgShji5Xsq34G8xBNv76Zt1dAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_68\",\r\n id: \"68\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK3 10865 *Non Std* Powder Coated \",\r\n ProductIndex: \"BK310865NSCD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.155\",\r\n PromptTextCodes: \"CFC D\",\r\n Colours: \"\",\r\n LiveCost: \"3.2965\",\r\n AncillaryParts: \"POWBK 4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAB4BAMAAAC5hUlXAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNCBBcHIgMjAxOCAyMDozODo1NSArMDkzMGoNd5wAAAAHdElNRQfiBBgLCx170pNqAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/vxsbG9/f3nJycf39/Xl5eEBAQAAAA1tbWNTU1HBwcCAgI5+fntbW1vb29pb49RQAAAAF0Uk5TAEDm2GYAAAQVSURBVHja5ddfaBt1HADwn24vfSjbVRl0EKZ1f1CmFgTBx44kS9dZX/ILWdr1QdJryGaEsT+RPgilSX9ejtQO87CBe5AkPa/QvbQ1xjKfiiEbso5t7GUWR1JsV69OHKjMzO8l97d3v7vKxBe/byWffv/c73uXC0L/YeTwp24klsF46PP73Q5E4DAe4IaDvd33d1NJzXusyk6XRTH/AoWMSxCP4yN8hZ+/6UAkqY4FQmbtyaSkRIyrkKVXHIkw6SvxC7/YkKyWZcyTWyTnrPMbCcPkBE486UyYi/7F8sluGjktE6ZjZLTwB430nZEJsy+SZ09025PXvmZa8Vl8+upuW/KnSjy16bz3JTuyDqSxuSyjlVrki7fsyZ0S19NMdCtyteumLXk4UU60it3qanhftyOB9MECfF7HPYznYqjYY0OOzl8+DyRMilH2VV88+rOV5NhcWiZcvMCKiQgr9lrID6zYJClvMCTm+/hkVSOj4oetof0XCk0i/8v+iEiISuqiMAfkS7j63jWNSFItpJFjs4GzkvTwjHJ1mfCSdvoqGRw/GJWkjTEnkvJKJpKyEH8x2nAhkrffLUsr7Ej4f0SW3MnZ7ZPNwLNkkXsJZ4Ys5JBpol8DyayFHFaJJyYPvXbPSp6opFOAXgIfvT1LL9QiHz+VnLJAIX+i94plpcy9bDZstu6Jud1nXUxDln9O9InoWcYV0lHaQj5R/zyukQqVpBSyj9CIVkgnykpNOhAly5ilF3qhbZANd3KISvSr606Ob4OkXMmGOzFkod32g3ovcxQS1gntno79K8RQiNZu2H2iWMqpUM21l7VG4JoL2X/kp29NV/echfR9//s100rlrSS1Co++w04HsH4+aD5pmzPCQfNJWwtZTnoL0V8gx2iFtFtNyLqSWJbxvOmdsjkjY6FOHDpiQ/QbdpLZU/X1L1sPQCMw0d7MCp5y2F1Yhj3FF2ceWbNovcBKeaT6zI9AskbSrk8kX7oDmH15K9lJOPyevnW3gw/UfdnUCSFlsfCGTOBlzHNpWSawGtKqqHzx7YoTOW7cmMen08b1fnBZfvo2220TiBrclOG2r/0W4BSCOgcISde/+QrM6F868efvpVWC2sFkojgOL3rpdzWyuiD/zlAIahuokOsFjE9VSPWERip8QicI+aFKEeN4kmSGFFJn2X4jQY+ThF8AAyU/UJ5STxuSiaCdMNg8xqESIYmVLQ8yNW6DKYNJkokCGbcl6B2oUh3GoUXC0whqPwqdgIF0aQpB7etQZRiGpxMYDPLA8EKKTtCBEpmYC8acCLoDnSw4E3RFIHzSmaBdp5qnMeRA0POD8vJUxffpBD13d6YCaOK7QjCGaNHmw81l5AVEjx2dl+JyLuQcO3wjbgShji5Xsq34G8xBNv76Zt1dAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_69\",\r\n id: \"69\",\r\n ProductCode: \"CNBK315865C@@**\",\r\n ProductDescription: \"Cen BK3 15865 @@ ** \",\r\n ProductIndex: \"BK315865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"103031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.23\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.274\",\r\n PromptTextCodes: \"MSJ=TRADEGA\",\r\n Colours: \"\",\r\n LiveCost: \"15.33\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAB4BAMAAAC5hUlXAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNCBBcHIgMjAxOCAyMDozODo1NSArMDkzMGoNd5wAAAAHdElNRQfiBBgLCx170pNqAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/vxsbG9/f3nJycf39/Xl5eEBAQAAAA1tbWNTU1HBwcCAgI5+fntbW1vb29pb49RQAAAAF0Uk5TAEDm2GYAAAQVSURBVHja5ddfaBt1HADwn24vfSjbVRl0EKZ1f1CmFgTBx44kS9dZX/ILWdr1QdJryGaEsT+RPgilSX9ejtQO87CBe5AkPa/QvbQ1xjKfiiEbso5t7GUWR1JsV69OHKjMzO8l97d3v7vKxBe/byWffv/c73uXC0L/YeTwp24klsF46PP73Q5E4DAe4IaDvd33d1NJzXusyk6XRTH/AoWMSxCP4yN8hZ+/6UAkqY4FQmbtyaSkRIyrkKVXHIkw6SvxC7/YkKyWZcyTWyTnrPMbCcPkBE486UyYi/7F8sluGjktE6ZjZLTwB430nZEJsy+SZ09025PXvmZa8Vl8+upuW/KnSjy16bz3JTuyDqSxuSyjlVrki7fsyZ0S19NMdCtyteumLXk4UU60it3qanhftyOB9MECfF7HPYznYqjYY0OOzl8+DyRMilH2VV88+rOV5NhcWiZcvMCKiQgr9lrID6zYJClvMCTm+/hkVSOj4oetof0XCk0i/8v+iEiISuqiMAfkS7j63jWNSFItpJFjs4GzkvTwjHJ1mfCSdvoqGRw/GJWkjTEnkvJKJpKyEH8x2nAhkrffLUsr7Ej4f0SW3MnZ7ZPNwLNkkXsJZ4Ys5JBpol8DyayFHFaJJyYPvXbPSp6opFOAXgIfvT1LL9QiHz+VnLJAIX+i94plpcy9bDZstu6Jud1nXUxDln9O9InoWcYV0lHaQj5R/zyukQqVpBSyj9CIVkgnykpNOhAly5ilF3qhbZANd3KISvSr606Ob4OkXMmGOzFkod32g3ovcxQS1gntno79K8RQiNZu2H2iWMqpUM21l7VG4JoL2X/kp29NV/echfR9//s100rlrSS1Co++w04HsH4+aD5pmzPCQfNJWwtZTnoL0V8gx2iFtFtNyLqSWJbxvOmdsjkjY6FOHDpiQ/QbdpLZU/X1L1sPQCMw0d7MCp5y2F1Yhj3FF2ceWbNovcBKeaT6zI9AskbSrk8kX7oDmH15K9lJOPyevnW3gw/UfdnUCSFlsfCGTOBlzHNpWSawGtKqqHzx7YoTOW7cmMen08b1fnBZfvo2220TiBrclOG2r/0W4BSCOgcISde/+QrM6F868efvpVWC2sFkojgOL3rpdzWyuiD/zlAIahuokOsFjE9VSPWERip8QicI+aFKEeN4kmSGFFJn2X4jQY+ThF8AAyU/UJ5STxuSiaCdMNg8xqESIYmVLQ8yNW6DKYNJkokCGbcl6B2oUh3GoUXC0whqPwqdgIF0aQpB7etQZRiGpxMYDPLA8EKKTtCBEpmYC8acCLoDnSw4E3RFIHzSmaBdp5qnMeRA0POD8vJUxffpBD13d6YCaOK7QjCGaNHmw81l5AVEjx2dl+JyLuQcO3wjbgShji5Xsq34G8xBNv76Zt1dAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_70\",\r\n id: \"70\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK3 15865 *Non Std* Powder Coated\",\r\n ProductIndex: \"BK315865NSCD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.218\",\r\n PromptTextCodes: \"CFC D\",\r\n Colours: \"\",\r\n LiveCost: \"3.3777\",\r\n AncillaryParts: \"POWBK 4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAB4BAMAAAC5hUlXAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNCBBcHIgMjAxOCAyMDozODo1NSArMDkzMGoNd5wAAAAHdElNRQfiBBgLCx170pNqAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/vxsbG9/f3nJycf39/Xl5eEBAQAAAA1tbWNTU1HBwcCAgI5+fntbW1vb29pb49RQAAAAF0Uk5TAEDm2GYAAAQVSURBVHja5ddfaBt1HADwn24vfSjbVRl0EKZ1f1CmFgTBx44kS9dZX/ILWdr1QdJryGaEsT+RPgilSX9ejtQO87CBe5AkPa/QvbQ1xjKfiiEbso5t7GUWR1JsV69OHKjMzO8l97d3v7vKxBe/byWffv/c73uXC0L/YeTwp24klsF46PP73Q5E4DAe4IaDvd33d1NJzXusyk6XRTH/AoWMSxCP4yN8hZ+/6UAkqY4FQmbtyaSkRIyrkKVXHIkw6SvxC7/YkKyWZcyTWyTnrPMbCcPkBE486UyYi/7F8sluGjktE6ZjZLTwB430nZEJsy+SZ09025PXvmZa8Vl8+upuW/KnSjy16bz3JTuyDqSxuSyjlVrki7fsyZ0S19NMdCtyteumLXk4UU60it3qanhftyOB9MECfF7HPYznYqjYY0OOzl8+DyRMilH2VV88+rOV5NhcWiZcvMCKiQgr9lrID6zYJClvMCTm+/hkVSOj4oetof0XCk0i/8v+iEiISuqiMAfkS7j63jWNSFItpJFjs4GzkvTwjHJ1mfCSdvoqGRw/GJWkjTEnkvJKJpKyEH8x2nAhkrffLUsr7Ej4f0SW3MnZ7ZPNwLNkkXsJZ4Ys5JBpol8DyayFHFaJJyYPvXbPSp6opFOAXgIfvT1LL9QiHz+VnLJAIX+i94plpcy9bDZstu6Jud1nXUxDln9O9InoWcYV0lHaQj5R/zyukQqVpBSyj9CIVkgnykpNOhAly5ilF3qhbZANd3KISvSr606Ob4OkXMmGOzFkod32g3ovcxQS1gntno79K8RQiNZu2H2iWMqpUM21l7VG4JoL2X/kp29NV/echfR9//s100rlrSS1Co++w04HsH4+aD5pmzPCQfNJWwtZTnoL0V8gx2iFtFtNyLqSWJbxvOmdsjkjY6FOHDpiQ/QbdpLZU/X1L1sPQCMw0d7MCp5y2F1Yhj3FF2ceWbNovcBKeaT6zI9AskbSrk8kX7oDmH15K9lJOPyevnW3gw/UfdnUCSFlsfCGTOBlzHNpWSawGtKqqHzx7YoTOW7cmMen08b1fnBZfvo2220TiBrclOG2r/0W4BSCOgcISde/+QrM6F868efvpVWC2sFkojgOL3rpdzWyuiD/zlAIahuokOsFjE9VSPWERip8QicI+aFKEeN4kmSGFFJn2X4jQY+ThF8AAyU/UJ5STxuSiaCdMNg8xqESIYmVLQ8yNW6DKYNJkokCGbcl6B2oUh3GoUXC0whqPwqdgIF0aQpB7etQZRiGpxMYDPLA8EKKTtCBEpmYC8acCLoDnSw4E3RFIHzSmaBdp5qnMeRA0POD8vJUxffpBD13d6YCaOK7QjCGaNHmw81l5AVEjx2dl+JyLuQcO3wjbgShji5Xsq34G8xBNv76Zt1dAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_71\",\r\n id: \"71\",\r\n ProductCode: \"CNBK33108C@@**\",\r\n ProductDescription: \"Cen BK33 10865 @@ ** \",\r\n ProductIndex: \"BK3310865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"133021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.16\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.518\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"33.23\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_72\",\r\n id: \"72\",\r\n ProductCode: \"CNBK33158C@@**\",\r\n ProductDescription: \"Cen BK33 15865 @@ ** \",\r\n ProductIndex: \"BK3315865\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"133031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"9.89\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.52\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"41.52\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_73\",\r\n id: \"73\",\r\n ProductCode: \"CNBK3365C@@**\",\r\n ProductDescription: \"Cen BK33 6565 @@ ** \",\r\n ProductIndex: \"BK336565\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"133011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.67\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.256\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"22.13\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_74\",\r\n id: \"74\",\r\n ProductCode: \"CNBK34DRSF150GA\",\r\n ProductDescription: \"Cen BK34D RSF Double 15Deg Galv\",\r\n ProductIndex: \"BK3415G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"37.55\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_75\",\r\n id: \"75\",\r\n ProductCode: \"CNBK34DRSF175GA\",\r\n ProductDescription: \"Cen BK34D RSF Double 17.5Deg Galv\",\r\n ProductIndex: \"BK34175G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_76\",\r\n id: \"76\",\r\n ProductCode: \"CNBK34DRSF200GA\",\r\n ProductDescription: \"Cen BK34D RSF Double 20Deg Galv\",\r\n ProductIndex: \"BK3420G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134020\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"37.55\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_77\",\r\n id: \"77\",\r\n ProductCode: \"CNBK34DRSF225GA\",\r\n ProductDescription: \"Cen BK34D RSF Double 22.5Deg Galv\",\r\n ProductIndex: \"BK34225G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR8AAACDBAMAAABGqgLyAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyOCBNYXIgMjAxOCAxNzoxMzoxNyArMDkzMHIWSYIAAAAHdElNRQfiAxwGLDoxh0xwAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////nJyca2trxsbGAAAACAgI7+/vtbW1EBAQISEh5+fnQkJC1tbWKSkpvb299/f3hU0oXgAAAAF0Uk5TAEDm2GYAAAbjSURBVHja7dx/SBtXHADw6zIMc67ZXC3aUjZjrotN3abHurG0A8M7dsdxfzQ8/xBXaCKcsAUZHbQb4obZs9AVYcp1bSgFmz/61/5Y7WVW0pYug/6zfya7YkUsZYXtDymr3R/+N3ax2rwXNT/Oe/fyRx8IIgQ+fN+LyffHO46rrfUia8Bz0HMQHZCPe8waQoAaggtn32AtwUEvAAAkqiJvlaAkku9J+5lGhgC9fDqmR65LB1hjnoFe+kEbMJQO6SBrDQbS+g0lBG6w5mAgbbA2RAWQ1p+RQ+BaDYG0hGGJ7tcQSEsE1EYwV0Mg62TLfshWRIK0fl5uROeP1w5I+5SX/HCc4UftU9BprbCCUisaYSdaBb0i/oyL1Nd0dqJVUF2zeBATNUut5shxliDON0SKxFb9KKMYrX+FXSJELXKrcfQ2UxAXhoRIbDWSx5mCuBxsI0RvmVEWIizryBExGpb9RmSSKYhLw1uYaJ+1a9HbTEFcGuGiR+Bqxv0YkYlijBAtgVk+6XaMijLXNLqPif60YtTncoyKU2nyHOXgdCDibow25Pa/6HOEaIp3V7Sx2BDTzxOiqwFX32ubVD+WzWlMFEcTAeUBUxC3Ys7iIjgbUD5nCuK85ggRo1nevRhtXrDyGuOYKIZmg8q7TEHcTnOCEE0EVJditFVJbwdKXimIBvTkOfUbpiBuGSXxGJl9GdWVItvWRc8VAxcNmMl7rsSoRBX2v0DyTkE0aCj3VBfe/aXKwl4jSoquuyAqWaf28H1/FUQJQ2mXqZ+j0oXzhkDfoYKon+9rp1usLQviPIaKiRK8MkNbVK614A2qJzFRUL1JWVS21+FrUTCRxqsddEUVNF/24THSgmqIakG7ApBvr7wbTyFVv0hRVFF7akjCRc1qiKKosn7ZXvkAnkLKHSK1on+FDbxHRIweSTepiSrtKH4p7sETfylLS1QpyNck4ru2JF7qoSOquOda1yHi5ZqwmIVU2hBVNIGHxBtEjLJwmi2IGxavYaIu0Q9vsQX5WgAustJsNO14abSqvr1vCRIitKDPOS2qcpAgrhNpNlzUnW7VVDvZsIzw4kgcLTjdhqh61CKmj5Mi3dnmUfWzH08gKbpojrMFcWlEJP76Jd3Jdpad6Zg0wosjMXNMn3BOZGtcJw2jhOgscq4NYW9+yBJhKeSAccxMTjIFFYn6zTHkVGPE7oRVXFfIGCGHiv62R77+NfGkdtDo1Z0p1tqfQWswFCLxB0j5hymI22kQSS3fg2QHCpHbmdLzGMpuXNR74dgDpiCuIaDiyQivnlNfZQriPKa8nxBdUE8yBVkiEY9READpHaYgbuWuhMeoSUTybqYg6xwRCVuzFaNtJf7bn4UtErVIUNzORKQDw7keg5zT2F6MnJgWbmgn0qMWALZRrnFkfLluHyA6/mDUvsiheeqvwB94mg1GbU+NOjXgPQzwxH8YAGBT5NjE+RLAO/5DtkWOgXzDYI6MkWirXOPgTP4SwNOjsCWyM1nr5CWBcJEI2hE5emshB/CELQdEG7O+zl6j6CKS2px1sqsWOXyvIw3wGYQcBKBc2e8OXVBRmh2HZWN0hTKIGzDw/noaArGtqtc7fxXHa0ZxEQKgqtIohbtBMRNPs+Oo/DlaWz8mJulcVlrW8aQ2L7paycviEL5J6fbUDqgcIk/2bPkCUloE4Hta17lySCmKUdnS6BO0APjfqd0vs0RYmn3ZilGZklZMX0BtH/xE78LbZRMXpZECS8Zoh56F1wSaIG7FIGLUMwPObp3U7jSn9FuCcIQmyPp/hCf+n1m7BiZaT62tr9d/OfW39TNgjJsjwkdCmCqI8xq4KIeAEsqrNlkoaowIh/XvqG4Zly9pSdiuDWZAr5WyLc5kr6f0eXVeRGucKRCxPMKR5Md0tywv4onecWcoBS9mU9n51FQolMqv+QtnUvpoXyYqCEI49S3lLbOWJ0OINC2hbVi7lIzyqwV6f+whfVA+8d+vlVwt0ozyUHi6qG/ZqkgqJUockUxFWF/vuQCyRPKerUG7wIz6xbrnN+gGiKtvIooj5EJAen3d0wXvugLi6pqI/jqxJNjWuSYKwxv1j925vF3fTJRr8CPUPSagyFp8niZxrtwmr28H+EgktrovdaqroC609iXOnevtvr0gemhT0JhgfmJ5Os3znJsg6/Ocl9/eNEJCznqXdaJnXVLXHgBQd0LvnfI33vRjq9FvRSj/Txq7zubiEwnqT4RGe4h1rGcVdNjArtcxfERCnfVZ171ogYyjBQ/jZzY0WGfoMHklii2oPrL4IR+dxP/EGNR9hlduE39iC/JGNnQh2YI8YENfhPGDSBo31Gpq9MkoNbSeg8qC/gdF4gf2F2L+bgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_78\",\r\n id: \"78\",\r\n ProductCode: \"CNBK34DRSF250GA\",\r\n ProductDescription: \"Cen BK34D RSF Double 25Deg Galv\",\r\n ProductIndex: \"BK3425G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134035\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR8AAACDBAMAAABGqgLyAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyOCBNYXIgMjAxOCAxNzoxMzoxNyArMDkzMHIWSYIAAAAHdElNRQfiAxwGLDoxh0xwAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////nJyca2trxsbGAAAACAgI7+/vtbW1EBAQISEh5+fnQkJC1tbWKSkpvb299/f3hU0oXgAAAAF0Uk5TAEDm2GYAAAbjSURBVHja7dx/SBtXHADw6zIMc67ZXC3aUjZjrotN3abHurG0A8M7dsdxfzQ8/xBXaCKcsAUZHbQb4obZs9AVYcp1bSgFmz/61/5Y7WVW0pYug/6zfya7YkUsZYXtDymr3R/+N3ax2rwXNT/Oe/fyRx8IIgQ+fN+LyffHO46rrfUia8Bz0HMQHZCPe8waQoAaggtn32AtwUEvAAAkqiJvlaAkku9J+5lGhgC9fDqmR65LB1hjnoFe+kEbMJQO6SBrDQbS+g0lBG6w5mAgbbA2RAWQ1p+RQ+BaDYG0hGGJ7tcQSEsE1EYwV0Mg62TLfshWRIK0fl5uROeP1w5I+5SX/HCc4UftU9BprbCCUisaYSdaBb0i/oyL1Nd0dqJVUF2zeBATNUut5shxliDON0SKxFb9KKMYrX+FXSJELXKrcfQ2UxAXhoRIbDWSx5mCuBxsI0RvmVEWIizryBExGpb9RmSSKYhLw1uYaJ+1a9HbTEFcGuGiR+Bqxv0YkYlijBAtgVk+6XaMijLXNLqPif60YtTncoyKU2nyHOXgdCDibow25Pa/6HOEaIp3V7Sx2BDTzxOiqwFX32ubVD+WzWlMFEcTAeUBUxC3Ys7iIjgbUD5nCuK85ggRo1nevRhtXrDyGuOYKIZmg8q7TEHcTnOCEE0EVJditFVJbwdKXimIBvTkOfUbpiBuGSXxGJl9GdWVItvWRc8VAxcNmMl7rsSoRBX2v0DyTkE0aCj3VBfe/aXKwl4jSoquuyAqWaf28H1/FUQJQ2mXqZ+j0oXzhkDfoYKon+9rp1usLQviPIaKiRK8MkNbVK614A2qJzFRUL1JWVS21+FrUTCRxqsddEUVNF/24THSgmqIakG7ApBvr7wbTyFVv0hRVFF7akjCRc1qiKKosn7ZXvkAnkLKHSK1on+FDbxHRIweSTepiSrtKH4p7sETfylLS1QpyNck4ru2JF7qoSOquOda1yHi5ZqwmIVU2hBVNIGHxBtEjLJwmi2IGxavYaIu0Q9vsQX5WgAustJsNO14abSqvr1vCRIitKDPOS2qcpAgrhNpNlzUnW7VVDvZsIzw4kgcLTjdhqh61CKmj5Mi3dnmUfWzH08gKbpojrMFcWlEJP76Jd3Jdpad6Zg0wosjMXNMn3BOZGtcJw2jhOgscq4NYW9+yBJhKeSAccxMTjIFFYn6zTHkVGPE7oRVXFfIGCGHiv62R77+NfGkdtDo1Z0p1tqfQWswFCLxB0j5hymI22kQSS3fg2QHCpHbmdLzGMpuXNR74dgDpiCuIaDiyQivnlNfZQriPKa8nxBdUE8yBVkiEY9READpHaYgbuWuhMeoSUTybqYg6xwRCVuzFaNtJf7bn4UtErVIUNzORKQDw7keg5zT2F6MnJgWbmgn0qMWALZRrnFkfLluHyA6/mDUvsiheeqvwB94mg1GbU+NOjXgPQzwxH8YAGBT5NjE+RLAO/5DtkWOgXzDYI6MkWirXOPgTP4SwNOjsCWyM1nr5CWBcJEI2hE5emshB/CELQdEG7O+zl6j6CKS2px1sqsWOXyvIw3wGYQcBKBc2e8OXVBRmh2HZWN0hTKIGzDw/noaArGtqtc7fxXHa0ZxEQKgqtIohbtBMRNPs+Oo/DlaWz8mJulcVlrW8aQ2L7paycviEL5J6fbUDqgcIk/2bPkCUloE4Hta17lySCmKUdnS6BO0APjfqd0vs0RYmn3ZilGZklZMX0BtH/xE78LbZRMXpZECS8Zoh56F1wSaIG7FIGLUMwPObp3U7jSn9FuCcIQmyPp/hCf+n1m7BiZaT62tr9d/OfW39TNgjJsjwkdCmCqI8xq4KIeAEsqrNlkoaowIh/XvqG4Zly9pSdiuDWZAr5WyLc5kr6f0eXVeRGucKRCxPMKR5Md0tywv4onecWcoBS9mU9n51FQolMqv+QtnUvpoXyYqCEI49S3lLbOWJ0OINC2hbVi7lIzyqwV6f+whfVA+8d+vlVwt0ozyUHi6qG/ZqkgqJUockUxFWF/vuQCyRPKerUG7wIz6xbrnN+gGiKtvIooj5EJAen3d0wXvugLi6pqI/jqxJNjWuSYKwxv1j925vF3fTJRr8CPUPSagyFp8niZxrtwmr28H+EgktrovdaqroC609iXOnevtvr0gemhT0JhgfmJ5Os3znJsg6/Ocl9/eNEJCznqXdaJnXVLXHgBQd0LvnfI33vRjq9FvRSj/Txq7zubiEwnqT4RGe4h1rGcVdNjArtcxfERCnfVZ171ogYyjBQ/jZzY0WGfoMHklii2oPrL4IR+dxP/EGNR9hlduE39iC/JGNnQh2YI8YENfhPGDSBo31Gpq9MkoNbSeg8qC/gdF4gf2F2L+bgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_79\",\r\n id: \"79\",\r\n ProductCode: \"CNBK34DRSF275GA\",\r\n ProductDescription: \"Cen BK34D RSF Double 27.5Deg Galv\",\r\n ProductIndex: \"BK34275G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134045\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR8AAACDBAMAAABGqgLyAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyOCBNYXIgMjAxOCAxNzoxMzoxNyArMDkzMHIWSYIAAAAHdElNRQfiAxwGLDoxh0xwAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////nJyca2trxsbGAAAACAgI7+/vtbW1EBAQISEh5+fnQkJC1tbWKSkpvb299/f3hU0oXgAAAAF0Uk5TAEDm2GYAAAbjSURBVHja7dx/SBtXHADw6zIMc67ZXC3aUjZjrotN3abHurG0A8M7dsdxfzQ8/xBXaCKcsAUZHbQb4obZs9AVYcp1bSgFmz/61/5Y7WVW0pYug/6zfya7YkUsZYXtDymr3R/+N3ax2rwXNT/Oe/fyRx8IIgQ+fN+LyffHO46rrfUia8Bz0HMQHZCPe8waQoAaggtn32AtwUEvAAAkqiJvlaAkku9J+5lGhgC9fDqmR65LB1hjnoFe+kEbMJQO6SBrDQbS+g0lBG6w5mAgbbA2RAWQ1p+RQ+BaDYG0hGGJ7tcQSEsE1EYwV0Mg62TLfshWRIK0fl5uROeP1w5I+5SX/HCc4UftU9BprbCCUisaYSdaBb0i/oyL1Nd0dqJVUF2zeBATNUut5shxliDON0SKxFb9KKMYrX+FXSJELXKrcfQ2UxAXhoRIbDWSx5mCuBxsI0RvmVEWIizryBExGpb9RmSSKYhLw1uYaJ+1a9HbTEFcGuGiR+Bqxv0YkYlijBAtgVk+6XaMijLXNLqPif60YtTncoyKU2nyHOXgdCDibow25Pa/6HOEaIp3V7Sx2BDTzxOiqwFX32ubVD+WzWlMFEcTAeUBUxC3Ys7iIjgbUD5nCuK85ggRo1nevRhtXrDyGuOYKIZmg8q7TEHcTnOCEE0EVJditFVJbwdKXimIBvTkOfUbpiBuGSXxGJl9GdWVItvWRc8VAxcNmMl7rsSoRBX2v0DyTkE0aCj3VBfe/aXKwl4jSoquuyAqWaf28H1/FUQJQ2mXqZ+j0oXzhkDfoYKon+9rp1usLQviPIaKiRK8MkNbVK614A2qJzFRUL1JWVS21+FrUTCRxqsddEUVNF/24THSgmqIakG7ApBvr7wbTyFVv0hRVFF7akjCRc1qiKKosn7ZXvkAnkLKHSK1on+FDbxHRIweSTepiSrtKH4p7sETfylLS1QpyNck4ru2JF7qoSOquOda1yHi5ZqwmIVU2hBVNIGHxBtEjLJwmi2IGxavYaIu0Q9vsQX5WgAustJsNO14abSqvr1vCRIitKDPOS2qcpAgrhNpNlzUnW7VVDvZsIzw4kgcLTjdhqh61CKmj5Mi3dnmUfWzH08gKbpojrMFcWlEJP76Jd3Jdpad6Zg0wosjMXNMn3BOZGtcJw2jhOgscq4NYW9+yBJhKeSAccxMTjIFFYn6zTHkVGPE7oRVXFfIGCGHiv62R77+NfGkdtDo1Z0p1tqfQWswFCLxB0j5hymI22kQSS3fg2QHCpHbmdLzGMpuXNR74dgDpiCuIaDiyQivnlNfZQriPKa8nxBdUE8yBVkiEY9READpHaYgbuWuhMeoSUTybqYg6xwRCVuzFaNtJf7bn4UtErVIUNzORKQDw7keg5zT2F6MnJgWbmgn0qMWALZRrnFkfLluHyA6/mDUvsiheeqvwB94mg1GbU+NOjXgPQzwxH8YAGBT5NjE+RLAO/5DtkWOgXzDYI6MkWirXOPgTP4SwNOjsCWyM1nr5CWBcJEI2hE5emshB/CELQdEG7O+zl6j6CKS2px1sqsWOXyvIw3wGYQcBKBc2e8OXVBRmh2HZWN0hTKIGzDw/noaArGtqtc7fxXHa0ZxEQKgqtIohbtBMRNPs+Oo/DlaWz8mJulcVlrW8aQ2L7paycviEL5J6fbUDqgcIk/2bPkCUloE4Hta17lySCmKUdnS6BO0APjfqd0vs0RYmn3ZilGZklZMX0BtH/xE78LbZRMXpZECS8Zoh56F1wSaIG7FIGLUMwPObp3U7jSn9FuCcIQmyPp/hCf+n1m7BiZaT62tr9d/OfW39TNgjJsjwkdCmCqI8xq4KIeAEsqrNlkoaowIh/XvqG4Zly9pSdiuDWZAr5WyLc5kr6f0eXVeRGucKRCxPMKR5Md0tywv4onecWcoBS9mU9n51FQolMqv+QtnUvpoXyYqCEI49S3lLbOWJ0OINC2hbVi7lIzyqwV6f+whfVA+8d+vlVwt0ozyUHi6qG/ZqkgqJUockUxFWF/vuQCyRPKerUG7wIz6xbrnN+gGiKtvIooj5EJAen3d0wXvugLi6pqI/jqxJNjWuSYKwxv1j925vF3fTJRr8CPUPSagyFp8niZxrtwmr28H+EgktrovdaqroC609iXOnevtvr0gemhT0JhgfmJ5Os3znJsg6/Ocl9/eNEJCznqXdaJnXVLXHgBQd0LvnfI33vRjq9FvRSj/Txq7zubiEwnqT4RGe4h1rGcVdNjArtcxfERCnfVZ171ogYyjBQ/jZzY0WGfoMHklii2oPrL4IR+dxP/EGNR9hlduE39iC/JGNnQh2YI8YENfhPGDSBo31Gpq9MkoNbSeg8qC/gdF4gf2F2L+bgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_80\",\r\n id: \"80\",\r\n ProductCode: \"CNBK34DRSF300GA\",\r\n ProductDescription: \"Cen BK34D RSF Double 30Deg Galv\",\r\n ProductIndex: \"BK3430G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134050\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"37.55\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_81\",\r\n id: \"81\",\r\n ProductCode: \"CNBK34SRSF150GA\",\r\n ProductDescription: \"Cen BK34S RSF Single 15Deg Galv\",\r\n ProductIndex: \"BK34S15G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134060\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"38.67\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_82\",\r\n id: \"82\",\r\n ProductCode: \"CNBK34SRSF175GA\",\r\n ProductDescription: \"Cen BK34S RSF Single 17.5Deg Galv\",\r\n ProductIndex: \"BK34S175G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134065\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_83\",\r\n id: \"83\",\r\n ProductCode: \"CNBK34SRSF200GA\",\r\n ProductDescription: \"Cen BK34S RSF Single 20Deg Galv\",\r\n ProductIndex: \"BK34S20G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"38.67\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR8AAACDBAMAAABGqgLyAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAyOCBNYXIgMjAxOCAxNzoxMzoxNyArMDkzMHIWSYIAAAAHdElNRQfiAxwGLDoxh0xwAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////nJyca2trxsbGAAAACAgI7+/vtbW1EBAQISEh5+fnQkJC1tbWKSkpvb299/f3hU0oXgAAAAF0Uk5TAEDm2GYAAAbjSURBVHja7dx/SBtXHADw6zIMc67ZXC3aUjZjrotN3abHurG0A8M7dsdxfzQ8/xBXaCKcsAUZHbQb4obZs9AVYcp1bSgFmz/61/5Y7WVW0pYug/6zfya7YkUsZYXtDymr3R/+N3ax2rwXNT/Oe/fyRx8IIgQ+fN+LyffHO46rrfUia8Bz0HMQHZCPe8waQoAaggtn32AtwUEvAAAkqiJvlaAkku9J+5lGhgC9fDqmR65LB1hjnoFe+kEbMJQO6SBrDQbS+g0lBG6w5mAgbbA2RAWQ1p+RQ+BaDYG0hGGJ7tcQSEsE1EYwV0Mg62TLfshWRIK0fl5uROeP1w5I+5SX/HCc4UftU9BprbCCUisaYSdaBb0i/oyL1Nd0dqJVUF2zeBATNUut5shxliDON0SKxFb9KKMYrX+FXSJELXKrcfQ2UxAXhoRIbDWSx5mCuBxsI0RvmVEWIizryBExGpb9RmSSKYhLw1uYaJ+1a9HbTEFcGuGiR+Bqxv0YkYlijBAtgVk+6XaMijLXNLqPif60YtTncoyKU2nyHOXgdCDibow25Pa/6HOEaIp3V7Sx2BDTzxOiqwFX32ubVD+WzWlMFEcTAeUBUxC3Ys7iIjgbUD5nCuK85ggRo1nevRhtXrDyGuOYKIZmg8q7TEHcTnOCEE0EVJditFVJbwdKXimIBvTkOfUbpiBuGSXxGJl9GdWVItvWRc8VAxcNmMl7rsSoRBX2v0DyTkE0aCj3VBfe/aXKwl4jSoquuyAqWaf28H1/FUQJQ2mXqZ+j0oXzhkDfoYKon+9rp1usLQviPIaKiRK8MkNbVK614A2qJzFRUL1JWVS21+FrUTCRxqsddEUVNF/24THSgmqIakG7ApBvr7wbTyFVv0hRVFF7akjCRc1qiKKosn7ZXvkAnkLKHSK1on+FDbxHRIweSTepiSrtKH4p7sETfylLS1QpyNck4ru2JF7qoSOquOda1yHi5ZqwmIVU2hBVNIGHxBtEjLJwmi2IGxavYaIu0Q9vsQX5WgAustJsNO14abSqvr1vCRIitKDPOS2qcpAgrhNpNlzUnW7VVDvZsIzw4kgcLTjdhqh61CKmj5Mi3dnmUfWzH08gKbpojrMFcWlEJP76Jd3Jdpad6Zg0wosjMXNMn3BOZGtcJw2jhOgscq4NYW9+yBJhKeSAccxMTjIFFYn6zTHkVGPE7oRVXFfIGCGHiv62R77+NfGkdtDo1Z0p1tqfQWswFCLxB0j5hymI22kQSS3fg2QHCpHbmdLzGMpuXNR74dgDpiCuIaDiyQivnlNfZQriPKa8nxBdUE8yBVkiEY9READpHaYgbuWuhMeoSUTybqYg6xwRCVuzFaNtJf7bn4UtErVIUNzORKQDw7keg5zT2F6MnJgWbmgn0qMWALZRrnFkfLluHyA6/mDUvsiheeqvwB94mg1GbU+NOjXgPQzwxH8YAGBT5NjE+RLAO/5DtkWOgXzDYI6MkWirXOPgTP4SwNOjsCWyM1nr5CWBcJEI2hE5emshB/CELQdEG7O+zl6j6CKS2px1sqsWOXyvIw3wGYQcBKBc2e8OXVBRmh2HZWN0hTKIGzDw/noaArGtqtc7fxXHa0ZxEQKgqtIohbtBMRNPs+Oo/DlaWz8mJulcVlrW8aQ2L7paycviEL5J6fbUDqgcIk/2bPkCUloE4Hta17lySCmKUdnS6BO0APjfqd0vs0RYmn3ZilGZklZMX0BtH/xE78LbZRMXpZECS8Zoh56F1wSaIG7FIGLUMwPObp3U7jSn9FuCcIQmyPp/hCf+n1m7BiZaT62tr9d/OfW39TNgjJsjwkdCmCqI8xq4KIeAEsqrNlkoaowIh/XvqG4Zly9pSdiuDWZAr5WyLc5kr6f0eXVeRGucKRCxPMKR5Md0tywv4onecWcoBS9mU9n51FQolMqv+QtnUvpoXyYqCEI49S3lLbOWJ0OINC2hbVi7lIzyqwV6f+whfVA+8d+vlVwt0ozyUHi6qG/ZqkgqJUockUxFWF/vuQCyRPKerUG7wIz6xbrnN+gGiKtvIooj5EJAen3d0wXvugLi6pqI/jqxJNjWuSYKwxv1j925vF3fTJRr8CPUPSagyFp8niZxrtwmr28H+EgktrovdaqroC609iXOnevtvr0gemhT0JhgfmJ5Os3znJsg6/Ocl9/eNEJCznqXdaJnXVLXHgBQd0LvnfI33vRjq9FvRSj/Txq7zubiEwnqT4RGe4h1rGcVdNjArtcxfERCnfVZ171ogYyjBQ/jZzY0WGfoMHklii2oPrL4IR+dxP/EGNR9hlduE39iC/JGNnQh2YI8YENfhPGDSBo31Gpq9MkoNbSeg8qC/gdF4gf2F2L+bgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_84\",\r\n id: \"84\",\r\n ProductCode: \"CNBK34SRSF225GA\",\r\n ProductDescription: \"Cen BK34S RSF Single 22.5Deg Galv\",\r\n ProductIndex: \"BK34S225G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134075\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_85\",\r\n id: \"85\",\r\n ProductCode: \"CNBK34SRSF250GA\",\r\n ProductDescription: \"Cen Bk34S RSF Single 25Deg Galv\",\r\n ProductIndex: \"BK34S25G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134085\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"0\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_86\",\r\n id: \"86\",\r\n ProductCode: \"CNBK34SRSF275GA\",\r\n ProductDescription: \"Cen BK34S RSF Single 27.5Deg Galv\",\r\n ProductIndex: \"BK34S275G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134095\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"136.59\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_87\",\r\n id: \"87\",\r\n ProductCode: \"CNBK34SRSF300GA\",\r\n ProductDescription: \"Cen BK34S RSF Single 30Deg Galv\",\r\n ProductIndex: \"BK34S30G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"134100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"37.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6\",\r\n PromptTextCodes: \"$$=55\",\r\n Colours: \"\",\r\n LiveCost: \"38.67\",\r\n AncillaryParts: \"3xBNW1060Z(BK34 Fix) 2x10X90(BK34 Fix) 2xBK2164G(BK34 Fix)\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_88\",\r\n id: \"88\",\r\n ProductCode: \"CNBK36CTGES**\",\r\n ProductDescription: \"Cen BK36 Top Gable End Strut **\",\r\n ProductIndex: \"BK36\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"136011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.3516\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1471\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.59\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_89\",\r\n id: \"89\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK3 6565 *Non Std* Colour Coated Con\",\r\n ProductIndex: \"BK36565NSCD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"CFC CFA\",\r\n Colours: \"\",\r\n LiveCost: \"3.2265\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_90\",\r\n id: \"90\",\r\n ProductCode: \"CNBK410865ISGA\",\r\n ProductDescription: \"Cen BK4 108X65 Internal Slab Connector Galv\",\r\n ProductIndex: \"BK410865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"104125\",\r\n SellingUOM: \"EA\",\r\n Cost: \"15\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1261\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"71.24\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_91\",\r\n id: \"91\",\r\n ProductCode: \"CNBK415865ISGA\",\r\n ProductDescription: \"Cen BK4 158X65 Internal Slab Connector Galv\",\r\n ProductIndex: \"BK415865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"104135\",\r\n SellingUOM: \"EA\",\r\n Cost: \"15\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"71.24\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_92\",\r\n id: \"92\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK44 15865 Hip Rafter Top Bracket **\",\r\n ProductIndex: \"BK44S158NS\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.263\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_93\",\r\n id: \"93\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK46 Beam To Beam Conn. *Non Std* Colour Coated\",\r\n ProductIndex: \"BK46CD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.006\",\r\n PromptTextCodes: \"CFC D RH/LH\",\r\n Colours: \"\",\r\n LiveCost: \"3.3112\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_94\",\r\n id: \"94\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK46 Beam To Beam Conn. *Non Std* Colour Coated\",\r\n ProductIndex: \"BK46S\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.006\",\r\n PromptTextCodes: \"CFC D RH/LH\",\r\n Colours: \"\",\r\n LiveCost: \"3.3112\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_95\",\r\n id: \"95\",\r\n ProductCode: \"CNBK47HRBL**\",\r\n ProductDescription: \"Cen BK47 Hip Rafter LH Brkt **\",\r\n ProductIndex: \"BK47LH\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"147011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.51\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.238\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"33.61\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_96\",\r\n id: \"96\",\r\n ProductCode: \"CNBK47HRBR**\",\r\n ProductDescription: \"Cen BK47 Hip Rafter RH Brkt **\",\r\n ProductIndex: \"BK47RH\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"147011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.51\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.238\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"33.61\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_97\",\r\n id: \"97\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"BK49 108X65 Beam Conn. *Non Std* End To End Coloured\",\r\n ProductIndex: \"BK4910865NSCD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"2\",\r\n MarkupCarport: \"2\",\r\n SellingUnitWeight: \"0.8496\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"3.7795\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_98\",\r\n id: \"98\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"BK49 158X65 Beam Conn. *Non Std* End To End Coloured\",\r\n ProductIndex: \"BK4915865NSCD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"2\",\r\n MarkupCarport: \"2\",\r\n SellingUnitWeight: \"0.8496\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"4.2334\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_99\",\r\n id: \"99\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"BK49 208X65 Beam Conn. *Non Std* End To End Coloured\",\r\n ProductIndex: \"BK4920865NSCD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"2\",\r\n MarkupCarport: \"2\",\r\n SellingUnitWeight: \"0.8496\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"3.7795\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_100\",\r\n id: \"100\",\r\n ProductCode: \"CNBK50KPLSGA\",\r\n ProductDescription: \"Cen BK50 Kingpost Lower Section Galv Powder Coated\",\r\n ProductIndex: \"BK50KPLSG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"150015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"35.65\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.1185\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"99.14\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_101\",\r\n id: \"101\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK57 Compound Bracket *Non Std* Coloured\",\r\n ProductIndex: \"BK57\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.5788\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2855\",\r\n PromptTextCodes: \"CFC D RH/LH\",\r\n Colours: \"\",\r\n LiveCost: \"0.5788\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_102\",\r\n id: \"102\",\r\n ProductCode: \"CNBK62RSAGA\",\r\n ProductDescription: \"Cen BK62 Rafter Strengthening Arm Galv\",\r\n ProductIndex: \"BK62G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"162015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"22.06\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4.08\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"94.00\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_103\",\r\n id: \"103\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK63 158X65 Barge Beam To Fascia Connector Powder Coated\",\r\n ProductIndex: \"BK63CD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.141\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3993\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"3.6358\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_104\",\r\n id: \"104\",\r\n ProductCode: \"CNBK64DFPGA\",\r\n ProductDescription: \"Cen BK64 Double Face Plate Galv\",\r\n ProductIndex: \"BK64DFPG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"164015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"17.83\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.14\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"75.97\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_105\",\r\n id: \"105\",\r\n ProductCode: \"CNBK64MFPGA\",\r\n ProductDescription: \"Cen BK64 Mid Face Plate Galv\",\r\n ProductIndex: \"BK64MFPG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"164025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"16.66\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.14\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"70.98\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_106\",\r\n id: \"106\",\r\n ProductCode: \"CNBK64SFPGA\",\r\n ProductDescription: \"Cen BK64 Single Face Plate Galv\",\r\n ProductIndex: \"BK64SFPG\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"164035\",\r\n SellingUOM: \"EA\",\r\n Cost: \"16.09\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.14\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"68.55\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_107\",\r\n id: \"107\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK65 158X65 Gazebo Fascia Bracket Colour Coated\",\r\n ProductIndex: \"BK65CD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9383\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"4.2259\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_108\",\r\n id: \"108\",\r\n ProductCode: \"CNBK69WCKNSCB\",\r\n ProductDescription: \"CEN BK69 WALL COLUMN KIT COLOUR COATED\",\r\n ProductIndex: \"BK69CD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"169016\",\r\n SellingUOM: \"EA\",\r\n Cost: \"\",\r\n MfgLocations: \"\",\r\n Markup: \"\",\r\n MarkupCarport: \"\",\r\n SellingUnitWeight: \"\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"662.62\",\r\n AncillaryParts: \"POWBK69\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_109\",\r\n id: \"109\",\r\n ProductCode: \"CNBK7JRCUP**\",\r\n ProductDescription: \"Cen BK7 Jack Raft Upper **\",\r\n ProductIndex: \"BK7\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"107011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.65\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.078\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.96\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_110\",\r\n id: \"110\",\r\n ProductCode: \"CNBK74CFB**\",\r\n ProductDescription: \"Cen BK74 Ceiling Fan Bracket **\",\r\n ProductIndex: \"BK74\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"174011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.4781\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6004\",\r\n PromptTextCodes: \"D\",\r\n Colours: \"\",\r\n LiveCost: \"22.07\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_111\",\r\n id: \"111\",\r\n ProductCode: \"CNBK75AGPFB65GA\",\r\n ProductDescription: \"Cen BK75A Gazebo Post/Fascia BKt * Type A * Suit 65X65\",\r\n ProductIndex: \"BK75A6565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"83.04\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_112\",\r\n id: \"112\",\r\n ProductCode: \"CNBK75AGPFB75GA\",\r\n ProductDescription: \"Cen BK75A Gazebo Post/Fascia BKt * Type A * Suit 75X75 Galv\",\r\n ProductIndex: \"BK75A7575G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175012\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"87.68\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_113\",\r\n id: \"113\",\r\n ProductCode: \"CNBK75AGPFB90GA\",\r\n ProductDescription: \"Cen BK75A Gazebo Post/Fascia BKt * Type A * Suit 90X90 Galv\",\r\n ProductIndex: \"BK75A9090G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175013\",\r\n SellingUOM: \"EA\",\r\n Cost: \"21\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"88.52\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_114\",\r\n id: \"114\",\r\n ProductCode: \"CNBK75BGPFB65GA\",\r\n ProductDescription: \"Cen BK75B Gazebo Post/Fascia BKt * Type B * Suit 65X65\",\r\n ProductIndex: \"BK75B6565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"83.04\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_115\",\r\n id: \"115\",\r\n ProductCode: \"CNBK75BGPFB75GA\",\r\n ProductDescription: \"Cen BK75B Gazebo Post/Fascia BKt * Type B * Suit 75X75 Galv\",\r\n ProductIndex: \"BK75B7575G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175022\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"85.97\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_116\",\r\n id: \"116\",\r\n ProductCode: \"CNBK75BGPFB90GA\",\r\n ProductDescription: \"Cen BK75B Gazebo Post/Fascia BKt * Type B * Suit 90X90 Galv\",\r\n ProductIndex: \"BK75B9090G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175023\",\r\n SellingUOM: \"EA\",\r\n Cost: \"21\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"88.52\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_117\",\r\n id: \"117\",\r\n ProductCode: \"CNBK75CGPFB65GA\",\r\n ProductDescription: \"Cen BK75C Gazebo Post/Fascia BKt * Type C * Suit 65X65\",\r\n ProductIndex: \"BK75C6565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"83.04\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_118\",\r\n id: \"118\",\r\n ProductCode: \"CNBK75CGPFB75GA\",\r\n ProductDescription: \"Cen BK75C Gazebo Post/Fascia BKt * Type C * Suit 75X75 Galv\",\r\n ProductIndex: \"BK75C7575G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175032\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"87.68\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_119\",\r\n id: \"119\",\r\n ProductCode: \"CNBK75CGPFB90GA\",\r\n ProductDescription: \"Cen BK75C Gazebo Post/Fascia BKt * Type C * Suit 90X90 Galv\",\r\n ProductIndex: \"BK75C9090G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175033\",\r\n SellingUOM: \"EA\",\r\n Cost: \"21\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"88.52\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_120\",\r\n id: \"120\",\r\n ProductCode: \"CNBK75DGPFB65GA\",\r\n ProductDescription: \"Cen BK75D Gazebo Post/Fascia BKt * Type D * Suit 65X65 Galv\",\r\n ProductIndex: \"BK75D6565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"175041\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.922\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.1\",\r\n PromptTextCodes: \"CFC\",\r\n Colours: \"\",\r\n LiveCost: \"79.24\",\r\n AncillaryParts: \"POWBK75\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_121\",\r\n id: \"121\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK77 150X50 Rafter To Edge Beam Con Colour Coated\",\r\n ProductIndex: \"BK7715050CD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1746\",\r\n PromptTextCodes: \"CFC A\",\r\n Colours: \"\",\r\n LiveCost: \"3.3157\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_122\",\r\n id: \"122\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen BK78 150X50 Infill Beam To Curved RHs Bracket Colour Coated\",\r\n ProductIndex: \"BK7815050CD\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.7176\",\r\n PromptTextCodes: \"CFC A\",\r\n Colours: \"\",\r\n LiveCost: \"4.0176\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_123\",\r\n id: \"123\",\r\n ProductCode: \"CNBK80108FSE**\",\r\n ProductDescription: \"Cen BK80 108X65 Flooring Stop End **\",\r\n ProductIndex: \"BK80108\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.6\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.52\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_124\",\r\n id: \"124\",\r\n ProductCode: \"CNBK80108FSEGA\",\r\n ProductDescription: \"Cen BK80 108X65 Cent. Flooring Stop End Galv\",\r\n ProductIndex: \"BK8010865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.76\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"11.98\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_125\",\r\n id: \"125\",\r\n ProductCode: \"CNBK80108FSEGA\",\r\n ProductDescription: \"Cen BK80 108X65 Cent. Flooring Stop End Galv\",\r\n ProductIndex: \"BK80108G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.76\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"11.98\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_126\",\r\n id: \"126\",\r\n ProductCode: \"CNBK80158FSE**\",\r\n ProductDescription: \"Cen BK80 158X65 Flooring Stop End **\",\r\n ProductIndex: \"BK80158\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.75\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.202\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"16.80\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_127\",\r\n id: \"127\",\r\n ProductCode: \"CNBK80158FSEGA\",\r\n ProductDescription: \"Cen BK80 158X65 Cent. Flooring Stop End Galv\",\r\n ProductIndex: \"BK80158G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180035\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.202\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.31\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_128\",\r\n id: \"128\",\r\n ProductCode: \"CNBK80208FSE**\",\r\n ProductDescription: \"Cen BK80 208X65 Flooring Stop End **\",\r\n ProductIndex: \"BK80208\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180041\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.2\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.275\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.79\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_129\",\r\n id: \"129\",\r\n ProductCode: \"CNBK80208FSEGA\",\r\n ProductDescription: \"Cen BK80 208X65 Cent. Flooring Stop End Galv\",\r\n ProductIndex: \"BK80208G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180045\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.35\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.275\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_130\",\r\n id: \"130\",\r\n ProductCode: \"CNBK82108JGA\",\r\n ProductDescription: \"Cen BK82 108 65 Joist To Bearer Bracket Galv\",\r\n ProductIndex: \"BK8210865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"182015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2991\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.97\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_131\",\r\n id: \"131\",\r\n ProductCode: \"CNBK82108JGA\",\r\n ProductDescription: \"Cen BK82 108 65 Joist To Bearer Bracket Galv\",\r\n ProductIndex: \"BK82108G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"182015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2991\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.97\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_132\",\r\n id: \"132\",\r\n ProductCode: \"CNBK82158208JGA\",\r\n ProductDescription: \"Cen BK82 158/208 65 Joist To Bearer Bracket Galv\",\r\n ProductIndex: \"BK8215865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"182025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.3833\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.245\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.3258\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_133\",\r\n id: \"133\",\r\n ProductCode: \"CNBK82158208JGA\",\r\n ProductDescription: \"Cen BK82 158/208 65 Joist To Bearer Bracket Galv\",\r\n ProductIndex: \"BK82158G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"182025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.3833\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.245\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.299\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_134\",\r\n id: \"134\",\r\n ProductCode: \"CNBK82158208JGA\",\r\n ProductDescription: \"Cen BK82 158/208 65 Joist To Bearer Bracket Galv\",\r\n ProductIndex: \"BK8220865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"182025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.3833\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.245\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.3258\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_135\",\r\n id: \"135\",\r\n ProductCode: \"CNBK82158208JGA\",\r\n ProductDescription: \"Cen BK82 158/208 65 Joist To Bearer Bracket Galv\",\r\n ProductIndex: \"BK82208G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"182025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.3833\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.245\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.299\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_136\",\r\n id: \"136\",\r\n ProductCode: \"CNBK83@@PHRCLGA\",\r\n ProductDescription: \"Cen BK83L-45Deg @@ Pitch Hip Rafter To Purlin Conn Left Powder Coated\",\r\n ProductIndex: \"BK83L45\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"183025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.36\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.24\",\r\n PromptTextCodes: \"BK83\",\r\n Colours: \"\",\r\n LiveCost: \"20.18\",\r\n AncillaryParts: \"POWBK 4xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_137\",\r\n id: \"137\",\r\n ProductCode: \"CNBK83@@PHRCRGA\",\r\n ProductDescription: \"Cen BK83R-45Deg @@ Pitch Hip Rafter To Purlin Conn Right Powder Coated\",\r\n ProductIndex: \"BK83R45\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"183025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.36\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5625\",\r\n PromptTextCodes: \"BK83\",\r\n Colours: \"\",\r\n LiveCost: \"20.18\",\r\n AncillaryParts: \"POWBK 4xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_138\",\r\n id: \"138\",\r\n ProductCode: \"CNBK8665SP80G**\",\r\n ProductDescription: \"Cen BK86 65X65 Sunken Purlin Bracket **\",\r\n ProductIndex: \"BK86\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"186012\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8.75\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.215\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"49.65\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_139\",\r\n id: \"139\",\r\n ProductCode: \"CNBK8665SPGA\",\r\n ProductDescription: \"Cen BK86 65X65 Sunken Purlin Bracket Galv\",\r\n ProductIndex: \"BK86G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"186015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.25\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.215\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"40.81\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_140\",\r\n id: \"140\",\r\n ProductCode: \"CNBK872CFB225GA\",\r\n ProductDescription: \"Cen BK87 Ceiling Fan Bracket 22.5Deg 2.00mm Galv\",\r\n ProductIndex: \"BK87\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"187015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.4\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"40.25\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_141\",\r\n id: \"141\",\r\n ProductCode: \"CNBK88108BBSE**\",\r\n ProductDescription: \"Cen BK88 108 Box Beam Stop End **\",\r\n ProductIndex: \"BK88108G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"188021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.3\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.12\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.00\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_142\",\r\n id: \"142\",\r\n ProductCode: \"CNBK88158BBSE**\",\r\n ProductDescription: \"Cen BK88 158 Box Beam Stop End **\",\r\n ProductIndex: \"BK88158G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"188031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.58\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.14\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.63\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_143\",\r\n id: \"143\",\r\n ProductCode: \"CNBK88208BBSE**\",\r\n ProductDescription: \"Cen BK88 208 Box Beam Stop End **\",\r\n ProductIndex: \"BK88208G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"188041\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.85\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.16\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.68\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_144\",\r\n id: \"144\",\r\n ProductCode: \"CNBK8865BBSE**\",\r\n ProductDescription: \"Cen BK88 65 Box Beam Stop End **\",\r\n ProductIndex: \"BK8865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"188011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.08\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.36\",\r\n AncillaryParts: \"6xRI43100(Beam End Cap Fix)\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_145\",\r\n id: \"145\",\r\n ProductCode: \"CNBK8HJRCLGA\",\r\n ProductDescription: \"Cen BK8 Hipjack Raft Con Lower Galv\",\r\n ProductIndex: \"BK8G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"108015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.58\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.064\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.74\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_146\",\r\n id: \"146\",\r\n ProductCode: \"CNBK9HRCUL**\",\r\n ProductDescription: \"Cen BK9 LH DG Hipraft Upper **\",\r\n ProductIndex: \"BK9LH\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"109011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.94\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.096\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.68\",\r\n AncillaryParts: \"2xTS1220100B8 2xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_147\",\r\n id: \"147\",\r\n ProductCode: \"CNBK9HRCUR**\",\r\n ProductDescription: \"Cen BK9 RH DG Hipraft Upper **\",\r\n ProductIndex: \"BK9RH\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"109011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.94\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.096\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.68\",\r\n AncillaryParts: \"2xTS1220100B8 2xTS1016100B8\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_148\",\r\n id: \"148\",\r\n ProductCode: \"BNW10120GA\",\r\n ProductDescription: \"Cen Bolt Nut Washer (Galv) 10X120\",\r\n ProductIndex: \"BNW10120G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824203\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.415\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.094\",\r\n PromptTextCodes: 'Desc=\"10x120mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"3.51\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_149\",\r\n id: \"149\",\r\n ProductCode: \"CHBN10170GA\",\r\n ProductDescription: \"Cen Bolt Nut Washer (Galv) 10X170\",\r\n ProductIndex: \"BNW10170G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"913932\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.586\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.12\",\r\n PromptTextCodes: 'Desc=\"10x170mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"5.38\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_150\",\r\n id: \"150\",\r\n ProductCode: \"BNWHH1020ZP\",\r\n ProductDescription: \"M10X20 G4.60 H/H Zinc (BNW)\",\r\n ProductIndex: \"BNW1020\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824262\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1334\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'Desc=\"10x20mm Hex Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"0.57\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAABTBAMAAAAl7HJDAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMTozMTowMiArMDkzMFyV8VYAAAAHdElNRQfiBBICCAUj/4MUAAAACXBIWXMAAArwAAAK8AFCrDSYAAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/v5+fn3t7e1tbWzs7OwcHBtbW1ra2thISEkJCQpaWlnJyce3t7SUlJ9/f3a7QCNAAAAAF0Uk5TAEDm2GYAABIKSURBVHja7Jp9bBv3ecdJ+aXzuqwWZTnFVsAiJVpC00EWX+ygCRCbL3IaB8gi8k6e7QG2xTs6fhm21OLJktwtcSxSojx0CBrnTjxjbWpJdzwGRR2LNO8UdIktiXen/LHl7Sj9+OeyFCMROU72R//gnh+lZMFKGRHlzB3gR4Aln3w/f+75PS/f53c0mR7YA3tgD+yBPbD/B+a+3wBrM5vVfoLaer8p7m6PSYquS7qoi8J1p2NHS6z3DxrYfFLSVFGXdUXlX3IRtq2WgZld9xvqLlanAquu6JIiSqGgz2Gt/3zkjfsNdRf7rgiwuiqCJSi/19FJezvj63Wwudl/4hviPcQCqaRCAItjFEmEw1GCoqfWBWtp9ocz8q++EVxzvwqk2MGq+iodoZmgp2F35NTe2nPO4ifCTFyOxb8CDI9grb8nabwpJ2VFcC7wCpdJstfne6Le4iYvLNW6YGN/gokysVisL3P0y4stYYbye+4F8KOGxAkSDl+BfzXeF3T5u5oD1s5IrWs3TpfyUYZh+uLR+FDTysW6AV2OMr371o9rfg7Cl6vwssKsej3gbPE6vVY73VTbeg2nC8VFJgK8cjQW61q5ulNNgr+ZnvU7eIPAcpXwlSCC6exxN+H3BXxeJ/lsbesd5hEai4TBwRARo2eXAetOS3o6wkSojnXz/jliIRyAV1PUMSbzRMvBPpKiPM7tvTUttzmFEOKimJeJRQfSy3Vxw42kLkeoMB1oWi/vUwa4NyMrqiarSXW82c0oMzTZ5euI1bR3fwG4yJis8AJx5njl6k5W0jPRIBlej4O3WswWi2U4D9Era7qWGeU19pbroKxf9PvJkPfU3loWnUYQD8ZiZIU3fhE/tbkNCpAcDbWE6a41rVZvMjWZzPXLf/F1UgSxn4d0g3DQdFlBc+KPXeHMfJfL8VfvW9v+sgbcjahiRpqu8PbF07gkmI9w8D9ovbZOOvB1d62uacOuOoe5xVFHNJn8Pn83Q9NUJHISwlcEWkWSVVaSvCcyZwWL0/E3H7m2/boG3j8BVlTEGbfiYBkHhPkk8Or6lKclTDV93SfvCO5yd7nPtndesJAMzcTwihHmEvByqqTIWiwlieMt0wsevcPnuvSew0bVwPvHyNBTpSLKp5kVB+OAqDsnQvGR5kK2ExHPXe42N1v9XpfHHXSFnKE9ATvtCgd2Mo4DaTosK1DBIBJSBiupQmZASY5CXs+4UuMe1etz8mdt7d01JNwWlI9nBYiILzIuHgWH1t2o1HcpYj0YDd1lVXfIF3QF3WQLGdxPDfmYwMHr/tHr3exMeJA1EMvyBsfn4dGTo3pOm0YoP0RE6WfiS/ZPUw6yo7WGAH4IjclZFYDHVvwbje3D5UysqL/0vt1y7+oBYe+jiCAdoEPhCJ0+PdQ/eYqfVcSBFDcbvwEuYMF4BL1C1GAxvVBC+V4iPtWebWneZtj87W1/WwvvrCzwLGckKgGMZUQP8GZ1zMvO9bSMTq1a0TYOzo5GTqcPa2E1pmbUUaSl8qoxmTI4GaQCwokm8obACSIEBosKpVI+5D3yM6/q8GxffMLtsNeQcA8Zg5rApwTDGPqiokGL24h5tVhW6m0enF1VQxzhNFbj5oTF3GKOUxOpolpIvpPPIkkQK6zgXg4ZPMuKXMrgK7wgHpSuYcLX9rMlv8f+Vg28+RHtY5RKcWiGZMJMH/TkIeAFxZpkgt3ilOPw3GoVbWNKEAWBFfg8z7FiKoHyKaQXFlOGzkLNTSqagMMBsQYL/wjxxVKptOB12Q7cOjXk/97LSxbH7aFaeIf7DYPnOXTZvhwQ8cxe0yaIuXSk487obFerdHYV3h/AVoPvAJYTDZWXWJHlVCRxooogwCQVfskViugLA9zS+y5/xzaZoO0/et/leGZHtBZeAfPOC2jR1l2pD4p0DHhVLhJ54vbhZE+rMGOtfuu0AQ7kRBZXLREkeVbkMLGh4+8sx+N8KyCQJ6w4KYg5zPuey+9sPjxF737yot/b5RhoqoHXAF4jxRvGsZ0QDnGouy+YNqlqIkK1l3eKvXv4yziAf9/HmxELqYSbbVKdG9WVHORWDuXnES6F8CQQB6KQHzo8ESMjdF/0+5j3NZ/PGXBHCTfR5fQH951Z+9D5EEKXDIR4CMIXG05AjRd14RrEr5roDbabPs0OkamF6hLiaQN7Nw9sCRjW4ZuIuHmUn85rwAtVV4RHESaJ3VEm0pfOxCOQbqW3fS6np9nVTQT9Hc3Ojh+ufRx4CBXncXTxeXRzCUSvquvCTezfyZBzx3dun56lU/meajfWnTcgy1gVHJkQxSzPGRxi5xGk22wOR64AUaGLkhaTZTkja3Ia894Muv0eZ0snQRI+p836/aO18xroqmVQwqpBuIr9Ox6w7SiXn5yj542z1W7cmMI63BDAyxIMlEgwJGSk0OUUOySwSJRykHe6LsnRvpgcBeSpfwTet3xuMuDzkSGSIIK2Hd/7u1p4U2g5iS/bRvUK7zjwZmd8DuBt1ehpdL2pyo2boLLmBcAUUTKXyCE9rxncvDHJs908j+DBpayiyZKShpJDy3om9lypVDzutBMBEL8wCPj8Tut3a+K9VFzmfbVlVMcqRXhl64asMh70Au92PTKMJvZWufFbLJfK57gsVNs5YWKYixsZLnmJHxdEN3T3pAJ6FKqNHsvEMtFwBhx8CPx7wWMPeohOOkJSIJKafvebWniHMS7k3KITHIJ5L2+t69dnabq9XL6jpIdLY9V0ycOslh2b50a5ITWtDD2nx3RamjmvP88wdhYZGRy1EYLMZjIxORPXMrF4FHif92xzBGnSR3f2UqR/1+/+pQbe0sgKb947Kld4X20y9+vJqHzsk/LtwdlzhYWqvAlapoajJNMTI2KeA9Ruhpw8e3KogyJ3JoQ8jgKG8vlHkhookjj+il4plV5wbnO66KAFlHzQZdv38Nob8hZU0jFvnkdGzwrvQpP5pC7o4ovl8tLpuf7CwtEq9XfTnH3I2rbvs2MNF23XLQeO7by2+9Yzp55ZCjRvT6giqGk6TDgch5JyhVfRYumfQD0jMz1BJuiKdBJd7mbPf/1TDbyFJHYv6BHUi3lBZI81mY7MpfLsr8vl8oHkAFo8WuXGuoglsKO16bNjt6/dDtW3Pfv532/68Y4ju8qO2w3Q62C8omnS1t4218fEZV2Xs5kY8F47LNGjDElEIIR9DY7Wn6+Z99uoMFnAuCAAZ+KyDA1DWNxlOjIBVe414H00OVDIV9OpdU6r/4m2rsae9iFb2PODns9fuHOx4+lny647dk4VI7Dj4YDF0ZqMDSiQe5l4Jg4F4u1ONSPNwq9g8HY0d7S+tmbeP0Log9crvCyajEM46BXexyeni+gVKBA7pQHeqMbbQNBPUo/M7JkJZUJ9oQOz1Lhr4tjTUx56jx/6RC9NE+EgQbRKch8ua8CrRAult12dITfhI8N0H9VldRx4ec0T0WaEPpyGbAOVxY/hndNFNr/L1DY5DA+yo/zJdj2eMqqdsz4sjx2UTiUGjanU7GDssDCTJfRXnhaPH97ZA+J5io7QMHSESSkWVzRF0jOy/nyq9HbAarMQPcT+XuZZh8dx+J/X7N9NPFo4A6WfN1g+gd0LvIt7TQ8n+xFaaC9/p1GXU+g3VXnZAV5BE/z78wv9Sif/izPU/Aet/IXDe17MiuIsFtIwHYdFTZGxF2KyluYLv2iud7ooH9ndSwe9Da6D766Zd8M0yp8sQjuGhOPwwph3l6lRAt7FZ8qf3Mlquaq8myWg1dHEjcXnpBMCxd86/+Lw4n7+wuM9bwzq4uSABqoBapqaGYAk1mRcj/nCv9ksLpvfH9gfCRHebV7ve2vmNZ9BKI6HAODNaxVeHL8bdbiYP1Yu3x4B3mrbtkkUNBh3FqbHznB9bDSVPH/rXH53avzx568dEgUpDjmGm5s6NyBroxLmjY1cec/psnkJrw/aRbDjM8/+f10zr+lHCM3yuF0YyKjIB1WA+K3LRueR8Xy5DJ1DZav5d0MuJ4J2EHN5lZsRZqfFGx/2GzPzC903I0/DZC3riqzLWiabHIAfk6DSMrH+1/+9GaoK5SRphqA8dxyPvLv2E4hHEBqfhuAFYk7XKrwLu0zmk1ODLHsNGkY/XPuHahtzDqYhaZpTgXfiBjuMcuwAlxg26F8qj8BorUiKhqMgm4zLWoVXlt955yNni9MVdNEUQxGeFsdjL6/dv5v4xUy/gVhoGgllOR4+bDKZnpolVXF8a3nppKZHj5qrzBc/FKEn5pCEEmjhfP4GSH6dhW9Xs6Nh4FUlvcKrSoqugTwDBSxPz3/Ugg/X3SRFR6mObdan1t4vTHWXFomB5YmwIqoqescEBc13Sp1sL98+KUlU1XOY7bAjRbaYLxhY90owHS/wSEALOVHG4lfUsZjW1KQM4LAs5N986j+dLn/YRwSpE4nejkbX+Z+a1hwQ5kNGIPx6sVhAaKIfVlVU8RVYZLvUtUdP7gP/SlKo6pi1Yb6ASqhgFIpvlviSUfi48sxFY7qY17OV4yG18hYgJkMkYydH1VTxjRaCdrqDxEEl1GFvOf9WDSdoj6Ff2qdBSyM0M6poOH7HYZWN6ouNffLx8tI5SepqqnrjoUKxVISBvYSAtnjl4wIqFI1CSSohiAFxhVjgcFSAGyDfhELxqj3ka26gCJLp9bgbfrJ2vW4yNaYWnFj78+gWzBeaosI8BGHSf93SHQvtuD0iJlZ5s7f5SqkAXxga/wB/olLxCmbnNMiCynEEDHI69i9mziTfLF212WzNjk7Cd+qig7JcOlaDf83n0UtHSiXYyynQZzgeLuDLRyY6OvuG2j+9ISZWm7qPYNbSMieIcYy+jJzXZFVg8WEKUGP/QsOIR6PpM6V36y3WbV12v+fJs87rlvmaXiI/jsboAua9uMyrV140tUnH7H3RZxtzIrdrFS9suLTiVYTjAodDxduw7ZKswDhf4ZUqvQ2IoXcMlxa8DkuLw+XrenTK39uImtaA+aWBhBAr7wR6B2RoS+lgZZVG9aWWMBM5yIKcWGXZrfZpVJTQIp9PwST/OnRIvpiHMg6dUo/j15kC8EL84nasgKQUldJvA44WW73f6d051uvZ/tuaeOvOLZezfGQAvDvVtfIGbmTC2c1Esyy3GFh12+x9PFTarASbgo9NjKSQUFlJ5SQIWlGoHMmySayicAmOKTJMyJjX1eH8TLpuffg/asGtaGBsi8yorkW+eGVsPp0MdccUQeAS1NFVbzV30BQd7sMH3SOirCazhpaVYllJkqPxnI4P1lgtFv9C8MyXiunjNku9w2KxZG/u+LO1y51le2i5XcTlNLXvy1h9VJoKjwpQ+BORu5+Dm+ttjnpLfVs8zczJ+mQ4xtBMlCIbTimqqmuiBlISgkGG1XmodhctzTuWLNZPB68u/fXax7evABuZaCRQ/z/XNqtzjAJ7ynJDX+vcfqMTSpXP67aBpql3wEJmKOaykpNwPMhx7GZUKi1e7rC119fbGtw9DW/WUn6XDRVQkgpav1oINo5IGQVHoBGt4T3D8iPTBHkEa8mMLuMRDp+wT3i8FqfVus3nJYVaXhgu25+iuVDT/ypbh3DZhyw3vp5/V7FvjclxJapq0OMwL0p0uJo9NpvduT272FTzqltmq3w0g5Xw0bOQjxxdB+/mJOidqKBhDVEoFlH+eLDF67A121qFD9exbLWXQFskFfJNSERq3zfgTYzOKTJ0OS2rYJGC5oKuoM1p3fbk/Hv3+lNzFc0ivErvXc8iW/SkvHyKFikUcJm/6LHU2zp2R1O1vD++q1U+MibMfe1XyKs8NQjhpA66JAf+BbGc3Fdf/ylxYoBdlxuq2bc53KPSa/tIwe/ZFmTAtCVWXhEhNmeIs1SzPzY08sH63FDFNo2wnCj1rvOjeJsGxblMVsrEFRXKJpuAFg+j/v7UzXuNa6rbn/3pvViGnImEwxGaJsM5hKCqC7OzgdPC0XvOa7KspzJ8BdhNxpgwQ9MEQWevcLFoyGsfHfuD/ohqJxPtJSM04fOfQvm0z7E/d/V+M93VzI3g3yBBUEH/QWEstG1Qr108/N+Y/QQTClMkSfi6c5k+aa7pfgPd3baaGtxUmAmHQTD3cdm5e/DJwW/WzJC+tv+eibOJsUuIS2hoyGB37lAHjAPtAIKAvBQAAAN8PRYI5EcWAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_151\",\r\n id: \"151\",\r\n ProductCode: \"BNW1060ZP\",\r\n ProductDescription: \"Cen Bolt Nut Washer 10X60 Zinc Plated\",\r\n ProductIndex: \"BNW1060\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824259\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.163\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.056\",\r\n PromptTextCodes: 'Desc=\"10x60mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"2.35\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_152\",\r\n id: \"152\",\r\n ProductCode: \"BNW1060ZP\",\r\n ProductDescription: \"Cen Bolt Nut Washer (Zinc) 10X60\",\r\n ProductIndex: \"BNW1060Z\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824259\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.163\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.056\",\r\n PromptTextCodes: 'Desc=\"10x60mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"2.35\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_153\",\r\n id: \"153\",\r\n ProductCode: \"BNW1090ZP\",\r\n ProductDescription: \"Cen Bolt Nut Washer 10X90 Zinc Plated\",\r\n ProductIndex: \"BNW1090\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824261\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.18\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.074\",\r\n PromptTextCodes: 'Desc=\"10x90mm Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"2.09\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_154\",\r\n id: \"154\",\r\n ProductCode: \"BSUCHRG\",\r\n ProductDescription: \"Bondor Delivery Charge - Metro Only\",\r\n ProductIndex: \"BSUC\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"990400\",\r\n SellingUOM: \"EA\",\r\n Cost: \"450\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"$$=450\",\r\n Colours: \"\",\r\n LiveCost: \"300\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_155\",\r\n id: \"155\",\r\n ProductCode: \"CHBN10140GA\",\r\n ProductDescription: \"Cen Cuphead Bolt Nut & Washer 10X140 Galv\",\r\n ProductIndex: \"C10140G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"913934\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.81\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.091\",\r\n PromptTextCodes: 'Desc=\"10x140mm Cup Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"6.21\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_156\",\r\n id: \"156\",\r\n ProductCode: \"BO60**CS\",\r\n ProductDescription: \"Blue Orb Corr S-Rib **\",\r\n ProductIndex: \"CB65\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"004\",\r\n SubGroup: \"60101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"12.1773\",\r\n MfgLocations: \"520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4.5454\",\r\n PromptTextCodes: \"CVR CU LAP\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey\",\r\n LiveCost: \"12.5472\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1235B8100\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*3)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_157\",\r\n id: \"157\",\r\n ProductCode: \"CNBBPS10865H**\",\r\n ProductDescription: \"Cen 108X65 Box Beam Post Shoe Gloss **\",\r\n ProductIndex: \"CBBS108\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"300020\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.9\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.25\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.91\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_158\",\r\n id: \"158\",\r\n ProductCode: \"CNBBPS15865H**\",\r\n ProductDescription: \"Cen 158X65 Box Beam Post Shoe Gloss **\",\r\n ProductIndex: \"CBBS158\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"300030\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.95\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.75\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_159\",\r\n id: \"159\",\r\n ProductCode: \"CNBBPS6565H**\",\r\n ProductDescription: \"Cen 65X65 Box Beam Post Shoe Gloss **\",\r\n ProductIndex: \"CBBS65\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"300010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.45\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.175\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.08\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_160\",\r\n id: \"160\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Blue Orb Cover Sheet Only (Metal)\",\r\n ProductIndex: \"CBCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"520 600 670 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.311\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"3.9732\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_161\",\r\n id: \"161\",\r\n ProductCode: \"CNBK84158CPSEZN\",\r\n ProductDescription: \"Cen BK84-60D 158X65 Cantilever Post Stop End Zincalume\",\r\n ProductIndex: \"CBK84G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"184031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.3\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.15\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"19.12\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_162\",\r\n id: \"162\",\r\n ProductCode: \"CNBK85208BBSEZN\",\r\n ProductDescription: \"Cen BK85-60D 208X65 Cantilever Post Stop End Zincalume\",\r\n ProductIndex: \"CBK85G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"185041\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.55\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.15\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.02\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_163\",\r\n id: \"163\",\r\n ProductCode: \"CHBN10120GA\",\r\n ProductDescription: \"Cen 10X120 Cuphead Bolt Nut & Washer Galv\",\r\n ProductIndex: \"CBNW10120G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"913931\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.338\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'Desc=\"10x120mm Cup Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"5.20\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_164\",\r\n id: \"164\",\r\n ProductCode: \"CHBN10180GA\",\r\n ProductDescription: \"Cen Cuphead Bolt Nut & Washer 10X180 Galv\",\r\n ProductIndex: \"CBNW10180G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"913933\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.515\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'Desc=\"10x180mm Cup Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"4.04\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_165\",\r\n id: \"165\",\r\n ProductCode: \"CHBN10240GA\",\r\n ProductDescription: \"Cen Cuphead Bolt Nut & Washer 10X240 Galv\",\r\n ProductIndex: \"CBNW10240G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"913935\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.45\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.145\",\r\n PromptTextCodes: 'Desc=\"10x240mm Cup Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"12.43\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_166\",\r\n id: \"166\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen Curved Rhs 150X50X3.00 3000mm Span (All Variants) Galv\",\r\n ProductIndex: \"CCRHS3G\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"398\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"27\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"398\",\r\n AncillaryParts: \"POWCC3RHS\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAAAyBAMAAACe12JYAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwODoxMTowMyArMDkzMLgUqL0AAAAHdElNRQfiBBEWLAJF6VNTAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////Xl5epKSkkJCQe3t7PT091tbW5+fnvb29JSUlzs7OCAgI3t7eGBgY7+/v9/f310cwLgAAAAF0Uk5TAEDm2GYAAASXSURBVHja5dhvaBpnHAfwSzaa0LjKqel2CYLa2CYdtMmsnZYyGj07DRSq8SCXW0aTFRH3Ys0IFMZgMUmzJBssVg9yiODUpIkvBoH4Ikgge1PG3hQb3RA5cO8Ke9EyyjbGaHbnc/6tJpqoF9gXQozcn889z+/5PRoIOknp4BvwP+C0GsHv3eNz/Ec/+fHShGXBaVRjeALDLHMjMyvzDpvtHg+j8+f7KjVFR1NmGBbrZjULTOZgGJYM0nSSEqv295vF2YUENrkrSlGobt5WLhMoSlE7cJftTjM4FgOxjYkUtoOjUGJERKSoVVQj518rvgMbl2zVZN3ZHd3WX/57ujGcrxw9epdEVxUlmyuDCGKZ/7IBnJlERHe+JgtXSkoipakzZ3+WihhLK9cRDqIoQtM05aO5SFBUFw6XztoAQd/cf1E3Tlsw5TIW3yKggOHuHYrSq1SqDyDBY/vaT0vnmNdqivJGYVjUW3x4jy/aVU0/qoYzaUq8V3Rx1QDmdcGahW/LHv6M7UBRTFx0juMcQerqwDkT1MLGtdxlw4Eeg9mMXr+fPvi0+1ODGOJBFfmJW3d2elTpQ6bsMM5vhKugfhWD267eKsaTy2kFvg0r8s9iN8TMx+EIlGTBwp5FYqLvqsdksj7YTerzIKd3+MWTo3Je0uZcx3OExuIX0jVi2LRNmZK63Jytq5MPD5iwAzjtMDWUG2Y5Yb1wBAvIH4aIKNclesZGfoAWKiyzipxTE4g1ewn7FUyydGQMG3snpl/KVRB5EZPVxhFIzRez42uIffj8WBg2r0J4PH/FzQo1WJ4j1OPv5KaJFN05NiaTHkqcHW85ea0GzngkWzUTYx5/fTBMnnUmrnHXDRJD1XLO3IpzT+EYoG5WtddUGeGUz8KtervUcw967dplOF+YSND5HDOI+XIdMWxOac29HMg0HPjocE7IpwHHf4KYH9UZww7Qz3LXVeCZIX49jCN0xrgFGcSG0vXXsLmb5NZJWDpS0n9KORtxrmqUZL3nKZ92k4grIGSr+JGLOafVm6CI7SbJbsM0zGIxcBuzQ2vxV+S82oiDsglKRQ3EMBFOJoYyt3KYYs/Pl+e8xHVcFxd91lgNk3/kLjARs3DBnlrAEXQauY4gqmevqZhQDHjuJmVlOFfHRkEflr7dDAyTOa6/BZJfv8Zpp8G+EMDPNknD3BMDHSjk9Rdw2pifz7VgpibwS03TMB+E8C7g2ZTlOZM4qcE0mTpXuxtfxIX5Sw72sAB+6Y1pwGlzQ+3esxnlA3e6qRomTs8amJU+GeC03BZ0b66w7y0+PM6/io6YjadgfaX8gPPNx33KLTHzTt9eUxZ4SYSrwEPspVnO9QHfDiJRMl862L/58Git7HwRqMvPjs7wgz1CsmoziHd50TA72JyV4VjIlIThqNwty79LVhdXeMKwGWfqefSXd3vZ0VG2LH8queXmUQNB37tto8sd0yznrR8j3i03D2uqMH1dFo7TSlLe6A1+Ncz3uuh2KsOBFlFDF88a5jM9YTUATottXMa3BoKm+t+8AThQywngtBZw+vnGZDj9J2t0bkMd/wEoiTEI9TZ5pQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_167\",\r\n id: \"167\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen Curved Rhs 150X50X3.00 4000mm Span (All Variants) Galv\",\r\n ProductIndex: \"CCRHS4G\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"462\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"36\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"462\",\r\n AncillaryParts: \"POWCC3RHS\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAAAyBAMAAACe12JYAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwODoxMTowMyArMDkzMLgUqL0AAAAHdElNRQfiBBEWLAJF6VNTAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////Xl5epKSkkJCQe3t7PT091tbW5+fnvb29JSUlzs7OCAgI3t7eGBgY7+/v9/f310cwLgAAAAF0Uk5TAEDm2GYAAASXSURBVHja5dhvaBpnHAfwSzaa0LjKqel2CYLa2CYdtMmsnZYyGj07DRSq8SCXW0aTFRH3Ys0IFMZgMUmzJBssVg9yiODUpIkvBoH4Ikgge1PG3hQb3RA5cO8Ke9EyyjbGaHbnc/6tJpqoF9gXQozcn889z+/5PRoIOknp4BvwP+C0GsHv3eNz/Ec/+fHShGXBaVRjeALDLHMjMyvzDpvtHg+j8+f7KjVFR1NmGBbrZjULTOZgGJYM0nSSEqv295vF2YUENrkrSlGobt5WLhMoSlE7cJftTjM4FgOxjYkUtoOjUGJERKSoVVQj518rvgMbl2zVZN3ZHd3WX/57ujGcrxw9epdEVxUlmyuDCGKZ/7IBnJlERHe+JgtXSkoipakzZ3+WihhLK9cRDqIoQtM05aO5SFBUFw6XztoAQd/cf1E3Tlsw5TIW3yKggOHuHYrSq1SqDyDBY/vaT0vnmNdqivJGYVjUW3x4jy/aVU0/qoYzaUq8V3Rx1QDmdcGahW/LHv6M7UBRTFx0juMcQerqwDkT1MLGtdxlw4Eeg9mMXr+fPvi0+1ODGOJBFfmJW3d2elTpQ6bsMM5vhKugfhWD267eKsaTy2kFvg0r8s9iN8TMx+EIlGTBwp5FYqLvqsdksj7YTerzIKd3+MWTo3Je0uZcx3OExuIX0jVi2LRNmZK63Jytq5MPD5iwAzjtMDWUG2Y5Yb1wBAvIH4aIKNclesZGfoAWKiyzipxTE4g1ewn7FUyydGQMG3snpl/KVRB5EZPVxhFIzRez42uIffj8WBg2r0J4PH/FzQo1WJ4j1OPv5KaJFN05NiaTHkqcHW85ea0GzngkWzUTYx5/fTBMnnUmrnHXDRJD1XLO3IpzT+EYoG5WtddUGeGUz8KtervUcw967dplOF+YSND5HDOI+XIdMWxOac29HMg0HPjocE7IpwHHf4KYH9UZww7Qz3LXVeCZIX49jCN0xrgFGcSG0vXXsLmb5NZJWDpS0n9KORtxrmqUZL3nKZ92k4grIGSr+JGLOafVm6CI7SbJbsM0zGIxcBuzQ2vxV+S82oiDsglKRQ3EMBFOJoYyt3KYYs/Pl+e8xHVcFxd91lgNk3/kLjARs3DBnlrAEXQauY4gqmevqZhQDHjuJmVlOFfHRkEflr7dDAyTOa6/BZJfv8Zpp8G+EMDPNknD3BMDHSjk9Rdw2pifz7VgpibwS03TMB+E8C7g2ZTlOZM4qcE0mTpXuxtfxIX5Sw72sAB+6Y1pwGlzQ+3esxnlA3e6qRomTs8amJU+GeC03BZ0b66w7y0+PM6/io6YjadgfaX8gPPNx33KLTHzTt9eUxZ4SYSrwEPspVnO9QHfDiJRMl862L/58Git7HwRqMvPjs7wgz1CsmoziHd50TA72JyV4VjIlIThqNwty79LVhdXeMKwGWfqefSXd3vZ0VG2LH8queXmUQNB37tto8sd0yznrR8j3i03D2uqMH1dFo7TSlLe6A1+Ncz3uuh2KsOBFlFDF88a5jM9YTUATottXMa3BoKm+t+8AThQywngtBZw+vnGZDj9J2t0bkMd/wEoiTEI9TZ5pQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_168\",\r\n id: \"168\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen Curved Rhs 150X50X3.00 5000mm Span (All Variants) Galv\",\r\n ProductIndex: \"CCRHS5G\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"562\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"50\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"562\",\r\n AncillaryParts: \"POWCC6RHS\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAAAyBAMAAACe12JYAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwODoxMTowMyArMDkzMLgUqL0AAAAHdElNRQfiBBEWLAJF6VNTAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////Xl5epKSkkJCQe3t7PT091tbW5+fnvb29JSUlzs7OCAgI3t7eGBgY7+/v9/f310cwLgAAAAF0Uk5TAEDm2GYAAASXSURBVHja5dhvaBpnHAfwSzaa0LjKqel2CYLa2CYdtMmsnZYyGj07DRSq8SCXW0aTFRH3Ys0IFMZgMUmzJBssVg9yiODUpIkvBoH4Ikgge1PG3hQb3RA5cO8Ke9EyyjbGaHbnc/6tJpqoF9gXQozcn889z+/5PRoIOknp4BvwP+C0GsHv3eNz/Ec/+fHShGXBaVRjeALDLHMjMyvzDpvtHg+j8+f7KjVFR1NmGBbrZjULTOZgGJYM0nSSEqv295vF2YUENrkrSlGobt5WLhMoSlE7cJftTjM4FgOxjYkUtoOjUGJERKSoVVQj518rvgMbl2zVZN3ZHd3WX/57ujGcrxw9epdEVxUlmyuDCGKZ/7IBnJlERHe+JgtXSkoipakzZ3+WihhLK9cRDqIoQtM05aO5SFBUFw6XztoAQd/cf1E3Tlsw5TIW3yKggOHuHYrSq1SqDyDBY/vaT0vnmNdqivJGYVjUW3x4jy/aVU0/qoYzaUq8V3Rx1QDmdcGahW/LHv6M7UBRTFx0juMcQerqwDkT1MLGtdxlw4Eeg9mMXr+fPvi0+1ODGOJBFfmJW3d2elTpQ6bsMM5vhKugfhWD267eKsaTy2kFvg0r8s9iN8TMx+EIlGTBwp5FYqLvqsdksj7YTerzIKd3+MWTo3Je0uZcx3OExuIX0jVi2LRNmZK63Jytq5MPD5iwAzjtMDWUG2Y5Yb1wBAvIH4aIKNclesZGfoAWKiyzipxTE4g1ewn7FUyydGQMG3snpl/KVRB5EZPVxhFIzRez42uIffj8WBg2r0J4PH/FzQo1WJ4j1OPv5KaJFN05NiaTHkqcHW85ea0GzngkWzUTYx5/fTBMnnUmrnHXDRJD1XLO3IpzT+EYoG5WtddUGeGUz8KtervUcw967dplOF+YSND5HDOI+XIdMWxOac29HMg0HPjocE7IpwHHf4KYH9UZww7Qz3LXVeCZIX49jCN0xrgFGcSG0vXXsLmb5NZJWDpS0n9KORtxrmqUZL3nKZ92k4grIGSr+JGLOafVm6CI7SbJbsM0zGIxcBuzQ2vxV+S82oiDsglKRQ3EMBFOJoYyt3KYYs/Pl+e8xHVcFxd91lgNk3/kLjARs3DBnlrAEXQauY4gqmevqZhQDHjuJmVlOFfHRkEflr7dDAyTOa6/BZJfv8Zpp8G+EMDPNknD3BMDHSjk9Rdw2pifz7VgpibwS03TMB+E8C7g2ZTlOZM4qcE0mTpXuxtfxIX5Sw72sAB+6Y1pwGlzQ+3esxnlA3e6qRomTs8amJU+GeC03BZ0b66w7y0+PM6/io6YjadgfaX8gPPNx33KLTHzTt9eUxZ4SYSrwEPspVnO9QHfDiJRMl862L/58Git7HwRqMvPjs7wgz1CsmoziHd50TA72JyV4VjIlIThqNwty79LVhdXeMKwGWfqefSXd3vZ0VG2LH8queXmUQNB37tto8sd0yznrR8j3i03D2uqMH1dFo7TSlLe6A1+Ncz3uuh2KsOBFlFDF88a5jM9YTUATottXMa3BoKm+t+8AThQywngtBZw+vnGZDj9J2t0bkMd/wEoiTEI9TZ5pQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_169\",\r\n id: \"169\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen Curved Rhs 150X50X3.00 6000mm Span (All Variants) Galv\",\r\n ProductIndex: \"CCRHS6G\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"596\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"55\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"596\",\r\n AncillaryParts: \"POWCC6RHS\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAAAyBAMAAACe12JYAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwODoxMTowMyArMDkzMLgUqL0AAAAHdElNRQfiBBEWLAJF6VNTAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////Xl5epKSkkJCQe3t7PT091tbW5+fnvb29JSUlzs7OCAgI3t7eGBgY7+/v9/f310cwLgAAAAF0Uk5TAEDm2GYAAASXSURBVHja5dhvaBpnHAfwSzaa0LjKqel2CYLa2CYdtMmsnZYyGj07DRSq8SCXW0aTFRH3Ys0IFMZgMUmzJBssVg9yiODUpIkvBoH4Ikgge1PG3hQb3RA5cO8Ke9EyyjbGaHbnc/6tJpqoF9gXQozcn889z+/5PRoIOknp4BvwP+C0GsHv3eNz/Ec/+fHShGXBaVRjeALDLHMjMyvzDpvtHg+j8+f7KjVFR1NmGBbrZjULTOZgGJYM0nSSEqv295vF2YUENrkrSlGobt5WLhMoSlE7cJftTjM4FgOxjYkUtoOjUGJERKSoVVQj518rvgMbl2zVZN3ZHd3WX/57ujGcrxw9epdEVxUlmyuDCGKZ/7IBnJlERHe+JgtXSkoipakzZ3+WihhLK9cRDqIoQtM05aO5SFBUFw6XztoAQd/cf1E3Tlsw5TIW3yKggOHuHYrSq1SqDyDBY/vaT0vnmNdqivJGYVjUW3x4jy/aVU0/qoYzaUq8V3Rx1QDmdcGahW/LHv6M7UBRTFx0juMcQerqwDkT1MLGtdxlw4Eeg9mMXr+fPvi0+1ODGOJBFfmJW3d2elTpQ6bsMM5vhKugfhWD267eKsaTy2kFvg0r8s9iN8TMx+EIlGTBwp5FYqLvqsdksj7YTerzIKd3+MWTo3Je0uZcx3OExuIX0jVi2LRNmZK63Jytq5MPD5iwAzjtMDWUG2Y5Yb1wBAvIH4aIKNclesZGfoAWKiyzipxTE4g1ewn7FUyydGQMG3snpl/KVRB5EZPVxhFIzRez42uIffj8WBg2r0J4PH/FzQo1WJ4j1OPv5KaJFN05NiaTHkqcHW85ea0GzngkWzUTYx5/fTBMnnUmrnHXDRJD1XLO3IpzT+EYoG5WtddUGeGUz8KtervUcw967dplOF+YSND5HDOI+XIdMWxOac29HMg0HPjocE7IpwHHf4KYH9UZww7Qz3LXVeCZIX49jCN0xrgFGcSG0vXXsLmb5NZJWDpS0n9KORtxrmqUZL3nKZ92k4grIGSr+JGLOafVm6CI7SbJbsM0zGIxcBuzQ2vxV+S82oiDsglKRQ3EMBFOJoYyt3KYYs/Pl+e8xHVcFxd91lgNk3/kLjARs3DBnlrAEXQauY4gqmevqZhQDHjuJmVlOFfHRkEflr7dDAyTOa6/BZJfv8Zpp8G+EMDPNknD3BMDHSjk9Rdw2pifz7VgpibwS03TMB+E8C7g2ZTlOZM4qcE0mTpXuxtfxIX5Sw72sAB+6Y1pwGlzQ+3esxnlA3e6qRomTs8amJU+GeC03BZ0b66w7y0+PM6/io6YjadgfaX8gPPNx33KLTHzTt9eUxZ4SYSrwEPspVnO9QHfDiJRMl862L/58Git7HwRqMvPjs7wgz1CsmoziHd50TA72JyV4VjIlIThqNwty79LVhdXeMKwGWfqefSXd3vZ0VG2LH8queXmUQNB37tto8sd0yznrR8j3i03D2uqMH1dFo7TSlLe6A1+Ncz3uuh2KsOBFlFDF88a5jM9YTUATottXMa3BoKm+t+8AThQywngtBZw+vnGZDj9J2t0bkMd/wEoiTEI9TZ5pQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_170\",\r\n id: \"170\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Cen Curved Rhs 150X50X3.00 7000mm Span (All Variants) Galv\",\r\n ProductIndex: \"CCRHS7G\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"596\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"55\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"596\",\r\n AncillaryParts: \"POWCC6RHS\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAAAyBAMAAACe12JYAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwODoxMTowMyArMDkzMLgUqL0AAAAHdElNRQfiBBEWLAJF6VNTAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////Xl5epKSkkJCQe3t7PT091tbW5+fnvb29JSUlzs7OCAgI3t7eGBgY7+/v9/f310cwLgAAAAF0Uk5TAEDm2GYAAASXSURBVHja5dhvaBpnHAfwSzaa0LjKqel2CYLa2CYdtMmsnZYyGj07DRSq8SCXW0aTFRH3Ys0IFMZgMUmzJBssVg9yiODUpIkvBoH4Ikgge1PG3hQb3RA5cO8Ke9EyyjbGaHbnc/6tJpqoF9gXQozcn889z+/5PRoIOknp4BvwP+C0GsHv3eNz/Ec/+fHShGXBaVRjeALDLHMjMyvzDpvtHg+j8+f7KjVFR1NmGBbrZjULTOZgGJYM0nSSEqv295vF2YUENrkrSlGobt5WLhMoSlE7cJftTjM4FgOxjYkUtoOjUGJERKSoVVQj518rvgMbl2zVZN3ZHd3WX/57ujGcrxw9epdEVxUlmyuDCGKZ/7IBnJlERHe+JgtXSkoipakzZ3+WihhLK9cRDqIoQtM05aO5SFBUFw6XztoAQd/cf1E3Tlsw5TIW3yKggOHuHYrSq1SqDyDBY/vaT0vnmNdqivJGYVjUW3x4jy/aVU0/qoYzaUq8V3Rx1QDmdcGahW/LHv6M7UBRTFx0juMcQerqwDkT1MLGtdxlw4Eeg9mMXr+fPvi0+1ODGOJBFfmJW3d2elTpQ6bsMM5vhKugfhWD267eKsaTy2kFvg0r8s9iN8TMx+EIlGTBwp5FYqLvqsdksj7YTerzIKd3+MWTo3Je0uZcx3OExuIX0jVi2LRNmZK63Jytq5MPD5iwAzjtMDWUG2Y5Yb1wBAvIH4aIKNclesZGfoAWKiyzipxTE4g1ewn7FUyydGQMG3snpl/KVRB5EZPVxhFIzRez42uIffj8WBg2r0J4PH/FzQo1WJ4j1OPv5KaJFN05NiaTHkqcHW85ea0GzngkWzUTYx5/fTBMnnUmrnHXDRJD1XLO3IpzT+EYoG5WtddUGeGUz8KtervUcw967dplOF+YSND5HDOI+XIdMWxOac29HMg0HPjocE7IpwHHf4KYH9UZww7Qz3LXVeCZIX49jCN0xrgFGcSG0vXXsLmb5NZJWDpS0n9KORtxrmqUZL3nKZ92k4grIGSr+JGLOafVm6CI7SbJbsM0zGIxcBuzQ2vxV+S82oiDsglKRQ3EMBFOJoYyt3KYYs/Pl+e8xHVcFxd91lgNk3/kLjARs3DBnlrAEXQauY4gqmevqZhQDHjuJmVlOFfHRkEflr7dDAyTOa6/BZJfv8Zpp8G+EMDPNknD3BMDHSjk9Rdw2pifz7VgpibwS03TMB+E8C7g2ZTlOZM4qcE0mTpXuxtfxIX5Sw72sAB+6Y1pwGlzQ+3esxnlA3e6qRomTs8amJU+GeC03BZ0b66w7y0+PM6/io6YjadgfaX8gPPNx33KLTHzTt9eUxZ4SYSrwEPspVnO9QHfDiJRMl862L/58Git7HwRqMvPjs7wgz1CsmoziHd50TA72JyV4VjIlIThqNwty79LVhdXeMKwGWfqefSXd3vZ0VG2LH8queXmUQNB37tto8sd0yznrR8j3i03D2uqMH1dFo7TSlLe6A1+Ncz3uuh2KsOBFlFDF88a5jM9YTUATottXMa3BoKm+t+8AThQywngtBZw+vnGZDj9J2t0bkMd/wEoiTEI9TZ5pQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_171\",\r\n id: \"171\",\r\n ProductCode: \"TSWGCDK24OP\",\r\n ProductDescription: \"C-Dek 310 Wonderglas GC 2400GSM Opal\",\r\n ProductIndex: \"CD42\",\r\n GroupingName: \"Fibreglass Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"724009\",\r\n SellingUOM: \"LM\",\r\n Cost: \"15\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Opal\",\r\n LiveCost: \"47.23\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRBzktxGlBWQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v797e3ufn587Ozr29va2traCgoJSUlIyMjH9/f29vb15eXigoKNbW1iis9xUAAAABdFJOUwBA5thmAAAD0ElEQVR42u2VvW/bRhjGRTedupCqMydmtBatLcoZFVdyVxVRT/RUDqk+NgMtRF69OEvNO3lwlyI8am3RiMxUtIAkynNRiPQfYFEGGrRIgaIcIskZ2Ze0LaqoE8dz8hISREC/e96P5+5SqbfxhgeXmdxeeLsOKWTyqMnP39OIT73uSpx4p1JD23Pl9PreIvwu/wo0XcwjhOrNC3ip1FAXSki9t3oFWoPPmhC982KpVlMXxT749HJUEDLZEDgEaWNLV+CHpiJNU1f4aKWUGC3y+ZeXq4rF/Cxi1ckptTqm0/Y9X6/VNbn1Y5UQomlVpOSPfr4MTheyMYpQKLf6fcMc+I733UxW0Y71iFiWxdwxRPAT93/ZQhZShqQrioRNi5GW4w0Pf1lvyk3ZfKxRu2OZZ/Dv/2k3lxJEsViATikgLW3umJZB9h3vePBrviY3ZzvM0Kg5h/8QFuElLpOVsmEYAhpK6y0DWOp4o0G3LG+ryhajep2a7AL+cxFOi9DjbD5UQqSE4QvTMAmwh/6guwtJ735iErrXYCbrtL0YfpbUzBWXp0DGuoqUq3eIpRNqu97Q+WqziuphwyCGihmLYX/sB38lujf1TBlaFeaRki3MNEr7OgZ2PLIOSkip379rYKLXqAGw7bqQePB30rBbhjSJlPNoWpxhkz3WMLMHY9c6KCAkb+caOjZUmRKAn7iuN/aCf+4l3cLlaZQ1er4sU2YwqNdyPd/54QYMvDrdAnOQasOgzOxdwB8lNePyJFQm4dqdBiEwE2xCvd6wt5crn1bKOYwJ0SuYANwZuFEEQWJuQZ6GQG/MvgZRggkzPd93nb4OY9/Oy5GwWoF0qGXFsB8EC+beAmespl6AAgX3klb0F8cZEtgWn22SOOs6fFHbulB+uAA3pY/fbxhG5HxMLeiV59iDEQG/FaASHetIi+D+HP4+ge8+KN6keqTQ1KIZue7QHnijR7Pq2imUoZMmgqxIq992z9PuJvBydgbWBRdBW5jlwPI9WOKYoPslrEdPNS683TuD3ZNAXbRn7hR6TL64tQ82Yu2hBcLeMa5uyFAH1IKikol9Dg9OgmTOHPiFTwnpJf6dCpRsdcvrrcOxOyKrOV0DYaLGWRO7O1feeMkZls5KYo7CdvxNKoAwhF6tRDBz7HbcsOFJIL7sBBSicyEj5Z7f2GI6TI58U5SjZpMeeXKu/Ow17gCBK8FBqD1Ixw4lux/uD51I+egpfzXLn90NK6kSzJmyg6KmMxvwo6e3r1ZOgoOrq3CPq2HYq87g5NvrXF1nwcMDQxGl3Mq12bcB8S/YxldnFO/R0gAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_172\",\r\n id: \"172\",\r\n ProductCode: \"CDK42**H**\",\r\n ProductDescription: \"C-Dek 310 0.42BMT **H**\",\r\n ProductIndex: \"CD42DS\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"076\",\r\n SubGroup: \"42311\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.4154\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1.23\",\r\n SellingUnitWeight: \"1.6393\",\r\n PromptTextCodes: \"DSG CVR NEC\",\r\n Colours:\r\n \"Classic Cream/Classic Cream, Classic Cream/Mangrove, Classic Cream/Monument, Classic Cream/Woodland Grey, Paperbark/Gully, Paperbark/Paperbark, Paperbark/Woodland Grey, Surfmist/Monument, Surfmist/Surfmist\",\r\n LiveCost: \"4.4154\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+6)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRBzktxGlBWQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v797e3ufn587Ozr29va2traCgoJSUlIyMjH9/f29vb15eXigoKNbW1iis9xUAAAABdFJOUwBA5thmAAAD0ElEQVR42u2VvW/bRhjGRTedupCqMydmtBatLcoZFVdyVxVRT/RUDqk+NgMtRF69OEvNO3lwlyI8am3RiMxUtIAkynNRiPQfYFEGGrRIgaIcIskZ2Ze0LaqoE8dz8hISREC/e96P5+5SqbfxhgeXmdxeeLsOKWTyqMnP39OIT73uSpx4p1JD23Pl9PreIvwu/wo0XcwjhOrNC3ip1FAXSki9t3oFWoPPmhC982KpVlMXxT749HJUEDLZEDgEaWNLV+CHpiJNU1f4aKWUGC3y+ZeXq4rF/Cxi1ckptTqm0/Y9X6/VNbn1Y5UQomlVpOSPfr4MTheyMYpQKLf6fcMc+I733UxW0Y71iFiWxdwxRPAT93/ZQhZShqQrioRNi5GW4w0Pf1lvyk3ZfKxRu2OZZ/Dv/2k3lxJEsViATikgLW3umJZB9h3vePBrviY3ZzvM0Kg5h/8QFuElLpOVsmEYAhpK6y0DWOp4o0G3LG+ryhajep2a7AL+cxFOi9DjbD5UQqSE4QvTMAmwh/6guwtJ735iErrXYCbrtL0YfpbUzBWXp0DGuoqUq3eIpRNqu97Q+WqziuphwyCGihmLYX/sB38lujf1TBlaFeaRki3MNEr7OgZ2PLIOSkip379rYKLXqAGw7bqQePB30rBbhjSJlPNoWpxhkz3WMLMHY9c6KCAkb+caOjZUmRKAn7iuN/aCf+4l3cLlaZQ1er4sU2YwqNdyPd/54QYMvDrdAnOQasOgzOxdwB8lNePyJFQm4dqdBiEwE2xCvd6wt5crn1bKOYwJ0SuYANwZuFEEQWJuQZ6GQG/MvgZRggkzPd93nb4OY9/Oy5GwWoF0qGXFsB8EC+beAmespl6AAgX3klb0F8cZEtgWn22SOOs6fFHbulB+uAA3pY/fbxhG5HxMLeiV59iDEQG/FaASHetIi+D+HP4+ge8+KN6keqTQ1KIZue7QHnijR7Pq2imUoZMmgqxIq992z9PuJvBydgbWBRdBW5jlwPI9WOKYoPslrEdPNS683TuD3ZNAXbRn7hR6TL64tQ82Yu2hBcLeMa5uyFAH1IKikol9Dg9OgmTOHPiFTwnpJf6dCpRsdcvrrcOxOyKrOV0DYaLGWRO7O1feeMkZls5KYo7CdvxNKoAwhF6tRDBz7HbcsOFJIL7sBBSicyEj5Z7f2GI6TI58U5SjZpMeeXKu/Ow17gCBK8FBqD1Ixw4lux/uD51I+egpfzXLn90NK6kSzJmyg6KmMxvwo6e3r1ZOgoOrq3CPq2HYq87g5NvrXF1nwcMDQxGl3Mq12bcB8S/YxldnFO/R0gAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_173\",\r\n id: \"173\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"C-Dek 310 Cover Sheet Only (Metal)\",\r\n ProductIndex: \"CDCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"1.6354\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"2.0956\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRBzktxGlBWQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v797e3ufn587Ozr29va2traCgoJSUlIyMjH9/f29vb15eXigoKNbW1iis9xUAAAABdFJOUwBA5thmAAAD0ElEQVR42u2VvW/bRhjGRTedupCqMydmtBatLcoZFVdyVxVRT/RUDqk+NgMtRF69OEvNO3lwlyI8am3RiMxUtIAkynNRiPQfYFEGGrRIgaIcIskZ2Ze0LaqoE8dz8hISREC/e96P5+5SqbfxhgeXmdxeeLsOKWTyqMnP39OIT73uSpx4p1JD23Pl9PreIvwu/wo0XcwjhOrNC3ip1FAXSki9t3oFWoPPmhC982KpVlMXxT749HJUEDLZEDgEaWNLV+CHpiJNU1f4aKWUGC3y+ZeXq4rF/Cxi1ckptTqm0/Y9X6/VNbn1Y5UQomlVpOSPfr4MTheyMYpQKLf6fcMc+I733UxW0Y71iFiWxdwxRPAT93/ZQhZShqQrioRNi5GW4w0Pf1lvyk3ZfKxRu2OZZ/Dv/2k3lxJEsViATikgLW3umJZB9h3vePBrviY3ZzvM0Kg5h/8QFuElLpOVsmEYAhpK6y0DWOp4o0G3LG+ryhajep2a7AL+cxFOi9DjbD5UQqSE4QvTMAmwh/6guwtJ735iErrXYCbrtL0YfpbUzBWXp0DGuoqUq3eIpRNqu97Q+WqziuphwyCGihmLYX/sB38lujf1TBlaFeaRki3MNEr7OgZ2PLIOSkip379rYKLXqAGw7bqQePB30rBbhjSJlPNoWpxhkz3WMLMHY9c6KCAkb+caOjZUmRKAn7iuN/aCf+4l3cLlaZQ1er4sU2YwqNdyPd/54QYMvDrdAnOQasOgzOxdwB8lNePyJFQm4dqdBiEwE2xCvd6wt5crn1bKOYwJ0SuYANwZuFEEQWJuQZ6GQG/MvgZRggkzPd93nb4OY9/Oy5GwWoF0qGXFsB8EC+beAmespl6AAgX3klb0F8cZEtgWn22SOOs6fFHbulB+uAA3pY/fbxhG5HxMLeiV59iDEQG/FaASHetIi+D+HP4+ge8+KN6keqTQ1KIZue7QHnijR7Pq2imUoZMmgqxIq992z9PuJvBydgbWBRdBW5jlwPI9WOKYoPslrEdPNS683TuD3ZNAXbRn7hR6TL64tQ82Yu2hBcLeMa5uyFAH1IKikol9Dg9OgmTOHPiFTwnpJf6dCpRsdcvrrcOxOyKrOV0DYaLGWRO7O1feeMkZls5KYo7CdvxNKoAwhF6tRDBz7HbcsOFJIL7sBBSicyEj5Z7f2GI6TI58U5SjZpMeeXKu/Ow17gCBK8FBqD1Ixw4lux/uD51I+egpfzXLn90NK6kSzJmyg6KmMxvwo6e3r1ZOgoOrq3CPq2HYq87g5NvrXF1nwcMDQxGl3Mq12bcB8S/YxldnFO/R0gAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_174\",\r\n id: \"174\",\r\n ProductCode: \"CNBK80108FSEGA\",\r\n ProductDescription: \"Cen BK80 108X65 Cent. Flooring Stop End Galv\",\r\n ProductIndex: \"CDSBK80G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"180025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"11.98\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_175\",\r\n id: \"175\",\r\n ProductCode: \"BNW10170GA\",\r\n ProductDescription: \"Cen Cuphead Bolt Nut & Washer 10X170 Galv\",\r\n ProductIndex: \"CEN10170G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824205\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.515\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.105\",\r\n PromptTextCodes: 'Desc=\"10x170mm Cup Bolt(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"8.61\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_176\",\r\n id: \"176\",\r\n ProductCode: \"CHBN1240GA\",\r\n ProductDescription: \"Cen Cuphead Bolt Nut & Washer 12X40 Galv\",\r\n ProductIndex: \"CEN1240G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"913936\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.315\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.71\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_177\",\r\n id: \"177\",\r\n ProductCode: \"CNCFL01**H**\",\r\n ProductDescription: \"Cen CFL01 Barge Cap **H**\",\r\n ProductIndex: \"CFL01\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"100101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.5586\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.345\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"17.46\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"!=*No Side Beam*\"\\n }},\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Barge Capping Fix\",\\n \"Qty\" : \"=(Length/500) + 2\",\\n \"Conditions\":{\\n \"Desc\":\"=*No Side Beam*\"\\n }}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPkAAACPBAMAAADKGmB/AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzoyODowNiArMDkzMPUdlAQAAAAHdElNRQfiBBIDOwXWVowTAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f37+/vzs7OUlJSQkJCnJycBAQE3t7eGBgYvb29KSkpNTU15+fnc3Nz1tbWu1V4MAAAAAF0Uk5TAEDm2GYAAAR9SURBVHja7dtPiONUGADw96K0tTLue0VYRIQmF0+DA/W0Fz1kTkpPLTI0yF50wJE9WsooiKfuYfAPlBIapOBBtidZpgxjiqdWGPKQmbkpBPZQ9CD04mURpH4vf/on0s7itu9T2o82SdO8/N6XvOQlJSUEMdKY+Fbf6jg6+yuvlNzxNWOia+Te0CwOi6M4fn0/jE6n802h8MZ4XIf4bHe3XteNp2Kj0AxjqlNy4BbNaZTLZlkMypaIozeIpwauK4Qtw3XlwLbFuW1bJc+VYcFIlIV8mZAOrApSMRNZfUBobl73rNFoOArt4iiuwTTC6VI0ARVw3aBykrHEwCzul2UZ0wzGZrAGyGcYZzMIyreggr1q9REhEzzQLUsWDKNkwlrLcbJQQLhR7mFWoEPY8rue8IJaSD2oJIxm9VHIR2s2YXkxsO3ql4Qbl9NWR6xKG4Y54xX/8/Hj+okOe7ju10/8MGAa5v9RuAPtoFPohHGnE7WNYHgv2KhyO0saUBGma0UZyAj2mFut2Wd72qzOnAMFLZ3J5vZa4bBW+Z5oU52xRkWBHsfvovRo8iHQDwjlMhhnMMXgBd9wPi3Cgw+UB8vFM4NpmCcLkMSycl2wFs5psHxcCGb90rNO5YYIyqQJJ43Jlg/1RdWeQ2Y4tmTxRMVg8J7wvoORf0XCVtcQC7fTkrr828i2Kmd34bB7Ap3Qlevkged9DfrljTqb3/2ricxBz3uT5PKxbi1a0L9mdOU6edYRp3k60Rfmfm2sXtcYORLeV3K73qyvPHONk0zrnepdEunOQt3Q16DrOkmfNT+S577l+lpCZ4z8Vmt+Qa9yUv+4p1SHyKdq5xdtnnsVpo+V61fk25r1kPPbKPoJ27G8hxRyZwj6jkFecD/hWLof9qKB7qrWmQa9V87YTaPoHK6qdZ7zb+Po8vICriPl8a5+v8eBcK5L6P23UXP3MPVaC09npOag5o6rNzD14+6m6gw3d+pg6loD80y7g6rj5p5B7WGRdfV3E/8Z/dYxYg8LOmIfx1BzZxnU3DMOZqt7pqvyl9J/6A3Ea1q2yfot3P2Oqme7mHdSyHr/ra2Oo5cwfz1AzZ1l+6jHO7K+uW0+hbrlU33r6dfzv9XLiHq2tI+pFzH1VGmTj7gN1ouY/XsKt82/u9Vx9Cxy7iamjtvDdjF/JU6dbnDuyNc2qG2+29/qW125/hOm3jtFzR1RZ9j6D5uqk62OpLOUM6vT1T84fYP+4/y8NTy2vkRvlP4cj8ePx+PrUKVreGx9se6eVcOoyXczT4lK3Y71lm3bzsXeGh5aX6I3qzO5O5W2tpK/Qz2ZPpMo9S/zLw5Bp+pyn5/xvKdU5zoz8vFRxslzXptyhbqR9y9jjrOXQFdkJ/+ZyCh5ubJHFJ5tEvGzh6qfY+r3z9toOsfWLzD1B+i6wh42EUeoR9zRBZpOUXXc3CMdr9V9WEHToaOHNq8pvKpM6IfNPQ0rdx30toZ3rjusfsqxjndOXt9Xeic1pzNGcwTtXBdd2aq6mUnqXJ5tld1Kpf8GTdUNUjn/iMUAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_178\",\r\n id: \"178\",\r\n ProductCode: \"CNCFL04**H**\",\r\n ProductDescription: \"Cen CFL04 D/Gable A Flash **H**\",\r\n ProductIndex: \"CFL04\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"100401\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.0099\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3875\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.0099\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAACvBAMAAABp8B/fAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzoyOToyMiArMDkzMKy13FQAAAAHdElNRQfiBBIEAC80ELx4AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/vtbW15+fn9/f3g4ODMTExAAAAKSkpISEhRUVFFBQUCAgI0tLSwcHB3t7emhHyYAAAAAF0Uk5TAEDm2GYAAAI+SURBVHja3dm/i9NgGMDx+gMPDndnC1pwOnBw8E9wOZRUPW/o9F7SW1yOoKfgYkmMg1PuXtPhppjL5CJtTJHbjtLsAdvByYC6u9xgtVMIaL7CG0JeStshH573ed+n75u3abVYW4PXNw2cDwP7HgHr+565R8CdsXAQ+On2bQqC5wxs+Y8RGN84RiAddw3FYABBRkHH3WJJLwGN0HVYDuPrHhulKQWzrwx0Zp+HEHw7ZcDWTAa8Te0IgeG/L8+DAwpeU4C7pBxkw00YYUS7VAGgORzUD+BaUg62dyF4ZEDwMIDg/qlqoL5aM7rMZHTi1IOUlsY86DGwMN4oBj+Ug+/BCwZS56RuYE5zWATq5wF2Cc/D3O/RCBBkznsIhvUDNIf/mOke7JJBc9g9YSDFoMRhIH8sawDASfNRKnEoqz3ASZc4xVUMFjqNYCvPoQHlXcGqob6W8ExjgJOmEW6pB5ICOg9XaJcwqOG6lNIc1AP1v4czugOdKY9wG3cJbyh428XzQCM0ofhqmEMNQQXF1wSgfJRSvD/UD+C7GfU3JxnNoVPisVEOvCvx2CgPRqoj7Ewg2Pbpf5XiU/uaprX/vJbtrpZrXwpgbRqNdsxn8TB5G0o5SQZS2jJJYi+ZTcz90dMCuPzk8PCBdEVghcvmi9/voWUJ3Rro0jU+FMAlM4qO48gyZD8UwpZ9IXwRx9KLIy+ZensFcKFrmrqlS+uV5cQfJ4krjGU84Yer9rIAWufaV1dfbm6sPi/+fZTKtQrALxRIh3hwWTyJAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_179\",\r\n id: \"179\",\r\n ProductCode: \"CNCFL05**\",\r\n ProductDescription: \"Cen CFL05 D/Gable B Flash **\",\r\n ProductIndex: \"CFL05\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"100501\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.2533\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9208\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.4362\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_180\",\r\n id: \"180\",\r\n ProductCode: \"CNCFL06**\",\r\n ProductDescription: \"Cen CFL06 Gable Infil Flash **\",\r\n ProductIndex: \"CFL06\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"100601\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.5816\",\r\n MfgLocations: \"200 300 400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5978\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.60\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMMAAACXBAMAAABaTvJ4AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzozMzoxMiArMDkzMPSWlL4AAAAHdElNRQfiBBIEAySI7zYzAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f3kJCQXl5evb29RkZGLS0tzs7OBAQE1tbWFBQUOTk57+/vISEh3t7e5+fnxNpZ0wAAAAF0Uk5TAEDm2GYAAATUSURBVHja7ZlPaBtHFMZn1NQE/YGZXptDkeNeejHe7smX0sjkVkrEBIoohFBvSUUupcUN9NCjMOTSi1FD05xMrdZtSLqCZgjYl14qSCiRQu0o7akQAjW5FEJN3fd2V/IqkZCK9C3Y9YdWWs3OvN+8mXmzs7OiuvNPlbWy09i9s8faFSStRCCp+Yj+iE4ap4pn0qITLXR0GpU6LpauPloK9NVepF2pehFCqAgjg+JxBKVEV2IITozSGfGc+JruSEkuonTXkA6zxKqgezwK8ks1DKFUF8O5VKxOoT0VIhhIh8rq59ot8CosclxwReN+TVwhQgGsP60+2UeICJC9urJ0qbpS+KiQfzOfP1ko0Ddp2nHC70DGuMaakvUCXWxv1WJabre/Xq5UKpe31lu2ZM9HCBkCsp+7pmxbLWOMtTddQ1asT4f1yVrZ2tut0CRp0dY9plhDZnwbU9mYeplyNa1visXK5VciBHXZ0w/nb3tFqqExVFHXFMP6Fl1OIWO+MWcDG3UG+VQJ33S1T/AYwfXYJrwp1lYjhFCp5VozMG5MueyQXfbCNZEX1mu3yfAH3BDrtUqlVlul1llvsT/ti3SJ/9GHLLOf9a3adikoU17+puOFSq3am1QZU8zn5+byMZ0s0HG6UCicpsi8VP3zUXVnb/PO3pPG5kjDz3FnO92dWvcW696NtyY9rNz5LuJY2b7+6RimpOxWTgexziGZbQjH6SJiuXUsc+dU6k4kd212ZxgZThZqf6rk0cOnPQgdXuFyvYieBmdjOpoNZRCuYSEd2Y7Nxh3EfKmLUPRXn4hNliKcaZ/p08CbyFLHrOw38YR5sjFEQAwr3pu1H4J/exq0U6X9bNFvDAGSlCMglBzV3ACE6w5ByEZjnEAhxIwzzItGY0wvZoZ5kQBi/IaaHtpQfW7I/wWhhyKC4TSGG4SYcd4e4sV4ChDXoQjSEWJETYO7ewBCjhUJoyEm60W/vkgAMWEdIUbUwLiY3LJzoBeTQ7xm7vZFTOyJTw9ETEyEcOGIGeccFqHEArih+MaKRyTgBRyhxKnSNSiCdMriEfXPoAi6vS2AEaSPGaEVEnEFj3jM3Y1F/I2faRlBEQhFUOgdfMRjnkDwXghwd1u8FxbeF39QdB8ChAdGKPEXTyDyYIeewI+oRBA/4xEvowetJATYC0J4WATZzoCXarTg/AmN0IcCkUBDSXx3a5G23/JT/IFHPBBKQbs77d/lzQjkNJj2H/DLIiQiZ79DI9KMUAcaEYyo76HdnQwi5/8GDT1S2jzEI94XCjxozQU4wv8VjFA5uwbti+ym4kELRdACqrzGb9OxiAtQBMX1C8UfhZbA7t5UL3praESuDEbIRBD+QzQiY+9jEUpMMQL7aJ/z76N3D3L+PfTjZAKIKf89NCJT/AHvRQIN9UsSCIFdgWSKN7D3iwQQ6lB4wYgzcIRzhl8pAVfmKkBAN4sOA0JEfQHeVSOEwG5Q8KCFIsK4QA5aWtPCQ6+xkXHmsNssEWIDiVBT3FBIL3gddR6LkOJLcw+7k6PFq8HuARRRKl1DI7ZL1yV0Za5E8+ws+KXbsea7b2CfL1Sqeet3PsEhNlKLtwQYMbXoYRFyI+07YIT4ws6hEZ9476ARC+YcFiHES/lZNKKjI8T/C/EvIl7PFfljfaYAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_181\",\r\n id: \"181\",\r\n ProductCode: \"CNCFL12**H**\",\r\n ProductDescription: \"Cen CFL12 Ver Pitch Sect B/Flash **H**\",\r\n ProductIndex: \"CFL12\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"101201\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.1983\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4529\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.1983\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABsBAMAAAB5vZrDAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzozNDowNyArMDkzMIjYoP4AAAAHdElNRQfiBBIEBCTHrqD0AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////tbW1KSkpPT09ISEhAAAACAgIFBQU5+fn9/f3WlpaxsbGi4uL7+/v1tbWvb29DqPbIwAAAAF0Uk5TAEDm2GYAAAFsSURBVHja7dY9TsMwFAfwjO3AABNDp7hpD9A0kRhRol6A3ICUHaV0ZexGx2ZNU5CsLsxMlYAh8hkQJ+AMWP1SBAYnf4UnKuVtifzzsx37xYZRR/WxCGjdy4G4585hjBN1ryPM3YNuEWIucYkd+N3R+VE78vXs1q52tds74vOH1usH1Pm0LgXrNfV/jDpfP9gEM5di9fRe0nke5/NkcLPtJBhHZ1yI08ntj85ft4siLmHbWz8Mg8se49x0dr3IwbDlqpXlXWNqNGd3xxmfm3YYbttdmNL13OHVZjAD2Wl6HmhuOkdvH0IInkT+btBj6RKmc18inj22soR1rku63Ap+e9WMC7jUwpzrV+YKhQ26IvniKZZP5f4yX6XrAlYGcke8LqhzwPlRO/J9lneqjV8kXxlnYa6v/eOpy5sDOjSf3qHzUwd6/sjdf6gvjYnWdUHXRp2lbaKMEbhffNCF4L0Hdeg9C3UnNubq+D0+AQbKlQHttXxFAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_182\",\r\n id: \"182\",\r\n ProductCode: \"CNCFL13**\",\r\n ProductDescription: \"Cen CFL13 Ver Hip Flash **\",\r\n ProductIndex: \"CFL13\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"101301\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.1666\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9208\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.4362\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPkAAAA2BAMAAAD33yLCAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzo0Njo0MSArMDkzMEKMXoAAAAAHdElNRQfiBBIEER42F59SAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////CAgI9/f3AAAAJSUltbW1vb29aGho0tLS5+fnra2tg4ODQUFBGBgYmJiY7+/vfq6X3gAAAAF0Uk5TAEDm2GYAAAF9SURBVHja7ddNSgNBEIbh0iaiKGhWbiUnSKggouDGC3gEwQsIXsAjCLmARxBcuhGydZEruHbpBZweSE9Vd88k6nw1QqYWgYRQz/TLkB+iDsd1ifd6r/f6ZuszbnPmfPwxfGc+veK19FZxOevoDqaP/72eTfS3+XwtZp7Zm+j7uWtsY4qmzyt1h9Ips9il72k9fP3mjA46uq/6tkLHhafDdHWs48Lndkc67I4vLebHRh0YnmiQLI90ZPjMdq0PkEcvyzbp0PBEW/F6rWPD+/2TRv0cqn9Fp1M6OHwKKB0d3gtndfou8yVYf9Hnkzo8fEJIHR/eGxe1+uSny36hyxMK3SB8jAj93iB89OvFydfx4aP0lW4SvmQWGd3iji9mTx7SXFdO0I3C65+2QS8+A29M9ANxzKBbhVfSUjcLryihPxnpO6luF15aLqmBn+pfRaU/WOpjpVuGF5qLrsZkbpnvtH5tqIfDBt0Qr77kl/q0Q52GR/5xewRWRyf6ufsGkFCEIChJzoEAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_183\",\r\n id: \"183\",\r\n ProductCode: \"CNCFL17**H**\",\r\n ProductDescription: \"Cen CFL17 Barge (Corro) O/Hang **H**\",\r\n ProductIndex: \"CFL17\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"101702\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.9101\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.1166\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.60\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARcAAACRBAMAAAAbY+GWAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzo0Nzo0NiArMDkzMGjpCzAAAAAHdElNRQfiBBIEEg2ZhI1PAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////ioqKubm59/f3EBAQPT09VlZWSkpKAAAA3t7e5+fnxsbG0tLS7+/vJSUlMTExpOn7sAAAAAF0Uk5TAEDm2GYAAAJESURBVHja7duxSxthHMbxVwNSUwOmdBNLDd1chIBdW/k51Ijb27ioQ1HXLuUmJxctLTi2UEo2IUtF3PwLSv0LCoUWsgjyZhHdvIakatRcTHLv3fuk93yXkAQuH473vffukiiF0wPXAGKIIab78lMdYDKn0lzVv8pUL4xpPDfGD53n+yt+0Vu5fmXjDuahOMPoEhDGnNzFzEUzSNLlXz8/N/fl6Hv98cdho9WKPL2NMb8jH7ytG6jISxiMeiYLozCYQVl43TTh3WLUV6OXYDAZvWx2UDBqelkKMBj1RK6nt3PMgMgfGExtelffwGBGTPVyiXKPUd98cwyDSdWWqD0UjBqqyAwMRj0WGYXBDIqcTaFg1IGcv4XBDPvnGzAYtesBYVLZcRxMI2KSgknlbWLkRahNpMvExIAZCYmxFxpmeGvT4oz4nzBpNAxGaJgMMcQQQwwxxBCTaMz9X48SA4DpJWISgrF4yUVMdBiLxY/JB+9JYnAwbcLDfHStaMa8d60gphOM1TFTLoXDWN0zLjCBxy4oTIjqmA/9jokiPMy2awUoJiWv4v7UgPPmRGMajGCMigzT4ljU9sIGDzPf4g0b12bdHqUjxXQbJibEyk9MfBiEiCGGGGKIIYaYvsIUQm+GmKRhZlwriOkEgzxmnnue905rXfR0URd7+IGFTcynLWKCMGP1f73v53K5ycP4LAGYnZ62FRGmRExCMZ3clottABMTJmLaYmbX/rVeW689vUgMIib7KHejiWyMpw23MTAR0x+Yv+GFV59IU3rJAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_184\",\r\n id: \"184\",\r\n ProductCode: \"CNCFL18**\",\r\n ProductDescription: \"Cen CFL18 Gable Soaker Flashing Flash **\",\r\n ProductIndex: \"CFL18\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"101801\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.8166\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.151\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.0452\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkAAABqBAMAAAASDLrHAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzo0ODozMiArMDkzMGdofbcAAAAHdElNRQfiBBIEEwYXTWWGAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////g4ODHBwcMTExTk5OPT09vb297+/v9/f35+fn3t7e1tbWzs7ODAwMKSkpAAAAI1wW3QAAAAF0Uk5TAEDm2GYAAAK9SURBVHja7dsxa9tAFAfw1KXQpVYNxWvMCx0llVy9CgdOc0ukW0OyaDPu5n6C0rFbSemQuUu6dUhDQoZOEQ4aup0V5NmX0KmlBPUkKzTF6HCGcM/l/rGRdTp0Pz+dZCskKysIY+kGGNV/oHoTYVS9yB8jVK0a1bKr3G2jWjCDFKUKZ62MaslVfRujCmetsKqOEapiG6NqkOJUfUap2kOpOkaoGhnVLVQYZztO1RHKcxCpyn2HUHVov0Kowlkro1o8hyhVo9SojMqodCa2UarcPYSqgYvxWx/OO3qjuo1q26gWDM7fQI5QqmKjWnbVtF5l5b8xqvgvTaq+SgU/NalUV1ELLhGqGrSDUvVMl0pxZWhqU8WZSnWuSXWyXv/3DI+ILlV/qlAxnCpd80qlarCXmlQDd9lUTdozqgVVDV/XEexnGOcVUtUU47yKl05136gWVum7MsQoz0GcqpGNUXWkVPV0qVB+Oqtq1aQYj6BR/Zt9lCpVrfTd46jOQcvraFLt271alb5751W3XmXxM4wq0KZSHEELOrpUuUKV6KrVQKWC7y2Z9peDg/cfT08/fYt2d+9e9PCtPAdTVa3Si3w+V0Ay8EiXeEKQQExIkaBYk/EEAScD2ZiB8ACcrhCbsBbILh44W6JcggCQ/TOQmQgB6/A0kGsOy3KeyhF+uOl5rapxxTc554l8QgK8WPAxT8csDAijlPo0pH/jU8pY0cxCxsJiJawafDbrVy1kK63ay+0+86/7+xOyxRNnMlWoHuS5XdWHV2WSP3kyYZ4odif3Gfrl/un1GEUT6bJAjlLIi1GrQcsOs46EVKruDZVfvgtRqMaOm5/Vqu6tPact36dybkWtMu0oinai4evh8MPXqMyO3BZVW1tVx3b5mMsTutGavQH5km7cKPNsSynkiZBzYppi/D+v+RiVUd2J6g+/W3/BrxoRvQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_185\",\r\n id: \"185\",\r\n ProductCode: \"CNCFL19**H**@@\",\r\n ProductDescription: \"Cen CFL19 Valley Gutter **H** @@\",\r\n ProductIndex: \"CFL19\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"101902\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.1215\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.1976\",\r\n PromptTextCodes: \"TOP.UNDER\",\r\n Colours: \"\",\r\n LiveCost: \"20.60\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAU8AAABFBAMAAAA4D3kTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzo0OToxOSArMDkzMMiIRQ4AAAAHdElNRQfiBBIEEzYxlFUqAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/vUlJSFBQUXl5e5+fn9/f3f39/MTExtbW1b29vvb29QUFBxsbG1tbWnJyclb3DxwAAAAF0Uk5TAEDm2GYAAAM1SURBVHja7dnNaxNBFADwXXQDoSQUb56EMRANhQrbQw8eJAxotWJv/gme/YBIKFTqwaEIkRCE5CKWQOtY68VT/wGLLOhNKFRyE+OlhPhBUON7KcRN87E7O7PZFGeOm2T5MXkz894bwzge40TUAA3VUA3VUA3VUA39/6Bfy+3f+/ufvpTL5faBGxq3L6ZmHMfZte35S1ErYbTbdKFcftZu/+D2BTf0pD0/odCzfVD2eAKhm+zhEShjbJWtPoka2DOsuzYD6AM31DDqCGVrtah1/5j3AclYofugu+qRuua8/RC1sDPMnwxns+B65Nqe6gB9RzK1qJWG8cvZBWhh2v2sZx+tI5Skp8Veq3oUyQxAHy31Pj2y4dcBmiGzS/5fq3qUCAHo+z5B38n08ZAaEfMNSQF0dsB/OuAI3QNoit6IgLkHzNSQ0Bt41u8A9Cp/PXZmBplDwm5IUlICaHWss/q5E3LpoatjaPZUASil18bEvEnSI5kj07wSQLPk/BiYZ4CZHsn0yEdLACWhU0/Ty55Mz8S5CNAUXQiRGecbCK15fc8zwy8CNEvCok7xDYR6Mn2VIk2AZkkYy2oqt4JQH0yfNVMDoFR5rCZyKwj1xfRb3MUaAFW7rBK5HEJ9ZxV+q9AYJgtEWazibOYEmCLlstkAKFWyAyQ7s5kTStJF6nqzCFBKX8gy8xyhghWaWAPCxNNqXSoAIDYRKlzyCHdKSgCl9FVQJiLz/Kn4LwO0dGAHAGyQAEjeo4FmMyDUiDUBWhWe1WSLIzRgnRuwSdYAaFVoWQEToQcCP1EBxYO1CvPqd1ZNZLa4RC8meNvRxABYJy99fNVqUmR+C86U64+adwC65XilK1aLI1SysyXXyLUaAF0cSbVwLpv0uxxTvuNsLQN00bk+5GOIj7xcbKqCdqmDllWswhH6R56ppodv4d+/yfqoDcIBelsFU9VlQ2IZoFvOtvsZnrVcbqWrh8J+jtArrEvd4bjNbsu8MhwoFEAIPXcYAJVOo0UhU+09UxyhjD0HJkBl09YQoUBFqD0HUOX1teqbu1sdaAhtAPVXjKfsuTAa1hN5F6qhGqqhGqqhGjr54/hA/wLgLi+Iw90p9QAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_186\",\r\n id: \"186\",\r\n ProductCode: \"CNCFL22**H**\",\r\n ProductDescription: \"Cen CFL22 C-Dek 310 Barge **H**\",\r\n ProductIndex: \"CFL22\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"102201\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.074\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5398\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"25.52\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUsAAACOBAMAAABKyzceAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzo1MDoxMCArMDkzMGCL9NcAAAAHdElNRQfiBBIEFCcUZeMfAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f37+/vwcHBd3d3oKCgAAAANTU1UlJSHBwcCAgI5+fnEBAQ3t7e0tLStbW1HMNDTgAAAAF0Uk5TAEDm2GYAAAO9SURBVHja7dw9bxMxGABgu6DO5wMmJJR6jZj6A8pQVRUTSzt0Tt2oEgMLF0Yk1GSgQmKpTu0GZDg6sEcdQSrNP6jSAZZKqFlQsxbbvTuSC7nW5uKz2/dVmtxn/MR3Z9+HXYRciNm8mZggRLyyicA0yuRIUjbwGkxMeNifm6PMMnM2n+n3enMkCUqzzuRnTD/Xx5giydNW0AhkhDtBo8XHWs2gGe7wwbEIGulHcDnM34NGk6/cendx7fj9RZnpP2WMbUYiGOOvNlOIzfFJUVu8kjlR+uV/g8/d9pSZW9NmZkIk8NUN5oYq06dbrNYX8XPhfGX+4mLhfLn1hu90yy29ELtpMwzD71E3ig735DbOMNt6zHWfVsQwP7rzwsOjo+INxdNoWkZUOx1a7f/qyJ9+1hN/megvqTLRKFOmhZIEJ3wJjpfx0rHELb9QhD/ygzMkXF1ldeV9k2SZZCIzThEPp34Vk2+CLPOhPnM0QRE4lzk6FQ/nmjgsaTyKi2LilCmTFxNI/DmJmalJL5leurwcyKmoMFFmirU4E5mNAavnzgcmMIF5A5h4wDZcYK4q1+nAzGVWnGDW7WfKOt0NZi330hKYasy6I0z7CyRHDiEokIpm1nKXsIbpQGUJzKKZDpSbCJjABOZNZYpb4AnN4jqdeNVOQgPm/0fKtLsWGro3v+rCrS67cxOY02NWgFlQABOYwLwFTEcKJGAWG2sunMhJpv2nHsAsNnQb+JhVYuVrodKYFeuZOuUmJqUwVW9qS+Yno62yJVPxSMdkxjQTaTF940x/wGoVNSbCpTCVTz0wWeJMo50cHGFqncihO/NnnkmmfLSqzpyhxGg/IcH8mLvE7L9XM9v7Ru/+pnEm0mMa7xtEBhpt5FBus+opBHaFqdPi8BLqBtNoaLXfLIdZAWZxTI063TxzoHGdDswJQZxg6j1lA+YEpu8EE83otC02H74bTLrE1t1g2njqQeeGrw4wsZeZns/KXpxrNjIxnfMPkm7Kxwe945OXNhZIPANPo/1ut3sYhnvio9tmNRuZj94O91EXHezX7WMi8uAbs5+Jyf2xf2TwwVLmRhDHK75/RvvbFSuZm7txf3X6uHdyvtL/YR8Tidw8Sv4ZgOxhT6ilzOcqdyyAmReSqRDAzAlHNrpDzCM3mJ9dYSoEMK9gHgGzQKYjGx2YRTLt3zf52Xub7ao8ICuJedcNphO5iTDfN98jfP2n4eUxX1vPlNfpLwgwbxNTFu9PVFYoKTfvLS4+c4BJfKrUSKMspmKTl9k/fau84Hj0gdIAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_187\",\r\n id: \"187\",\r\n ProductCode: \"CNCFL24@@H**\",\r\n ProductDescription: \"Cen CFL24 @@ Freespan Beam Attachment Gloss **H**\",\r\n ProductIndex: \"CFL24\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"102422\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.2643\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5136\",\r\n PromptTextCodes: \"@@=5/10/15/20/25/30\",\r\n Colours: \"\",\r\n LiveCost: \"25.76\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANQAAACABAMAAACB71rKAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzo1MTowNCArMDkzMLesu2QAAAAHdElNRQfiBBIEFR3LcgvsAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAABJQTFRF////9/f3AAAA7+/v3t7e5+fnzWtFKgAAAAF0Uk5TAEDm2GYAAAEoSURBVHja7drRDcIwDATQNF2AboAyQUUW4IMV2H8VkkioBto0anwWoLsB/GrHqYSocwzzfRmmf6N8MKSCiZMSUs52lFFfIZhhwc56UuXAxmhCZcuKSpgdBT6xMjkT616oUQxxOmGp6BcMS7nyLpRrj8hSGm6JyhewJQrHGbuJomyc5S2DdpXjgdb7yQA38bMkzFqpiGps7VBA1vr5Q6yNVUM0trnV+tb2BQraWOWuiiFq3GdfLaPaV51SHeIOpTnEPeqlsdsVSzlDahkinlL6udJGjYZUNKNyum9WO9UdUqRIkSJFihQpUqRIkSJFihQpUqRIkSJFihQpUqSaqGRZfM4p/2I+msbH1KAaSVKdlOsXminFvho38VCGKdXPj+qqH74wDPODeQCrPKHzzEbm9wAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_188\",\r\n id: \"188\",\r\n ProductCode: \"CNCFL25H**@@\",\r\n ProductDescription: \"Cen CFL25 @@ Freespan Ridge Channel Gloss **H**\",\r\n ProductIndex: \"CFL25\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"102503\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.8298\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.3415\",\r\n PromptTextCodes: \"CFA\",\r\n Colours: \"\",\r\n LiveCost: \"25.76\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_189\",\r\n id: \"189\",\r\n ProductCode: \"CNCFL36@@H**\",\r\n ProductDescription: \"Cen CFL36 @@ Freespan Beam Attachment Gloss **H**\",\r\n ProductIndex: \"CFL36\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"103622\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.95\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9947\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.95\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_190\",\r\n id: \"190\",\r\n ProductCode: \"CNCFL38H**@@\",\r\n ProductDescription: \"Cen CFL38 @@ Downlight Flash 108X65 **H**\",\r\n ProductIndex: \"CFL38\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"103803\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.5088\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.73\",\r\n PromptTextCodes: \"D\",\r\n Colours: \"\",\r\n LiveCost: \"21.15\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_191\",\r\n id: \"191\",\r\n ProductCode: \"CNCFL39H**@@\",\r\n ProductDescription: \"Cen CFL39 @@ Downlight Flash 158X65 Gloss **H**\",\r\n ProductIndex: \"CFL39\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"103903\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.9811\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.9112\",\r\n PromptTextCodes: \"D\",\r\n Colours: \"\",\r\n LiveCost: \"21.15\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_192\",\r\n id: \"192\",\r\n ProductCode: \"CNCFL40H**@@\",\r\n ProductDescription: \"Cen CFL40 @@ Downlight Flash 65X65 Gloss **H**\",\r\n ProductIndex: \"CFL40\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"104003\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.7772\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.4493\",\r\n PromptTextCodes: \"D\",\r\n Colours: \"\",\r\n LiveCost: \"7.85\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_193\",\r\n id: \"193\",\r\n ProductCode: \"CNCFL41H**@@\",\r\n ProductDescription: \"Cen CFL41 @@ Downlight Flash 108X65 Gloss **H**\",\r\n ProductIndex: \"CFL41\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"104103\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.7921\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8387\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.88\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_194\",\r\n id: \"194\",\r\n ProductCode: \"CNCFL47**H**\",\r\n ProductDescription: \"Cen CFL47 Barge Cap C-Deck Freespan **H**\",\r\n ProductIndex: \"CFL47\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"104701\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.416\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.3352\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"16.97\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_195\",\r\n id: \"195\",\r\n ProductCode: \"CNCFL50**H**@@\",\r\n ProductDescription: \"Cen CFL50 Ridge Cap **H** @@\",\r\n ProductIndex: \"CFL50\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"105002\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.4066\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.6908\",\r\n PromptTextCodes: \"D/S CEN COL D\",\r\n Colours: \"\",\r\n LiveCost: \"23.83\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"=(Length/380) + 2\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_196\",\r\n id: \"196\",\r\n ProductCode: \"CNCFL51**H**@@\",\r\n ProductDescription: \"Cen CFL51 Ridge Cap **H** @@\",\r\n ProductIndex: \"CFL51\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"105102\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.0394\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5499\",\r\n PromptTextCodes: \"D\",\r\n Colours: \"\",\r\n LiveCost: \"20.88\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"=(Length/380) + 2\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_197\",\r\n id: \"197\",\r\n ProductCode: \"CNCFL52**H**@@\",\r\n ProductDescription: \"Cen CFL52 Hip Cap ** @@\",\r\n ProductIndex: \"CFL52\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"105202\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.1215\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.1977\",\r\n PromptTextCodes: \"D TOP.UNDER\",\r\n Colours: \"\",\r\n LiveCost: \"20.60\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"14\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Ridge Capping Fix\",\\n \"Qty\" : \"=(Length/380) + 2\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_198\",\r\n id: \"198\",\r\n ProductCode: \"CNCFL53@@**\",\r\n ProductDescription: \"Cen CFL53 @@ Freespan Beam Channel Gloss **\",\r\n ProductIndex: \"CFL53\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.5515\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5953\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.5515\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_199\",\r\n id: \"199\",\r\n ProductCode: \"CNCFL54ZL\",\r\n ProductDescription: \"Cen CFL54 Box Gtr House Side Soaker 0.55 Am125 Zincalume\",\r\n ProductIndex: \"CFL54Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"848\",\r\n SubGroup: \"105401\",\r\n SellingUOM: \"LM\",\r\n Cost: \"0.8797\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.459\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.15\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_200\",\r\n id: \"200\",\r\n ProductCode: \"PCSCREWOS60C410\",\r\n ProductDescription: \"POWERS ONESHOT 12-14X60 CL4 (PKT 100)\",\r\n ProductIndex: \"CLEARFIX\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"812610\",\r\n SellingUOM: \"100\",\r\n Cost: \"28.97\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.014\",\r\n PromptTextCodes: 'Desc=\"Clearfix Screw(s)\" AltIndex=CPTS45P',\r\n Colours: \"\",\r\n LiveCost: \"35.46\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_201\",\r\n id: \"201\",\r\n ProductCode: \"SRB42**U\",\r\n ProductDescription: \"Corr S-Rib 0.42BMT **H**U\",\r\n ProductIndex: \"CO42\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"002\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.5755\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2573\",\r\n PromptTextCodes: \"CVR\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey, Classic Cream/Classic Cream, Classic Cream/Mangrove, Classic Cream/Manor Red, Classic Cream/Monument, Classic Cream/Woodland Grey, Paperbark/Gully, Paperbark/Paperbark, Paperbark/Woodland Grey, Surfmist/Monument, Surfmist/Surfmist\",\r\n LiveCost: \"18.31\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1235B8100\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3))*Qty\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof End Fix\",\\n \"Qty\":\"=((2*6))*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRBzoaV/m3lQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+fn58bGxs7Ozu/v77W1ta2trb29vd7e3tbW1qWlpZycnJSUlIiIiG9vb21kNHAAAAABdFJOUwBA5thmAAAFCElEQVR42u2Wz2vbZhjH5UAO20kuBNadsq49pKet8hTNWWEgz/HSSxrowbkqSGrtBEaKpO21Q0HuK61uy1g6Vnra4qyUngYBKyDJgxXsgCQHNojHLCm3uGDp1R/Q2p3SrFtLW0jDjnsOz+3zvO/z6/u+GPa/xTaGYwn8iGyeZOemvsImvntzNLEqsoariXx1673TqW9GMrNPr5E8FDzHCZxvS43AAk7oXD7nfYllGTwxN3sI9t1FVfF3hCLaFBoDrbU9KFkGcq++gy7ib8nj+OhsAk++uh4JbL7AiGZTiVllaSiISwPQag9tuz30vGw7XBi7bX+IJSZmE+dfYpPYvCLAlR4peBrLhboAUJ8zUGjp0QB40dB3r3vRTr7qXcRG7596kcWxeU6iy3uktGIxk35XZLcfKdr2Y1FrD4BrP+mU4gAmagwRSk+j8McX2ZOcTBmuwiz1eGiGCt8Y6oIZWSKIesXu7kC3naHrudHAjPwnYbRz5rnc8eNVhi66y/JiD1Il9ECqRg8VfbdfqP8yABqIuo7lD0xko9B3/aHtoz+fS/htkM4BSyaqXbZyDkkwLnpVaKA6B6KHhtUe6haIQifmdD/0gzbyfvu30GMsQcAuQytBPUX6TUpdCVi2ippcffsxAEa0V7IakW7bfuggqx2UkPvzP/CxqpwhTZlSyxs1YqWn8gpqUmw7YIWzQw3UGwNQ0nb7lmPtumaMd9uo8ekzdqSwUMk5l+mZG517lSm0nGO3H2alxVBSBD8QtQLqi7qBOrZlIstx47P90Pzhb/Y4maLv2gx9/2aPyEz7G9nKUk8lFL9DcWBY54SVgSCKjVA3W7Fzuk4Yw63xg3zzauo+rUszdLGTymT9rUzlRsBPL9zsUxC2+zzL+X0IgN8HhhY7L05Z990H+AFLrs/UyvWZGucurBMre7RMtR9kmSm0qcrViGXVclhnxTLSgFZCLcONScOzDjp17A59bdXZyNCKsVBLXe+nqWtLe9kForGXkyi/B3kYO5FtBJxeLweiYZV8K4Z/fdrgsQtjq1q6ll51lmtnvvcY8uNzj9RK7pOQodRFdBnyRSQo8Z52OF1sdzmjVfI009W/eFbs05/j8/f0Cp2+60mZ/aypCom2ckzO/4Nk+UYARbUY1jkN+K04b9MVY/jK87OdWcNOroLNmZlVs5Wh414TFepsIENJQVsx3O4pYLMYiiCe9w5nuKX3XlhIHJuT1y7cqpWDa7XUNGJoQkE7BEGs9GXIV/2mIgpllwW66LQKtgVeWukTOJaHlW9rMr27R6sEDCokn/V3KCiXA8iKnNdhgVbw6sDW2FfpSXLiFHZ8vbyxTsxMR5u0qi71KZaH7eakIFRDQdHrRVcArsC8Rj8xbCIzPrJOlbuEmsqi32s8Uw2XJwW22JcLulDussAVL72S3dfZZCy3eVIaP03G95UJSl7sq4oEzQ4FNNZsQdHmrr5GQWN8FsOTWPJ84iQ0Lq3yFHQ2ScgqngRFUXHqUNOVK9jr7anOJ/BR+idsJCdfDxmSZ6dCVRFZxZZgSyM/wA5n+VxzLU8u10yXFABT7KoF0BTHDwmPTZzCR+/wnF5R4y2ptlTOWqbOHxI+6MEtmJ6dUATZbkGgSZXDP6OJePxGT8TP1W0BWkzOFNmv3+TggxjY6B1qLZmf1NSP3hiOezB2IY4xx8EjwPvbg8cT+D792RFgfH8AsMRI8qjfjv/K/gJX6ckBxPpaygAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_202\",\r\n id: \"202\",\r\n ProductCode: \"SRB42**H**U\",\r\n ProductDescription: \"Corr S-Rib 0.42BMT DS **H**U\",\r\n ProductIndex: \"CO42DS\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"002\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.5755\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2573\",\r\n PromptTextCodes: \"CVR\",\r\n Colours:\r\n \"Classic Cream/Classic Cream, Classic Cream/Mangrove, Classic Cream/Manor Red, Classic Cream/Monument, Classic Cream/Woodland Grey, Paperbark/Gully, Paperbark/Paperbark, Paperbark/Woodland Grey, Surfmist/Monument, Surfmist/Surfmist\",\r\n LiveCost: \"18.31\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1235B8100\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3))*Qty\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof End Fix\",\\n \"Qty\":\"=((2*6))*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRBzoaV/m3lQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+fn58bGxs7Ozu/v77W1ta2trb29vd7e3tbW1qWlpZycnJSUlIiIiG9vb21kNHAAAAABdFJOUwBA5thmAAAFCElEQVR42u2Wz2vbZhjH5UAO20kuBNadsq49pKet8hTNWWEgz/HSSxrowbkqSGrtBEaKpO21Q0HuK61uy1g6Vnra4qyUngYBKyDJgxXsgCQHNojHLCm3uGDp1R/Q2p3SrFtLW0jDjnsOz+3zvO/z6/u+GPa/xTaGYwn8iGyeZOemvsImvntzNLEqsoariXx1673TqW9GMrNPr5E8FDzHCZxvS43AAk7oXD7nfYllGTwxN3sI9t1FVfF3hCLaFBoDrbU9KFkGcq++gy7ib8nj+OhsAk++uh4JbL7AiGZTiVllaSiISwPQag9tuz30vGw7XBi7bX+IJSZmE+dfYpPYvCLAlR4peBrLhboAUJ8zUGjp0QB40dB3r3vRTr7qXcRG7596kcWxeU6iy3uktGIxk35XZLcfKdr2Y1FrD4BrP+mU4gAmagwRSk+j8McX2ZOcTBmuwiz1eGiGCt8Y6oIZWSKIesXu7kC3naHrudHAjPwnYbRz5rnc8eNVhi66y/JiD1Il9ECqRg8VfbdfqP8yABqIuo7lD0xko9B3/aHtoz+fS/htkM4BSyaqXbZyDkkwLnpVaKA6B6KHhtUe6haIQifmdD/0gzbyfvu30GMsQcAuQytBPUX6TUpdCVi2ippcffsxAEa0V7IakW7bfuggqx2UkPvzP/CxqpwhTZlSyxs1YqWn8gpqUmw7YIWzQw3UGwNQ0nb7lmPtumaMd9uo8ekzdqSwUMk5l+mZG517lSm0nGO3H2alxVBSBD8QtQLqi7qBOrZlIstx47P90Pzhb/Y4maLv2gx9/2aPyEz7G9nKUk8lFL9DcWBY54SVgSCKjVA3W7Fzuk4Yw63xg3zzauo+rUszdLGTymT9rUzlRsBPL9zsUxC2+zzL+X0IgN8HhhY7L05Z990H+AFLrs/UyvWZGucurBMre7RMtR9kmSm0qcrViGXVclhnxTLSgFZCLcONScOzDjp17A59bdXZyNCKsVBLXe+nqWtLe9kForGXkyi/B3kYO5FtBJxeLweiYZV8K4Z/fdrgsQtjq1q6ll51lmtnvvcY8uNzj9RK7pOQodRFdBnyRSQo8Z52OF1sdzmjVfI009W/eFbs05/j8/f0Cp2+60mZ/aypCom2ckzO/4Nk+UYARbUY1jkN+K04b9MVY/jK87OdWcNOroLNmZlVs5Wh414TFepsIENJQVsx3O4pYLMYiiCe9w5nuKX3XlhIHJuT1y7cqpWDa7XUNGJoQkE7BEGs9GXIV/2mIgpllwW66LQKtgVeWukTOJaHlW9rMr27R6sEDCokn/V3KCiXA8iKnNdhgVbw6sDW2FfpSXLiFHZ8vbyxTsxMR5u0qi71KZaH7eakIFRDQdHrRVcArsC8Rj8xbCIzPrJOlbuEmsqi32s8Uw2XJwW22JcLulDussAVL72S3dfZZCy3eVIaP03G95UJSl7sq4oEzQ4FNNZsQdHmrr5GQWN8FsOTWPJ84iQ0Lq3yFHQ2ScgqngRFUXHqUNOVK9jr7anOJ/BR+idsJCdfDxmSZ6dCVRFZxZZgSyM/wA5n+VxzLU8u10yXFABT7KoF0BTHDwmPTZzCR+/wnF5R4y2ptlTOWqbOHxI+6MEtmJ6dUATZbkGgSZXDP6OJePxGT8TP1W0BWkzOFNmv3+TggxjY6B1qLZmf1NSP3hiOezB2IY4xx8EjwPvbg8cT+D792RFgfH8AsMRI8qjfjv/K/gJX6ckBxPpaygAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_203\",\r\n id: \"203\",\r\n ProductCode: \"SRB42GAZ600\",\r\n ProductDescription: \"Corr S-Rib 0.42BMT Heritage Galv\",\r\n ProductIndex: \"CO42G\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"001\",\r\n SubGroup: \"142601\",\r\n SellingUOM: \"LM\",\r\n Cost: \"36.57\",\r\n MfgLocations: \"200\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.259\",\r\n PromptTextCodes: \"CVR\",\r\n Colours: \"Galvanised\",\r\n LiveCost: \"18.00\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1235B8100\",\\n \"Use\":\"Roof Fix 12x35mm\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3))*Qty\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof End Fix 12x45mm\",\\n \"Qty\":\"=((2*6))*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRBzoaV/m3lQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+fn58bGxs7Ozu/v77W1ta2trb29vd7e3tbW1qWlpZycnJSUlIiIiG9vb21kNHAAAAABdFJOUwBA5thmAAAFCElEQVR42u2Wz2vbZhjH5UAO20kuBNadsq49pKet8hTNWWEgz/HSSxrowbkqSGrtBEaKpO21Q0HuK61uy1g6Vnra4qyUngYBKyDJgxXsgCQHNojHLCm3uGDp1R/Q2p3SrFtLW0jDjnsOz+3zvO/z6/u+GPa/xTaGYwn8iGyeZOemvsImvntzNLEqsoariXx1673TqW9GMrNPr5E8FDzHCZxvS43AAk7oXD7nfYllGTwxN3sI9t1FVfF3hCLaFBoDrbU9KFkGcq++gy7ib8nj+OhsAk++uh4JbL7AiGZTiVllaSiISwPQag9tuz30vGw7XBi7bX+IJSZmE+dfYpPYvCLAlR4peBrLhboAUJ8zUGjp0QB40dB3r3vRTr7qXcRG7596kcWxeU6iy3uktGIxk35XZLcfKdr2Y1FrD4BrP+mU4gAmagwRSk+j8McX2ZOcTBmuwiz1eGiGCt8Y6oIZWSKIesXu7kC3naHrudHAjPwnYbRz5rnc8eNVhi66y/JiD1Il9ECqRg8VfbdfqP8yABqIuo7lD0xko9B3/aHtoz+fS/htkM4BSyaqXbZyDkkwLnpVaKA6B6KHhtUe6haIQifmdD/0gzbyfvu30GMsQcAuQytBPUX6TUpdCVi2ippcffsxAEa0V7IakW7bfuggqx2UkPvzP/CxqpwhTZlSyxs1YqWn8gpqUmw7YIWzQw3UGwNQ0nb7lmPtumaMd9uo8ekzdqSwUMk5l+mZG517lSm0nGO3H2alxVBSBD8QtQLqi7qBOrZlIstx47P90Pzhb/Y4maLv2gx9/2aPyEz7G9nKUk8lFL9DcWBY54SVgSCKjVA3W7Fzuk4Yw63xg3zzauo+rUszdLGTymT9rUzlRsBPL9zsUxC2+zzL+X0IgN8HhhY7L05Z990H+AFLrs/UyvWZGucurBMre7RMtR9kmSm0qcrViGXVclhnxTLSgFZCLcONScOzDjp17A59bdXZyNCKsVBLXe+nqWtLe9kForGXkyi/B3kYO5FtBJxeLweiYZV8K4Z/fdrgsQtjq1q6ll51lmtnvvcY8uNzj9RK7pOQodRFdBnyRSQo8Z52OF1sdzmjVfI009W/eFbs05/j8/f0Cp2+60mZ/aypCom2ckzO/4Nk+UYARbUY1jkN+K04b9MVY/jK87OdWcNOroLNmZlVs5Wh414TFepsIENJQVsx3O4pYLMYiiCe9w5nuKX3XlhIHJuT1y7cqpWDa7XUNGJoQkE7BEGs9GXIV/2mIgpllwW66LQKtgVeWukTOJaHlW9rMr27R6sEDCokn/V3KCiXA8iKnNdhgVbw6sDW2FfpSXLiFHZ8vbyxTsxMR5u0qi71KZaH7eakIFRDQdHrRVcArsC8Rj8xbCIzPrJOlbuEmsqi32s8Uw2XJwW22JcLulDussAVL72S3dfZZCy3eVIaP03G95UJSl7sq4oEzQ4FNNZsQdHmrr5GQWN8FsOTWPJ84iQ0Lq3yFHQ2ScgqngRFUXHqUNOVK9jr7anOJ/BR+idsJCdfDxmSZ6dCVRFZxZZgSyM/wA5n+VxzLU8u10yXFABT7KoF0BTHDwmPTZzCR+/wnF5R4y2ptlTOWqbOHxI+6MEtmJ6dUATZbkGgSZXDP6OJePxGT8TP1W0BWkzOFNmv3+TggxjY6B1qLZmf1NSP3hiOezB2IY4xx8EjwPvbg8cT+D792RFgfH8AsMRI8qjfjv/K/gJX6ckBxPpaygAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_204\",\r\n id: \"204\",\r\n ProductCode: \"SRB42ZL\",\r\n ProductDescription: \"Corr S-Rib 0.42BMT Z150 Zincalume\",\r\n ProductIndex: \"CO42Z\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"001\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.8545\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2258\",\r\n PromptTextCodes: \"CVR\",\r\n Colours: \"Zincalume\",\r\n LiveCost: \"14.63\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1235B8100\",\\n \"Use\":\"Roof Fix 12x35mm\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3))*Qty\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof End Fix 12x45mm\",\\n \"Qty\":\"=((2*6))*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRBzoaV/m3lQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+fn58bGxs7Ozu/v77W1ta2trb29vd7e3tbW1qWlpZycnJSUlIiIiG9vb21kNHAAAAABdFJOUwBA5thmAAAFCElEQVR42u2Wz2vbZhjH5UAO20kuBNadsq49pKet8hTNWWEgz/HSSxrowbkqSGrtBEaKpO21Q0HuK61uy1g6Vnra4qyUngYBKyDJgxXsgCQHNojHLCm3uGDp1R/Q2p3SrFtLW0jDjnsOz+3zvO/z6/u+GPa/xTaGYwn8iGyeZOemvsImvntzNLEqsoariXx1673TqW9GMrNPr5E8FDzHCZxvS43AAk7oXD7nfYllGTwxN3sI9t1FVfF3hCLaFBoDrbU9KFkGcq++gy7ib8nj+OhsAk++uh4JbL7AiGZTiVllaSiISwPQag9tuz30vGw7XBi7bX+IJSZmE+dfYpPYvCLAlR4peBrLhboAUJ8zUGjp0QB40dB3r3vRTr7qXcRG7596kcWxeU6iy3uktGIxk35XZLcfKdr2Y1FrD4BrP+mU4gAmagwRSk+j8McX2ZOcTBmuwiz1eGiGCt8Y6oIZWSKIesXu7kC3naHrudHAjPwnYbRz5rnc8eNVhi66y/JiD1Il9ECqRg8VfbdfqP8yABqIuo7lD0xko9B3/aHtoz+fS/htkM4BSyaqXbZyDkkwLnpVaKA6B6KHhtUe6haIQifmdD/0gzbyfvu30GMsQcAuQytBPUX6TUpdCVi2ippcffsxAEa0V7IakW7bfuggqx2UkPvzP/CxqpwhTZlSyxs1YqWn8gpqUmw7YIWzQw3UGwNQ0nb7lmPtumaMd9uo8ekzdqSwUMk5l+mZG517lSm0nGO3H2alxVBSBD8QtQLqi7qBOrZlIstx47P90Pzhb/Y4maLv2gx9/2aPyEz7G9nKUk8lFL9DcWBY54SVgSCKjVA3W7Fzuk4Yw63xg3zzauo+rUszdLGTymT9rUzlRsBPL9zsUxC2+zzL+X0IgN8HhhY7L05Z990H+AFLrs/UyvWZGucurBMre7RMtR9kmSm0qcrViGXVclhnxTLSgFZCLcONScOzDjp17A59bdXZyNCKsVBLXe+nqWtLe9kForGXkyi/B3kYO5FtBJxeLweiYZV8K4Z/fdrgsQtjq1q6ll51lmtnvvcY8uNzj9RK7pOQodRFdBnyRSQo8Z52OF1sdzmjVfI009W/eFbs05/j8/f0Cp2+60mZ/aypCom2ckzO/4Nk+UYARbUY1jkN+K04b9MVY/jK87OdWcNOroLNmZlVs5Wh414TFepsIENJQVsx3O4pYLMYiiCe9w5nuKX3XlhIHJuT1y7cqpWDa7XUNGJoQkE7BEGs9GXIV/2mIgpllwW66LQKtgVeWukTOJaHlW9rMr27R6sEDCokn/V3KCiXA8iKnNdhgVbw6sDW2FfpSXLiFHZ8vbyxTsxMR5u0qi71KZaH7eakIFRDQdHrRVcArsC8Rj8xbCIzPrJOlbuEmsqi32s8Uw2XJwW22JcLulDussAVL72S3dfZZCy3eVIaP03G95UJSl7sq4oEzQ4FNNZsQdHmrr5GQWN8FsOTWPJ84iQ0Lq3yFHQ2ScgqngRFUXHqUNOVK9jr7anOJ/BR+idsJCdfDxmSZ6dCVRFZxZZgSyM/wA5n+VxzLU8u10yXFABT7KoF0BTHDwmPTZzCR+/wnF5R4y2ptlTOWqbOHxI+6MEtmJ6dUATZbkGgSZXDP6OJePxGT8TP1W0BWkzOFNmv3+TggxjY6B1qLZmf1NSP3hiOezB2IY4xx8EjwPvbg8cT+D792RFgfH8AsMRI8qjfjv/K/gJX6ckBxPpaygAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_205\",\r\n id: \"205\",\r\n ProductCode: \"SRB48**U\",\r\n ProductDescription: \"Corr S-Rib 0.48BMT **U\",\r\n ProductIndex: \"CO48\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"002\",\r\n SubGroup: \"148101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.4941\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.69\",\r\n PromptTextCodes: \"CVR .48\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey\",\r\n LiveCost: \"21.55\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1235B8100\",\\n \"Use\":\"Roof Fix 12x35mm\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3))*Qty\"},\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof End Fix 12x45mm\",\\n \"Qty\":\"=((2*6))*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRBzoaV/m3lQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+fn58bGxs7Ozu/v77W1ta2trb29vd7e3tbW1qWlpZycnJSUlIiIiG9vb21kNHAAAAABdFJOUwBA5thmAAAFCElEQVR42u2Wz2vbZhjH5UAO20kuBNadsq49pKet8hTNWWEgz/HSSxrowbkqSGrtBEaKpO21Q0HuK61uy1g6Vnra4qyUngYBKyDJgxXsgCQHNojHLCm3uGDp1R/Q2p3SrFtLW0jDjnsOz+3zvO/z6/u+GPa/xTaGYwn8iGyeZOemvsImvntzNLEqsoariXx1673TqW9GMrNPr5E8FDzHCZxvS43AAk7oXD7nfYllGTwxN3sI9t1FVfF3hCLaFBoDrbU9KFkGcq++gy7ib8nj+OhsAk++uh4JbL7AiGZTiVllaSiISwPQag9tuz30vGw7XBi7bX+IJSZmE+dfYpPYvCLAlR4peBrLhboAUJ8zUGjp0QB40dB3r3vRTr7qXcRG7596kcWxeU6iy3uktGIxk35XZLcfKdr2Y1FrD4BrP+mU4gAmagwRSk+j8McX2ZOcTBmuwiz1eGiGCt8Y6oIZWSKIesXu7kC3naHrudHAjPwnYbRz5rnc8eNVhi66y/JiD1Il9ECqRg8VfbdfqP8yABqIuo7lD0xko9B3/aHtoz+fS/htkM4BSyaqXbZyDkkwLnpVaKA6B6KHhtUe6haIQifmdD/0gzbyfvu30GMsQcAuQytBPUX6TUpdCVi2ippcffsxAEa0V7IakW7bfuggqx2UkPvzP/CxqpwhTZlSyxs1YqWn8gpqUmw7YIWzQw3UGwNQ0nb7lmPtumaMd9uo8ekzdqSwUMk5l+mZG517lSm0nGO3H2alxVBSBD8QtQLqi7qBOrZlIstx47P90Pzhb/Y4maLv2gx9/2aPyEz7G9nKUk8lFL9DcWBY54SVgSCKjVA3W7Fzuk4Yw63xg3zzauo+rUszdLGTymT9rUzlRsBPL9zsUxC2+zzL+X0IgN8HhhY7L05Z990H+AFLrs/UyvWZGucurBMre7RMtR9kmSm0qcrViGXVclhnxTLSgFZCLcONScOzDjp17A59bdXZyNCKsVBLXe+nqWtLe9kForGXkyi/B3kYO5FtBJxeLweiYZV8K4Z/fdrgsQtjq1q6ll51lmtnvvcY8uNzj9RK7pOQodRFdBnyRSQo8Z52OF1sdzmjVfI009W/eFbs05/j8/f0Cp2+60mZ/aypCom2ckzO/4Nk+UYARbUY1jkN+K04b9MVY/jK87OdWcNOroLNmZlVs5Wh414TFepsIENJQVsx3O4pYLMYiiCe9w5nuKX3XlhIHJuT1y7cqpWDa7XUNGJoQkE7BEGs9GXIV/2mIgpllwW66LQKtgVeWukTOJaHlW9rMr27R6sEDCokn/V3KCiXA8iKnNdhgVbw6sDW2FfpSXLiFHZ8vbyxTsxMR5u0qi71KZaH7eakIFRDQdHrRVcArsC8Rj8xbCIzPrJOlbuEmsqi32s8Uw2XJwW22JcLulDussAVL72S3dfZZCy3eVIaP03G95UJSl7sq4oEzQ4FNNZsQdHmrr5GQWN8FsOTWPJ84iQ0Lq3yFHQ2ScgqngRFUXHqUNOVK9jr7anOJ/BR+idsJCdfDxmSZ6dCVRFZxZZgSyM/wA5n+VxzLU8u10yXFABT7KoF0BTHDwmPTZzCR+/wnF5R4y2ptlTOWqbOHxI+6MEtmJ6dUATZbkGgSZXDP6OJePxGT8TP1W0BWkzOFNmv3+TggxjY6B1qLZmf1NSP3hiOezB2IY4xx8EjwPvbg8cT+D792RFgfH8AsMRI8qjfjv/K/gJX6ckBxPpaygAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_206\",\r\n id: \"206\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Corrugated Cover Sheet Only (Metal)\",\r\n ProductIndex: \"COCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.311\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"3.9732\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRBzoaV/m3lQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+fn58bGxs7Ozu/v77W1ta2trb29vd7e3tbW1qWlpZycnJSUlIiIiG9vb21kNHAAAAABdFJOUwBA5thmAAAFCElEQVR42u2Wz2vbZhjH5UAO20kuBNadsq49pKet8hTNWWEgz/HSSxrowbkqSGrtBEaKpO21Q0HuK61uy1g6Vnra4qyUngYBKyDJgxXsgCQHNojHLCm3uGDp1R/Q2p3SrFtLW0jDjnsOz+3zvO/z6/u+GPa/xTaGYwn8iGyeZOemvsImvntzNLEqsoariXx1673TqW9GMrNPr5E8FDzHCZxvS43AAk7oXD7nfYllGTwxN3sI9t1FVfF3hCLaFBoDrbU9KFkGcq++gy7ib8nj+OhsAk++uh4JbL7AiGZTiVllaSiISwPQag9tuz30vGw7XBi7bX+IJSZmE+dfYpPYvCLAlR4peBrLhboAUJ8zUGjp0QB40dB3r3vRTr7qXcRG7596kcWxeU6iy3uktGIxk35XZLcfKdr2Y1FrD4BrP+mU4gAmagwRSk+j8McX2ZOcTBmuwiz1eGiGCt8Y6oIZWSKIesXu7kC3naHrudHAjPwnYbRz5rnc8eNVhi66y/JiD1Il9ECqRg8VfbdfqP8yABqIuo7lD0xko9B3/aHtoz+fS/htkM4BSyaqXbZyDkkwLnpVaKA6B6KHhtUe6haIQifmdD/0gzbyfvu30GMsQcAuQytBPUX6TUpdCVi2ippcffsxAEa0V7IakW7bfuggqx2UkPvzP/CxqpwhTZlSyxs1YqWn8gpqUmw7YIWzQw3UGwNQ0nb7lmPtumaMd9uo8ekzdqSwUMk5l+mZG517lSm0nGO3H2alxVBSBD8QtQLqi7qBOrZlIstx47P90Pzhb/Y4maLv2gx9/2aPyEz7G9nKUk8lFL9DcWBY54SVgSCKjVA3W7Fzuk4Yw63xg3zzauo+rUszdLGTymT9rUzlRsBPL9zsUxC2+zzL+X0IgN8HhhY7L05Z990H+AFLrs/UyvWZGucurBMre7RMtR9kmSm0qcrViGXVclhnxTLSgFZCLcONScOzDjp17A59bdXZyNCKsVBLXe+nqWtLe9kForGXkyi/B3kYO5FtBJxeLweiYZV8K4Z/fdrgsQtjq1q6ll51lmtnvvcY8uNzj9RK7pOQodRFdBnyRSQo8Z52OF1sdzmjVfI009W/eFbs05/j8/f0Cp2+60mZ/aypCom2ckzO/4Nk+UYARbUY1jkN+K04b9MVY/jK87OdWcNOroLNmZlVs5Wh414TFepsIENJQVsx3O4pYLMYiiCe9w5nuKX3XlhIHJuT1y7cqpWDa7XUNGJoQkE7BEGs9GXIV/2mIgpllwW66LQKtgVeWukTOJaHlW9rMr27R6sEDCokn/V3KCiXA8iKnNdhgVbw6sDW2FfpSXLiFHZ8vbyxTsxMR5u0qi71KZaH7eakIFRDQdHrRVcArsC8Rj8xbCIzPrJOlbuEmsqi32s8Uw2XJwW22JcLulDussAVL72S3dfZZCy3eVIaP03G95UJSl7sq4oEzQ4FNNZsQdHmrr5GQWN8FsOTWPJ84iQ0Lq3yFHQ2ScgqngRFUXHqUNOVK9jr7anOJ/BR+idsJCdfDxmSZ6dCVRFZxZZgSyM/wA5n+VxzLU8u10yXFABT7KoF0BTHDwmPTZzCR+/wnF5R4y2ptlTOWqbOHxI+6MEtmJ6dUATZbkGgSZXDP6OJePxGT8TP1W0BWkzOFNmv3+TggxjY6B1qLZmf1NSP3hiOezB2IY4xx8EjwPvbg8cT+D792RFgfH8AsMRI8qjfjv/K/gJX6ckBxPpaygAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_207\",\r\n id: \"207\",\r\n ProductCode: \"CNCON1108GA\",\r\n ProductDescription: \"Cen CON1 108x65 Galv Inground Connector\",\r\n ProductIndex: \"CON110865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200103\",\r\n SellingUOM: \"EA\",\r\n Cost: \"19.76\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"53.48\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"10X120\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATkAAABDBAMAAAAVAW/RAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToxODowNiArMDkzMAyjR04AAAAHdElNRQfiBBIBMDBglUWVAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f37+/v5+fn2trazs7OxsbGubm5oKCgg4ODa2trTk5OLS0tFBQUCAgIAAAAjGhDmAAAAAF0Uk5TAEDm2GYAAAPbSURBVHja7dpfSFNRHAfwu1I3I6jrQwT5oFeEaT05ycAeLK+i/YEeWhQVqOlx/oFEwq0eaplOXSEq/fPPg70U6pRBluEUIsSps5eCiGr21EMPzvci7d6ze6Zz7nrOnL8M9n24F7nC/fyOu97fOWcct4Oz718DYrqYbsclVGd3+TM+KKdbztNWOWYpCFUYjaKYbzAIgpDK89A6nQ3hcJokIc2QLRYYL6BKs9mCgTK1R0YPudTiL2wguLAGhJTCsqTK+P2R6Y6iraaE45MEqTDRX5g5uDBSgcPnZNfZtoyjTOXKL2bdrk4oXdWcK4VVpyuE0rXbkjf9067XHYvGjctpSnQU1kyx6rqiobv5SOViaQs+mWZQmYdRF2+LAq7K80bl6uXBBvlkr5eG7xybLiMaQzdszSkMe7HS0yPrylwJCCW/ZdOZoqEbaX4S/mLtuzhp1FDND+lQ7WbSxT2Ohq76lcrFqtm2A9Lp9Gv5h746Fp22IRo69VjwcQ4faz6y6C5uP86fvdP4ZJph0bVB6R4oH6HJPHpdou+91+udV4Jf1oFmQ36Tt8idRoXUaMgNFC+1GZHiSj1EaaXXXVmJJMs+n2/Ri/NtbWHjpD9UCjPjwvKlBir14Iyiq/5Er4ufDzQ4E/NB8a5mwYcTUSGBPFd0plmGz51FCBvcs0lNm9GIVpu21rbuQN9GX9jS8hLRod46el2OsB1JwW22SNpsqc+2vyS6ohf0Om3jtvBCveSpQBVz9LrdQDrBEXh8263UOs4EpEueJrrj/fQ6PZAuw010pp/0Os1dIF4feaOrtqDre+NLQLojH8jg3e6g1+myYHR68rZAh5z0urguoMG7T2b1pSoTx5DZ9j0gXYaNDN5ZJ71OexJGp58lOpWJY4hO0wk0eCPkqb32lV7HNQPpagOdgCOPXpcIpEsfI7paJ71OVwbEs+NGlOdQ7RS9jnsIpMtVOtHFhd8MOjOQTr+yuIQ7fyZdQj0Qb3LMv947/JlBx7UA6TKbRJwzDE8FXJOX/syvCz9t3EinawTiTWRjHct/Y2niCKW7Pirjit1MOq4ISJc5Jevu9LPptFCDNyjrHCVsOrCpWW65KBaprG1vvItn2fqNqZLpFsVTVlYd1NRM6BXFvhRWXUIjkO5w04k3HKtOA9W/60eLncw67mpgaW7Nspxnw+1NvDKHjOfxpq3UELHxBm6VsOv2kK3W4HUuhoU7pTDvmuVG/0qqsiMtF2YZav3+hWPXbRINn5RmMITZgB1at46nWtifDrX7wH8vgOfxKmWBESGpsBuqv/u/fWthJyWmi+liupguirq/VrWtJOAFzGEAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_208\",\r\n id: \"208\",\r\n ProductCode: \"CNCON1158GA\",\r\n ProductDescription: \"Cen CON1 158X65 Galv Inground Connnector\",\r\n ProductIndex: \"CON115865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200105\",\r\n SellingUOM: \"EA\",\r\n Cost: \"28.7201\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"74.20\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"10X170\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATkAAABDBAMAAAAVAW/RAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToxODowNiArMDkzMAyjR04AAAAHdElNRQfiBBIBMDBglUWVAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f37+/v5+fn2trazs7OxsbGubm5oKCgg4ODa2trTk5OLS0tFBQUCAgIAAAAjGhDmAAAAAF0Uk5TAEDm2GYAAAPbSURBVHja7dpfSFNRHAfwu1I3I6jrQwT5oFeEaT05ycAeLK+i/YEeWhQVqOlx/oFEwq0eaplOXSEq/fPPg70U6pRBluEUIsSps5eCiGr21EMPzvci7d6ze6Zz7nrOnL8M9n24F7nC/fyOu97fOWcct4Oz718DYrqYbsclVGd3+TM+KKdbztNWOWYpCFUYjaKYbzAIgpDK89A6nQ3hcJokIc2QLRYYL6BKs9mCgTK1R0YPudTiL2wguLAGhJTCsqTK+P2R6Y6iraaE45MEqTDRX5g5uDBSgcPnZNfZtoyjTOXKL2bdrk4oXdWcK4VVpyuE0rXbkjf9067XHYvGjctpSnQU1kyx6rqiobv5SOViaQs+mWZQmYdRF2+LAq7K80bl6uXBBvlkr5eG7xybLiMaQzdszSkMe7HS0yPrylwJCCW/ZdOZoqEbaX4S/mLtuzhp1FDND+lQ7WbSxT2Ohq76lcrFqtm2A9Lp9Gv5h746Fp22IRo69VjwcQ4faz6y6C5uP86fvdP4ZJph0bVB6R4oH6HJPHpdou+91+udV4Jf1oFmQ36Tt8idRoXUaMgNFC+1GZHiSj1EaaXXXVmJJMs+n2/Ri/NtbWHjpD9UCjPjwvKlBir14Iyiq/5Er4ufDzQ4E/NB8a5mwYcTUSGBPFd0plmGz51FCBvcs0lNm9GIVpu21rbuQN9GX9jS8hLRod46el2OsB1JwW22SNpsqc+2vyS6ohf0Om3jtvBCveSpQBVz9LrdQDrBEXh8263UOs4EpEueJrrj/fQ6PZAuw010pp/0Os1dIF4feaOrtqDre+NLQLojH8jg3e6g1+myYHR68rZAh5z0urguoMG7T2b1pSoTx5DZ9j0gXYaNDN5ZJ71OexJGp58lOpWJY4hO0wk0eCPkqb32lV7HNQPpagOdgCOPXpcIpEsfI7paJ71OVwbEs+NGlOdQ7RS9jnsIpMtVOtHFhd8MOjOQTr+yuIQ7fyZdQj0Qb3LMv947/JlBx7UA6TKbRJwzDE8FXJOX/syvCz9t3EinawTiTWRjHct/Y2niCKW7Pirjit1MOq4ISJc5Jevu9LPptFCDNyjrHCVsOrCpWW65KBaprG1vvItn2fqNqZLpFsVTVlYd1NRM6BXFvhRWXUIjkO5w04k3HKtOA9W/60eLncw67mpgaW7Nspxnw+1NvDKHjOfxpq3UELHxBm6VsOv2kK3W4HUuhoU7pTDvmuVG/0qqsiMtF2YZav3+hWPXbRINn5RmMITZgB1at46nWtifDrX7wH8vgOfxKmWBESGpsBuqv/u/fWthJyWmi+liupguirq/VrWtJOAFzGEAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_209\",\r\n id: \"209\",\r\n ProductCode: \"CNCON1265GA\",\r\n ProductDescription: \"Cen CON12 65X65 F/Standing Inground Con Galv\",\r\n ProductIndex: \"CON12G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"201201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"36.31\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.41\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"91.95\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_210\",\r\n id: \"210\",\r\n ProductCode: \"CNCON1375GA\",\r\n ProductDescription: \"Cen CON13 75x75 Base Plate Galv\",\r\n ProductIndex: \"CON137575G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"33\",\r\n MfgLocations: \"0\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3\",\r\n PromptTextCodes: \"0\",\r\n Colours: \"\",\r\n LiveCost: \"33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_211\",\r\n id: \"211\",\r\n ProductCode: \"CNCON1390GA\",\r\n ProductDescription: \"Cen CON13 90x90 Base Plate Galv\",\r\n ProductIndex: \"CON139090G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"33\",\r\n MfgLocations: \"0\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3\",\r\n PromptTextCodes: \"0\",\r\n Colours: \"\",\r\n LiveCost: \"33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_212\",\r\n id: \"212\",\r\n ProductCode: \"CNCON1365GA\",\r\n ProductDescription: \"Cen CON13 65X65 Base Plate Galv\",\r\n ProductIndex: \"CON13G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"201301\",\r\n SellingUOM: \"EA\",\r\n Cost: \"32.61\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"87.86\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_213\",\r\n id: \"213\",\r\n ProductCode: \"CNCON165GA\",\r\n ProductDescription: \"Cen CON1 65x65 Galv Inground Connector\",\r\n ProductIndex: \"CON16565\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.4259\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.75\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"17.18\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"10X90\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAAAzBAMAAACDLmuYAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToxNjo1OCArMDkzMAq1AsQAAAAHdElNRQfiBBIBMAKoQhQVAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f37+/v5+fn1tbWxsbGvb29tbW1ra2tnJyce3t7WlpaRkZGLS0tEBAQAAAAAae9WgAAAAF0Uk5TAEDm2GYAAAL0SURBVHja7dhNaxNBGAfwjX0xvXV70qNjg1oVJJtirQrFqAixoLaJBl96kXhXcetN9KCVKhIJ2JaCVBSbRilFBU1EPXioWVHQoELTb5D4ARTjvO3aZ3doRLePHvo/NaXN/JiZnWef0bTlLAcmTAjRdb313wmCQyPe3LrixORJ0cR5dssYPJz/t/ojcUX0NkLW0hHYWPRjInVKSExHpoLTQLnjlnIjqiRk4j7mILVL+R7+iwRVUMugcJ2v3FAImv0U1BXOZRWE1ZiE5OvxLV7CWUzCzonNtz2ChgwmYYps+Oh9JEOIguQjQooewj7MSehNE3K9Z0kfyXp5Tg+yDvdmaMQUJB9TgmclgpiE4xcZ4doBSBjOsBO0Xxz5YbJGX0pCgQnIpmlIeFdzp8pSKfNYLHmerIxdxEzznMRHOZ7q6/ETJU5YX4KEh0U2SlmmKvK19gcR/2p/E8cXOf6ZsE+OjE1wArEgodtwJcwKZERUGV4faXERNdCeBzErBT6Ig7f11cWUpwVhGG6GJsO3EFYiF+AHnYIu7Tk5Cx13AWHFTf8M9dL1QRDIlKtK4RGMN5Jw4gKs1YiE8V2CsPElPB6jeIQdM4LQ/gWuxEk8QldJrkQOElbhEYyxsCD0wjfI5j48gr0S657AaUAkOCvxABIwnwmLKFei5Q4e4egheUC+B4QAImGr3AxkFq5EPx7ByPKy3tZehoQWRMLAD1HTa3AzNCAekNu/HWYF9Krl6i0TeITIJ7EX3K0l5kqMckHovovQdAmP0J3mtdLT45/BI3TOKE5HmpV4BGOSVetZD6ERcRpitJ/Zr7hrQdwMna8IKXgF2l48Al2J0GcFIYhIiLnfHeUBOcS7tMtmKhVPZNl9WVR2Nf5nWzqmqXKs+is156f5SqW8IJa3x7TvGtkVo9MfL2aP9EWe3lMStNaAuDGU7ZDohvgAo6CRy3PGW3cfp478ozlLtpjzxfyL77natOZ3As51p7uVA3jLTrHHd8J/nN+4HP8JxHft4nNf1iQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_214\",\r\n id: \"214\",\r\n ProductCode: \"CNCON18GA3000\",\r\n ProductDescription: \"Cen CON18-3000 Galv\",\r\n ProductIndex: \"CON18G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"201803\",\r\n SellingUOM: \"EA\",\r\n Cost: \"30.423\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"13.74\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"173.51\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_215\",\r\n id: \"215\",\r\n ProductCode: \"CNCON19GA300\",\r\n ProductDescription: \"Cen CON19-300 Hot Dip Galv\",\r\n ProductIndex: \"CON19300G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"201903\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.5737\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.0826\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"115.67\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_216\",\r\n id: \"216\",\r\n ProductCode: \"CNCON20108HGA\",\r\n ProductDescription: \"Cen CON20 Spider 10865 Hexagonal\",\r\n ProductIndex: \"CON20108HEX\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"202003\",\r\n SellingUOM: \"EA\",\r\n Cost: \"71.9953\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"15.95\",\r\n PromptTextCodes: \"SA CFC\",\r\n Colours: \"\",\r\n LiveCost: \"1076.39\",\r\n AncillaryParts: \"POWCON20\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_217\",\r\n id: \"217\",\r\n ProductCode: \"CNCON20108OGA\",\r\n ProductDescription: \"Cen CON20 Spider 10865 Octagonal\",\r\n ProductIndex: \"CON20108OCT\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"202013\",\r\n SellingUOM: \"EA\",\r\n Cost: \"78.1813\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"19.5\",\r\n PromptTextCodes: \"SA CFC\",\r\n Colours: \"\",\r\n LiveCost: \"1106.29\",\r\n AncillaryParts: \"POWCON20\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_218\",\r\n id: \"218\",\r\n ProductCode: \"CNCON20158HGA\",\r\n ProductDescription: \"Cen CON20 Spider 15865 Hexagonal\",\r\n ProductIndex: \"CON20158HEX\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"202005\",\r\n SellingUOM: \"EA\",\r\n Cost: \"79.4473\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"19.366\",\r\n PromptTextCodes: \"SA CFC\",\r\n Colours: \"\",\r\n LiveCost: \"1136.19\",\r\n AncillaryParts: \"POWCON20\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_219\",\r\n id: \"219\",\r\n ProductCode: \"CNCON20158OGA\",\r\n ProductDescription: \"Cen CON20 Spider 15865 Octagonal\",\r\n ProductIndex: \"CON20158OCT\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"202015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"88.1173\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"13.9\",\r\n PromptTextCodes: \"SA CFC\",\r\n Colours: \"\",\r\n LiveCost: \"1166.08\",\r\n AncillaryParts: \"POWCON20\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_220\",\r\n id: \"220\",\r\n ProductCode: \"CNCON2108GA@@\",\r\n ProductDescription: \"Cen CON2 10865-@@ Ridge Con Galv\",\r\n ProductIndex: \"CON210865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200203\",\r\n SellingUOM: \"EA\",\r\n Cost: \"16.03\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"51.03\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Use\": \"Con2 Fix\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Use\": \"Con2 Fix\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"4\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO4AAACABAMAAAD+Pkg7AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMDoyOSArMDkzMDL7Fi8AAAAHdElNRQfiBBIBMwqNtM/kAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAACRQTFRF////3t7etbW1hISE7+/ve3t7a2tr5+fnc3Nz9/f3WlpaSkpKLv4clwAAAAF0Uk5TAEDm2GYAAATKSURBVHja7Zq9b9tGGMbpD0DIFp5auNkksk4QTxUvahNlUSYjqwgFRrJFICEgS9U2MLrGkCC0S4wE8G4hRmGNRTNI/1yOFC3xyLt7j8c7aqiezQahn5573g9SkmXttNNOO/2PdGpvCWsffaycejiyib6rGvvCXumoUurnc/tOf1SIPbVT+rMq6irZjX6tBnuewVYEzlErAV/ZTHXNUu+d2xwZdVwb2VyZG1z3BFSDE/NKiDU1uPjJGnV8CFKJHmjHwmZNHHV2LvKldSueylJtnW0slax+cBGz+sDiUWEMfFWcapffEYeS3aPZsZrZWGUGl0Kya6nPj9MyWHVw4e7JSmlw1cpSbaUdUe6IVY9afglodazaswwVaGNtZmNJP8CULmMlxypLQAO44KKV0lEX5r4oj2GAYccmsERgumaw6DHA1TEcGXJxYwvxRlxvG/EijAHD5rhCw8biBcCXBrmikx6Z4cZYgWFT3bvi4iaPu2eGW0+4+H61XPeOyzvpkdFj5peWGbsprsd8hjDUvfUNF7e2ES+vtEZmuGksrr57uedcQbz4py3Fy2qkAjvfKcCF4pXvXtTuy4O1xYvc9iTsf5Dl6ooX4bNJGIYDT5KrKV6nPQ0jBZ2eHFdLvAj3JzE2HPp/STmm4mXtI5kHI5SYjQ23b2TAGuJF7p3Z2PD4zaIJc8HhDMbrtM/CtIb9+Q0MpuJlbUHwjW/M+o4b1fT49SyEjhqMF1gKxOzmjD3HRq+ik+51oKOmuE+KTg062dBrvoy4pKadzhcxGOzeywLJ9pqfY244xgjIGIx3JEp2SmHDANvuZNXE/t/LmQBcontRxmykaT/53/R2uRSB1bs3WgJ8Bb0OAV+rx8vhIvdMhB0/tmpvCHggxZW/pcslSwtHH9PUnvMdq3UvZDZ5zNp/t1wu2OuYivcXye51GAWVmpK9dVz7cwJmbkWFeNGx0OwgfccSO/YgblcmXrHZ0Kdr5GDOBFPxytyxI3FBjZ3sC9QjcEsYr8QtndMWlvGA0RA/kKL+mgVTxwxOjcwSyI2KFvNDzu+XeceFuheJk92UcUYPCfgfamKC3Zve+WKzq1HB1gkBU1uxwB07agu7x39kCXSS2RFgvJfrK4El0LWE6tCOwakxkjE7vGhagPaep8Fg91q57glw/g14XQhLwNFymsnGG+98B28Kqucl9xMb9UGzKzCZmLeDpnz3OukB5TkPfntKnbF3Xwob74jB/Fq2ezOj4m3zpZ3mBi1Jagz+2r+9yMXLvGN3M6MiaJ6jDTeQNhvrYH798+KtxNSo5db70Mf41d0f4wJmY9VvvDlZx9QxP2NdeJyr3el0nbYPfQOT1/sv0X0AdcwN1nV7T0OeArkyzijeEWD3WtYnzrgYiuciX/HEhJYCEdtw4Cn/AiMCe+LujXTAMuz/qEolNzAn1Ek3eNcd58DjYt2T1WEnfdLcl6plTzpoFICwRHbEAorXypZW4JX/GRPZEf8m3CeCy9KbF954Mtp/t/CBeKO3tx5Qw15D8pUh8Pw//nBeq54YvlDsWYYO5jPB1Ei0Kq2hX6qMM/p0y9v5Kf0+YT0JlATPMPTNb7QffO2/X34v6t5Ee62ubiwpG+gbdlNyi+5vXdJZqDvttNP29Q2oHx3sE3+sIgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_221\",\r\n id: \"221\",\r\n ProductCode: \"CNCON2158GA@@\",\r\n ProductDescription: \"Cen CON2 15865-@@ Ridge Con Galv\",\r\n ProductIndex: \"CON215865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200205\",\r\n SellingUOM: \"EA\",\r\n Cost: \"22.7301\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"63.22\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Use\": \"Con2 Fix\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Use\": \"Con2 Fix\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"4\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO4AAACABAMAAAD+Pkg7AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMDoyOSArMDkzMDL7Fi8AAAAHdElNRQfiBBIBMwqNtM/kAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAACRQTFRF////3t7etbW1hISE7+/ve3t7a2tr5+fnc3Nz9/f3WlpaSkpKLv4clwAAAAF0Uk5TAEDm2GYAAATKSURBVHja7Zq9b9tGGMbpD0DIFp5auNkksk4QTxUvahNlUSYjqwgFRrJFICEgS9U2MLrGkCC0S4wE8G4hRmGNRTNI/1yOFC3xyLt7j8c7aqiezQahn5573g9SkmXttNNOO/2PdGpvCWsffaycejiyib6rGvvCXumoUurnc/tOf1SIPbVT+rMq6irZjX6tBnuewVYEzlErAV/ZTHXNUu+d2xwZdVwb2VyZG1z3BFSDE/NKiDU1uPjJGnV8CFKJHmjHwmZNHHV2LvKldSueylJtnW0slax+cBGz+sDiUWEMfFWcapffEYeS3aPZsZrZWGUGl0Kya6nPj9MyWHVw4e7JSmlw1cpSbaUdUe6IVY9afglodazaswwVaGNtZmNJP8CULmMlxypLQAO44KKV0lEX5r4oj2GAYccmsERgumaw6DHA1TEcGXJxYwvxRlxvG/EijAHD5rhCw8biBcCXBrmikx6Z4cZYgWFT3bvi4iaPu2eGW0+4+H61XPeOyzvpkdFj5peWGbsprsd8hjDUvfUNF7e2ES+vtEZmuGksrr57uedcQbz4py3Fy2qkAjvfKcCF4pXvXtTuy4O1xYvc9iTsf5Dl6ooX4bNJGIYDT5KrKV6nPQ0jBZ2eHFdLvAj3JzE2HPp/STmm4mXtI5kHI5SYjQ23b2TAGuJF7p3Z2PD4zaIJc8HhDMbrtM/CtIb9+Q0MpuJlbUHwjW/M+o4b1fT49SyEjhqMF1gKxOzmjD3HRq+ik+51oKOmuE+KTg062dBrvoy4pKadzhcxGOzeywLJ9pqfY244xgjIGIx3JEp2SmHDANvuZNXE/t/LmQBcontRxmykaT/53/R2uRSB1bs3WgJ8Bb0OAV+rx8vhIvdMhB0/tmpvCHggxZW/pcslSwtHH9PUnvMdq3UvZDZ5zNp/t1wu2OuYivcXye51GAWVmpK9dVz7cwJmbkWFeNGx0OwgfccSO/YgblcmXrHZ0Kdr5GDOBFPxytyxI3FBjZ3sC9QjcEsYr8QtndMWlvGA0RA/kKL+mgVTxwxOjcwSyI2KFvNDzu+XeceFuheJk92UcUYPCfgfamKC3Zve+WKzq1HB1gkBU1uxwB07agu7x39kCXSS2RFgvJfrK4El0LWE6tCOwakxkjE7vGhagPaep8Fg91q57glw/g14XQhLwNFymsnGG+98B28Kqucl9xMb9UGzKzCZmLeDpnz3OukB5TkPfntKnbF3Xwob74jB/Fq2ezOj4m3zpZ3mBi1Jagz+2r+9yMXLvGN3M6MiaJ6jDTeQNhvrYH798+KtxNSo5db70Mf41d0f4wJmY9VvvDlZx9QxP2NdeJyr3el0nbYPfQOT1/sv0X0AdcwN1nV7T0OeArkyzijeEWD3WtYnzrgYiuciX/HEhJYCEdtw4Cn/AiMCe+LujXTAMuz/qEolNzAn1Ek3eNcd58DjYt2T1WEnfdLcl6plTzpoFICwRHbEAorXypZW4JX/GRPZEf8m3CeCy9KbF954Mtp/t/CBeKO3tx5Qw15D8pUh8Pw//nBeq54YvlDsWYYO5jPB1Ei0Kq2hX6qMM/p0y9v5Kf0+YT0JlATPMPTNb7QffO2/X34v6t5Ee62ubiwpG+gbdlNyi+5vXdJZqDvttNP29Q2oHx3sE3+sIgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_222\",\r\n id: \"222\",\r\n ProductCode: \"CNCON3108FGA@@\",\r\n ProductDescription: \"Cen CON3 10865-@@ Eaves Con Freespan Galv\",\r\n ProductIndex: \"CON310865FSG\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200313\",\r\n SellingUOM: \"EA\",\r\n Cost: \"19.4\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"73.41\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACOBAMAAAAstJxgAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMTozOSArMDkzMBGTfY8AAAAHdElNRQfiBBIBNBbW9AVsAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAC1QTFRF////8ezxrqyu4uLi3trexsbGdHJ009PTv72/9/f3zs7OzsbO5+fn//f/xs7GiwUe4QAAAAF0Uk5TAEDm2GYAAAM9SURBVHja7dk9b9NAGAfwi9IqCi2oEmRALMhACBVDl4LoVITCmxhQhBMrCIkGMB0ysIAyZCiWjG5EAjEAQwRF5AMwMJYBqRVfhI+B45fL3fls38tTQG2e3T//n/OTiy9BaFZJlda8EQBzYmwFtWSoVG+0rLDOGDHHHQt7EWSt64e5PTEI1NBk3o5jgUgXdMKsxlc3MPYTyNpRZcoDizC2jZ1EOqcWpkmFsR0clJNE2pJnPv6OrwmujxRMNdd4LRnmcipMVCTSWakw5DGFK8NWIj2TCdPAURhMh4lLcr3ffIlHTxSGbe5iTpg1emVwRpFhWslgyMxkhuGk80KmNH3avmBlhM0Jh+mTVBh2mCzBMO3yoycVKT1MxyTD8NJdzlnExSsjbI7fmQY5T1tcSaSXjLOgqASRxJ+UmnxTpJLmlhlIYXlSzT2gIdUVwhnbbk1ufNgiI0B9zc0rPzSmuRGBKgqzKGhumYZUxpFvjkmkJXn8TE4gneZsj9uVQkizucYSD+k8uWC911EK0hgmv3MLCSDV5uzPJ7ldpJLcQKE5v3M1vdFWyD1kI9n3dpCgyuQ2clJnmPEKsUgulxgmf3sPZdUUKox0/07e+8wUypfsr3sotygoZ7271wpfrmgoQ7K3fxQpPCQYJr87lHvTY6BUJL9zRUpJQex6d4cKZxgWoprzv0mHCavKNRNHslXCRDXmViWQgi/lkSqTgoJPime57pY5hFtuUA8BoPZBhnptIKj/DgRquY+v60ADHvI01+gmFLR72KA+FPR0Bu0HVOMhrAnN846vCS0cNugJFNSDgtyDAB2BguagoHIKqgNBeAb9bUjyF+JiaOXfQSUHCDoKBaH9g15BQe0ZJAcV/mMhBfXq7mkQqH8J5AzRdjdegJwhgtZgDiO6J7//D0q9jeoeRkrfgSBUcYAg9BwK4n760YfQByiIPbOH0IYeNOcAQegnFER/TRpB9DCZQagJBZWnkcwg9J78jW4IkT3XGErW2xhCvyjokQlUHU+hTRMoPuDonvzoakJB4c4EAaFTUNBk24WBgp1J9+DP1Wr0Wqt+hOArGKa61g/jqao4dbO5JtWsG690VCVL4010Vrn1BzGWBPAPruoLAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_223\",\r\n id: \"223\",\r\n ProductCode: \"CNCON3108GA@@\",\r\n ProductDescription: \"Cen CON3 10865-@@ Eaves Con Galv\",\r\n ProductIndex: \"CON310865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200303\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20.46\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"59.74\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACOBAMAAAAstJxgAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMTozOSArMDkzMBGTfY8AAAAHdElNRQfiBBIBNBbW9AVsAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAC1QTFRF////8ezxrqyu4uLi3trexsbGdHJ009PTv72/9/f3zs7OzsbO5+fn//f/xs7GiwUe4QAAAAF0Uk5TAEDm2GYAAAM9SURBVHja7dk9b9NAGAfwi9IqCi2oEmRALMhACBVDl4LoVITCmxhQhBMrCIkGMB0ysIAyZCiWjG5EAjEAQwRF5AMwMJYBqRVfhI+B45fL3fls38tTQG2e3T//n/OTiy9BaFZJlda8EQBzYmwFtWSoVG+0rLDOGDHHHQt7EWSt64e5PTEI1NBk3o5jgUgXdMKsxlc3MPYTyNpRZcoDizC2jZ1EOqcWpkmFsR0clJNE2pJnPv6OrwmujxRMNdd4LRnmcipMVCTSWakw5DGFK8NWIj2TCdPAURhMh4lLcr3ffIlHTxSGbe5iTpg1emVwRpFhWslgyMxkhuGk80KmNH3avmBlhM0Jh+mTVBh2mCzBMO3yoycVKT1MxyTD8NJdzlnExSsjbI7fmQY5T1tcSaSXjLOgqASRxJ+UmnxTpJLmlhlIYXlSzT2gIdUVwhnbbk1ufNgiI0B9zc0rPzSmuRGBKgqzKGhumYZUxpFvjkmkJXn8TE4gneZsj9uVQkizucYSD+k8uWC911EK0hgmv3MLCSDV5uzPJ7ldpJLcQKE5v3M1vdFWyD1kI9n3dpCgyuQ2clJnmPEKsUgulxgmf3sPZdUUKox0/07e+8wUypfsr3sotygoZ7271wpfrmgoQ7K3fxQpPCQYJr87lHvTY6BUJL9zRUpJQex6d4cKZxgWoprzv0mHCavKNRNHslXCRDXmViWQgi/lkSqTgoJPime57pY5hFtuUA8BoPZBhnptIKj/DgRquY+v60ADHvI01+gmFLR72KA+FPR0Bu0HVOMhrAnN846vCS0cNugJFNSDgtyDAB2BguagoHIKqgNBeAb9bUjyF+JiaOXfQSUHCDoKBaH9g15BQe0ZJAcV/mMhBfXq7mkQqH8J5AzRdjdegJwhgtZgDiO6J7//D0q9jeoeRkrfgSBUcYAg9BwK4n760YfQByiIPbOH0IYeNOcAQegnFER/TRpB9DCZQagJBZWnkcwg9J78jW4IkT3XGErW2xhCvyjokQlUHU+hTRMoPuDonvzoakJB4c4EAaFTUNBk24WBgp1J9+DP1Wr0Wqt+hOArGKa61g/jqao4dbO5JtWsG690VCVL4010Vrn1BzGWBPAPruoLAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_224\",\r\n id: \"224\",\r\n ProductCode: \"CNCON3158FGA@@\",\r\n ProductDescription: \"Cen CON3 15865-@@ Eaves Con Freespan Galv\",\r\n ProductIndex: \"CON315865FSG\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200315\",\r\n SellingUOM: \"EA\",\r\n Cost: \"23.2\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6.5\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"87.94\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACOBAMAAAAstJxgAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMTozOSArMDkzMBGTfY8AAAAHdElNRQfiBBIBNBbW9AVsAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAC1QTFRF////8ezxrqyu4uLi3trexsbGdHJ009PTv72/9/f3zs7OzsbO5+fn//f/xs7GiwUe4QAAAAF0Uk5TAEDm2GYAAAM9SURBVHja7dk9b9NAGAfwi9IqCi2oEmRALMhACBVDl4LoVITCmxhQhBMrCIkGMB0ysIAyZCiWjG5EAjEAQwRF5AMwMJYBqRVfhI+B45fL3fls38tTQG2e3T//n/OTiy9BaFZJlda8EQBzYmwFtWSoVG+0rLDOGDHHHQt7EWSt64e5PTEI1NBk3o5jgUgXdMKsxlc3MPYTyNpRZcoDizC2jZ1EOqcWpkmFsR0clJNE2pJnPv6OrwmujxRMNdd4LRnmcipMVCTSWakw5DGFK8NWIj2TCdPAURhMh4lLcr3ffIlHTxSGbe5iTpg1emVwRpFhWslgyMxkhuGk80KmNH3avmBlhM0Jh+mTVBh2mCzBMO3yoycVKT1MxyTD8NJdzlnExSsjbI7fmQY5T1tcSaSXjLOgqASRxJ+UmnxTpJLmlhlIYXlSzT2gIdUVwhnbbk1ufNgiI0B9zc0rPzSmuRGBKgqzKGhumYZUxpFvjkmkJXn8TE4gneZsj9uVQkizucYSD+k8uWC911EK0hgmv3MLCSDV5uzPJ7ldpJLcQKE5v3M1vdFWyD1kI9n3dpCgyuQ2clJnmPEKsUgulxgmf3sPZdUUKox0/07e+8wUypfsr3sotygoZ7271wpfrmgoQ7K3fxQpPCQYJr87lHvTY6BUJL9zRUpJQex6d4cKZxgWoprzv0mHCavKNRNHslXCRDXmViWQgi/lkSqTgoJPime57pY5hFtuUA8BoPZBhnptIKj/DgRquY+v60ADHvI01+gmFLR72KA+FPR0Bu0HVOMhrAnN846vCS0cNugJFNSDgtyDAB2BguagoHIKqgNBeAb9bUjyF+JiaOXfQSUHCDoKBaH9g15BQe0ZJAcV/mMhBfXq7mkQqH8J5AzRdjdegJwhgtZgDiO6J7//D0q9jeoeRkrfgSBUcYAg9BwK4n760YfQByiIPbOH0IYeNOcAQegnFER/TRpB9DCZQagJBZWnkcwg9J78jW4IkT3XGErW2xhCvyjokQlUHU+hTRMoPuDonvzoakJB4c4EAaFTUNBk24WBgp1J9+DP1Wr0Wqt+hOArGKa61g/jqao4dbO5JtWsG690VCVL4010Vrn1BzGWBPAPruoLAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_225\",\r\n id: \"225\",\r\n ProductCode: \"CNCON3158GA@@\",\r\n ProductDescription: \"Cen CON3 15865-@@ Eaves Con Galv\",\r\n ProductIndex: \"CON315865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200305\",\r\n SellingUOM: \"EA\",\r\n Cost: \"27.8601\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5.734\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"79.81\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACOBAMAAAAstJxgAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMTozOSArMDkzMBGTfY8AAAAHdElNRQfiBBIBNBbW9AVsAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAC1QTFRF////8ezxrqyu4uLi3trexsbGdHJ009PTv72/9/f3zs7OzsbO5+fn//f/xs7GiwUe4QAAAAF0Uk5TAEDm2GYAAAM9SURBVHja7dk9b9NAGAfwi9IqCi2oEmRALMhACBVDl4LoVITCmxhQhBMrCIkGMB0ysIAyZCiWjG5EAjEAQwRF5AMwMJYBqRVfhI+B45fL3fls38tTQG2e3T//n/OTiy9BaFZJlda8EQBzYmwFtWSoVG+0rLDOGDHHHQt7EWSt64e5PTEI1NBk3o5jgUgXdMKsxlc3MPYTyNpRZcoDizC2jZ1EOqcWpkmFsR0clJNE2pJnPv6OrwmujxRMNdd4LRnmcipMVCTSWakw5DGFK8NWIj2TCdPAURhMh4lLcr3ffIlHTxSGbe5iTpg1emVwRpFhWslgyMxkhuGk80KmNH3avmBlhM0Jh+mTVBh2mCzBMO3yoycVKT1MxyTD8NJdzlnExSsjbI7fmQY5T1tcSaSXjLOgqASRxJ+UmnxTpJLmlhlIYXlSzT2gIdUVwhnbbk1ufNgiI0B9zc0rPzSmuRGBKgqzKGhumYZUxpFvjkmkJXn8TE4gneZsj9uVQkizucYSD+k8uWC911EK0hgmv3MLCSDV5uzPJ7ldpJLcQKE5v3M1vdFWyD1kI9n3dpCgyuQ2clJnmPEKsUgulxgmf3sPZdUUKox0/07e+8wUypfsr3sotygoZ7271wpfrmgoQ7K3fxQpPCQYJr87lHvTY6BUJL9zRUpJQex6d4cKZxgWoprzv0mHCavKNRNHslXCRDXmViWQgi/lkSqTgoJPime57pY5hFtuUA8BoPZBhnptIKj/DgRquY+v60ADHvI01+gmFLR72KA+FPR0Bu0HVOMhrAnN846vCS0cNugJFNSDgtyDAB2BguagoHIKqgNBeAb9bUjyF+JiaOXfQSUHCDoKBaH9g15BQe0ZJAcV/mMhBfXq7mkQqH8J5AzRdjdegJwhgtZgDiO6J7//D0q9jeoeRkrfgSBUcYAg9BwK4n760YfQByiIPbOH0IYeNOcAQegnFER/TRpB9DCZQagJBZWnkcwg9J78jW4IkT3XGErW2xhCvyjokQlUHU+hTRMoPuDonvzoakJB4c4EAaFTUNBk24WBgp1J9+DP1Wr0Wqt+hOArGKa61g/jqao4dbO5JtWsG690VCVL4010Vrn1BzGWBPAPruoLAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_226\",\r\n id: \"226\",\r\n ProductCode: \"CNCON4108GA\",\r\n ProductDescription: \"Cen CON4 108X65 Slab Con Galv\",\r\n ProductIndex: \"CON410865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200403\",\r\n SellingUOM: \"EA\",\r\n Cost: \"19.68\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.598\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"68.75\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"10X120\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_227\",\r\n id: \"227\",\r\n ProductCode: \"CNCON4158GA\",\r\n ProductDescription: \"Cen CON4 158X65 Slab Con Galv\",\r\n ProductIndex: \"CON415865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200405\",\r\n SellingUOM: \"EA\",\r\n Cost: \"26.98\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.244\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"78.37\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"10X170\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_228\",\r\n id: \"228\",\r\n ProductCode: \"CNCON5108GA\",\r\n ProductDescription: \"Cen CON5 10865 300 Beam Con Galv\",\r\n ProductIndex: \"CON510865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200503\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.8735\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.7125\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"16.72\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAAB5BAMAAAAt7UKSAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMzo1NiArMDkzMCVB1NwAAAAHdElNRQfiBBIBORJkN784AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAACdQTFRF////3t7etbW1lJSU9/f35+fn1tbW7+/va2trOTk5GBgYCAgIAAAAvxOEigAAAAF0Uk5TAEDm2GYAAATWSURBVHja7dvBb9JQGADwisxdxYVlu22SKXhSsA6mB+Mw8yjtHnCcklW5mTFWjk6Gttw2E2wXTzMxit68jf0BGvdHSfsK9r2+Ah3l6w58WQZZCP3tQd9739evHDeNaUxjGtNwjdlbkhSJInk3Gxjhqm6GpphRTxmRvGmEJL2IoIKcfTxpQlE/brfbPzrntuicdv/0HdvstJRJs4bNP1pMemm+MT4GPqCKj27Szmy0v5123+Y2bLJ3W0p2RFZGuYhE0NJ2m+HodAjaKU1TbMMmWd82DwS3yMpVFJmXJPN9Y6MPm+0TXWIIZpKjEwbYUG5eYnyiCj668W3DtAMGIbTqA8E9usMmWbbusKVP38ETyNj7nmYQroISfmgMQuU2IGHn52/WtAAokGuauhQwoXy49vYyEmb9mBbGI4R4QMFuhn995CR8ACTs6dvir2Bnph2FRViHnBbEelT84iCUCoCE4hES9C2aEAcUyIsthNbuBkrIHDAIYdCZqbmCUJMmXLsHTUg0gpwWqgbh2UmQhIpWRUjQ3pCEJ6uAhOIJ6kaTWq5LrwAJiQaTUAAkNPmuoBA8AWXuk9NCJtlPEXcnT1gxCIstclr4fDosRSzIGz4JdjTEJJwzY3CKeMFhq3zxQnALe4roHLZbg4fNIqx/HIvgThtYkDAya4QWMCGvP58EYaRh0/dZhJlmP+8lcvLJBM8icPHl+f957/BygR+Egkou1yXECvcqi61c0LkgAd0hawwx5CU2rSqLzZb2MGwWIUHWGOa2PRncYsNWZYkxqiy4ONXAL46nyP0C7wvBLaxPFBen0kf4j6ICSSBCxPMCEr4FTsiRNYZrD+AJiMquvZ0SY0Ve3w6asIn3C5eCUCaX61IUzoA3bsaXgiCs83CERINJgDwraydMwmwSniBo14k9dAqesElm15AEwcgpjaBqDLEqnEHtTQwkQVyBIxhVFiOoGkOFhyOUD/Fjjax/VgBHoUcQyRrDE8hRaOHHnLpFLNeAE4P40XpCJvhhQIKgV1kEruTPDtYTgaoxLPBghLxuPaGW64V9MEJBtf5dKsGvtcAI/eWaIoTewxGKFoGuMQBuogWLIGjPAyNYCVVeJ3YMM5ATwzcmAXK5zqm4bpZuU3MT3CigR71E/yB4wieC4FONYRwC5D6+/AcXZdofyInhHhzByq4FhSSEAfNKi5CnO3sCINAXTAEJghbFD2T5E/SsxAn+nEIRIDfRcfNYr+uPSQLkWYn/XWrXBJzgm8t1hu4zC60CEszs2tFaBLlci++6v3LOJgbAsxIl2YQ5wFNCqTKuW8PWvIz6Z42+eg9LyPCMHgbg7PoQbdKXrTnYTfT6vvPKOQdb+ctfAkKdrjviTQskQa8WnR1eoMXwglItnjAIkHNTfARCbrKExEqixSCIy0je7b1mwivGnYazzc1YrlVbO4JOtSM89ZdQbGS2GIQrZBPB3+H3RyB0UZrApzhWPBztwvfgLo7e/RGuNqH7sypodSahPF7/AuP+CJJmDls2HkWLX4WzX0xCyOoR8Lt/gbw/4lhRmr/V8yNuaIQ3RrndwXv/Qi/eDie40rLU7Q50/8LxaMM2BsE1st1hiwztXzibJGHAsNn6F/odKUuAhGlwXD6g44b/P40FRLjRf3YlOfzV/wDhaaFESLRTbwAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_229\",\r\n id: \"229\",\r\n ProductCode: \"CNCON5158GA\",\r\n ProductDescription: \"Cen CON5 15865 300 Beam Con Galv\",\r\n ProductIndex: \"CON515865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200507\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8.3901\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3069\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.09\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_230\",\r\n id: \"230\",\r\n ProductCode: \"CNCON5208GA\",\r\n ProductDescription: \"Cen CON5 20865 300 Beam Con Galv\",\r\n ProductIndex: \"CON520865G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200509\",\r\n SellingUOM: \"EA\",\r\n Cost: \"16.86\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"40.26\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_231\",\r\n id: \"231\",\r\n ProductCode: \"CNCON565GA\",\r\n ProductDescription: \"Cen CON5 6565 300 Beam Con Galv\",\r\n ProductIndex: \"CON56565G\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200501\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.5234\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6576\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"11.20\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.BeamColour\",\\n \"Qty\" : \"8\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAAAzBAMAAACDLmuYAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyMzo0NyArMDkzME+c3/YAAAAHdElNRQfiBBIBOQnuUnbUAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAACdQTFRF////5+fn9/f3zs7O3t7e7+/vtbW1nJycjIyMa2trSkpKISEhCAgIQZB1cAAAAAF0Uk5TAEDm2GYAAAL6SURBVHja7ZjNU9pAFMD5EHs15SPl5mSmTI+lYlFOZeoM9SZabLzBOIUOXqQOoQ091LEdwZ4Yy1TCUVoheK7Y+BdY/qgm2UDYTVID1NeLv4PJMGbzy77se/vicNxxB4Yzu72gE1lRiFMyKcQ6w9y2QqJCcliyJksy9FfddXVGwZ6Bq4QuUS6mlFGeD8Yc3iVnNKmYYa3ODYbiHpsouD+lpkaTJ9VJ90qlKh2bKLwqTq9gm02ps2ZUWPIDKmz1mmmDgYcDNEjt1He+GxRmPwMabAiZrQuDAr0IqBA8SwbEOVIhB2iQ4uuU/8suYTBzAGjwUgxTVIxclqEioMLqmZxAAuIzYkkuAiqU92UFMhKeZqNBplc9uWGlS61c/mkMNpQ4yJFo4dn5qm+FNOSXOEKnoUPKc4bSFRnULsX9RU+tQyy+LJ3nwxtZy4zJb11ewuS7LVXBS7wM7/cU2ad4WXmnPV115IkbIkZ35D6SXbl9VcF/VMQzU4aywZyLYR6q8UziRXEs+W4Njbb6jcjPdhQmZqiuuC9foB+9ArZp8HC3qoAR6Ggn5Y94YoBT8DcL6CR2iilsvoZzyKMlQdG9+f8ViUfay+AT8R1kFE7BJ2jrr1zH9462luW/IaZFgm1jkXBvwymwFpFYgpsGrxhHJzweCbYGpnCfL6CT4E+8Wh6DKVDsKTrSl1g74eGcYApeAVX0N1IafxnicNPwAdXyqz7+MkAmyNh1pSIXT0HCFTw5OAX6MqkcAh08EJCR8DXCyoFtE91tqAA3DcvqBiVPNhMze3AK99QUYOyvo2EwBV9D/kMbvzKE3sJNAy9vYvkaaQAaCfqHoUopuHJJOIeTJLFrQiSeMA6oNJ3PEHtHxGx1pD8TDon+LGvoz7Rvi+sMMz+2efDrUdpEwcWPNkeSOaJVb3li2RkT30WjcX/i4EGn7TDDrV5Rst3QiaJkG70tlp/i/LrbbzkmwLKhy47djcpKu5MoTERqRF11V+VXFiJr04/9N5z6zEVu/u8/kgOw8/oJRY8AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_232\",\r\n id: \"232\",\r\n ProductCode: \"CNCON7108GA\",\r\n ProductDescription: \"Cen CON7 10865-90Deg Hip Con Galv\",\r\n ProductIndex: \"CON71086590\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200703\",\r\n SellingUOM: \"EA\",\r\n Cost: \"22.57\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.526\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"66.00\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAACKBAMAAACz0A5LAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyODozMyArMDkzMEn2CQsAAAAHdElNRQfiBBIBOwncZBRWAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////zs7O7+/vra2tjIyMYmJixsbGoKCgNTU1KSkpvb292tra5+fnlJSU9/f3tbW1e0x8pwAAAAF0Uk5TAEDm2GYAAAMqSURBVHja7dk/aBNRHAfwSwMZ2pC0OCoYLLgaeKGBQtHaw2hB1KGSUJBgoC5ChEu5xeiggbvBUbhsguDQqerYogEHB0GwRBDsUHUTkUo2FerL5V3uf5L7/X4oar5jWz753vu9e80lkjTOn8lU59s2jXRN5bm9nUFDL1UR9vMrCoqrjijzLTA0kVfdUTauwqSKGpC5GcCidRhj+QBMOfwsosREgqqdfBKlGrNjE3nFqqn8gEj2ZSrOisr3VnQp7DKVR0cAUsgE1LmtIYvWYWxkjF1/PUD6xEIThKnzGYDkqSbGUC+DJGczZm6NurwIlTyX2ZYLe3DJcZk1WZZ3UJKoVueQfL6FlXgz2cwOgdQ2pSW8xOq9Ulm8JC6vgJdYrUfdwkui1DJeskrt4yVR6oJfikeUwkslokqi1Hu8ZJWaxksLPekMXrJKlfFSyH0MkEQp7+ECkcR9vIuXxOEib6Ila3w38JIoVcBLgYcLTLJOvD20ZJV64JBivpdTI6yU63Dx/MnCilxQRi+VDZdyelNrLD8+GHGllgZKzeYq//ladaRS0wMkQzclns8HnaGlFgdIjaK+2v/tRDUU843PJ2lOiefY8+BF8/3D8s5O17SmS+KZCpyA93DxvlJJK/okntRMNaTUbph0ztCCJHMCG65FE7vzTagkdkFwPjjHWXfvqGgSz0d7Au1Bsxsu8Xx51avGT7ybEkrqTmDraHelnLcwUOrm+Bpr0UiePA2QLpFJd8fSUOkslcTopLdj6T+UXpBJ8QCpQSYZ+2Pp90nrOpWUG0t/jZT2SzpMSvokQzeyECnlkxpF7RSNpK3oF4k6aU0qqUQl8YcpIokfKyDJ9whUAkuzbikPl5JkknSITJoik9ylUFKaTJIekkkJr3QFKjm/CTKlO2DphEe6B5ZSHSrJMT6slCKT7Deu5iMQRrLvY6xkvwdGSwkySaqQSTEyySpFIKXJJHEfU0iTfQn24GIn2ZfubyKpWTLJPFxIJPObMxqpuzvfkUjdw2WdRuLjq3V3AV7ipbhkwD6oc2eSSwbs2dybSs1olEmkRE07TQJJUu4yESTFMlTSP5JfL9dDRy9anoAAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_233\",\r\n id: \"233\",\r\n ProductCode: \"CNCON7158GA\",\r\n ProductDescription: \"Cen CON7 15865-90Deg Hip Con Galv\",\r\n ProductIndex: \"CON71586590\",\r\n GroupingName: \"Connectors\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"200705\",\r\n SellingUOM: \"EA\",\r\n Cost: \"34.1101\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"6.672\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"87.29\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"BHSS1025SL\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.PostColour\",\\n \"Qty\" : \"2\"},\\n {\"Code\":\"TS1016100B8\",\\n \"Colour\":\"Area.RafterColour\",\\n \"Qty\" : \"2\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAACKBAMAAACz0A5LAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMToyODozMyArMDkzMEn2CQsAAAAHdElNRQfiBBIBOwncZBRWAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////zs7O7+/vra2tjIyMYmJixsbGoKCgNTU1KSkpvb292tra5+fnlJSU9/f3tbW1e0x8pwAAAAF0Uk5TAEDm2GYAAAMqSURBVHja7dk/aBNRHAfwSwMZ2pC0OCoYLLgaeKGBQtHaw2hB1KGSUJBgoC5ChEu5xeiggbvBUbhsguDQqerYogEHB0GwRBDsUHUTkUo2FerL5V3uf5L7/X4oar5jWz753vu9e80lkjTOn8lU59s2jXRN5bm9nUFDL1UR9vMrCoqrjijzLTA0kVfdUTauwqSKGpC5GcCidRhj+QBMOfwsosREgqqdfBKlGrNjE3nFqqn8gEj2ZSrOisr3VnQp7DKVR0cAUsgE1LmtIYvWYWxkjF1/PUD6xEIThKnzGYDkqSbGUC+DJGczZm6NurwIlTyX2ZYLe3DJcZk1WZZ3UJKoVueQfL6FlXgz2cwOgdQ2pSW8xOq9Ulm8JC6vgJdYrUfdwkui1DJeskrt4yVR6oJfikeUwkslokqi1Hu8ZJWaxksLPekMXrJKlfFSyH0MkEQp7+ECkcR9vIuXxOEib6Ila3w38JIoVcBLgYcLTLJOvD20ZJV64JBivpdTI6yU63Dx/MnCilxQRi+VDZdyelNrLD8+GHGllgZKzeYq//ladaRS0wMkQzclns8HnaGlFgdIjaK+2v/tRDUU843PJ2lOiefY8+BF8/3D8s5O17SmS+KZCpyA93DxvlJJK/okntRMNaTUbph0ztCCJHMCG65FE7vzTagkdkFwPjjHWXfvqGgSz0d7Au1Bsxsu8Xx51avGT7ybEkrqTmDraHelnLcwUOrm+Bpr0UiePA2QLpFJd8fSUOkslcTopLdj6T+UXpBJ8QCpQSYZ+2Pp90nrOpWUG0t/jZT2SzpMSvokQzeyECnlkxpF7RSNpK3oF4k6aU0qqUQl8YcpIokfKyDJ9whUAkuzbikPl5JkknSITJoik9ylUFKaTJIekkkJr3QFKjm/CTKlO2DphEe6B5ZSHSrJMT6slCKT7Deu5iMQRrLvY6xkvwdGSwkySaqQSTEyySpFIKXJJHEfU0iTfQn24GIn2ZfubyKpWTLJPFxIJPObMxqpuzvfkUjdw2WdRuLjq3V3AV7ipbhkwD6oc2eSSwbs2dybSs1olEmkRE07TQJJUu4yESTFMlTSP5JfL9dDRy9anoAAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_234\",\r\n id: \"234\",\r\n ProductCode: \"CONPDGP30\",\r\n ProductDescription: \"Dry Pack General Purpose Concrete 30 KGS (25MPA)\",\r\n ProductIndex: \"CONCRETE30\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"750\",\r\n SubGroup: \"990330\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.09\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"30\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.24\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_235\",\r\n id: \"235\",\r\n ProductCode: \"CNPI\",\r\n ProductDescription: \"Centenary Packing And Instructions\",\r\n ProductIndex: \"CPACK\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"990000\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.001\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"$$=0.01\",\r\n Colours: \"\",\r\n LiveCost: \"0.001\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAjBAMAAACgHaOSAAAALHRFWHRDcmVhdGlvbiBUaW1lAFRodSAxOSBBcHIgMjAxOCAyMzowNzo1MyArMDkzMFu2ldwAAAAHdElNRQfiBBMNJjTKxqpaAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////3t7a597e5+fnw8C9zs7G1tPQ5+fe3tbWztLO7+/vure1zsbG7+/nxsbG7+fn2zi9sAAAAAF0Uk5TAEDm2GYAAAJDSURBVHjanZPBSxtBFMZXAr31sN3ShkJLs/kHxEHSCgqBsSAtAcH1JEIQVz1YSiyds9Su22MJCe4tUCji2Vv+AiHk7lW2aED20n+gs/Nmd99MsrrJOy58v/m+7701jPxZpPRu3ph53odRFK6+nlkexRPSX7OISz/uB8MIhjZ2ppXPdZxBqucepqzhm+NgPbcwRQ3v3CDocICzNRhkhJCufSmiXvBcrhcARV+sBlL2XVcAAkfPED18DU9rpmn6vu/FgAMJ0DyElK7nPLxgikF6KMHRQtDR2zHxb0IYa9mg90UCFwOGigWthie3RAxjNlgoS0TmQVsEbXx6hQArbalv2ZUUADESC2NFNnANb76rehECUriyRg7QelxDNZRGXF9jPIEEAEEiEojqQTnquToAbFkBRMCAOIgG4AeVHvX1jdC3HgAAQQGEbVxiHCADyAgeAogY2MIhPr/tqgSoHaQWACH2IVyMLJ55HpdYI4pez4AAnHC3DGeTAc7rsQE2DkgywEXBQpv/hHpJOcWvbbHErIMkg9JjEJwtXywp3pMOTizoINVPzHCMjKuQ0vAIOkwzSD3K0LVS58Su9jQLf+oywuQM+/KbF3StnjFpVm71DhBg3yzHFqLoTGsOzfM9xibuMTbQcbZD+rdJSM/InVJ0pO2RzwHX9fv9xuYzkv908jd9YEzNsBtybf9y1KwScmE8OtdqiZ8/ipePi4nFnJyKEirexuUVf7SoLOtg4yVjlZ9O13osbB5g9YXbrM6mhRILiv8DQZQquUANlQsAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_660\",\r\n id: \"660\",\r\n ProductCode: \"SHS1001003GA80\",\r\n ProductDescription: \"SHS 100 X 100 X 3.0mm Allgal\",\r\n ProductIndex: \"SHS1001003G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"211023\",\r\n SellingUOM: \"LM\",\r\n Cost: \"25.83\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"7.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"259.77\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW125RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_237\",\r\n id: \"237\",\r\n ProductCode: \"TSNST2425\",\r\n ProductDescription: \"Noise Stop Purlin Tape 24mm X 3mm X 25M\",\r\n ProductIndex: \"CPCB36\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"422425\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.2\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.168\",\r\n PromptTextCodes: \"Length=25000 AltIndex=CPCB36_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"9.68\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_238\",\r\n id: \"238\",\r\n ProductCode: \"CNCPI150503GA\",\r\n ProductDescription: \"Cen Cantilever Post Insert 150X50X3 Galv\",\r\n ProductIndex: \"CPIG\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"400100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"199.53\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"60\",\r\n PromptTextCodes: \"CPP CRL\",\r\n Colours: \"\",\r\n LiveCost: \"199.53\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_239\",\r\n id: \"239\",\r\n ProductCode: \"DQG42115**\",\r\n ProductDescription: \"115 D/Quad Gutter **\",\r\n ProductIndex: \"D115\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"207\",\r\n SubGroup: \"30421\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.1564\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9803\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.2523\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_240\",\r\n id: \"240\",\r\n ProductCode: \"DQG115SEL**\",\r\n ProductDescription: \"115 D/Quad Gutter LH Stop End **\",\r\n ProductIndex: \"D115LSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"111551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.44\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0746\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.38\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDEh9vcuqCAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5ubm1tbW9/f3wcHBra2tpaWllJSUhISEe3t7c3NznJycY2Nja2trWlpajIyMWbOI6AAAAAF0Uk5TAEDm2GYAAAPbSURBVHjatdZPbNtUGABwdxkcK9QekJDGVC8XJCSidGhjE2Lt0gtiAoHWC4cJgTQkbmzoOZXQJ/GnfXY0WVxSO12UA9Jae8l6gEPHhdskuqbcqtU04Q4dF4ZewkCP78V27Pz1y4FPSU755fv3HFuZf7v0hSIf08pJDn9fmgQ8zwl8Mwl4hREoZCYBQCB/U1pgSYwRRjfmJMm08ionBACcj+TEtJL6mAADzdE3FmTItKKczZuc/PPYopXv56WAosxcY8T445Dqm4uJSTpAOYu7aFXrFrU+m5UCyjXsnBh7u1RffzcjA14CzMFa1ccOpX+dSQZTJc6BcwbGflISH7zQAvw+BuO39xyqr84lgft4oLAoJMRoYpLKyCQ+OHUfzwfpCIZJjjFJcW4s2BFT4kR8AmHtI0xCb86OBq/vcGCE44sTxoDxW3u4xo2FkeDCTqeiKKB1VLfpsCQBwKaxlriAW/s/iQmPyhD/eQwcGsE1YpIns8PAawLw+PfFmxv7hwNr9MH5fG9JYgKdj3vHW1T/em4QaIwMC/DPivlBZhjoa4OItWMecVaM4kIveEPrn1JQGeBLb+5auvnpfCIQR9HvpCwOZJAkBHywAVES6ZTKW5gkWGMAgLEhPcSKK4sJry2E4ByYZHzw1j285H8PwUVYG5xS7+rF1dh82AVsfdiU+pfiFELw7NO1JMAAL/kueOapRAaMGNhO6MGP9mzmxSiDRLSsL/0MJ1fXZTIAv/1tCDaleoCf/wxAYZNJVATwMATFdUlwwwcninJNwy9dUJEE3wWgUJEpifAu2DDleuiCoiy4MSE46AIq13QIpu62JgOpu22QqulBABRTxyskGWgPgikpP5SZzOHTDkLwchUvQRnwYQBOudsyV5x28F4AznuPiETX2p0QnNj1mEyGO2FJqVpNZtcRUN5yf5WZUgTOebWJMmSmGu42h6RdxDIoV1yX8aTt5btTwv+B30qPOk8PskC54pRFUeNBMQaynu1WEraXL16OgHL6kJYdE3puVf1g9VIMpN7Ep5GS54gnOf+PcyBdvtADsp/j7ZXqnuvYFhs6gHzhnRjILl1dbu81XNvS7VLDtXjngQVGglQ6l1bV3LJWOqq7eFcuua5rszEZZhZVP3KIqg3Psalu17wtakbneCUGUmo80kuftKvHdWzJcDCTKR5SsauVQjTWGbU/0rnrRqPh2VherXFoUbyLrkRTSqnDIp27+qPRrHs4O6dU86x/I5BVR0Z6ecet1d0tnENz9bkQpNVxkc69r1Xrnl3+KhOAKTU5lq7rW4shyEoAkUidDGCEYOZ/BP8BOw71dc1tONwAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_241\",\r\n id: \"241\",\r\n ProductCode: \"DQG115SELZLF\",\r\n ProductDescription: \"115 D/Quad Gutter LH Stop End Zincalume\",\r\n ProductIndex: \"D115LSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.39\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0727\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.25\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDEh9vcuqCAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5ubm1tbW9/f3wcHBra2tpaWllJSUhISEe3t7c3NznJycY2Nja2trWlpajIyMWbOI6AAAAAF0Uk5TAEDm2GYAAAPbSURBVHjatdZPbNtUGABwdxkcK9QekJDGVC8XJCSidGhjE2Lt0gtiAoHWC4cJgTQkbmzoOZXQJ/GnfXY0WVxSO12UA9Jae8l6gEPHhdskuqbcqtU04Q4dF4ZewkCP78V27Pz1y4FPSU755fv3HFuZf7v0hSIf08pJDn9fmgQ8zwl8Mwl4hREoZCYBQCB/U1pgSYwRRjfmJMm08ionBACcj+TEtJL6mAADzdE3FmTItKKczZuc/PPYopXv56WAosxcY8T445Dqm4uJSTpAOYu7aFXrFrU+m5UCyjXsnBh7u1RffzcjA14CzMFa1ccOpX+dSQZTJc6BcwbGflISH7zQAvw+BuO39xyqr84lgft4oLAoJMRoYpLKyCQ+OHUfzwfpCIZJjjFJcW4s2BFT4kR8AmHtI0xCb86OBq/vcGCE44sTxoDxW3u4xo2FkeDCTqeiKKB1VLfpsCQBwKaxlriAW/s/iQmPyhD/eQwcGsE1YpIns8PAawLw+PfFmxv7hwNr9MH5fG9JYgKdj3vHW1T/em4QaIwMC/DPivlBZhjoa4OItWMecVaM4kIveEPrn1JQGeBLb+5auvnpfCIQR9HvpCwOZJAkBHywAVES6ZTKW5gkWGMAgLEhPcSKK4sJry2E4ByYZHzw1j285H8PwUVYG5xS7+rF1dh82AVsfdiU+pfiFELw7NO1JMAAL/kueOapRAaMGNhO6MGP9mzmxSiDRLSsL/0MJ1fXZTIAv/1tCDaleoCf/wxAYZNJVATwMATFdUlwwwcninJNwy9dUJEE3wWgUJEpifAu2DDleuiCoiy4MSE46AIq13QIpu62JgOpu22QqulBABRTxyskGWgPgikpP5SZzOHTDkLwchUvQRnwYQBOudsyV5x28F4AznuPiETX2p0QnNj1mEyGO2FJqVpNZtcRUN5yf5WZUgTOebWJMmSmGu42h6RdxDIoV1yX8aTt5btTwv+B30qPOk8PskC54pRFUeNBMQaynu1WEraXL16OgHL6kJYdE3puVf1g9VIMpN7Ep5GS54gnOf+PcyBdvtADsp/j7ZXqnuvYFhs6gHzhnRjILl1dbu81XNvS7VLDtXjngQVGglQ6l1bV3LJWOqq7eFcuua5rszEZZhZVP3KIqg3Psalu17wtakbneCUGUmo80kuftKvHdWzJcDCTKR5SsauVQjTWGbU/0rnrRqPh2VherXFoUbyLrkRTSqnDIp27+qPRrHs4O6dU86x/I5BVR0Z6ecet1d0tnENz9bkQpNVxkc69r1Xrnl3+KhOAKTU5lq7rW4shyEoAkUidDGCEYOZ/BP8BOw71dc1tONwAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_242\",\r\n id: \"242\",\r\n ProductCode: \"QGOG115OS\",\r\n ProductDescription: \"Quad/Og 115 Internal/Over Strap\",\r\n ProductIndex: \"D115OS\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"10401\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.223\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.05\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.215\",\r\n AncillaryParts: \"1xSCTF\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_243\",\r\n id: \"243\",\r\n ProductCode: \"DQG115SER**\",\r\n ProductDescription: \"115 D/Quad Gutter RH Stop End **\",\r\n ProductIndex: \"D115RSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"111551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.57\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0746\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.38\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDExYPtWNnAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f31tbW5ubmwcHBhISEc3Nze3t7lJSUpaWlra2ta2trY2NjnJycWlpajIyM+zaUywAAAAF0Uk5TAEDm2GYAAAPhSURBVHjandZBaFNJGADgF3NWYtqrUmMvCkoOguhB1lDFHgrLspOJFH2IvAnLixTczXuWIgExdHoow4Ig60WRHlSQhZW+LqRUWLAeEuKeFF2WvezuqezJ1466YfznJe/lpU06E4f0lP/75///N+k8w9Bfe/KVsweHiDfOC/Z+3xDxyQpl/MwQ4IBJqTiuHz86zyhj2mDkWLnAKdcuafTuDGOUso96UxqZcrHFqKDVH3WmlBj9q4zmNjgT+HZKA6QvFBFe+7dAxcOsYShB4nQV0jcsQdn7lKEG6UcuyjfWC9CveGAoQeKoj7C9YXHIL+bHlCBI31w3qRCCic3vFSB5BCNcalS4CBarbmZ3BemfZXqvwCAYCqJ06/VuIHnEhfQbFc6DeE4p3/pjMEicqGIYzgrncBwgXALmDwbJKUi/WjdhOEAEp/IDYMBzgPQIzzWWoexoyS381/3BHpglbtZNRuOAyqb7gcQJeFRz8KgghNMe03cH+ajw2rrJg2geL4n5b3aA5FGMUOm/GWhRhohtJVW3g5H7ODgJPdV3l78NJCed4CTIsQvRW397Sj0gkWYYOc0VOGgsXkusJJ/FQHJSnoR6Jahe8J079AL5qCD9sgjOAAxkBwjGGoHkBTjHa/VK7Ms+PXARgb3/oLmm1SdprzFpBJrwqOCY7RYNX5qLEcAzjCrSw9+NVgTkj5ZyFbj0IfxN7y1Q1ZLg5sc2yO4/ydUAZn2tAxKorAY0tkOiVBHKYDml2W87QLxSZ5c9fBeC1ivVUIPFr4VgURPM/hCC51o909nrHfCnHmAxoDVWcfObCGj1IC5dj3rQAxdDsDA80Gq6OjRoXQ2BxtGAiuZbVzrg7Qt1OKN83vw6BMs6gH5yfu+An3SAoP+XxjrgsQ7gjNjZEFgaPfOqt5wKS9IAjG96vxlDACqm7SvDAMa80ldD7fCJ/JrSBfLlUxD7mRE2/bioiIcXgU1ityvSAPK9wfecv40ucFUNC9sNN5BgUgE4c4rOL6kIGJN4cHK49Ri2y/h51uiCqZ2At/85wrvVFvHgfl0/a8TA0z47QKPcd11CVpC8jm/tHwxYcBcI37E910WuY6++/PDkSS612w5bDiGkDDe33fDKC0u5zPj4xKE4yEfZuUCI1IpQtUtqq9bC0kQu0165bHesU3l5bcNviuUJKRIo2m5sFFv3JjLxdSg2pTy8jvjIrdUsBEXXal7hTm9wsLJdMO07NeIWEcrXmp75bqlPdHcLAKcue9AhsevEeruUGbzC422MTkMdDWtxQOZwjY+FIH2uWLiXyyjX4QiMT6ijo5ok0Av/ApD9MvAZG7Eu501XuywAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_244\",\r\n id: \"244\",\r\n ProductCode: \"DQG115SERZLF\",\r\n ProductDescription: \"115 D/Quad Gutter RH Stop End Zincalume\",\r\n ProductIndex: \"D115RSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.39\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0727\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.25\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDExYPtWNnAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f31tbW5ubmwcHBhISEc3Nze3t7lJSUpaWlra2ta2trY2NjnJycWlpajIyM+zaUywAAAAF0Uk5TAEDm2GYAAAPhSURBVHjandZBaFNJGADgF3NWYtqrUmMvCkoOguhB1lDFHgrLspOJFH2IvAnLixTczXuWIgExdHoow4Ig60WRHlSQhZW+LqRUWLAeEuKeFF2WvezuqezJ1466YfznJe/lpU06E4f0lP/75///N+k8w9Bfe/KVsweHiDfOC/Z+3xDxyQpl/MwQ4IBJqTiuHz86zyhj2mDkWLnAKdcuafTuDGOUso96UxqZcrHFqKDVH3WmlBj9q4zmNjgT+HZKA6QvFBFe+7dAxcOsYShB4nQV0jcsQdn7lKEG6UcuyjfWC9CveGAoQeKoj7C9YXHIL+bHlCBI31w3qRCCic3vFSB5BCNcalS4CBarbmZ3BemfZXqvwCAYCqJ06/VuIHnEhfQbFc6DeE4p3/pjMEicqGIYzgrncBwgXALmDwbJKUi/WjdhOEAEp/IDYMBzgPQIzzWWoexoyS381/3BHpglbtZNRuOAyqb7gcQJeFRz8KgghNMe03cH+ajw2rrJg2geL4n5b3aA5FGMUOm/GWhRhohtJVW3g5H7ODgJPdV3l78NJCed4CTIsQvRW397Sj0gkWYYOc0VOGgsXkusJJ/FQHJSnoR6Jahe8J079AL5qCD9sgjOAAxkBwjGGoHkBTjHa/VK7Ms+PXARgb3/oLmm1SdprzFpBJrwqOCY7RYNX5qLEcAzjCrSw9+NVgTkj5ZyFbj0IfxN7y1Q1ZLg5sc2yO4/ydUAZn2tAxKorAY0tkOiVBHKYDml2W87QLxSZ5c9fBeC1ivVUIPFr4VgURPM/hCC51o909nrHfCnHmAxoDVWcfObCGj1IC5dj3rQAxdDsDA80Gq6OjRoXQ2BxtGAiuZbVzrg7Qt1OKN83vw6BMs6gH5yfu+An3SAoP+XxjrgsQ7gjNjZEFgaPfOqt5wKS9IAjG96vxlDACqm7SvDAMa80ldD7fCJ/JrSBfLlUxD7mRE2/bioiIcXgU1ityvSAPK9wfecv40ucFUNC9sNN5BgUgE4c4rOL6kIGJN4cHK49Ri2y/h51uiCqZ2At/85wrvVFvHgfl0/a8TA0z47QKPcd11CVpC8jm/tHwxYcBcI37E910WuY6++/PDkSS612w5bDiGkDDe33fDKC0u5zPj4xKE4yEfZuUCI1IpQtUtqq9bC0kQu0165bHesU3l5bcNviuUJKRIo2m5sFFv3JjLxdSg2pTy8jvjIrdUsBEXXal7hTm9wsLJdMO07NeIWEcrXmp75bqlPdHcLAKcue9AhsevEeruUGbzC422MTkMdDWtxQOZwjY+FIH2uWLiXyyjX4QiMT6ijo5ok0Av/ApD9MvAZG7Eu501XuywAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_245\",\r\n id: \"245\",\r\n ProductCode: \"DQGS42115**\",\r\n ProductDescription: \"115 D/Quad Gutter **\",\r\n ProductIndex: \"D115S\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"207\",\r\n SubGroup: \"30421\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.1564\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9803\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.2523\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_246\",\r\n id: \"246\",\r\n ProductCode: \"DQGS42115ZL\",\r\n ProductDescription: \"115 D/Quad Gutter Zincalume\",\r\n ProductIndex: \"D115SZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"206\",\r\n SubGroup: \"30421\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.3121\",\r\n MfgLocations: \"200 300 310 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9606\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.048\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_247\",\r\n id: \"247\",\r\n ProductCode: \"DQG42115ZL\",\r\n ProductDescription: \"115 D/Quad Gutter Zincalume\",\r\n ProductIndex: \"D115Z\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"206\",\r\n SubGroup: \"30421\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.3121\",\r\n MfgLocations: \"200 300 310 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9606\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.048\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_248\",\r\n id: \"248\",\r\n ProductCode: \"DSDA1018\",\r\n ProductDescription: \"Dektite tile flashing 50-170mm with aluminium shroud\",\r\n ProductIndex: \"DEKTITE50170\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"635\",\r\n SubGroup: \"990001\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.15\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"55.66\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_249\",\r\n id: \"249\",\r\n ProductCode: \"DFE5070B\",\r\n ProductDescription: \"Dektite 50-70mm\",\r\n ProductIndex: \"DEKTITE5070\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"635\",\r\n SubGroup: \"50701\",\r\n SellingUOM: \"EA\",\r\n Cost: \"15\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.15\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"11.00\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_250\",\r\n id: \"250\",\r\n ProductCode: \"DG55125**\",\r\n ProductDescription: \"125 D Gutter **\",\r\n ProductIndex: \"DG\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"207\",\r\n SubGroup: \"31551\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.8592\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.344\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.9836\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"DGUB\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_251\",\r\n id: \"251\",\r\n ProductCode: \"DG125EC**\",\r\n ProductDescription: \"125 D Gutter External Mitre **\",\r\n ProductIndex: \"DGEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"112521\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.565\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8816\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"47.65\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_252\",\r\n id: \"252\",\r\n ProductCode: \"DG125IC**\",\r\n ProductDescription: \"125 D Gutter Internal Mitre **\",\r\n ProductIndex: \"DGIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"112531\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.565\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8816\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"47.65\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_253\",\r\n id: \"253\",\r\n ProductCode: \"DG125ICZL\",\r\n ProductDescription: \"125 D Gutter Internal Mitre Zincalume\",\r\n ProductIndex: \"DGIMZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"112531\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.385\",\r\n MfgLocations: \"500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8666\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"46.57\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_254\",\r\n id: \"254\",\r\n ProductCode: \"DG125SEL**\",\r\n ProductDescription: \"125 D Gutter LH Stop End **\",\r\n ProductIndex: \"DGLSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"112551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.64\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0975\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.51\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_255\",\r\n id: \"255\",\r\n ProductCode: \"DG125SELZL\",\r\n ProductDescription: \"125 D Gutter LH Stop End Zincalume\",\r\n ProductIndex: \"DGLSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"112551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.42\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0701\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.27\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_256\",\r\n id: \"256\",\r\n ProductCode: \"DG125SER**\",\r\n ProductDescription: \"125 D Gutter RH Stop End **\",\r\n ProductIndex: \"DGRSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"112551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.64\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0975\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.51\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_257\",\r\n id: \"257\",\r\n ProductCode: \"DG125SERZL\",\r\n ProductDescription: \"125 D Gutter RH Stop End Zincalume\",\r\n ProductIndex: \"DGRSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"112551\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.42\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0701\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.27\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_258\",\r\n id: \"258\",\r\n ProductCode: \"DG125ISGA\",\r\n ProductDescription: \"125 D/OG/H-Line UB Internal Gutter Strap Galv\",\r\n ProductIndex: \"DGUB\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"112571\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.226\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.05\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.66\",\r\n AncillaryParts: \"1xSCTF\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_259\",\r\n id: \"259\",\r\n ProductCode: \"DP5510050**18\",\r\n ProductDescription: \"100X50 Downpipe ** 1800mm\",\r\n ProductIndex: \"DP105\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"251\",\r\n SubGroup: \"510501\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.9466\",\r\n MfgLocations: \"520 560 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.4192\",\r\n PromptTextCodes: \"Length=1800 AltIndex=DP105_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"7.1705\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_260\",\r\n id: \"260\",\r\n ProductCode: \"DP5510050ZL18\",\r\n ProductDescription: \"100X50 0.55 Downpipe 1800mm Zincalume\",\r\n ProductIndex: \"DP1055Z\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"250\",\r\n SubGroup: \"511051\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.4188\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3778\",\r\n PromptTextCodes: \"Length=1800\",\r\n Colours: \"\",\r\n LiveCost: \"23.90\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_261\",\r\n id: \"261\",\r\n ProductCode: \"DP5510075**18\",\r\n ProductDescription: \"100X75 Downpipe ** 1800mm\",\r\n ProductIndex: \"DP107\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"251\",\r\n SubGroup: \"510701\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8.7699\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.3147\",\r\n PromptTextCodes: \"Length=1800 AltIndex=DP107_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"9.0491\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_262\",\r\n id: \"262\",\r\n ProductCode: \"DP6565**18\",\r\n ProductDescription: \"65X65 Downpipe ** 1800mm\",\r\n ProductIndex: \"DP656\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"251\",\r\n SubGroup: \"165651\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.5781\",\r\n MfgLocations: \"400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.4863\",\r\n PromptTextCodes: \"Length=1800 AltIndex=DP656_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"39.33\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"8\"},\\n {\"Code\":\"ST656\",\\n \"Qty\" : \"=(Length/1200)\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAABQBAMAAADb68wJAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzoxOTozNSArMDkzMDxahEUAAAAHdElNRQfiBBIDMgPu95JvAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f33t7e1tbW5+fn7+/vzs7OxsbGvb29tbW1ra2tpaWlmJiYjIyMhISEZmZmVePb/wAAAAF0Uk5TAEDm2GYAAARsSURBVHjazdo/bNNYGADwGDUzKbgzUmKyIsXFZUNyTCVYqgsF3VaJIJuNU9HluWyABE43EFxb3w1sqITtJIQar/w7kg7Heol0002XSDDcVSDC92w/13YT22mcvvdJSZp/zs/f+94fu85kSHAZ+nH8kN+bhWCIM6XY53C5qEyMivDnUuPMXYn62SsJYjYmxuJUhLifU0KRhDiKHMspl5RDRBQ37jtDMkc4HLdYPQxn0gjRTrmcXHahukzDE2StkLbiNZWiJszhyhoSKKYnxMkWEbrODmdmAaFVdjgVDaF7ibvq1DkFhND9C8xwJOBsnF6mBgpyeGgr4/ZpiulxSCv7pWOs0+xaAU4Z2sqoP+LZ4HBFzNl8yQiHh1FHNzbeMdJYUDq6YWzuCExwuLKKOVuNn9ngFGvIMAzztycscHIzCzXITn27+fYYVY+iLJFBUDe2njff0+1aDoe7jAfB+laj+eEsC5wC5myZzWbnJwY4WQn6eR3aqtV9ygCHVzW7cqx2908YCAXKnLKmGXXQtLq7ezx9DkxYhtmwWn91d79m6XJWMrNZDUGvslqdTq/Xv7AsyFSzk5uRkNls2Zre4KFMU4M5J2+YVrvT7eEY/C1XaE7rUDs/Wh0XA5xPdMdl4FzqfesRzeBLlurADJyLdmr6Ayd+OJsnEf7ssNfS51z9te1kxo47QoDjJ6TBGbWrHofjzzVaToIw6XX5AGcYbWqczNzCWtMiPWvweXVVFMU83FQR30HYj1XRF/l8+N75i7yy/xh+LRilvC8ElyPpz2EQdCvo/2cGHFUgVdUQpiAvnGfOfU1NM3y+8/b6ot4gnt7e9prhBF6SDY19om44tzTC3sWb9sJdN4mnv2eujXQQTvTbySMEcjiZiorq9jQBnv5/N7TYHdEDW9InzQmWuM2POSckTYeVaQvPFP2PiyIp3WCzql5pp1En5AnpIu5b5/GZLxHmdNPxDO4VqqTUA3UfCq+HlZL3rKHbCT4943Ls1SB4/l0WbIU7QAj5lMM/9pDu7RuHnKW7VMPpsT602//IqQsSEf2cReDg9DRbu2/oczLlqgrHWeaOZbXvTqGBxuVcrkr4WGK7Yf2RP2LOwTkLejpw7PS8+F0uybQy43FmJAmfUVnffvFYLk3+E5NyuCJw8FH6znWKFK9ncUXV5qy/gg8dbK0DY8WEPz+C4mUHahnWE/qm+ctRJsfZTWEUB4aeW0fHII/DslPBqy2kb8zLR80RhnF4CRePfl9R5IhxJ6qGxqmviKX0kvvPNZweYxWw3uxJkQMLQkjPg2uyoMgCIxy1Ni8rmOOPmK/HxjBqHCeHa1lVq/nRm0uTE7HNJVvjcEoK1ZMpXnaga4lVljhz9no2XDiUOBysT+EIVWCEYy8IxUNdoTIljswW54QoztO2+Di8WBDkaZ/bSs7JFuj3cn92tGuR80vS+SjpXBbD4QrRV6JNsstjXE1HLrYaFXEX3yWJTPIgl6LlxvjOFIPZizyZCB+H+gXCuJS/A/+pPNYeplRxAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_263\",\r\n id: \"263\",\r\n ProductCode: \"TSTL524**\",\r\n ProductDescription: \"Tl-5 Fibreglass 2400GSM **\",\r\n ProductIndex: \"F/GLASS\",\r\n GroupingName: \"Fibreglass Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"124002\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.44\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"2\",\r\n PromptTextCodes: \"F8\",\r\n Colours: \"Opal\",\r\n LiveCost: \"28.43\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCA0bu6VgCgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURfX19efn59PT08bGxs3NzfHx8d/f37y8vOzs7NjY2LS0tLCwsJycnISEhKioqKCgoO1lOKAAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_264\",\r\n id: \"264\",\r\n ProductCode: \"CNFCSH\",\r\n ProductDescription: \"2400 X 1200 6.00mm Fibre Cement Sheet Plain\",\r\n ProductIndex: \"FCD2412\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"992001\",\r\n SellingUOM: \"EA\",\r\n Cost: \"25.41\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_INFILLS_$$\",\r\n MarkupCarport: \"$$_INFILLS_$$\",\r\n SellingUnitWeight: \"30\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"61.25\",\r\n AncillaryParts: \"20xTSW1022\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_265\",\r\n id: \"265\",\r\n ProductCode: \"FCTL5SZL2400\",\r\n ProductDescription: \"FCTZ Gutter Capping (Zinc only)\",\r\n ProductIndex: \"FCTZ\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"230\",\r\n SubGroup: \"295505\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.76\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.21\",\r\n PromptTextCodes: \"Length=2400 AltIndex=FCTZ_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"3.66\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_266\",\r\n id: \"266\",\r\n ProductCode: \"FASMKIISC\",\r\n ProductDescription: \"Metal Fascia Suspension Clips\",\r\n ProductIndex: \"FFSCL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"762\",\r\n SubGroup: \"950106\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.34\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.035\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.65\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_267\",\r\n id: \"267\",\r\n ProductCode: \"FGF55**\",\r\n ProductDescription: \"Fascia Gutter **\",\r\n ProductIndex: \"FG\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"269\",\r\n SubGroup: \"155101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.7044\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5822\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.63\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"JSTRAP\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"!=*Return*\"\\n }},\\n {\"Code\":\"HICL\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"REFLDG\",\\n \"Use\" : \"Refold Gutter Fee\",\\n \"Qty\" : \"=Qty\",\\n \"Conditions\":{\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_268\",\r\n id: \"268\",\r\n ProductCode: \"FGFEC**\",\r\n ProductDescription: \"Fascia Gutter Ext Mitre **\",\r\n ProductIndex: \"FGEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"57501\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_269\",\r\n id: \"269\",\r\n ProductCode: \"FGWREC**\",\r\n ProductDescription: \"Fascia Gutter W/Ret Ext Mitre **\",\r\n ProductIndex: \"FGEMR\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"57201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.0376\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.4957\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.3078\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_270\",\r\n id: \"270\",\r\n ProductCode: \"FGJBGA\",\r\n ProductDescription: \"General Purpose Gutter Brkt Galv (Fascia Gutter)\",\r\n ProductIndex: \"FGGPG\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"100001\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.355\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.11\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.64\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_271\",\r\n id: \"271\",\r\n ProductCode: \"FGFIC**\",\r\n ProductDescription: \"Fascia Gutter Int Mitre **\",\r\n ProductIndex: \"FGIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"57601\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_272\",\r\n id: \"272\",\r\n ProductCode: \"FGWRIC**\",\r\n ProductDescription: \"Fascia Gutter W/Ret Int Mitre **\",\r\n ProductIndex: \"FGIMR\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"57301\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.0376\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.4957\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.3078\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_273\",\r\n id: \"273\",\r\n ProductCode: \"FGSEL**\",\r\n ProductDescription: \"Fascia Gutter LH Stop End **\",\r\n ProductIndex: \"FGLSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"57101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.71\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1183\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.71\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_274\",\r\n id: \"274\",\r\n ProductCode: \"FGSELZL\",\r\n ProductDescription: \"Fascia Gutter LH Stop End Zincalume\",\r\n ProductIndex: \"FGLSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"57101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.47\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0851\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.58\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_275\",\r\n id: \"275\",\r\n ProductCode: \"FGWR55**\",\r\n ProductDescription: \"Fascia Gutter W/Ret **\",\r\n ProductIndex: \"FGR\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"269\",\r\n SubGroup: \"55101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.6441\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.6638\",\r\n PromptTextCodes: \"SL\",\r\n Colours: \"\",\r\n LiveCost: \"4.8242\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"JSTRAP\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"!=*Return*\"\\n }},\\n {\"Code\":\"HICL\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_276\",\r\n id: \"276\",\r\n ProductCode: \"FGSER**\",\r\n ProductDescription: \"Fascia Gutter RH Stop End **\",\r\n ProductIndex: \"FGRSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"57101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.71\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1183\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.71\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_277\",\r\n id: \"277\",\r\n ProductCode: \"FGSERZL\",\r\n ProductDescription: \"Fascia Gutter RH Stop End Zincalume\",\r\n ProductIndex: \"FGRSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"57101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.47\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0851\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.58\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_278\",\r\n id: \"278\",\r\n ProductCode: \"FGFS55**\",\r\n ProductDescription: \"Fascia Gutter Slotted **\",\r\n ProductIndex: \"FGS\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"269\",\r\n SubGroup: \"155201\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.7044\",\r\n MfgLocations: \"200 300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5822\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.63\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"JSTRAP\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"!=*Return*\"\\n }},\\n {\"Code\":\"HICL\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_279\",\r\n id: \"279\",\r\n ProductCode: \"TSHR24\",\r\n ProductDescription: \"Hi-Rib 680 Cover Fibreglass 2400GSM **\",\r\n ProductIndex: \"FI8HI\",\r\n GroupingName: \"Fibreglass Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"124407\",\r\n SellingUOM: \"LM\",\r\n Cost: \"13.29\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"2\",\r\n PromptTextCodes: \"F8\",\r\n Colours: \"Opal\",\r\n LiveCost: \"28.43\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_280\",\r\n id: \"280\",\r\n ProductCode: \"CF55**100#\",\r\n ProductDescription: \"Single sided Flashing 100 X 0.55 ** #\",\r\n ProductIndex: \"FL10\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.1983\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4529\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.2365\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_281\",\r\n id: \"281\",\r\n ProductCode: \"CF55**1000#\",\r\n ProductDescription: \"Single sided Flashing 1000 X 0.55 ** #\",\r\n ProductIndex: \"FL100\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.9824\",\r\n MfgLocations: \"400 410 500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4.5289\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.3639\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_282\",\r\n id: \"282\",\r\n ProductCode: \"CF55ZL1000#\",\r\n ProductDescription: \"Single sided Flashing 1000 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL1005Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.447\",\r\n MfgLocations: \"310 400 410 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4.4562\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"21.86\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_283\",\r\n id: \"283\",\r\n ProductCode: \"CF42**H**100#\",\r\n ProductDescription: \"Double sided Flashing 100 X 0.42 **H** #\",\r\n ProductIndex: \"FL10DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"0.9179\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3522\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.9179\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_284\",\r\n id: \"284\",\r\n ProductCode: \"CF55**1200#\",\r\n ProductDescription: \"Single sided Flashing 1200 X 0.55 ** #\",\r\n ProductIndex: \"FL120\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"14.3789\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5.4347\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.8367\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_285\",\r\n id: \"285\",\r\n ProductCode: \"CF55ZL1200#\",\r\n ProductDescription: \"Single sided Flashing 1200 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL1205Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551120\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.3374\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5.3475\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"26.62\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_286\",\r\n id: \"286\",\r\n ProductCode: \"CF55**150#\",\r\n ProductDescription: \"Single sided Flashing 150 X 0.55 ** #\",\r\n ProductIndex: \"FL15\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.7972\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6793\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.8545\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_287\",\r\n id: \"287\",\r\n ProductCode: \"CF55ZL150#\",\r\n ProductDescription: \"Single sided Flashing 150 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL155Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551150\",\r\n SellingUOM: \"LM\",\r\n Cost: \"0.8799\",\r\n MfgLocations: \"200 400 500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.6742\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.03\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_288\",\r\n id: \"288\",\r\n ProductCode: \"CF42**H**150#\",\r\n ProductDescription: \"Double sided Flashing 150 X 0.42 **H** #\",\r\n ProductIndex: \"FL15DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.3769\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5283\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.3769\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_289\",\r\n id: \"289\",\r\n ProductCode: \"CF55**200#\",\r\n ProductDescription: \"Single sided Flashing 200 X 0.55 ** #\",\r\n ProductIndex: \"FL20\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.3966\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9058\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.4728\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_290\",\r\n id: \"290\",\r\n ProductCode: \"CF55ZL200#\",\r\n ProductDescription: \"Single sided Flashing 200 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL205Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551200\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.8894\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.8912\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.23\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_291\",\r\n id: \"291\",\r\n ProductCode: \"CF42**H**200#\",\r\n ProductDescription: \"Double sided Flashing 200 X 0.42 **H** #\",\r\n ProductIndex: \"FL20DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.8361\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.7045\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.8361\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_292\",\r\n id: \"292\",\r\n ProductCode: \"CF55**250#\",\r\n ProductDescription: \"Single sided Flashing 250 X 0.55 ** #\",\r\n ProductIndex: \"FL25\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.9955\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.1322\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.0909\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_293\",\r\n id: \"293\",\r\n ProductCode: \"CF55ZL250#\",\r\n ProductDescription: \"Single sided Flashing 250 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL255Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551250\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.3617\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.114\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.19\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_294\",\r\n id: \"294\",\r\n ProductCode: \"CF42**H**250#\",\r\n ProductDescription: \"Double sided Flashing 250 X 0.42 **H** #\",\r\n ProductIndex: \"FL25DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.2951\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.8806\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.2951\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_295\",\r\n id: \"295\",\r\n ProductCode: \"CF55**300#\",\r\n ProductDescription: \"Single sided Flashing 300 X 0.55 ** #\",\r\n ProductIndex: \"FL30\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.5948\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.3587\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.7093\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_296\",\r\n id: \"296\",\r\n ProductCode: \"CF55ZL300#\",\r\n ProductDescription: \"Single sided Flashing 300 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL305Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551300\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.8341\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.3368\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.17\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_297\",\r\n id: \"297\",\r\n ProductCode: \"CF42**H**300#\",\r\n ProductDescription: \"Double sided Flashing 300 X 0.42 **H** #\",\r\n ProductIndex: \"FL30DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.754\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.754\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_298\",\r\n id: \"298\",\r\n ProductCode: \"CNFL95**H**#\",\r\n ProductDescription: \"Flashing 345 (Max) X 0.95 Gloss **H** #\",\r\n ProductIndex: \"FL34595G\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.5756\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.6455\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.5756\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_299\",\r\n id: \"299\",\r\n ProductCode: \"CF55**350#\",\r\n ProductDescription: \"Single sided Flashing 350 X 0.55 ** #\",\r\n ProductIndex: \"FL35\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.1938\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5851\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.3273\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1016100B8\",\\n \"Qty\":\"=(2*(Length/1000))+2\", \\n \"Use\":\"Box Gutter Fix\", \\n \"Conditions\":{\"Use\":\"=Box Gutter\"}}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_300\",\r\n id: \"300\",\r\n ProductCode: \"CF55ZL350#\",\r\n ProductDescription: \"Single sided Flashing 350 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL355Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551350\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.3065\",\r\n MfgLocations: \"300 310 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5596\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.13\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_301\",\r\n id: \"301\",\r\n ProductCode: \"CF42**H**350#\",\r\n ProductDescription: \"Double sided Flashing 350 X 0.42 **H** #\",\r\n ProductIndex: \"FL35DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.213\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.2328\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.213\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_302\",\r\n id: \"302\",\r\n ProductCode: \"CF55**400#\",\r\n ProductDescription: \"Single sided Flashing 400 X 0.55 ** #\",\r\n ProductIndex: \"FL40\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.793\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8116\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.9457\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_303\",\r\n id: \"303\",\r\n ProductCode: \"CF42**H**400#\",\r\n ProductDescription: \"Double sided Flashing 400 X 0.42 **H** #\",\r\n ProductIndex: \"FL40DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.6722\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.409\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.6722\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_304\",\r\n id: \"304\",\r\n ProductCode: \"CF55**450#\",\r\n ProductDescription: \"Single sided Flashing 450 X 0.55 ** #\",\r\n ProductIndex: \"FL45\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"5.3921\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.038\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.5638\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_305\",\r\n id: \"305\",\r\n ProductCode: \"CF55**500#\",\r\n ProductDescription: \"Single sided Flashing 500 X 0.55 ** #\",\r\n ProductIndex: \"FL50\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"5.9913\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.2645\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.1821\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_306\",\r\n id: \"306\",\r\n ProductCode: \"CF55ZL500#\",\r\n ProductDescription: \"Single sided Flashing 500 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL505Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551500\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.5419\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.2281\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"11.79\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_307\",\r\n id: \"307\",\r\n ProductCode: \"CF42**H**500#\",\r\n ProductDescription: \"Double sided Flashing 500 X 0.42 **H** #\",\r\n ProductIndex: \"FL50DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.5901\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.7612\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.5901\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_308\",\r\n id: \"308\",\r\n ProductCode: \"CF55**600#\",\r\n ProductDescription: \"Single sided Flashing 600 X 0.55 ** #\",\r\n ProductIndex: \"FL60\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7.1893\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.7173\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4182\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_309\",\r\n id: \"309\",\r\n ProductCode: \"CF55ZL600#\",\r\n ProductDescription: \"Single sided Flashing 600 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL605Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551600\",\r\n SellingUOM: \"LM\",\r\n Cost: \"5.6682\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.6737\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.48\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_310\",\r\n id: \"310\",\r\n ProductCode: \"CF42**H**600#\",\r\n ProductDescription: \"Double sided Flashing 600 X 0.42 **H** #\",\r\n ProductIndex: \"FL60DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"5.5083\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.1135\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.5083\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_311\",\r\n id: \"311\",\r\n ProductCode: \"CF55**700#\",\r\n ProductDescription: \"Single sided Flashing 700 X 0.55 ** #\",\r\n ProductIndex: \"FL70\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.3876\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.1702\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.6547\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_312\",\r\n id: \"312\",\r\n ProductCode: \"CF55ZL700#\",\r\n ProductDescription: \"Single sided Flashing 700 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL705Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.6129\",\r\n MfgLocations: \"300 310 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.1193\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.9789\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_313\",\r\n id: \"313\",\r\n ProductCode: \"CF42**H**700#\",\r\n ProductDescription: \"Double sided Flashing 700 X 0.42 **H** #\",\r\n ProductIndex: \"FL70DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.4262\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.4657\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.4262\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_314\",\r\n id: \"314\",\r\n ProductCode: \"CF55**750#\",\r\n ProductDescription: \"Single sided Flashing 750 X 0.55 ** #\",\r\n ProductIndex: \"FL75\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.9868\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.3967\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.273\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_315\",\r\n id: \"315\",\r\n ProductCode: \"CF55ZL750#\",\r\n ProductDescription: \"Single sided Flashing 750 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL755Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551750\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7.0853\",\r\n MfgLocations: \"200 300 600 660 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.342\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.08\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_316\",\r\n id: \"316\",\r\n ProductCode: \"CF42**H**800#\",\r\n ProductDescription: \"Double sided Flashing 800 X 0.42 **H** #\",\r\n ProductIndex: \"FL80DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7.3444\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.818\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.3444\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_317\",\r\n id: \"317\",\r\n ProductCode: \"CF55**900#\",\r\n ProductDescription: \"Single sided Flashing 900 X 0.55 ** #\",\r\n ProductIndex: \"FL90\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"740\",\r\n SubGroup: \"445509\",\r\n SellingUOM: \"LM\",\r\n Cost: \"10.7841\",\r\n MfgLocations: \"200 300 400 410 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4.076\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"11.1275\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_318\",\r\n id: \"318\",\r\n ProductCode: \"CF55ZL900#\",\r\n ProductDescription: \"Single sided Flashing 900 X 0.55 Zincalume #\",\r\n ProductIndex: \"FL905Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"235\",\r\n SubGroup: \"551900\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.5023\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"4.0106\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.54\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_319\",\r\n id: \"319\",\r\n ProductCode: \"CF42**H**900#\",\r\n ProductDescription: \"Double sided Flashing 900 X 0.42 **H** #\",\r\n ProductIndex: \"FL90DS\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.2623\",\r\n MfgLocations: \"200 300 520 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.1702\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.2623\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_320\",\r\n id: \"320\",\r\n ProductCode: \"STILLAGE\",\r\n ProductDescription: \"Fielders Metal Stillage (Returnable)\",\r\n ProductIndex: \"FMSR\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"990205\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.001\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"40\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_321\",\r\n id: \"321\",\r\n ProductCode: \"BS501230\",\r\n ProductDescription: \"Fielders Hoop Iron / Strapping 50 X 1.20 Z275 Galv (30Mtr)\",\r\n ProductIndex: \"FS5012G\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"405\",\r\n SubGroup: \"150123\",\r\n SellingUOM: \"EA\",\r\n Cost: \"25.023\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"14.13\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"73.13\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_322\",\r\n id: \"322\",\r\n ProductCode: \"FFS70FDO2360\",\r\n ProductDescription: \"Fielders Slat 70mm X 0.35 2360mm Classic Cream\",\r\n ProductIndex: \"FS70236CC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.1463\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.2744\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.03\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_323\",\r\n id: \"323\",\r\n ProductCode: \"FFS70FPB2360\",\r\n ProductDescription: \"Fielders Slat 70mm X 0.35 2360mm Paperbark\",\r\n ProductIndex: \"FS70236PB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.1463\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.2744\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.03\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_324\",\r\n id: \"324\",\r\n ProductCode: \"FFS70FWG2360\",\r\n ProductDescription: \"Fielders Slat 70mm X 0.35 2360mm Woodland Grey \",\r\n ProductIndex: \"FS70236WG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.1463\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.2744\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.03\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_325\",\r\n id: \"325\",\r\n ProductCode: \"FFS70FDO\",\r\n ProductDescription: \"Fielders Slat 70mm X 0.35 (L/M) Classic Cream\",\r\n ProductIndex: \"FS70CC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.3332\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.54\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.09\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_326\",\r\n id: \"326\",\r\n ProductCode: \"FFSEC70\",\r\n ProductDescription: \"Fielders Slat 70mm End Cap (Fen11023-70)\",\r\n ProductIndex: \"FS70EC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"750\",\r\n SubGroup: \"890010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.163\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.92\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_327\",\r\n id: \"327\",\r\n ProductCode: \"FFSJ70\",\r\n ProductDescription: \"Fielders Slat 70mm Joiner (Fen11050-70)\",\r\n ProductIndex: \"FS70J\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"750\",\r\n SubGroup: \"890020\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.555\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.026\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.91\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_328\",\r\n id: \"328\",\r\n ProductCode: \"FFS70FPB\",\r\n ProductDescription: \"Fielders Slat 70mm X 0.35 (L/M) Paperbark\",\r\n ProductIndex: \"FS70PB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.3332\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.54\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.09\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_329\",\r\n id: \"329\",\r\n ProductCode: \"FFS70FWG\",\r\n ProductDescription: \"Fielders Slat 70mm X 0.35 (L/M) Woodland Grey\",\r\n ProductIndex: \"FS70WG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"1.3332\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.54\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.09\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_330\",\r\n id: \"330\",\r\n ProductCode: \"FFSP70FDO2360\",\r\n ProductDescription: \"Fielders Slat Pack 70mm X 2360mm Classic Cream\",\r\n ProductIndex: \"FSP70236CC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910020\",\r\n SellingUOM: \"EA\",\r\n Cost: \"12.8829\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"4.1676\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"41.35\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_331\",\r\n id: \"331\",\r\n ProductCode: \"FFS70FPB2360\",\r\n ProductDescription: \"Fielders Slat Pack 70mm X 2360mm Paperbark\",\r\n ProductIndex: \"FSP70236PB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910010\",\r\n SellingUOM: \"EA\",\r\n Cost: \"12.8829\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"4.1676\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.03\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_332\",\r\n id: \"332\",\r\n ProductCode: \"FFSP70FWG2360\",\r\n ProductDescription: \"Fielders Slat Pack 70mm X 2360mm Woodland Grey\",\r\n ProductIndex: \"FSP70236WG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910020\",\r\n SellingUOM: \"EA\",\r\n Cost: \"12.8829\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"4.1676\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"41.35\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_333\",\r\n id: \"333\",\r\n ProductCode: \"FFSRV60B\",\r\n ProductDescription: \"Fielders Slat Retainer Suit 60mm Black\",\r\n ProductIndex: \"FSR60BK\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.499\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.02\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.593\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_334\",\r\n id: \"334\",\r\n ProductCode: \"FFSRV70B\",\r\n ProductDescription: \"Fielders Slat Retainer Suit 70mm Black\",\r\n ProductIndex: \"FSR70BK\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910200\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.574\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.0574\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.21\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_335\",\r\n id: \"335\",\r\n ProductCode: \"FFSS502PFDO1700\",\r\n ProductDescription: \"Fielders Split Slat 50mm (2Pce) 1700mm Classic Cream Fen11044\",\r\n ProductIndex: \"FSS5017CC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910135\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.78\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.7\",\r\n PromptTextCodes: \"Length=1700\",\r\n Colours: \"\",\r\n LiveCost: \"12.62\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_336\",\r\n id: \"336\",\r\n ProductCode: \"FFSS502PFPB1700\",\r\n ProductDescription: \"Fielders Split Slat 50mm (2Pce) 1700mm Paperbark Fen11044\",\r\n ProductIndex: \"FSS5017PB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910135\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.78\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.714\",\r\n PromptTextCodes: \"Length=1700\",\r\n Colours: \"\",\r\n LiveCost: \"12.62\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_337\",\r\n id: \"337\",\r\n ProductCode: \"FFSSP50FWG1700\",\r\n ProductDescription: \"Fielders Split Slat 50mm (2Pce) 1700mm Woodland Grey Fen11044\",\r\n ProductIndex: \"FSS5017WG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910120\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.78\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.714\",\r\n PromptTextCodes: \"Length=1700\",\r\n Colours: \"\",\r\n LiveCost: \"20.48\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_338\",\r\n id: \"338\",\r\n ProductCode: \"FFSSEB50FDO\",\r\n ProductDescription: \"Fielders Split Slat 50mm End Bracket Classic Cream Fen11043\",\r\n ProductIndex: \"FSS50EBCC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1171\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.16\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_339\",\r\n id: \"339\",\r\n ProductCode: \"FFSSEB50FPB\",\r\n ProductDescription: \"Fielders Split Slat 50mm End Bracket Paperbark Fen11043\",\r\n ProductIndex: \"FSS50EBPB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1171\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.16\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_340\",\r\n id: \"340\",\r\n ProductCode: \"FFSSEB50FWG\",\r\n ProductDescription: \"Fielders Split Slat 50mm End Bracket Woodland Grey Fen11043\",\r\n ProductIndex: \"FSS50EBWG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1171\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.16\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_341\",\r\n id: \"341\",\r\n ProductCode: \"FFSSP50FDO1700\",\r\n ProductDescription: \"Fielders 1700mm Split Slat Pack 50mm Wide (Inc Bkts) Classic Cream\",\r\n ProductIndex: \"FSSPCC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910120\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.0142\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.85\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.48\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_342\",\r\n id: \"342\",\r\n ProductCode: \"FFSSP50FPB1700\",\r\n ProductDescription: \"Fielders 1700mm Split Slat Pack 50mm Wide (Inc Bkts) Paperbark\",\r\n ProductIndex: \"FSSPPB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910120\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.0142\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.85\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.48\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_343\",\r\n id: \"343\",\r\n ProductCode: \"FFSSP50FWG1700\",\r\n ProductDescription: \"Fielders 1700mm Split Slat Pack 50mm Wide (Inc Bkts) Woodland Grey\",\r\n ProductIndex: \"FSSPWG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"910120\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2.0142\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.85\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.48\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_344\",\r\n id: \"344\",\r\n ProductCode: \"QGHFFS**\",\r\n ProductDescription: \"Hi-Front Quad Gutter **\",\r\n ProductIndex: \"HFQ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"207\",\r\n SubGroup: \"10553\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.7044\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5822\",\r\n PromptTextCodes: \"SL AltIndex=HFQR\",\r\n Colours: \"\",\r\n LiveCost: \"4.8542\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"JSTRAP\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"!=*Return*\"\\n }},\\n {\"Code\":\"HICL\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"REFLDG\",\\n \"Use\" : \"Refold Gutter Fee\",\\n \"Qty\" : \"=Qty\",\\n \"Conditions\":{\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_345\",\r\n id: \"345\",\r\n ProductCode: \"QGHFFSEC**\",\r\n ProductDescription: \"Hi-Front Quad Gutter Ext Mitre **\",\r\n ProductIndex: \"HFQEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"10103\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.868\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.226\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.968\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_346\",\r\n id: \"346\",\r\n ProductCode: \"QGHFFSIC**\",\r\n ProductDescription: \"Hi-Front Quad Gutter Int Mitre **\",\r\n ProductIndex: \"HFQIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"10103\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.768\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.226\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.868\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_347\",\r\n id: \"347\",\r\n ProductCode: \"QGHFFSSEL**\",\r\n ProductDescription: \"Hi-Front Quad Gutter LH Stop End **\",\r\n ProductIndex: \"HFQLSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"10203\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.93\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1183\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.93\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDEh9vcuqCAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5ubm1tbW9/f3wcHBra2tpaWllJSUhISEe3t7c3NznJycY2Nja2trWlpajIyMWbOI6AAAAAF0Uk5TAEDm2GYAAAPbSURBVHjatdZPbNtUGABwdxkcK9QekJDGVC8XJCSidGhjE2Lt0gtiAoHWC4cJgTQkbmzoOZXQJ/GnfXY0WVxSO12UA9Jae8l6gEPHhdskuqbcqtU04Q4dF4ZewkCP78V27Pz1y4FPSU755fv3HFuZf7v0hSIf08pJDn9fmgQ8zwl8Mwl4hREoZCYBQCB/U1pgSYwRRjfmJMm08ionBACcj+TEtJL6mAADzdE3FmTItKKczZuc/PPYopXv56WAosxcY8T445Dqm4uJSTpAOYu7aFXrFrU+m5UCyjXsnBh7u1RffzcjA14CzMFa1ccOpX+dSQZTJc6BcwbGflISH7zQAvw+BuO39xyqr84lgft4oLAoJMRoYpLKyCQ+OHUfzwfpCIZJjjFJcW4s2BFT4kR8AmHtI0xCb86OBq/vcGCE44sTxoDxW3u4xo2FkeDCTqeiKKB1VLfpsCQBwKaxlriAW/s/iQmPyhD/eQwcGsE1YpIns8PAawLw+PfFmxv7hwNr9MH5fG9JYgKdj3vHW1T/em4QaIwMC/DPivlBZhjoa4OItWMecVaM4kIveEPrn1JQGeBLb+5auvnpfCIQR9HvpCwOZJAkBHywAVES6ZTKW5gkWGMAgLEhPcSKK4sJry2E4ByYZHzw1j285H8PwUVYG5xS7+rF1dh82AVsfdiU+pfiFELw7NO1JMAAL/kueOapRAaMGNhO6MGP9mzmxSiDRLSsL/0MJ1fXZTIAv/1tCDaleoCf/wxAYZNJVATwMATFdUlwwwcninJNwy9dUJEE3wWgUJEpifAu2DDleuiCoiy4MSE46AIq13QIpu62JgOpu22QqulBABRTxyskGWgPgikpP5SZzOHTDkLwchUvQRnwYQBOudsyV5x28F4AznuPiETX2p0QnNj1mEyGO2FJqVpNZtcRUN5yf5WZUgTOebWJMmSmGu42h6RdxDIoV1yX8aTt5btTwv+B30qPOk8PskC54pRFUeNBMQaynu1WEraXL16OgHL6kJYdE3puVf1g9VIMpN7Ep5GS54gnOf+PcyBdvtADsp/j7ZXqnuvYFhs6gHzhnRjILl1dbu81XNvS7VLDtXjngQVGglQ6l1bV3LJWOqq7eFcuua5rszEZZhZVP3KIqg3Psalu17wtakbneCUGUmo80kuftKvHdWzJcDCTKR5SsauVQjTWGbU/0rnrRqPh2VherXFoUbyLrkRTSqnDIp27+qPRrHs4O6dU86x/I5BVR0Z6ecet1d0tnENz9bkQpNVxkc69r1Xrnl3+KhOAKTU5lq7rW4shyEoAkUidDGCEYOZ/BP8BOw71dc1tONwAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_348\",\r\n id: \"348\",\r\n ProductCode: \"QGHFFSSELZL\",\r\n ProductDescription: \"Hi-Front Quad Gutter LH Stop End Zincalume\",\r\n ProductIndex: \"HFQLSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"10203\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.68\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0851\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.75\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDEh9vcuqCAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5ubm1tbW9/f3wcHBra2tpaWllJSUhISEe3t7c3NznJycY2Nja2trWlpajIyMWbOI6AAAAAF0Uk5TAEDm2GYAAAPbSURBVHjatdZPbNtUGABwdxkcK9QekJDGVC8XJCSidGhjE2Lt0gtiAoHWC4cJgTQkbmzoOZXQJ/GnfXY0WVxSO12UA9Jae8l6gEPHhdskuqbcqtU04Q4dF4ZewkCP78V27Pz1y4FPSU755fv3HFuZf7v0hSIf08pJDn9fmgQ8zwl8Mwl4hREoZCYBQCB/U1pgSYwRRjfmJMm08ionBACcj+TEtJL6mAADzdE3FmTItKKczZuc/PPYopXv56WAosxcY8T445Dqm4uJSTpAOYu7aFXrFrU+m5UCyjXsnBh7u1RffzcjA14CzMFa1ccOpX+dSQZTJc6BcwbGflISH7zQAvw+BuO39xyqr84lgft4oLAoJMRoYpLKyCQ+OHUfzwfpCIZJjjFJcW4s2BFT4kR8AmHtI0xCb86OBq/vcGCE44sTxoDxW3u4xo2FkeDCTqeiKKB1VLfpsCQBwKaxlriAW/s/iQmPyhD/eQwcGsE1YpIns8PAawLw+PfFmxv7hwNr9MH5fG9JYgKdj3vHW1T/em4QaIwMC/DPivlBZhjoa4OItWMecVaM4kIveEPrn1JQGeBLb+5auvnpfCIQR9HvpCwOZJAkBHywAVES6ZTKW5gkWGMAgLEhPcSKK4sJry2E4ByYZHzw1j285H8PwUVYG5xS7+rF1dh82AVsfdiU+pfiFELw7NO1JMAAL/kueOapRAaMGNhO6MGP9mzmxSiDRLSsL/0MJ1fXZTIAv/1tCDaleoCf/wxAYZNJVATwMATFdUlwwwcninJNwy9dUJEE3wWgUJEpifAu2DDleuiCoiy4MSE46AIq13QIpu62JgOpu22QqulBABRTxyskGWgPgikpP5SZzOHTDkLwchUvQRnwYQBOudsyV5x28F4AznuPiETX2p0QnNj1mEyGO2FJqVpNZtcRUN5yf5WZUgTOebWJMmSmGu42h6RdxDIoV1yX8aTt5btTwv+B30qPOk8PskC54pRFUeNBMQaynu1WEraXL16OgHL6kJYdE3puVf1g9VIMpN7Ep5GS54gnOf+PcyBdvtADsp/j7ZXqnuvYFhs6gHzhnRjILl1dbu81XNvS7VLDtXjngQVGglQ6l1bV3LJWOqq7eFcuua5rszEZZhZVP3KIqg3Psalu17wtakbneCUGUmo80kuftKvHdWzJcDCTKR5SsauVQjTWGbU/0rnrRqPh2VherXFoUbyLrkRTSqnDIp27+qPRrHs4O6dU86x/I5BVR0Z6ecet1d0tnENz9bkQpNVxkc69r1Xrnl3+KhOAKTU5lq7rW4shyEoAkUidDGCEYOZ/BP8BOw71dc1tONwAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_349\",\r\n id: \"349\",\r\n ProductCode: \"QGHFFSSER**\",\r\n ProductDescription: \"Hi-Front Quad Gutter RH Stop End **\",\r\n ProductIndex: \"HFQRSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"10203\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.93\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1183\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.93\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDExYPtWNnAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f31tbW5ubmwcHBhISEc3Nze3t7lJSUpaWlra2ta2trY2NjnJycWlpajIyM+zaUywAAAAF0Uk5TAEDm2GYAAAPhSURBVHjandZBaFNJGADgF3NWYtqrUmMvCkoOguhB1lDFHgrLspOJFH2IvAnLixTczXuWIgExdHoow4Ig60WRHlSQhZW+LqRUWLAeEuKeFF2WvezuqezJ1466YfznJe/lpU06E4f0lP/75///N+k8w9Bfe/KVsweHiDfOC/Z+3xDxyQpl/MwQ4IBJqTiuHz86zyhj2mDkWLnAKdcuafTuDGOUso96UxqZcrHFqKDVH3WmlBj9q4zmNjgT+HZKA6QvFBFe+7dAxcOsYShB4nQV0jcsQdn7lKEG6UcuyjfWC9CveGAoQeKoj7C9YXHIL+bHlCBI31w3qRCCic3vFSB5BCNcalS4CBarbmZ3BemfZXqvwCAYCqJ06/VuIHnEhfQbFc6DeE4p3/pjMEicqGIYzgrncBwgXALmDwbJKUi/WjdhOEAEp/IDYMBzgPQIzzWWoexoyS381/3BHpglbtZNRuOAyqb7gcQJeFRz8KgghNMe03cH+ajw2rrJg2geL4n5b3aA5FGMUOm/GWhRhohtJVW3g5H7ODgJPdV3l78NJCed4CTIsQvRW397Sj0gkWYYOc0VOGgsXkusJJ/FQHJSnoR6Jahe8J079AL5qCD9sgjOAAxkBwjGGoHkBTjHa/VK7Ms+PXARgb3/oLmm1SdprzFpBJrwqOCY7RYNX5qLEcAzjCrSw9+NVgTkj5ZyFbj0IfxN7y1Q1ZLg5sc2yO4/ydUAZn2tAxKorAY0tkOiVBHKYDml2W87QLxSZ5c9fBeC1ivVUIPFr4VgURPM/hCC51o909nrHfCnHmAxoDVWcfObCGj1IC5dj3rQAxdDsDA80Gq6OjRoXQ2BxtGAiuZbVzrg7Qt1OKN83vw6BMs6gH5yfu+An3SAoP+XxjrgsQ7gjNjZEFgaPfOqt5wKS9IAjG96vxlDACqm7SvDAMa80ldD7fCJ/JrSBfLlUxD7mRE2/bioiIcXgU1ityvSAPK9wfecv40ucFUNC9sNN5BgUgE4c4rOL6kIGJN4cHK49Ri2y/h51uiCqZ2At/85wrvVFvHgfl0/a8TA0z47QKPcd11CVpC8jm/tHwxYcBcI37E910WuY6++/PDkSS612w5bDiGkDDe33fDKC0u5zPj4xKE4yEfZuUCI1IpQtUtqq9bC0kQu0165bHesU3l5bcNviuUJKRIo2m5sFFv3JjLxdSg2pTy8jvjIrdUsBEXXal7hTm9wsLJdMO07NeIWEcrXmp75bqlPdHcLAKcue9AhsevEeruUGbzC422MTkMdDWtxQOZwjY+FIH2uWLiXyyjX4QiMT6ijo5ok0Av/ApD9MvAZG7Eu501XuywAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_350\",\r\n id: \"350\",\r\n ProductCode: \"QGHFFSSERZL\",\r\n ProductDescription: \"Hi-Front Quad Gutter RH Stop End Zincalume\",\r\n ProductIndex: \"HFQRSEZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"10203\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.68\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0851\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.75\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABQBAMAAACNNLQTAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo0NzozNSArMDkzMI5SwTEAAAAHdElNRQfiBBIDExYPtWNnAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f31tbW5ubmwcHBhISEc3Nze3t7lJSUpaWlra2ta2trY2NjnJycWlpajIyM+zaUywAAAAF0Uk5TAEDm2GYAAAPhSURBVHjandZBaFNJGADgF3NWYtqrUmMvCkoOguhB1lDFHgrLspOJFH2IvAnLixTczXuWIgExdHoow4Ig60WRHlSQhZW+LqRUWLAeEuKeFF2WvezuqezJ1466YfznJe/lpU06E4f0lP/75///N+k8w9Bfe/KVsweHiDfOC/Z+3xDxyQpl/MwQ4IBJqTiuHz86zyhj2mDkWLnAKdcuafTuDGOUso96UxqZcrHFqKDVH3WmlBj9q4zmNjgT+HZKA6QvFBFe+7dAxcOsYShB4nQV0jcsQdn7lKEG6UcuyjfWC9CveGAoQeKoj7C9YXHIL+bHlCBI31w3qRCCic3vFSB5BCNcalS4CBarbmZ3BemfZXqvwCAYCqJ06/VuIHnEhfQbFc6DeE4p3/pjMEicqGIYzgrncBwgXALmDwbJKUi/WjdhOEAEp/IDYMBzgPQIzzWWoexoyS381/3BHpglbtZNRuOAyqb7gcQJeFRz8KgghNMe03cH+ajw2rrJg2geL4n5b3aA5FGMUOm/GWhRhohtJVW3g5H7ODgJPdV3l78NJCed4CTIsQvRW397Sj0gkWYYOc0VOGgsXkusJJ/FQHJSnoR6Jahe8J079AL5qCD9sgjOAAxkBwjGGoHkBTjHa/VK7Ms+PXARgb3/oLmm1SdprzFpBJrwqOCY7RYNX5qLEcAzjCrSw9+NVgTkj5ZyFbj0IfxN7y1Q1ZLg5sc2yO4/ydUAZn2tAxKorAY0tkOiVBHKYDml2W87QLxSZ5c9fBeC1ivVUIPFr4VgURPM/hCC51o909nrHfCnHmAxoDVWcfObCGj1IC5dj3rQAxdDsDA80Gq6OjRoXQ2BxtGAiuZbVzrg7Qt1OKN83vw6BMs6gH5yfu+An3SAoP+XxjrgsQ7gjNjZEFgaPfOqt5wKS9IAjG96vxlDACqm7SvDAMa80ldD7fCJ/JrSBfLlUxD7mRE2/bioiIcXgU1ityvSAPK9wfecv40ucFUNC9sNN5BgUgE4c4rOL6kIGJN4cHK49Ri2y/h51uiCqZ2At/85wrvVFvHgfl0/a8TA0z47QKPcd11CVpC8jm/tHwxYcBcI37E910WuY6++/PDkSS612w5bDiGkDDe33fDKC0u5zPj4xKE4yEfZuUCI1IpQtUtqq9bC0kQu0165bHesU3l5bcNviuUJKRIo2m5sFFv3JjLxdSg2pTy8jvjIrdUsBEXXal7hTm9wsLJdMO07NeIWEcrXmp75bqlPdHcLAKcue9AhsevEeruUGbzC422MTkMdDWtxQOZwjY+FIH2uWLiXyyjX4QiMT6ijo5ok0Av/ApD9MvAZG7Eu501XuywAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_351\",\r\n id: \"351\",\r\n ProductCode: \"QGHFFSS**\",\r\n ProductDescription: \"Hi-Front Quad Gutter Slotted **\",\r\n ProductIndex: \"HFQS\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"207\",\r\n SubGroup: \"10553\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.6441\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.6638\",\r\n PromptTextCodes: \"SL\",\r\n Colours: \"\",\r\n LiveCost: \"4.8242\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"JSTRAP\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"!=*Return*\"\\n }},\\n {\"Code\":\"HICL\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*10\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_352\",\r\n id: \"352\",\r\n ProductCode: \"QGHFFSSZL\",\r\n ProductDescription: \"Hi-Front Quad Gutter Slotted Zincalume\",\r\n ProductIndex: \"HFQSZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"206\",\r\n SubGroup: \"10553\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.6902\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.6366\",\r\n PromptTextCodes: \"SL\",\r\n Colours: \"\",\r\n LiveCost: \"3.4736\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"JSTRAP\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"!=*Return*\"\\n }},\\n {\"Code\":\"HICL\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*10\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_353\",\r\n id: \"353\",\r\n ProductCode: \"QGHFFSZL\",\r\n ProductDescription: \"Hi-Front Quad Gutter Zincalume\",\r\n ProductIndex: \"HFQZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"206\",\r\n SubGroup: \"10553\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.583\",\r\n MfgLocations: \"500\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5576\",\r\n PromptTextCodes: \"SL\",\r\n Colours: \"\",\r\n LiveCost: \"3.337\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"JSTRAP\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"!=*Return*\"\\n }},\\n {\"Code\":\"HICL\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\",\\n \"DescAppend\" : \"=*Return*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*10\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_354\",\r\n id: \"354\",\r\n ProductCode: \"HIRB42680**H**U\",\r\n ProductDescription: \"Hi-Rib 680 0.42BMT **H**U\",\r\n ProductIndex: \"HI42\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"125\",\r\n SubGroup: \"426801\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.5755\",\r\n MfgLocations: \"400 500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2573\",\r\n PromptTextCodes: \"TOP.UNDER CVR\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey, Classic Cream/Classic Cream, Classic Cream/Mangrove, Classic Cream/Monument, Classic Cream/Woodland Grey, Paperbark/Gully, Paperbark/Paperbark, Paperbark/Woodland Grey, Surfmist/Monument, Surfmist/Surfmist\",\r\n LiveCost: \"25.62\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_355\",\r\n id: \"355\",\r\n ProductCode: \"HIRB42680**H**U\",\r\n ProductDescription: \"Hi-Rib 680 0.42BMT **H**U\",\r\n ProductIndex: \"HI42DS\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"125\",\r\n SubGroup: \"426801\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.5755\",\r\n MfgLocations: \"400 500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2573\",\r\n PromptTextCodes: \"TOP.UNDER CVR\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey, Classic Cream/Classic Cream, Classic Cream/Mangrove, Classic Cream/Monument, Classic Cream/Woodland Grey, Paperbark/Gully, Paperbark/Paperbark, Paperbark/Woodland Grey, Surfmist/Monument, Surfmist/Surfmist\",\r\n LiveCost: \"25.62\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_356\",\r\n id: \"356\",\r\n ProductCode: \"HIRB42680ZL\",\r\n ProductDescription: \"Hi-Rib 680 0.42BMT Zincalume\",\r\n ProductIndex: \"HI42Z\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"124\",\r\n SubGroup: \"426801\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.8545\",\r\n MfgLocations: \"400 500 600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2258\",\r\n PromptTextCodes: \"CVR\",\r\n Colours: \"Zincalume\",\r\n LiveCost: \"19.57\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_357\",\r\n id: \"357\",\r\n ProductCode: \"HIRB48680**U\",\r\n ProductDescription: \"Hi-Rib 680 0.48BMT **U\",\r\n ProductIndex: \"HI48\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"125\",\r\n SubGroup: \"486801\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.4941\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.69\",\r\n PromptTextCodes: \"CVR TOP.UNDER .48\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey\",\r\n LiveCost: \"35.90\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_358\",\r\n id: \"358\",\r\n ProductCode: \"HIRB48680ZL\",\r\n ProductDescription: \"Hi-Rib 680 0.48BMT Zincalume\",\r\n ProductIndex: \"HI48Z\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"124\",\r\n SubGroup: \"486801\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7.5632\",\r\n MfgLocations: \"400 500 600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.663\",\r\n PromptTextCodes: \"CVR .48\",\r\n Colours: \"Zincalume\",\r\n LiveCost: \"24.88\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1220100B8\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_359\",\r\n id: \"359\",\r\n ProductCode: \"TL5HRGCGA\",\r\n ProductDescription: \"Tl-5/M-Clad & Hi-Rib Gutter Clip\",\r\n ProductIndex: \"HICL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"99505\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.119\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.05\",\r\n PromptTextCodes: 'Desc=\"Gutter Clip\"',\r\n Colours: \"\",\r\n LiveCost: \"0.113\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_360\",\r\n id: \"360\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Hi-Rib Cover Sheet Only (Metal)\",\r\n ProductIndex: \"HICOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"500 600 670 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.311\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"3.9732\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_361\",\r\n id: \"361\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Hiklip Cover Sheet Only (Metal)\",\r\n ProductIndex: \"HKCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.6968\",\r\n MfgLocations: \"400\",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.759\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"4.6968\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_362\",\r\n id: \"362\",\r\n ProductCode: \"IRCOTEL100****\",\r\n ProductDescription: \"Bondor Insulroof Elegance 100mm Thick Insulated Panel ****\",\r\n ProductIndex: \"INEIP100\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"341001\",\r\n SellingUOM: \"LM\",\r\n Cost: \"38.59\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.56\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"133.19\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_363\",\r\n id: \"363\",\r\n ProductCode: \"IRCOTEL50****\",\r\n ProductDescription: \"Bondor Insulroof Elegance 50mm Thick Insulated Panel ****\",\r\n ProductIndex: \"INEIP50\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"340501\",\r\n SellingUOM: \"LM\",\r\n Cost: \"33.53\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"12.696\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"123.28\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14125\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_364\",\r\n id: \"364\",\r\n ProductCode: \"IRCOTEL75****\",\r\n ProductDescription: \"Bondor Insulroof Elegance 75mm Thick Insulated Panel ****\",\r\n ProductIndex: \"INEIP75\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"340751\",\r\n SellingUOM: \"LM\",\r\n Cost: \"35.88\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.128\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"131.22\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_365\",\r\n id: \"365\",\r\n ProductCode: \"IRCOT100****\",\r\n ProductDescription: \"Bondor Insulroof Plain 100mm Thick Insulated Panel ****\",\r\n ProductIndex: \"INIP100\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"331001\",\r\n SellingUOM: \"LM\",\r\n Cost: \"37.78\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.56\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"133.19\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_366\",\r\n id: \"366\",\r\n ProductCode: \"IRCOT50****\",\r\n ProductDescription: \"Bondor Insulroof Plain 50mm Thick Insulated Panel ****\",\r\n ProductIndex: \"INIP50\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"330501\",\r\n SellingUOM: \"LM\",\r\n Cost: \"32.72\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"12.696\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"93.69\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14125\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_367\",\r\n id: \"367\",\r\n ProductCode: \"IRCOT75****\",\r\n ProductDescription: \"Bondor Insulroof Plain 75mm Thick Insulated Panel ****\",\r\n ProductIndex: \"INIP75\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"330751\",\r\n SellingUOM: \"LM\",\r\n Cost: \"35.07\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.128\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"99.00\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_368\",\r\n id: \"368\",\r\n ProductCode: \"FGJBGA\",\r\n ProductDescription: \"J Type Fascia Gutter Int Strap Galv\",\r\n ProductIndex: \"JSTRAP\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"100001\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.189\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.05\",\r\n PromptTextCodes: 'Desc=\"J-Strap(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"1.64\",\r\n AncillaryParts: \"1xSCTF\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_369\",\r\n id: \"369\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Kingklip 700 Cover Sheet Only (Metal)\",\r\n ProductIndex: \"KKCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.311\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"3.9732\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_370\",\r\n id: \"370\",\r\n ProductCode: \"CNFCLATD\",\r\n ProductDescription: \"2400 X 1200 6.00mm Fibre Cement Lattice Diamond\",\r\n ProductIndex: \"LD2412\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"992000\",\r\n SellingUOM: \"EA\",\r\n Cost: \"29.44\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_INFILLS_$$\",\r\n MarkupCarport: \"$$_INFILLS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"72.70\",\r\n AncillaryParts: \"20xTSW1022\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_371\",\r\n id: \"371\",\r\n ProductCode: \"LLG55**\",\r\n ProductDescription: \"Longline L/L Gutter 0.55 ** (WA only)\",\r\n ProductIndex: \"LL5\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"195\",\r\n SubGroup: \"55101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.514\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.2755\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.5882\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_372\",\r\n id: \"372\",\r\n ProductCode: \"LLG55ZL\",\r\n ProductDescription: \"Longline L/L Gutter 0.55 Zincalume (WA only)\",\r\n ProductIndex: \"LL5ZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"194\",\r\n SubGroup: \"55101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.4626\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.298\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.6515\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_373\",\r\n id: \"373\",\r\n ProductCode: \"LLG40EC**\",\r\n ProductDescription: \"Longline L/L Gutter Ext Mitre ** (WA only)\",\r\n ProductIndex: \"LLEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"42211\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9904\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0521\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_374\",\r\n id: \"374\",\r\n ProductCode: \"LLG40ECZL\",\r\n ProductDescription: \"Longline L/L Gutter Ext Mitre Zincalume (WA only)\",\r\n ProductIndex: \"LLEMZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"42211\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9623\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.12\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0663\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_375\",\r\n id: \"375\",\r\n ProductCode: \"LLSGCM\",\r\n ProductDescription: \"Longline F(Metal) Gutter Clip (WA only)\",\r\n ProductIndex: \"LLFCL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"42302\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.272\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0563\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.325\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_376\",\r\n id: \"376\",\r\n ProductCode: \"LLSGCT\",\r\n ProductDescription: \"Longline Std (Timber) Gutter Clip (WA only)\",\r\n ProductIndex: \"LLGCL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"42301\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.29\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.069\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.347\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_377\",\r\n id: \"377\",\r\n ProductCode: \"LLG40IC**\",\r\n ProductDescription: \"Longline L/L Gutter Int Mitre ** (WA only)\",\r\n ProductIndex: \"LLIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"42221\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9904\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0521\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_378\",\r\n id: \"378\",\r\n ProductCode: \"LLG40ICZL\",\r\n ProductDescription: \"Longline L/L Gutter Int Mitre Zincalume (WA only)\",\r\n ProductIndex: \"LLIMZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"42221\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9623\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.12\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0663\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_379\",\r\n id: \"379\",\r\n ProductCode: \"LLGSEL**\",\r\n ProductDescription: \"Longline Gutter LH Stop End ** (WA only)\",\r\n ProductIndex: \"LLLSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"42201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2027\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0679\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.209\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_380\",\r\n id: \"380\",\r\n ProductCode: \"LLGSELZL\",\r\n ProductDescription: \"Longline Gutter LH Stop End Zincalume Grey (WA only)\",\r\n ProductIndex: \"LLLSEZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"42201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0679\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.209\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_381\",\r\n id: \"381\",\r\n ProductCode: \"LLGSER**\",\r\n ProductDescription: \"Longline Gutter RH Stop End ** (WA only)\",\r\n ProductIndex: \"LLRSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"42201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2027\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0679\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.209\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_382\",\r\n id: \"382\",\r\n ProductCode: \"LLGSERZL\",\r\n ProductDescription: \"Longline Gutter RH Stop End Zincalume (WA only)\",\r\n ProductIndex: \"LLRSEZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"42201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0679\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.209\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_383\",\r\n id: \"383\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Lo-Rib Cover Sheet Only (Metal)\",\r\n ProductIndex: \"LRCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"500\",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.311\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"3.9732\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_384\",\r\n id: \"384\",\r\n ProductCode: \"CNFCLATS\",\r\n ProductDescription: \"2400 X 1200 6.00mm Fibre Cement Lattice Square\",\r\n ProductIndex: \"LS2412\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"992000\",\r\n SellingUOM: \"EA\",\r\n Cost: \"29.44\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_INFILLS_$$\",\r\n MarkupCarport: \"$$_INFILLS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"72.70\",\r\n AncillaryParts: \"20xTSW1022\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_385\",\r\n id: \"385\",\r\n ProductCode: \"SG55**\",\r\n ProductDescription: \"Sheerline Gutter ** (WA only)\",\r\n ProductIndex: \"LYSAGHT\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"219\",\r\n SubGroup: \"552101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.25\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.592\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.25\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_386\",\r\n id: \"386\",\r\n ProductCode: \"SGME**\",\r\n ProductDescription: \"Sheerline Gutter Ext Mitre ** (WA only)\",\r\n ProductIndex: \"LYSAGHTEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"40101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_387\",\r\n id: \"387\",\r\n ProductCode: \"SGMEZL\",\r\n ProductDescription: \"Sheerline Gutter Ext Mitre Zincalume (WA only)\",\r\n ProductIndex: \"LYSAGHTEMZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"40101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_388\",\r\n id: \"388\",\r\n ProductCode: \"SGGPCZL\",\r\n ProductDescription: \"Sheerline General Purpose Clip\",\r\n ProductIndex: \"LYSAGHTGPC\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"40301\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.7102\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.06\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.85\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_389\",\r\n id: \"389\",\r\n ProductCode: \"SGMI**\",\r\n ProductDescription: \"Sheerline Gutter Int Mitre ** (WA only)\",\r\n ProductIndex: \"LYSAGHTIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"40101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_390\",\r\n id: \"390\",\r\n ProductCode: \"SGMIZL\",\r\n ProductDescription: \"Sheerline Gutter Int Mitre Zincalume (WA only)\",\r\n ProductIndex: \"LYSAGHTIMZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"40101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_391\",\r\n id: \"391\",\r\n ProductCode: \"SGSEL**\",\r\n ProductDescription: \"Sheerline Gutter Stop End Left ** (WA only)\",\r\n ProductIndex: \"LYSAGHTSEL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"40201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_392\",\r\n id: \"392\",\r\n ProductCode: \"SGSELZL\",\r\n ProductDescription: \"Sheerline Gutter Stop End Left Zincalume (WA only)\",\r\n ProductIndex: \"LYSAGHTSELZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"40201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_393\",\r\n id: \"393\",\r\n ProductCode: \"SGSER**\",\r\n ProductDescription: \"Sheerline Gutter Stop End Right ** (WA only)\",\r\n ProductIndex: \"LYSAGHTSER\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"40201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_394\",\r\n id: \"394\",\r\n ProductCode: \"SGSERZL\",\r\n ProductDescription: \"Sheerline Gutter Stop End Right Zincalume (WA only)\",\r\n ProductIndex: \"LYSAGHTSERZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"40201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.2684\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3733\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.4996\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_395\",\r\n id: \"395\",\r\n ProductCode: \"SG55ZL\",\r\n ProductDescription: \"Sheerline Gutter Zincalume (WA only)\",\r\n ProductIndex: \"LYSAGHTZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"218\",\r\n SubGroup: \"502101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.82\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.592\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.82\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_396\",\r\n id: \"396\",\r\n ProductCode: \"BN1030ZP\",\r\n ProductDescription: \"Cen Bolt Nut Washer (Zinc) 10X30\",\r\n ProductIndex: \"M10X30\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"824108\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.103\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.99\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_397\",\r\n id: \"397\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Mini Flute Cover Sheet Only (Metal)\",\r\n ProductIndex: \"MICOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"400 520 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.311\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"3.9732\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_398\",\r\n id: \"398\",\r\n ProductCode: \"OG125**\",\r\n ProductDescription: \"125 O.G. Gutter **\",\r\n ProductIndex: \"OG\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"217\",\r\n SubGroup: \"125101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.8592\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.344\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.21\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"OG125INTS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_399\",\r\n id: \"399\",\r\n ProductCode: \"OG42**\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter **\",\r\n ProductIndex: \"OG115\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"217\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.1564\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9803\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.60\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_400\",\r\n id: \"400\",\r\n ProductCode: \"OGCE**90\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter Ext Cnr **\",\r\n ProductIndex: \"OG115EC\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"20151\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.8\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.25\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_401\",\r\n id: \"401\",\r\n ProductCode: \"OGCE**45\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter Ext Cnr 135 Deg **\",\r\n ProductIndex: \"OG115EC135\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"20151\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.6\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.95\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_402\",\r\n id: \"402\",\r\n ProductCode: \"OGCEZL45\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter Ext Cnr 135 Deg Zincalume\",\r\n ProductIndex: \"OG115EC135G\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"20152\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.65\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_403\",\r\n id: \"403\",\r\n ProductCode: \"OGCI**90\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter Int Cnr **\",\r\n ProductIndex: \"OG115IC\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"20151\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.8\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.25\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_404\",\r\n id: \"404\",\r\n ProductCode: \"OGSEL**\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter LH Stop End **\",\r\n ProductIndex: \"OG115LS\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"20201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.53\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0746\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.53\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_405\",\r\n id: \"405\",\r\n ProductCode: \"OGSELZL\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter LH Stop End Zincalume\",\r\n ProductIndex: \"OG115LSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"20201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.44\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0746\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.53\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_406\",\r\n id: \"406\",\r\n ProductCode: \"OGSER**\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter RH Stop End **\",\r\n ProductIndex: \"OG115RS\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"20201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.53\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0746\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.53\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_407\",\r\n id: \"407\",\r\n ProductCode: \"OGSERZL\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter RH Stop End Zincalume\",\r\n ProductIndex: \"OG115RSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"20201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.44\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0746\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.53\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_408\",\r\n id: \"408\",\r\n ProductCode: \"OGS42**\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter Slotted **\",\r\n ProductIndex: \"OG115S\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"217\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.1564\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9803\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.60\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_409\",\r\n id: \"409\",\r\n ProductCode: \"OGS42ZL\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter Slotted Zincalume\",\r\n ProductIndex: \"OG115SZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"216\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.3121\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9606\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.15\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_410\",\r\n id: \"410\",\r\n ProductCode: \"OG42ZL\",\r\n ProductDescription: \"115 Hi-Ten O.G. Gutter Zincalume\",\r\n ProductIndex: \"OG115Z\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"216\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.3121\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9606\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.15\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"D115OS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_411\",\r\n id: \"411\",\r\n ProductCode: \"DG125ISGA\",\r\n ProductDescription: \"125 D/OG/H-Line UB Internal Gutter Strap Galv\",\r\n ProductIndex: \"OG125INTS\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"112571\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.226\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.05\",\r\n PromptTextCodes: 'Desc=\"Gutter Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"1.66\",\r\n AncillaryParts: \"1xSCTF\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_412\",\r\n id: \"412\",\r\n ProductCode: \"OG125EFEC**\",\r\n ProductDescription: \"125 O.G. Gutter Easyfix External Mitre **\",\r\n ProductIndex: \"OGEFEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"24107\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.67\",\r\n MfgLocations: \"300 500 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.09\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.69\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_413\",\r\n id: \"413\",\r\n ProductCode: \"OG125EFIC**\",\r\n ProductDescription: \"125 O.G. Gutter Easyfix Internal Mitre **\",\r\n ProductIndex: \"OGEFIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"24107\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.51\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.09\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.69\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_414\",\r\n id: \"414\",\r\n ProductCode: \"OG125EC**\",\r\n ProductDescription: \"125 O.G. Gutter External Mitre **\",\r\n ProductIndex: \"OGEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"24405\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.565\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8816\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.7444\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_415\",\r\n id: \"415\",\r\n ProductCode: \"OG125ECZL\",\r\n ProductDescription: \"125 O.G. Gutter External Mitre Zincalume\",\r\n ProductIndex: \"OGEMZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"24505\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.3788\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.864\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.8968\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_416\",\r\n id: \"416\",\r\n ProductCode: \"OG125IC**\",\r\n ProductDescription: \"125 O.G. Gutter Internal Mitre **\",\r\n ProductIndex: \"OGIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"24505\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.565\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.8816\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"5.7444\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_417\",\r\n id: \"417\",\r\n ProductCode: \"OG125ICZL\",\r\n ProductDescription: \"125 O.G. Gutter Internal Mitre Zincalume\",\r\n ProductIndex: \"OGIMZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"24505\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.3788\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.864\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.8968\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_418\",\r\n id: \"418\",\r\n ProductCode: \"OG125SEL**\",\r\n ProductDescription: \"125 O.G. Gutter LH Stop End **\",\r\n ProductIndex: \"OGLSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"24205\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.71\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0895\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.71\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_419\",\r\n id: \"419\",\r\n ProductCode: \"OG125SER**\",\r\n ProductDescription: \"125 O.G. Gutter RH Stop End **\",\r\n ProductIndex: \"OGRSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"24205\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.71\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0895\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.71\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_420\",\r\n id: \"420\",\r\n ProductCode: \"OG125ZL\",\r\n ProductDescription: \"125 O.G. Gutter Zincalume\",\r\n ProductIndex: \"OGZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"216\",\r\n SubGroup: \"125101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.0404\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.321\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.04\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"OG125INTS\",\\n \"Use\" : \"Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\" : \"!=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"TLGCL\",\\n \"Use\" : \"Solarspan Gutter Clip\",\\n \"Qty\" : \"=(Length/1000)\",\\n \"Conditions\":{\\n \"Area.RoofSheet\":\"=*SOLARSPAN*\"\\n }},\\n {\"Code\":\"RI43100\",\\n \"Qty\" : \"=Qty*12\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_421\",\r\n id: \"421\",\r\n ProductCode: \"DPP10050ZLF\",\r\n ProductDescription: \"100X50 Pop Square Zincalume\",\r\n ProductIndex: \"PC105Z\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"291051\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.95\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.21\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.41\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABbBAMAAADn80TQAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo1NToyMCArMDkzMNW74fUAAAAHdElNRQfiBBIDGhQwebkCAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAACdQTFRF////9/f35+fn1tbWzs7Ovb29e3t7Y2Njra2tc3Nza2trlJSUUlJSdf5NTQAAAAF0Uk5TAEDm2GYAAASTSURBVHjapdbNTxtHFADwHWPTqOWw4w8JiRzAbdxU9GCyJQk3o5qUqpcYcMnHiVgVpOHWpGDsAzSITuScSlszGx8rFVc+xJQCLb3y7T+q88brnf2YsTfqHsBi5ud5b/a9GTRNPONp+JnY1Lo8A47PifR4RtMiOZzXA4FITkc3Mn05rHUTAvRtYB3h0QJGWjdhAzSLdQ3hw1ZTR+x3frgXmMPsB54/Kpab8AlNDXcHU5hNQxNLZK1e3mNrYW0q3Q3cHNOQrg+tErJGafkJj+5uWg0SkyxJnCgRDmijADnj8bQKhHMsIBz7lc0nl5Sa9UYB8tBuZOQg9AMLQcffEgtQ+kfjOYY1JYIBxDcI/XgkAIvqBY8qkZOAaRYPQneW+HxyYXJgNl7AtvnFgHb3FiSQ2iEWYJNB1BvnfK+8YkB7k2RgcNWaT4q081SvICo9MeMBkdIIjpeIHzABUenxGU8O4TfJp0QGmBgBEp71bGt4ZUkOmBiG3Y3NusE0nl+SA2qejrEdwbFNJ7g5hvGXHVFxA2peQH3g6KYj6RmMdXxvVw6oeTkJrzU6Z4P+AoZyvr0jB9Q8m4RKCFlNyEJKbfM3lFqVAyZyiH2j1baQdOpnXjepXTmgtLXBJiDEBS/v689hu9FoSQFoeYMXFggO+lmlwX4PlRSAskaHCazROfiAskpjJasNlip1Khd7/JCYTluA1s55UwwWFaAjvuoAWrvS2UGmJ8pKUdB1Pf4LB9cclRZXikYBRZ/pAlhCC9eU4reDdDvpiFWbpyBwTCXM031rWyP1jhiDlx5blu/t2VhszjqXOl9ZvWzXzbJsjTK7DkJzHPTZ41BprG6i//rXaDThOogvcyCGWaXBK8Q+UfsJDiN88CmAkGPUbPFzBb92i+oJ1B9+mOEhIeeg2dqAqPDrC+f8K6glNLGu+QGr5iZvkHkhzIsR3gALmhSAgPH5y84fVjIQz+CJfT94Myzv6bDGPUvwdtDi3+/ZwLft1iU0wUXjCbRaaJEsqAEtb/O2vc1E9TvebodH5K0NZO91G+oKpc6q5+zmRugLdnIJ8FQm+CWERk/5Tc9PCAH+ltUab3T8CWwZGuLHew9AGyfsJj7bXW6271dC1nsAdjQkzuguWd6nxANeyQGtteqUHYiH7fuS3O+1An/sy4xUMj1X8IBhGzzsAnZtsKUHAjsC2P9raI+6AHGbVQS4E2gFB/g4UA7/B1wPFBIR4L1ASb8z2A8ETAH+FOD9QKApQH8gsCDAtd+DgLcChB8rhXkkBfkH1XcCkbxSVFUg/2CxF1h3hsRFvTu4L0A8CyJ/WA8OlEIAfgYIkJ2Si6r7DLDAR1lbFNVA94C2+KeoAluaF7QTeeUWNXfDWeCzrFL0AFxsFaUhEQcwskphg8qeAMgw3Gt8veYDlW9uuYBSdMAzwwM84vGaGxx/7gMK0QYHs4YfeMWKAFsvDRlwCHjp7bYFUNk33CBkGLI1eBOabP5f7VEJMAyfYGDJ8IEPDUMaFRMmOTb8IKkUi+bxrDXizCGpFPnFl4YUOIThEnP2/KQA0aRa2CCZbHfcf/eG247rYeDlAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_422\",\r\n id: \"422\",\r\n ProductCode: \"PCLTTW1010**\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm **\",\r\n ProductIndex: \"PCLTCTW101050\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791105\",\r\n SellingUOM: \"LM\",\r\n Cost: \"37.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"3.57\",\r\n PromptTextCodes: \"SL=2000|2500|3000|3500|4000|4500|5000|5500|6000|7000\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"57.2\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_423\",\r\n id: \"423\",\r\n ProductCode: \"PCLTTW1010**20\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 2LM **\",\r\n ProductIndex: \"PCLTCTW101020\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791120\",\r\n SellingUOM: \"EA\",\r\n Cost: \"75\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"3.57\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"57.2\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_424\",\r\n id: \"424\",\r\n ProductCode: \"PCLTTW1010**25\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 2.5LM **\",\r\n ProductIndex: \"PCLTCTW101025\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791125\",\r\n SellingUOM: \"EA\",\r\n Cost: \"93.75\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"4.4625\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"71.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_425\",\r\n id: \"425\",\r\n ProductCode: \"PCLTTW1010**30\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 3LM **\",\r\n ProductIndex: \"PCLTCTW101030\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791130\",\r\n SellingUOM: \"EA\",\r\n Cost: \"112.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"5.355\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"85.8\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_426\",\r\n id: \"426\",\r\n ProductCode: \"PCLTTW1010**35\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 3.5LM **\",\r\n ProductIndex: \"PCLTCTW101035\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791135\",\r\n SellingUOM: \"EA\",\r\n Cost: \"131.25\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"6.2475\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"100.1\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASYAAACMBAMAAAAjGhnVAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAxNyBBcHIgMjAxOCAxNzozOTo0OCArMDkzMO4aBdQAAAAHdElNRQfiBBEIDAgmABCVAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f35+fn1tbW3t7e7+/vxsbGzs7Ora2ttbW1nJycvb29lJSUjIyMpaWla2tryGxy8QAAAAF0Uk5TAEDm2GYAACLKSURBVHjazXtvjNzmnR7H7QIt8mW4ES8tAhy877zUxDBQnEmK1GYBIyLfGUYQcNihhnEP/pKIE1LruXNxQ5r03gAB6qTyHyVGEye7dhbxh8s1jX1yrr7VzUiZVB/6B/C5iQ5IcrnWiRNcrvBZsZ2vRYv00uf3vuTsymli2bHsvLAFSTM7fOb35/k9z4+UZudPlNPUj5k8QZp7SbjI1Z8Yd4Kssk5WvRgn4mXBOrl5elEwZjImbF/gVeaO1Ktz3+S2H3kzi5k+47YQZYJ3hvsm3u0mAp+Oz+VbSWAHdmWLjZ2q6DjhwvGqrZeTwOJewSI+nZuabV+el7PEjBSIEpiCcXaAqcwLe27JqzIvx6V8Pt1XLwa4auawMDHpZV45wGTFPC3U1xPczWyfidSKTBamFn7CtnDRmW07QZU73iLLhfDGSVCNH9qxHWHnPovChaUF3saD2WLOFCaGj6mcjZmoQeGqeXVsZsfydEo/sh2zvyNfjgLHD3FVXkrIwAYgjhmVGT7aZ/Rq6jmM4sjYcFz4iNmZyA/3cmDyKieYziqH2+4Mgbp0LbcFvj9CvZ1owuvvZAt8jClBhGleFv2Zs8TkZa7YqGQkYiQvDmyzq5IXIWZBWlmRSl7cyWTy4jB1gMmUEa0QqO4caCIXETU7gM3Hc9sWSJ7jzioEKljkdjX+6a4tuFfhnf2ZJmxvK50ChNkkz0XykiZ5Ikg9+2jmy6tGXiJLZjuRBYX0CMTVrJPH3MJE7FiTPNvh7ty22HA6iQBH/m2FL9uvA2Xb4wyBEuXc9sonz+dIHl42+VgTQXV85u6NzBqFl4WZM6WvpgoKscnF3JEXjRAK1K55aq7CiirvU/IqJC+KzW5C+aSQyJ/Gq8Gcktenao2mCX4oRJWfXiQqUGI6K4sAVZ6jyh9KUFEeksdKTYgceb08ryEheXZZuIeTl+STqYxEZPKqoJLpjvGdcRkeIHm5QwHCy3jVojCa3VT+NCWvBGQT3wRvppSaHWQHVe7Yto28eeOSkjfNEKjHZZWjjVkATE61N5/uqMBErFOO3DPdvUL+AW/AVUPntkxhYviePKd+pldjSt40yc1+xmRfuhMz8hzz9FhySWRb/Ojcs1hUIlDICX0m+t0/ulcAk4fAbKMcO46s8rMPU/LwssmBqe88XpY7kzp53Mvs1Bon/kHn2Tnf/TiTFSUq6rx4A/3NIlSPoKaQnQfQUVD5Mbcpefi6CIrDO+PERuwlt/T3eS8KUPRsOld0ILwdqnKxNfKq8vE5JY8CBUyBvTUvx7kZNwVll1Y5O8DkoU3HdqQ6D18bnRcu6uQJSp6P5CnalJh8M1TJY7bvu/PAjzpjfAUmU8ptYodZTQdeitSr5FWX94gOqAmAya9OnSunpRlHNZWjoPqLYokpzLzilLumesvLZZMvZGPGTCBG4MqQcosPQOJQ5WZnnNNXMkPL787Ak2xjRJ89pR+yEbdgK7Pl9UFOVSECb1yE1fSh/YAC5VPufC/cS6djtLtqJqLyziE24KlddLM/VJhC9JRnxeWMshNHwkFc8x5PqfOAJ5eBWibP5mJ7hBIJqY/N/pzmiyernDB5OXouzUVAgarKyzsKqIxTmJ/N0p2JxISuBT9VII1l8nw3t9lc8SLDBInCQtImSCfiDqOJGLmJDBSxArITd2aqR0Lub8yRTJZO0CAdVeXIjuRyGSji8kC4MwRq/HiCnqlyH5hEJzk+y3YSJjFRRdqlE8pAKEz93PPdUmGimdfJ/eFWonId+DyrCiSPwixTi9gBA5ERVTmKBRVkugl9sptwMFguwOWZrHLH6c8kHYyTMC8f35VV7hAmYbt7WQptEMne65SFVwTjpTYQQeY5YcnUHA4rf2iLyK1pk1PyKuo82QTgHxo5kfpKJneE2MjRah0awehRxz9U5XT9QFa5KJHMpspziSnI90oqKGCKflEbBAxs0NmfKEwdZApzuLtwKM+4KvqJklcw4vJhSaSHv6PcgpSgQKp5YA3Z9MwQHzXFFzUJUxdDDlxeyqEHTGjkAANmXwJVmOz7s3RWrJn1HM6cDO89KKgw3+iNbdOQ6UJ6OqBNULssPyTPBQd1sh4hJlJFJHooMPmznYKJGfV3d94j1TFniBne4q/vBnKWOB4NvcDZ3gemS3seKl5hEvbGTonArNZsUDluEc4aNuB+UHlOP5FzmHqrh+wwGokm/kg9UtOmDGNO2fGj8GC+uPuBVScvoA+FigL2RR7Q0INAo0AhBBh64ycyqrIak32+3F5i6lR5/3o2KIvqtBJ2aH9kKnBiqWdietXvyJmXKFKVE0vEfDyS8yWk+RJQBcmPK6nWQwK2PQ9k8QhIO/wGMwpD79I5ymiD6YmqnE/War3iVWEmptkhNhhVUCDUWQgF2ozb4EWZPAKA6+VmN1NNgL6MBObLhvzxuOMwXC4ARUl9TfSG1AvONkhuyiofy4raoKG3dQ1DMFCYhL21n81GJ+qZh3eSNmjYAHM48SwoDmBCJO3cxNSIpvMe/lDPPDRj5aDGI5r85uH5Elj+xn5APAl1hf4puKKozlbmSIoUStrZ49zLy0fPAWiD6dTufFw1AjjAcBmFswOnwDN71E2VxKXOQ2vF1O5U5JS8En/lEW1G5rAEPQViOV/QeWFaoEn7GX0H8gqyR9g2FAuGXi7CMXG5mM4du7zySn6Aqb+XjVM/UnqFuzmSNz6UPC/PRVrUChhfE8mjmWfSuwXMQGWTSpLJC3OfRk6t7BAzLqYj4iXSEtTTiKMnMKFmkg6aKhferCCzMLcbTI592S137zMVJoZrQBvMD5xCmHj3lUrixqSBqLXG9fgRAaxC1RtmzgDJI1kecejFUOlCMxRsg8QBKwupraVXQAz9RUaBgi4PycAEYpx4eXblJdvWuE+908HgSXYTKmFTJe86NhA8C4qjlX+LISdt1SNepORFqt9FhrkcJgMlyzHbqNOmiWJ66JktyZNzE+yEBODvcmkGUE8OKApcnkGX93ccuzr7cratcSGvaZcLsAF9htIGhZcfdgoQdrbI7pMVE5GIQj+pkSpfFRUEi6RNkg6SNiGqMtFQ1DQRcr7gK3Rk7QMjx+cHgRPkdlCmEOcBKMXLvCs/fV7zuUwO3Mv0JCkMqey41AbTQ9ogTEJrwz4RmdJ72nSlYe09GdEmdPdQ+bxIam454wr5FREzb1dIipKdRxI2IGqdzgmTrHI4O2Fv74rw8qvPzxQmRmIzq3bPmMAUyfESlM4BG5B2CJ3by14sdXlQ1d5Tvk5Dt4NAxY2nQr0RkGHNcBiJnRnEALyD9ApzkpvSVCF5iAY6rUTy8MVm1dkLX3sUukBi8qkXkwVp+YhKqpNCrneXYpMHvLILf0dROXUeeU+YIhLAtBogG94kD51nyiaoresQMduYC0lR9FkkljlcEygqof5CoKQGzsX0iavni+0d6jvCBPe4k91fKkzx67UBaNMtPD+1YxmoWgFT5xEm0BGS5/lETcv5gqHWkX4ctC7YUYQEgcno3R6FjxJMXB7QmkCQYhF865mfv4QWfxh9h2/AfB7Yi3RjDP8RyZqC0yFtIA4lrx/cXikKonKI4D0pEPR+8nkVZh6qW+06KHn20nzKkZhQhZWyyjNiKyk3x4lQXF7OsvKnT1971OK52NJYjcl2xlkyG0nBIQeTQ06htp6m7/A0GHX2VRWD9DCHA7M7G0lMLOACAtnsVgqT7DyPxXXyoGcggQnEBiVvSMmDV8Av23OMWlCU6Fx+/MJX5+ZxRDM4pTnUygLRstdn1Q60gbJUSF5/1EnhxdUMxKB1PFYnJ5KjnRYHqvPkzJMblol8lZfIqfQvxCY+XvY7iwkFb07fARTFMRepyhcW+BpKqvvFF396zByu+0CDGew3mNydChhixeVqvBzSBgxU7riJ2SSPMDFXsQVmHiNCrldRjLZbDOJgWNbJg/BLaRdF4oKsNokVz4EwG89zYCrTC1fP5/ex6KRPtFRjQgYDZ1FtNHqFdLcoJ6cOCTtwdRHM64KCu5RGTnVmRD4PBUWdJxksoHkLY1fPF7QI88ZSRe2TvHYbimKwRwF3Lz3zcOKOLDNah30IHK2oMeH343l/NlILuxhfxnHPdBcHVM4qePRUJQ89MJESdyx3HyaTPg/JRPJM1XkyeTyViwXSWDAdKNwuFHXEpI6RFBVcHons3hdfseKj+0HvSMkEYqp9Xs5g/B4CeDcfZ6zGRMlL/MPaoF/YcF81plAmL3bl7qP2eZ5KnknzBfEjGVwnlzmoNXgFztUglkQFU+X702z86g8nfSAdo29KaBjOtMdqTEx4/d2kTIVaDKChM1EeKw9ReTfx7DCTVC6XNlHtT+rW4hXsIgkWel2KA2BU84XRTA53SIdDGTL61fdJh8X++qNXn4JPJW0zD3p9TiSgpUWDCbYdmFRykEFyCpPD2kAgecioSQVDVA7ahHlUCxhgQgXaFuJgqnojWU6dqF4n7ZAmTmP0gqoQVOXCfe1H3zchTSpcMPUsD3xoxtrJMzUmLortzENB1Zg6VRHmncZ6mlz0kDxQhNlwEFE521CLqxj11oXpoDgoT1UocdCfN5h4H8mDghmB3nwJNUwvXfjLb/xn/C7uWnANRXhRXlzbSbjPfSU23Z1yWtFqwpRUngcVWO3Ao3dIf2VK2EUwT6jiKFxMmNwckM/LvVptRnA38HOkadJc7dYs3p3lCiTtfTAhOtNXr47Yhz+JiMTvRUrtmf0V/PAg1vYyscTkLap0LjckisrtytpYbhEhsjCHg7S2VFQtmMNDNRPJ58FaULKc+mVliHlDUQ6pKKlgJvhsMF1w9pvXJmvG3X8IJrMjz49WF+UPTR1HOy/7UvIm3Eue7RTm8p6CA20ws5s5LAAjF2r9hTIGbXLPN6RfjiRZEG2ayCntWyMaJQJXctMlRbkzkpsbOQwExu9nrp7h9iD+rQ9pesycKabM+DP/2ySpqj0EtejXmJz1LJ8lDSbUa5ixw2wQ5rBUysfFjNaIIRSv2rfKDUuV5z1KHmEKgIeFpEbzZeellLyjO5hXnbPf+lM/5r4fv/8ERaZ9i7+5NvzSd+RHa4/PoEsVJu70Z97BvRdaRJW99aXY5CiosOhkVhypRaEjO0tu35TP8yrPkoKFvpZHtEk+kLa+cj8Goxf6bDgeRcG9zy1G8UAPrc33rOnydHqa/oEvyN9qZ3cgHSQmiPIA4yV1IvNgbzDpH3YKJXiuLGJWrxF95T0b2vSDEoOOaDOCWlWdB/XZrPA5CUtU2dGd8NGnjtEmIx76g3+6qeG02kM/Xvut39HkmT5BCZd8QOMlc9Naf2CyVsXhLaJMnu24eW2poIBV59Uzr04ez9Q2Q3oTu54v9NMOzRfwVHnp6XNmFJ+a6KAQ858NVJyMzqb2/hpT+Ti+h5p5olOUuzk+osEETZSyrWXycFE4hX7ly+RJP0y0uRip+yKwMh48PHyeKZWhTJ4j5yy9gRfCX9/3fPfJH31vbWDEnYKZ+tD8JwqSrp3utd//oZbe1nStvDK7aFPXCJIXt8+SjVLUGoqETmn1l+MFxF85Od8v1pr7K0prz7iakPJ+Hko5QxTi2pvQPaAZ3Do+nQzBnvfkM3+6/sfEQnFltXVDfGBTIsL/k/Zvb7a1lq5p1da5VDSYgnCRl7Bx9S5DLaKWToF25ZCHG97QqI0cKWAMskkzfeDzyMOoxYJAoGhRKLMPjKdzFl668MLF3vue1ekD+mdaus5+t9dgWjX/ZZviFGtBeX5KjUfKABpqq0pmZ3o1JoyXfsIPnAJtGcPi6Mgy6h2wRTd6+OyirwSLtAqY7kWjZzjJcjItXJCVcS+9+Fx2Qv/IX8T4gOj0aKC3On8ATKqKjpi/vaa1tY6pcXurtOrGE6LYSPNx2uxXOLxLZZWHkseroKhXm8oLkPdcTxUb0P08+DzMPCbZgOIok0eRRi7KR745mzNIpY8NYvBkHJ5YMfjv31pD0m4Z/ovN9op3YqAxe31UKCJHrGxvz5uO/YgdJG9yOHm+C+dzyl4qYCTPYrcvagVs0/08z5cUJi2vpW7owZqbMd/+1nP36W7hxx+5Y0DrNf30RI/1D7cJD+Fqvff44Ei+uaJpTPQJE6lXyOAw2Ku8nTNms4hyCziF69nAu+9UfqxRwDSHe3xnpCy98nkWU8mj+1QQMZKXELwnX9j1B2YX3Xf3MVOP/HYr8j6kax9oESSUkba5ck9uSYQmD4g0akyBPcZ4udiLZYGQXaXeO6ByAW0wESp5JquTx9K5L/eI0K0w6TYljXZ2dedBAYxH3deeA5X19CMQWXefGBjRoN0adHqt1p0UISqpln7k0jFNFpfJfDd0CBP+E77t7oLK5Y4QnhjTQhzeG9Cu3PH4NKg1Ft3O80R0irpd7TbxLWzMPAfJI/1MHY3kbV958e/NeLAaRIYnrN+7A1xAQCJhaHdquuw2pO7iZktVFqLed85wX1K58INwVrrz+2jf3hTU6GBvANoMc2iDBIHEoMUcdogWEYfae4I2q0qqTbpTIj0V9MOpV3/0ScmzQTQ4XYmTbMAG1P6t7lp72pKJ043QGrTqcqflDC7DGkxIXpnmUd16MAVewqdLNuBw0uGkm8l7iCZTClg9cRAplRSUkjZ7MfqdBwkEaPfShef/6uJANwYGO2awvv/hSUDcCCTDnrYwdCrxYdUbaM0xBjHPXKfWK2Co9SSblnWY6K6nk/kH9xTABm5Y1KrblN6TVvDL7NqY01Xly3tnxA5eztwLz++an4H4QDajSWR2Rx/+nBYrUjLszcdaxJedfFM7OC2gL92cLzVUf56TXqlbT+0NZgdswPqFZ52SIsuM5XoECQsWozq38paQheIn8YDGtM8+/dB8TV9vpIYVBfMv/Y1JV6ZYva/3AOK16vmy31oNJvB7H8lTmDq+Zy/scl40GorW0kmQLtkAIioJJ6HSRPJ2Hvk4Pq7vu2MmB1lVwC9g5pEEe+2HZxg4/PbNVpv64nQR+ds/+tea1HG49nvtH+srgTNQc255gKmb5KLZG4QYL9U8iZtnIMAGiZhmh6nc8ZxUKmQUOkSUTJ5a2Ul/In0eksfizvjV5+5YjTyrfRL1S2dFrBl3PQOrxKREGbDb/4thm9r1iOiPEEq0UFBF3incmZeS71eqyKswXtxDyfPDIrTKhKkVsRJRbGniQZseiQMXnizY+sluYMX60Bl8ZFOGRW8PT7TiT2D8QzAZgKV95DGuqzxej8lgrlcoTL7geXjO266sBpMcL91GI6k5DGFHz8ko0W7J4DQqK3D8Lky62Z374SNPTQbvLWJzaA1uH9B19fbgSE9vf7DdbgEE/tdWgt71EWo6j5K3LwuK+Dxw9tx890y0unz6CNVz8LyB2pV3RyNTSeQwV4tnWvDTrooWlNR5O9Or+6Y+WPV6KKy1uzeBAclqaZ1b27/b1tWMa0XOQPv/HvBpJ0udZgwH9jSrZqMTNUNxsp7XaQPalQcbtql4leYHbZ7q57jI9rmz3Oo/+n9zUwdHhRaGG7vtVroOGFsbrml3btLMbWkGY7r2SzHx8bTo1JiEfeqxattlDSY7s8vrhB3tyicnUUcmzY9A2heG5NGEhDgRDi/Th5+5+l2qYmNwOl/TDH7bmi75mgpFu59C1NZQj9ovO3gf356OxBLT0V1vfZtHjTaobC/vHH5YRLLBfMJk5xEtYuaxaR1J2KfOlad/mKx+G60PTMN8raUP7+zFhoSEAOhTCtMKsza1X4lpfbZvNZhgSL38k2cOhF1uV/zgYRG5K8+tmXyYJFLJ86AFFG3CDZdf/ObLYWz87UBXtxUgJIffmAx0TaXPMEuqJO5rv+oA06md+WSJqdiuit2kwfT65w3krvyUv1HV3rT2nrXKMvnW8y/P8m4c/xgTLh5EA9Rxa/j1E0q60a9srhmRMNvtX4lJj8I9tYdSN87cWTWdssNiszh4FlHtyp2jFe3SSU3KJ/8c2Bd6is+7dOHhieFyFj8Qyzi1DYFaX99sZJKmrb5kdPxN7VcfsGZweWorp4ArBt4O9MqkwSRed0+BduXOCJaKKTqQnWez/mIUCfeR5ybcN8JJYDygA1M00HRuxe2Tmy3Vd9BKqy+npvZGpxUbYr26KBqnENhbrpslDSbSBqm1MbeYv1TluedseGwo3xKkFg8KJhYl8nbOH0RIajbsXUSFR0BhGGKtdfxWrS11EgLg5W8UJMmaMe+n6SFMYCjEJT7AVE76s+vZAFR+TPnAIc08t+Db40/8IOvpMWolcoX/eSRO+e7oVu3kQCeiBAOsumxwA5A0fRAFi/W8Lida3+8m2/TsV1NQuXQKB2wgksAJ5hOFiZ7M80Orc/8zL3wUscF86xndgj9AxUTKrb1qto+DpACl1eoXm+0bgQQNFYnL20mDidv2TjJNi0ZDdcoqzNj2IacA+Wn7aaUoLApSR4Tp+Jmf/zgaxGwQY+aezsWDEFA6jda2wQf3A5PWMuK8R4j0G8JkiO10TpKufgRiXFWzZpchH7ErrVOHtoh+Pwktt/amERqTu59+cf6vvr9mkus2grU48B+3lJjE/8O17UGM36yW8aAtM3gjBWUIMJTTkEFgb6f5wbOt3CsLdxQuDmwe7cqLYH6f/BPtcL744tXfMT748dMS46BzbK1bvDpRl8b8P9Lbhk9ZcYvNGwxSXeTeE7Nc6TrC5C6qNLUafRKUJOzGh5LH4R1ENlJ/0Tl74blR4PCTdxgGDBA9c+N7l160yCTJmbcaPHlrq5NQ3vQbqyaclWhoPzlOaq0JtRGAocYFqzUU9IpdWdN6vHCZvFE/2KgUpCs/uFYYXJh336E8bRx3BuyenxUwP3QzkFYoz+vuZFDH7QYxteLIvn/3MYlH4nK2advabDahDRzSBvmy86ww8ey7diiS/Z88d+zoxIjCtfd9VO5sWnqLx8bR77XqmGD0Gl9NzBsO0BJTLDbOzxy+HC/TedU8K6L0ikvPGywx+bSo5nkeD7d+cq4Xdwr4JvOuj7aloUW6fMN4kEJG5dwatDpF/GYhyYIKHxrXGkqOvJ2yPDR2MV5SPp37oikoCO7QTjP73qujHvg6R0j97seUI0K7QazN6k9ub65Mj715RPhJM/KujEdBg8m2F2W1e2YZF5e0gbvjNH8Bj55Uvf7ip189sdpig9WwQKQJE1U1AvSPN1sPy/3NQFs5ndH+5ob77SB5wHTvzv5SG8BRZXQntmk0+bR0ePnA5tmiCqsr3/r+wFijpVsnGRg8/KgcJQTsljVtT/oUbTWA0HxLpxXFwf0v1RoKp+tszMr1qVgmL82rJCBzwmuGYtvbz3/ttT83dNq5kZrUh/3Pqg0uxWp1M6XP1Vcri1Yo2ltJ3mocTK+NDzSU7c3KjbGzxFRV6L2DG0IiKJ+8+sqx2z63Ymwa9ESb6OmrJ/8kVpnT2+1b1naIjU5nt6rPf0uYTO49utWMYRhHdFmyO1qSJOmVor9kA7514WsPOr27Px7pa/EAehIzbvXD34lrgau1b4k/pWlRYLWlw71RTrr+rLBhdel81mCyAmd7no+nDZMjeQWE3da+T8+38ODeHzwoSja5+y8MDDhA2lyx16Lf+6zUs6ZOvmT4J61O/sba7VcWFGPe9Nr00Mhzd1J4kaUABhtkGNQFPbFbfvovLb7Wt6yjhAklDkYKesb7n6V0xbq8F3Dk7zP/Tbfa6zANe6F3bTs/wGTvpO7uKPKb5VjlpZY7szhG2dfmPYjHuwoefsEAJHOgtwanHf09z7br1aShaZ3zpv4Wc3ZQUL2O9/g4OShyYoPZfqPBuafYYNZzn7w2YQaSeiTn3ucQJECSc3bwns+SsZQbuFvCyY0I3DcqKLi0s+fm4iBQd86zcVonz+dBabuJfbkaX3ipFw3Qajz2fO+BKIKalAwwNN/zb/WWIfkprjDe3kqrvS553PTWvzI7KCjv5Hy+nU4ivymoBL138tM/eCBig8iAKTe7TvgpzH2iyXZLO8L++X9AvGjARYGuFkq/Zu60IQs2HlokjYaCXllU5Xh0kLzMHs/+7Of/hpl6ZOKXTu90HvydMI3athnitmcRMyASfvvXrO7mHIFMutJoKBGIYHK5TBbNeBHA5H39xef/7Lu0XKVbPLEfVcG/F2oPAN/WDk4+S2XN8zWK1a8bIk19T17de+6xwGqyN1nPsu119Twj3Sa79PQ3H+z+x89LKpf/1iXuVy+e2Wzrte3+R6c+tYm0OW9PiORpcVZtPZw6/rLzSADvnmER3WJg4SMXXoEXOH5fzOpduueEn/nZfW0531aFycI7/5PBncGvX9qHMfle+ej2wcgL7Seq5JMXmUUPfqxfOD9NeGndfYeU2BSnoR996f9MGKffw4LHKx/4cv8N9wBv8gz9IL80TpYaCnplXi1Sur8aXPraiJ+uRGXd/TG9OQZjx7/bbqmbSuiz1l27t76dQaKz6nB7fG52wFD5xs70+MLyo41HnprEg07lCOv2ZxtIsR71ht+lFaUmLRvd/nqbEYE16anfryyWDAXVtle6sxE/+/Qu7efpKWy7/6wsaQLVMm5tfVkpSxIo0Q2tAd7kQZEH7sOzg4Ly6Hnbxd6TVydRT+ebcT9Zs/tfGCxzF68ZL7WVNGrFb9qX3NgZQnffM9tf5i7Ij89nV157pSfpKDI7id/pP1BjIoEd63tttb+J39Z2O3RWfZ5f2ZvbPndqTO75R370D756oBZ9Fh4b5n+r1wPEaGmrtz7RIu2vx28Tb//iQSPZ2w+PAydQRi8oL114YfSyGatb99Gga7H+35hxbeJ0bWWw1aK83YxKqk8LkSivKQHMbd8eP/n0tdy+pDBFjG6c8JP/wyTJ1lLJizzEa3DTgkQn8sPq8mxOQiVn3hMXXv545tv3mvJJRBYPMDjEqe/IxaS616Xrtmbc+FbiLZ1VjLzt3V04TiGmjz43ipx+EvyRxBSZtFoOneC/So6k/ymDw7fgud/cMTizT52b2Y5fbT19nm7vdnP3np56YpNYkhfmH7f0ZqlMlv4mI5IMJbzLiySovvjCRSmaOin/IP3LOlJuJHHt+H8SZdeQ9JtaSTUm+pdHnxgn7qtPyX+uaXatDe+DZ+jmId32hirpRp9v1Rry9fcmb9YxWGRv7zz56icb//uxU6PjD3BO61KZsvf15iuafnCf4h3BxOzpt/473EstL50gO/53QjDS3FTXK2JWr7remSBpMnlB+Zl/+PNhs7zo+OWpp3xzII0A3jAQUyVN3qEg0Vllner+H+7b8hYVGq87KbdfsNYkUUtS4revaVrrncqbPIbPq+wVZtk2cVRgi2zjtZ/1NqWDU/92Zf2O1jvRbocONJR3ca/Va2q85/X/6meOrx5dJUWwcvRDN3eW/OIhUZ5fiWIlJON4jYXf+F91omTCjLD3ziLCOe176RX/lrg+Rux85NuaWnsTZN3/9dY3b+kccYLpvcfMuJknkRn9tb4i+RH8HTs3UZb80rMaCPfeiXp6NlZ3mb8jdzcto61H4h0uJXVWAse994wp/9ktSiraXDFfgqKkLddq8M6XkjytjlPe8zlTum8q83aLPaGt0DaQ7iu/LUuAN3+Gefj7X6Z/tk1md0C27Qos3MAQ70JxN2fVC//gOypxMYWpbdx5AsJKvBvF3RzDre75tl5DosGrn/yQEdwk93aDZ6Wfr/87aVSgduXzALeNxNu8mXizR++Up/5aMtOafJqzFVXWuxokOsPUpUdyzJjuKWHY2DfdBrzxMUrvu5EkTJC3EdyEZcmbP60w/x6PpYjDRB68W5x0PaZu9t84Crw9+GUP4L0LmE5nD/mm3jJWbfM3BBJYs/o6MBnMfzdp8nVnJfyjY3pk934Tirs5rbse7nWKzd+E2l4eYzV1zPZvFCRaAN+sTeBbPmod+C4C+H94OHFPavyPkQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_427\",\r\n id: \"427\",\r\n ProductCode: \"PCLTTW1010**40\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 4LM **\",\r\n ProductIndex: \"PCLTCTW101040\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791140\",\r\n SellingUOM: \"EA\",\r\n Cost: \"150\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"7.14\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"114.4\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_428\",\r\n id: \"428\",\r\n ProductCode: \"PCLTTW1010**45\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 4.5LM **\",\r\n ProductIndex: \"PCLTCTW101045\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791145\",\r\n SellingUOM: \"EA\",\r\n Cost: \"168.75\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"8.0325\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"128.7\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_429\",\r\n id: \"429\",\r\n ProductCode: \"PCLTTW1010**50\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 5LM **\",\r\n ProductIndex: \"PCLTCTW101050xxx\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791150\",\r\n SellingUOM: \"EA\",\r\n Cost: \"187.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"8.925\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"143\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_430\",\r\n id: \"430\",\r\n ProductCode: \"PCLTTW1010**55\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 5.5LM **\",\r\n ProductIndex: \"PCLTCTW101055\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791155\",\r\n SellingUOM: \"EA\",\r\n Cost: \"206.25\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"9.8175\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"157.3\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASYAAACMBAMAAAAjGhnVAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAxNyBBcHIgMjAxOCAxNzozOTo0OCArMDkzMO4aBdQAAAAHdElNRQfiBBEIDAgmABCVAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f35+fn1tbW3t7e7+/vxsbGzs7Ora2ttbW1nJycvb29lJSUjIyMpaWla2tryGxy8QAAAAF0Uk5TAEDm2GYAACLKSURBVHjazXtvjNzmnR7H7QIt8mW4ES8tAhy877zUxDBQnEmK1GYBIyLfGUYQcNihhnEP/pKIE1LruXNxQ5r03gAB6qTyHyVGEye7dhbxh8s1jX1yrr7VzUiZVB/6B/C5iQ5IcrnWiRNcrvBZsZ2vRYv00uf3vuTsymli2bHsvLAFSTM7fOb35/k9z4+UZudPlNPUj5k8QZp7SbjI1Z8Yd4Kssk5WvRgn4mXBOrl5elEwZjImbF/gVeaO1Ktz3+S2H3kzi5k+47YQZYJ3hvsm3u0mAp+Oz+VbSWAHdmWLjZ2q6DjhwvGqrZeTwOJewSI+nZuabV+el7PEjBSIEpiCcXaAqcwLe27JqzIvx6V8Pt1XLwa4auawMDHpZV45wGTFPC3U1xPczWyfidSKTBamFn7CtnDRmW07QZU73iLLhfDGSVCNH9qxHWHnPovChaUF3saD2WLOFCaGj6mcjZmoQeGqeXVsZsfydEo/sh2zvyNfjgLHD3FVXkrIwAYgjhmVGT7aZ/Rq6jmM4sjYcFz4iNmZyA/3cmDyKieYziqH2+4Mgbp0LbcFvj9CvZ1owuvvZAt8jClBhGleFv2Zs8TkZa7YqGQkYiQvDmyzq5IXIWZBWlmRSl7cyWTy4jB1gMmUEa0QqO4caCIXETU7gM3Hc9sWSJ7jzioEKljkdjX+6a4tuFfhnf2ZJmxvK50ChNkkz0XykiZ5Ikg9+2jmy6tGXiJLZjuRBYX0CMTVrJPH3MJE7FiTPNvh7ty22HA6iQBH/m2FL9uvA2Xb4wyBEuXc9sonz+dIHl42+VgTQXV85u6NzBqFl4WZM6WvpgoKscnF3JEXjRAK1K55aq7CiirvU/IqJC+KzW5C+aSQyJ/Gq8Gcktenao2mCX4oRJWfXiQqUGI6K4sAVZ6jyh9KUFEeksdKTYgceb08ryEheXZZuIeTl+STqYxEZPKqoJLpjvGdcRkeIHm5QwHCy3jVojCa3VT+NCWvBGQT3wRvppSaHWQHVe7Yto28eeOSkjfNEKjHZZWjjVkATE61N5/uqMBErFOO3DPdvUL+AW/AVUPntkxhYviePKd+pldjSt40yc1+xmRfuhMz8hzz9FhySWRb/Ojcs1hUIlDICX0m+t0/ulcAk4fAbKMcO46s8rMPU/LwssmBqe88XpY7kzp53Mvs1Bon/kHn2Tnf/TiTFSUq6rx4A/3NIlSPoKaQnQfQUVD5Mbcpefi6CIrDO+PERuwlt/T3eS8KUPRsOld0ILwdqnKxNfKq8vE5JY8CBUyBvTUvx7kZNwVll1Y5O8DkoU3HdqQ6D18bnRcu6uQJSp6P5CnalJh8M1TJY7bvu/PAjzpjfAUmU8ptYodZTQdeitSr5FWX94gOqAmAya9OnSunpRlHNZWjoPqLYokpzLzilLumesvLZZMvZGPGTCBG4MqQcosPQOJQ5WZnnNNXMkPL787Ak2xjRJ89pR+yEbdgK7Pl9UFOVSECb1yE1fSh/YAC5VPufC/cS6djtLtqJqLyziE24KlddLM/VJhC9JRnxeWMshNHwkFc8x5PqfOAJ5eBWibP5mJ7hBIJqY/N/pzmiyernDB5OXouzUVAgarKyzsKqIxTmJ/N0p2JxISuBT9VII1l8nw3t9lc8SLDBInCQtImSCfiDqOJGLmJDBSxArITd2aqR0Lub8yRTJZO0CAdVeXIjuRyGSji8kC4MwRq/HiCnqlyH5hEJzk+y3YSJjFRRdqlE8pAKEz93PPdUmGimdfJ/eFWonId+DyrCiSPwixTi9gBA5ERVTmKBRVkugl9sptwMFguwOWZrHLH6c8kHYyTMC8f35VV7hAmYbt7WQptEMne65SFVwTjpTYQQeY5YcnUHA4rf2iLyK1pk1PyKuo82QTgHxo5kfpKJneE2MjRah0awehRxz9U5XT9QFa5KJHMpspziSnI90oqKGCKflEbBAxs0NmfKEwdZApzuLtwKM+4KvqJklcw4vJhSaSHv6PcgpSgQKp5YA3Z9MwQHzXFFzUJUxdDDlxeyqEHTGjkAANmXwJVmOz7s3RWrJn1HM6cDO89KKgw3+iNbdOQ6UJ6OqBNULssPyTPBQd1sh4hJlJFJHooMPmznYKJGfV3d94j1TFniBne4q/vBnKWOB4NvcDZ3gemS3seKl5hEvbGTonArNZsUDluEc4aNuB+UHlOP5FzmHqrh+wwGokm/kg9UtOmDGNO2fGj8GC+uPuBVScvoA+FigL2RR7Q0INAo0AhBBh64ycyqrIak32+3F5i6lR5/3o2KIvqtBJ2aH9kKnBiqWdietXvyJmXKFKVE0vEfDyS8yWk+RJQBcmPK6nWQwK2PQ9k8QhIO/wGMwpD79I5ymiD6YmqnE/War3iVWEmptkhNhhVUCDUWQgF2ozb4EWZPAKA6+VmN1NNgL6MBObLhvzxuOMwXC4ARUl9TfSG1AvONkhuyiofy4raoKG3dQ1DMFCYhL21n81GJ+qZh3eSNmjYAHM48SwoDmBCJO3cxNSIpvMe/lDPPDRj5aDGI5r85uH5Elj+xn5APAl1hf4puKKozlbmSIoUStrZ49zLy0fPAWiD6dTufFw1AjjAcBmFswOnwDN71E2VxKXOQ2vF1O5U5JS8En/lEW1G5rAEPQViOV/QeWFaoEn7GX0H8gqyR9g2FAuGXi7CMXG5mM4du7zySn6Aqb+XjVM/UnqFuzmSNz6UPC/PRVrUChhfE8mjmWfSuwXMQGWTSpLJC3OfRk6t7BAzLqYj4iXSEtTTiKMnMKFmkg6aKhferCCzMLcbTI592S137zMVJoZrQBvMD5xCmHj3lUrixqSBqLXG9fgRAaxC1RtmzgDJI1kecejFUOlCMxRsg8QBKwupraVXQAz9RUaBgi4PycAEYpx4eXblJdvWuE+908HgSXYTKmFTJe86NhA8C4qjlX+LISdt1SNepORFqt9FhrkcJgMlyzHbqNOmiWJ66JktyZNzE+yEBODvcmkGUE8OKApcnkGX93ccuzr7cratcSGvaZcLsAF9htIGhZcfdgoQdrbI7pMVE5GIQj+pkSpfFRUEi6RNkg6SNiGqMtFQ1DQRcr7gK3Rk7QMjx+cHgRPkdlCmEOcBKMXLvCs/fV7zuUwO3Mv0JCkMqey41AbTQ9ogTEJrwz4RmdJ72nSlYe09GdEmdPdQ+bxIam454wr5FREzb1dIipKdRxI2IGqdzgmTrHI4O2Fv74rw8qvPzxQmRmIzq3bPmMAUyfESlM4BG5B2CJ3by14sdXlQ1d5Tvk5Dt4NAxY2nQr0RkGHNcBiJnRnEALyD9ApzkpvSVCF5iAY6rUTy8MVm1dkLX3sUukBi8qkXkwVp+YhKqpNCrneXYpMHvLILf0dROXUeeU+YIhLAtBogG94kD51nyiaoresQMduYC0lR9FkkljlcEygqof5CoKQGzsX0iavni+0d6jvCBPe4k91fKkzx67UBaNMtPD+1YxmoWgFT5xEm0BGS5/lETcv5gqHWkX4ctC7YUYQEgcno3R6FjxJMXB7QmkCQYhF865mfv4QWfxh9h2/AfB7Yi3RjDP8RyZqC0yFtIA4lrx/cXikKonKI4D0pEPR+8nkVZh6qW+06KHn20nzKkZhQhZWyyjNiKyk3x4lQXF7OsvKnT1971OK52NJYjcl2xlkyG0nBIQeTQ06htp6m7/A0GHX2VRWD9DCHA7M7G0lMLOACAtnsVgqT7DyPxXXyoGcggQnEBiVvSMmDV8Av23OMWlCU6Fx+/MJX5+ZxRDM4pTnUygLRstdn1Q60gbJUSF5/1EnhxdUMxKB1PFYnJ5KjnRYHqvPkzJMblol8lZfIqfQvxCY+XvY7iwkFb07fARTFMRepyhcW+BpKqvvFF396zByu+0CDGew3mNydChhixeVqvBzSBgxU7riJ2SSPMDFXsQVmHiNCrldRjLZbDOJgWNbJg/BLaRdF4oKsNokVz4EwG89zYCrTC1fP5/ex6KRPtFRjQgYDZ1FtNHqFdLcoJ6cOCTtwdRHM64KCu5RGTnVmRD4PBUWdJxksoHkLY1fPF7QI88ZSRe2TvHYbimKwRwF3Lz3zcOKOLDNah30IHK2oMeH343l/NlILuxhfxnHPdBcHVM4qePRUJQ89MJESdyx3HyaTPg/JRPJM1XkyeTyViwXSWDAdKNwuFHXEpI6RFBVcHons3hdfseKj+0HvSMkEYqp9Xs5g/B4CeDcfZ6zGRMlL/MPaoF/YcF81plAmL3bl7qP2eZ5KnknzBfEjGVwnlzmoNXgFztUglkQFU+X702z86g8nfSAdo29KaBjOtMdqTEx4/d2kTIVaDKChM1EeKw9ReTfx7DCTVC6XNlHtT+rW4hXsIgkWel2KA2BU84XRTA53SIdDGTL61fdJh8X++qNXn4JPJW0zD3p9TiSgpUWDCbYdmFRykEFyCpPD2kAgecioSQVDVA7ahHlUCxhgQgXaFuJgqnojWU6dqF4n7ZAmTmP0gqoQVOXCfe1H3zchTSpcMPUsD3xoxtrJMzUmLortzENB1Zg6VRHmncZ6mlz0kDxQhNlwEFE521CLqxj11oXpoDgoT1UocdCfN5h4H8mDghmB3nwJNUwvXfjLb/xn/C7uWnANRXhRXlzbSbjPfSU23Z1yWtFqwpRUngcVWO3Ao3dIf2VK2EUwT6jiKFxMmNwckM/LvVptRnA38HOkadJc7dYs3p3lCiTtfTAhOtNXr47Yhz+JiMTvRUrtmf0V/PAg1vYyscTkLap0LjckisrtytpYbhEhsjCHg7S2VFQtmMNDNRPJ58FaULKc+mVliHlDUQ6pKKlgJvhsMF1w9pvXJmvG3X8IJrMjz49WF+UPTR1HOy/7UvIm3Eue7RTm8p6CA20ws5s5LAAjF2r9hTIGbXLPN6RfjiRZEG2ayCntWyMaJQJXctMlRbkzkpsbOQwExu9nrp7h9iD+rQ9pesycKabM+DP/2ySpqj0EtejXmJz1LJ8lDSbUa5ixw2wQ5rBUysfFjNaIIRSv2rfKDUuV5z1KHmEKgIeFpEbzZeellLyjO5hXnbPf+lM/5r4fv/8ERaZ9i7+5NvzSd+RHa4/PoEsVJu70Z97BvRdaRJW99aXY5CiosOhkVhypRaEjO0tu35TP8yrPkoKFvpZHtEk+kLa+cj8Goxf6bDgeRcG9zy1G8UAPrc33rOnydHqa/oEvyN9qZ3cgHSQmiPIA4yV1IvNgbzDpH3YKJXiuLGJWrxF95T0b2vSDEoOOaDOCWlWdB/XZrPA5CUtU2dGd8NGnjtEmIx76g3+6qeG02kM/Xvut39HkmT5BCZd8QOMlc9Naf2CyVsXhLaJMnu24eW2poIBV59Uzr04ez9Q2Q3oTu54v9NMOzRfwVHnp6XNmFJ+a6KAQ858NVJyMzqb2/hpT+Ti+h5p5olOUuzk+osEETZSyrWXycFE4hX7ly+RJP0y0uRip+yKwMh48PHyeKZWhTJ4j5yy9gRfCX9/3fPfJH31vbWDEnYKZ+tD8JwqSrp3utd//oZbe1nStvDK7aFPXCJIXt8+SjVLUGoqETmn1l+MFxF85Od8v1pr7K0prz7iakPJ+Hko5QxTi2pvQPaAZ3Do+nQzBnvfkM3+6/sfEQnFltXVDfGBTIsL/k/Zvb7a1lq5p1da5VDSYgnCRl7Bx9S5DLaKWToF25ZCHG97QqI0cKWAMskkzfeDzyMOoxYJAoGhRKLMPjKdzFl668MLF3vue1ekD+mdaus5+t9dgWjX/ZZviFGtBeX5KjUfKABpqq0pmZ3o1JoyXfsIPnAJtGcPi6Mgy6h2wRTd6+OyirwSLtAqY7kWjZzjJcjItXJCVcS+9+Fx2Qv/IX8T4gOj0aKC3On8ATKqKjpi/vaa1tY6pcXurtOrGE6LYSPNx2uxXOLxLZZWHkseroKhXm8oLkPdcTxUb0P08+DzMPCbZgOIok0eRRi7KR745mzNIpY8NYvBkHJ5YMfjv31pD0m4Z/ovN9op3YqAxe31UKCJHrGxvz5uO/YgdJG9yOHm+C+dzyl4qYCTPYrcvagVs0/08z5cUJi2vpW7owZqbMd/+1nP36W7hxx+5Y0DrNf30RI/1D7cJD+Fqvff44Ei+uaJpTPQJE6lXyOAw2Ku8nTNms4hyCziF69nAu+9UfqxRwDSHe3xnpCy98nkWU8mj+1QQMZKXELwnX9j1B2YX3Xf3MVOP/HYr8j6kax9oESSUkba5ck9uSYQmD4g0akyBPcZ4udiLZYGQXaXeO6ByAW0wESp5JquTx9K5L/eI0K0w6TYljXZ2dedBAYxH3deeA5X19CMQWXefGBjRoN0adHqt1p0UISqpln7k0jFNFpfJfDd0CBP+E77t7oLK5Y4QnhjTQhzeG9Cu3PH4NKg1Ft3O80R0irpd7TbxLWzMPAfJI/1MHY3kbV958e/NeLAaRIYnrN+7A1xAQCJhaHdquuw2pO7iZktVFqLed85wX1K58INwVrrz+2jf3hTU6GBvANoMc2iDBIHEoMUcdogWEYfae4I2q0qqTbpTIj0V9MOpV3/0ScmzQTQ4XYmTbMAG1P6t7lp72pKJ043QGrTqcqflDC7DGkxIXpnmUd16MAVewqdLNuBw0uGkm8l7iCZTClg9cRAplRSUkjZ7MfqdBwkEaPfShef/6uJANwYGO2awvv/hSUDcCCTDnrYwdCrxYdUbaM0xBjHPXKfWK2Co9SSblnWY6K6nk/kH9xTABm5Y1KrblN6TVvDL7NqY01Xly3tnxA5eztwLz++an4H4QDajSWR2Rx/+nBYrUjLszcdaxJedfFM7OC2gL92cLzVUf56TXqlbT+0NZgdswPqFZ52SIsuM5XoECQsWozq38paQheIn8YDGtM8+/dB8TV9vpIYVBfMv/Y1JV6ZYva/3AOK16vmy31oNJvB7H8lTmDq+Zy/scl40GorW0kmQLtkAIioJJ6HSRPJ2Hvk4Pq7vu2MmB1lVwC9g5pEEe+2HZxg4/PbNVpv64nQR+ds/+tea1HG49nvtH+srgTNQc255gKmb5KLZG4QYL9U8iZtnIMAGiZhmh6nc8ZxUKmQUOkSUTJ5a2Ul/In0eksfizvjV5+5YjTyrfRL1S2dFrBl3PQOrxKREGbDb/4thm9r1iOiPEEq0UFBF3incmZeS71eqyKswXtxDyfPDIrTKhKkVsRJRbGniQZseiQMXnizY+sluYMX60Bl8ZFOGRW8PT7TiT2D8QzAZgKV95DGuqzxej8lgrlcoTL7geXjO266sBpMcL91GI6k5DGFHz8ko0W7J4DQqK3D8Lky62Z374SNPTQbvLWJzaA1uH9B19fbgSE9vf7DdbgEE/tdWgt71EWo6j5K3LwuK+Dxw9tx890y0unz6CNVz8LyB2pV3RyNTSeQwV4tnWvDTrooWlNR5O9Or+6Y+WPV6KKy1uzeBAclqaZ1b27/b1tWMa0XOQPv/HvBpJ0udZgwH9jSrZqMTNUNxsp7XaQPalQcbtql4leYHbZ7q57jI9rmz3Oo/+n9zUwdHhRaGG7vtVroOGFsbrml3btLMbWkGY7r2SzHx8bTo1JiEfeqxattlDSY7s8vrhB3tyicnUUcmzY9A2heG5NGEhDgRDi/Th5+5+l2qYmNwOl/TDH7bmi75mgpFu59C1NZQj9ovO3gf356OxBLT0V1vfZtHjTaobC/vHH5YRLLBfMJk5xEtYuaxaR1J2KfOlad/mKx+G60PTMN8raUP7+zFhoSEAOhTCtMKsza1X4lpfbZvNZhgSL38k2cOhF1uV/zgYRG5K8+tmXyYJFLJ86AFFG3CDZdf/ObLYWz87UBXtxUgJIffmAx0TaXPMEuqJO5rv+oA06md+WSJqdiuit2kwfT65w3krvyUv1HV3rT2nrXKMvnW8y/P8m4c/xgTLh5EA9Rxa/j1E0q60a9srhmRMNvtX4lJj8I9tYdSN87cWTWdssNiszh4FlHtyp2jFe3SSU3KJ/8c2Bd6is+7dOHhieFyFj8Qyzi1DYFaX99sZJKmrb5kdPxN7VcfsGZweWorp4ArBt4O9MqkwSRed0+BduXOCJaKKTqQnWez/mIUCfeR5ybcN8JJYDygA1M00HRuxe2Tmy3Vd9BKqy+npvZGpxUbYr26KBqnENhbrpslDSbSBqm1MbeYv1TluedseGwo3xKkFg8KJhYl8nbOH0RIajbsXUSFR0BhGGKtdfxWrS11EgLg5W8UJMmaMe+n6SFMYCjEJT7AVE76s+vZAFR+TPnAIc08t+Db40/8IOvpMWolcoX/eSRO+e7oVu3kQCeiBAOsumxwA5A0fRAFi/W8Lida3+8m2/TsV1NQuXQKB2wgksAJ5hOFiZ7M80Orc/8zL3wUscF86xndgj9AxUTKrb1qto+DpACl1eoXm+0bgQQNFYnL20mDidv2TjJNi0ZDdcoqzNj2IacA+Wn7aaUoLApSR4Tp+Jmf/zgaxGwQY+aezsWDEFA6jda2wQf3A5PWMuK8R4j0G8JkiO10TpKufgRiXFWzZpchH7ErrVOHtoh+Pwktt/amERqTu59+cf6vvr9mkus2grU48B+3lJjE/8O17UGM36yW8aAtM3gjBWUIMJTTkEFgb6f5wbOt3CsLdxQuDmwe7cqLYH6f/BPtcL744tXfMT748dMS46BzbK1bvDpRl8b8P9Lbhk9ZcYvNGwxSXeTeE7Nc6TrC5C6qNLUafRKUJOzGh5LH4R1ENlJ/0Tl74blR4PCTdxgGDBA9c+N7l160yCTJmbcaPHlrq5NQ3vQbqyaclWhoPzlOaq0JtRGAocYFqzUU9IpdWdN6vHCZvFE/2KgUpCs/uFYYXJh336E8bRx3BuyenxUwP3QzkFYoz+vuZFDH7QYxteLIvn/3MYlH4nK2advabDahDRzSBvmy86ww8ey7diiS/Z88d+zoxIjCtfd9VO5sWnqLx8bR77XqmGD0Gl9NzBsO0BJTLDbOzxy+HC/TedU8K6L0ikvPGywx+bSo5nkeD7d+cq4Xdwr4JvOuj7aloUW6fMN4kEJG5dwatDpF/GYhyYIKHxrXGkqOvJ2yPDR2MV5SPp37oikoCO7QTjP73qujHvg6R0j97seUI0K7QazN6k9ub65Mj715RPhJM/KujEdBg8m2F2W1e2YZF5e0gbvjNH8Bj55Uvf7ip189sdpig9WwQKQJE1U1AvSPN1sPy/3NQFs5ndH+5ob77SB5wHTvzv5SG8BRZXQntmk0+bR0ePnA5tmiCqsr3/r+wFijpVsnGRg8/KgcJQTsljVtT/oUbTWA0HxLpxXFwf0v1RoKp+tszMr1qVgmL82rJCBzwmuGYtvbz3/ttT83dNq5kZrUh/3Pqg0uxWp1M6XP1Vcri1Yo2ltJ3mocTK+NDzSU7c3KjbGzxFRV6L2DG0IiKJ+8+sqx2z63Ymwa9ESb6OmrJ/8kVpnT2+1b1naIjU5nt6rPf0uYTO49utWMYRhHdFmyO1qSJOmVor9kA7514WsPOr27Px7pa/EAehIzbvXD34lrgau1b4k/pWlRYLWlw71RTrr+rLBhdel81mCyAmd7no+nDZMjeQWE3da+T8+38ODeHzwoSja5+y8MDDhA2lyx16Lf+6zUs6ZOvmT4J61O/sba7VcWFGPe9Nr00Mhzd1J4kaUABhtkGNQFPbFbfvovLb7Wt6yjhAklDkYKesb7n6V0xbq8F3Dk7zP/Tbfa6zANe6F3bTs/wGTvpO7uKPKb5VjlpZY7szhG2dfmPYjHuwoefsEAJHOgtwanHf09z7br1aShaZ3zpv4Wc3ZQUL2O9/g4OShyYoPZfqPBuafYYNZzn7w2YQaSeiTn3ucQJECSc3bwns+SsZQbuFvCyY0I3DcqKLi0s+fm4iBQd86zcVonz+dBabuJfbkaX3ipFw3Qajz2fO+BKIKalAwwNN/zb/WWIfkprjDe3kqrvS553PTWvzI7KCjv5Hy+nU4ivymoBL138tM/eCBig8iAKTe7TvgpzH2iyXZLO8L++X9AvGjARYGuFkq/Zu60IQs2HlokjYaCXllU5Xh0kLzMHs/+7Of/hpl6ZOKXTu90HvydMI3athnitmcRMyASfvvXrO7mHIFMutJoKBGIYHK5TBbNeBHA5H39xef/7Lu0XKVbPLEfVcG/F2oPAN/WDk4+S2XN8zWK1a8bIk19T17de+6xwGqyN1nPsu119Twj3Sa79PQ3H+z+x89LKpf/1iXuVy+e2Wzrte3+R6c+tYm0OW9PiORpcVZtPZw6/rLzSADvnmER3WJg4SMXXoEXOH5fzOpduueEn/nZfW0531aFycI7/5PBncGvX9qHMfle+ej2wcgL7Seq5JMXmUUPfqxfOD9NeGndfYeU2BSnoR996f9MGKffw4LHKx/4cv8N9wBv8gz9IL80TpYaCnplXi1Sur8aXPraiJ+uRGXd/TG9OQZjx7/bbqmbSuiz1l27t76dQaKz6nB7fG52wFD5xs70+MLyo41HnprEg07lCOv2ZxtIsR71ht+lFaUmLRvd/nqbEYE16anfryyWDAXVtle6sxE/+/Qu7efpKWy7/6wsaQLVMm5tfVkpSxIo0Q2tAd7kQZEH7sOzg4Ly6Hnbxd6TVydRT+ebcT9Zs/tfGCxzF68ZL7WVNGrFb9qX3NgZQnffM9tf5i7Ij89nV157pSfpKDI7id/pP1BjIoEd63tttb+J39Z2O3RWfZ5f2ZvbPndqTO75R370D756oBZ9Fh4b5n+r1wPEaGmrtz7RIu2vx28Tb//iQSPZ2w+PAydQRi8oL114YfSyGatb99Gga7H+35hxbeJ0bWWw1aK83YxKqk8LkSivKQHMbd8eP/n0tdy+pDBFjG6c8JP/wyTJ1lLJizzEa3DTgkQn8sPq8mxOQiVn3hMXXv545tv3mvJJRBYPMDjEqe/IxaS616Xrtmbc+FbiLZ1VjLzt3V04TiGmjz43ipx+EvyRxBSZtFoOneC/So6k/ymDw7fgud/cMTizT52b2Y5fbT19nm7vdnP3np56YpNYkhfmH7f0ZqlMlv4mI5IMJbzLiySovvjCRSmaOin/IP3LOlJuJHHt+H8SZdeQ9JtaSTUm+pdHnxgn7qtPyX+uaXatDe+DZ+jmId32hirpRp9v1Rry9fcmb9YxWGRv7zz56icb//uxU6PjD3BO61KZsvf15iuafnCf4h3BxOzpt/473EstL50gO/53QjDS3FTXK2JWr7remSBpMnlB+Zl/+PNhs7zo+OWpp3xzII0A3jAQUyVN3qEg0Vllner+H+7b8hYVGq87KbdfsNYkUUtS4revaVrrncqbPIbPq+wVZtk2cVRgi2zjtZ/1NqWDU/92Zf2O1jvRbocONJR3ca/Va2q85/X/6meOrx5dJUWwcvRDN3eW/OIhUZ5fiWIlJON4jYXf+F91omTCjLD3ziLCOe176RX/lrg+Rux85NuaWnsTZN3/9dY3b+kccYLpvcfMuJknkRn9tb4i+RH8HTs3UZb80rMaCPfeiXp6NlZ3mb8jdzcto61H4h0uJXVWAse994wp/9ktSiraXDFfgqKkLddq8M6XkjytjlPe8zlTum8q83aLPaGt0DaQ7iu/LUuAN3+Gefj7X6Z/tk1md0C27Qos3MAQ70JxN2fVC//gOypxMYWpbdx5AsJKvBvF3RzDre75tl5DosGrn/yQEdwk93aDZ6Wfr/87aVSgduXzALeNxNu8mXizR++Up/5aMtOafJqzFVXWuxokOsPUpUdyzJjuKWHY2DfdBrzxMUrvu5EkTJC3EdyEZcmbP60w/x6PpYjDRB68W5x0PaZu9t84Crw9+GUP4L0LmE5nD/mm3jJWbfM3BBJYs/o6MBnMfzdp8nVnJfyjY3pk934Tirs5rbse7nWKzd+E2l4eYzV1zPZvFCRaAN+sTeBbPmod+C4C+H94OHFPavyPkQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_431\",\r\n id: \"431\",\r\n ProductCode: \"PCLTTW1010**60\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 6LM **\",\r\n ProductIndex: \"PCLTCTW101060\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791160\",\r\n SellingUOM: \"EA\",\r\n Cost: \"225\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"10.71\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"171.6\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_433\",\r\n id: \"433\",\r\n ProductCode: \"PCLTTW1010**70\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx1050mm 7LM **\",\r\n ProductIndex: \"PCLTCTW101070\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791170\",\r\n SellingUOM: \"EA\",\r\n Cost: \"262.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"12.495\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"200.2\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASYAAACMBAMAAAAjGhnVAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAxNyBBcHIgMjAxOCAxNzozOTo0OCArMDkzMO4aBdQAAAAHdElNRQfiBBEIDAgmABCVAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f35+fn1tbW3t7e7+/vxsbGzs7Ora2ttbW1nJycvb29lJSUjIyMpaWla2tryGxy8QAAAAF0Uk5TAEDm2GYAACLKSURBVHjazXtvjNzmnR7H7QIt8mW4ES8tAhy877zUxDBQnEmK1GYBIyLfGUYQcNihhnEP/pKIE1LruXNxQ5r03gAB6qTyHyVGEye7dhbxh8s1jX1yrr7VzUiZVB/6B/C5iQ5IcrnWiRNcrvBZsZ2vRYv00uf3vuTsymli2bHsvLAFSTM7fOb35/k9z4+UZudPlNPUj5k8QZp7SbjI1Z8Yd4Kssk5WvRgn4mXBOrl5elEwZjImbF/gVeaO1Ktz3+S2H3kzi5k+47YQZYJ3hvsm3u0mAp+Oz+VbSWAHdmWLjZ2q6DjhwvGqrZeTwOJewSI+nZuabV+el7PEjBSIEpiCcXaAqcwLe27JqzIvx6V8Pt1XLwa4auawMDHpZV45wGTFPC3U1xPczWyfidSKTBamFn7CtnDRmW07QZU73iLLhfDGSVCNH9qxHWHnPovChaUF3saD2WLOFCaGj6mcjZmoQeGqeXVsZsfydEo/sh2zvyNfjgLHD3FVXkrIwAYgjhmVGT7aZ/Rq6jmM4sjYcFz4iNmZyA/3cmDyKieYziqH2+4Mgbp0LbcFvj9CvZ1owuvvZAt8jClBhGleFv2Zs8TkZa7YqGQkYiQvDmyzq5IXIWZBWlmRSl7cyWTy4jB1gMmUEa0QqO4caCIXETU7gM3Hc9sWSJ7jzioEKljkdjX+6a4tuFfhnf2ZJmxvK50ChNkkz0XykiZ5Ikg9+2jmy6tGXiJLZjuRBYX0CMTVrJPH3MJE7FiTPNvh7ty22HA6iQBH/m2FL9uvA2Xb4wyBEuXc9sonz+dIHl42+VgTQXV85u6NzBqFl4WZM6WvpgoKscnF3JEXjRAK1K55aq7CiirvU/IqJC+KzW5C+aSQyJ/Gq8Gcktenao2mCX4oRJWfXiQqUGI6K4sAVZ6jyh9KUFEeksdKTYgceb08ryEheXZZuIeTl+STqYxEZPKqoJLpjvGdcRkeIHm5QwHCy3jVojCa3VT+NCWvBGQT3wRvppSaHWQHVe7Yto28eeOSkjfNEKjHZZWjjVkATE61N5/uqMBErFOO3DPdvUL+AW/AVUPntkxhYviePKd+pldjSt40yc1+xmRfuhMz8hzz9FhySWRb/Ojcs1hUIlDICX0m+t0/ulcAk4fAbKMcO46s8rMPU/LwssmBqe88XpY7kzp53Mvs1Bon/kHn2Tnf/TiTFSUq6rx4A/3NIlSPoKaQnQfQUVD5Mbcpefi6CIrDO+PERuwlt/T3eS8KUPRsOld0ILwdqnKxNfKq8vE5JY8CBUyBvTUvx7kZNwVll1Y5O8DkoU3HdqQ6D18bnRcu6uQJSp6P5CnalJh8M1TJY7bvu/PAjzpjfAUmU8ptYodZTQdeitSr5FWX94gOqAmAya9OnSunpRlHNZWjoPqLYokpzLzilLumesvLZZMvZGPGTCBG4MqQcosPQOJQ5WZnnNNXMkPL787Ak2xjRJ89pR+yEbdgK7Pl9UFOVSECb1yE1fSh/YAC5VPufC/cS6djtLtqJqLyziE24KlddLM/VJhC9JRnxeWMshNHwkFc8x5PqfOAJ5eBWibP5mJ7hBIJqY/N/pzmiyernDB5OXouzUVAgarKyzsKqIxTmJ/N0p2JxISuBT9VII1l8nw3t9lc8SLDBInCQtImSCfiDqOJGLmJDBSxArITd2aqR0Lub8yRTJZO0CAdVeXIjuRyGSji8kC4MwRq/HiCnqlyH5hEJzk+y3YSJjFRRdqlE8pAKEz93PPdUmGimdfJ/eFWonId+DyrCiSPwixTi9gBA5ERVTmKBRVkugl9sptwMFguwOWZrHLH6c8kHYyTMC8f35VV7hAmYbt7WQptEMne65SFVwTjpTYQQeY5YcnUHA4rf2iLyK1pk1PyKuo82QTgHxo5kfpKJneE2MjRah0awehRxz9U5XT9QFa5KJHMpspziSnI90oqKGCKflEbBAxs0NmfKEwdZApzuLtwKM+4KvqJklcw4vJhSaSHv6PcgpSgQKp5YA3Z9MwQHzXFFzUJUxdDDlxeyqEHTGjkAANmXwJVmOz7s3RWrJn1HM6cDO89KKgw3+iNbdOQ6UJ6OqBNULssPyTPBQd1sh4hJlJFJHooMPmznYKJGfV3d94j1TFniBne4q/vBnKWOB4NvcDZ3gemS3seKl5hEvbGTonArNZsUDluEc4aNuB+UHlOP5FzmHqrh+wwGokm/kg9UtOmDGNO2fGj8GC+uPuBVScvoA+FigL2RR7Q0INAo0AhBBh64ycyqrIak32+3F5i6lR5/3o2KIvqtBJ2aH9kKnBiqWdietXvyJmXKFKVE0vEfDyS8yWk+RJQBcmPK6nWQwK2PQ9k8QhIO/wGMwpD79I5ymiD6YmqnE/War3iVWEmptkhNhhVUCDUWQgF2ozb4EWZPAKA6+VmN1NNgL6MBObLhvzxuOMwXC4ARUl9TfSG1AvONkhuyiofy4raoKG3dQ1DMFCYhL21n81GJ+qZh3eSNmjYAHM48SwoDmBCJO3cxNSIpvMe/lDPPDRj5aDGI5r85uH5Elj+xn5APAl1hf4puKKozlbmSIoUStrZ49zLy0fPAWiD6dTufFw1AjjAcBmFswOnwDN71E2VxKXOQ2vF1O5U5JS8En/lEW1G5rAEPQViOV/QeWFaoEn7GX0H8gqyR9g2FAuGXi7CMXG5mM4du7zySn6Aqb+XjVM/UnqFuzmSNz6UPC/PRVrUChhfE8mjmWfSuwXMQGWTSpLJC3OfRk6t7BAzLqYj4iXSEtTTiKMnMKFmkg6aKhferCCzMLcbTI592S137zMVJoZrQBvMD5xCmHj3lUrixqSBqLXG9fgRAaxC1RtmzgDJI1kecejFUOlCMxRsg8QBKwupraVXQAz9RUaBgi4PycAEYpx4eXblJdvWuE+908HgSXYTKmFTJe86NhA8C4qjlX+LISdt1SNepORFqt9FhrkcJgMlyzHbqNOmiWJ66JktyZNzE+yEBODvcmkGUE8OKApcnkGX93ccuzr7cratcSGvaZcLsAF9htIGhZcfdgoQdrbI7pMVE5GIQj+pkSpfFRUEi6RNkg6SNiGqMtFQ1DQRcr7gK3Rk7QMjx+cHgRPkdlCmEOcBKMXLvCs/fV7zuUwO3Mv0JCkMqey41AbTQ9ogTEJrwz4RmdJ72nSlYe09GdEmdPdQ+bxIam454wr5FREzb1dIipKdRxI2IGqdzgmTrHI4O2Fv74rw8qvPzxQmRmIzq3bPmMAUyfESlM4BG5B2CJ3by14sdXlQ1d5Tvk5Dt4NAxY2nQr0RkGHNcBiJnRnEALyD9ApzkpvSVCF5iAY6rUTy8MVm1dkLX3sUukBi8qkXkwVp+YhKqpNCrneXYpMHvLILf0dROXUeeU+YIhLAtBogG94kD51nyiaoresQMduYC0lR9FkkljlcEygqof5CoKQGzsX0iavni+0d6jvCBPe4k91fKkzx67UBaNMtPD+1YxmoWgFT5xEm0BGS5/lETcv5gqHWkX4ctC7YUYQEgcno3R6FjxJMXB7QmkCQYhF865mfv4QWfxh9h2/AfB7Yi3RjDP8RyZqC0yFtIA4lrx/cXikKonKI4D0pEPR+8nkVZh6qW+06KHn20nzKkZhQhZWyyjNiKyk3x4lQXF7OsvKnT1971OK52NJYjcl2xlkyG0nBIQeTQ06htp6m7/A0GHX2VRWD9DCHA7M7G0lMLOACAtnsVgqT7DyPxXXyoGcggQnEBiVvSMmDV8Av23OMWlCU6Fx+/MJX5+ZxRDM4pTnUygLRstdn1Q60gbJUSF5/1EnhxdUMxKB1PFYnJ5KjnRYHqvPkzJMblol8lZfIqfQvxCY+XvY7iwkFb07fARTFMRepyhcW+BpKqvvFF396zByu+0CDGew3mNydChhixeVqvBzSBgxU7riJ2SSPMDFXsQVmHiNCrldRjLZbDOJgWNbJg/BLaRdF4oKsNokVz4EwG89zYCrTC1fP5/ex6KRPtFRjQgYDZ1FtNHqFdLcoJ6cOCTtwdRHM64KCu5RGTnVmRD4PBUWdJxksoHkLY1fPF7QI88ZSRe2TvHYbimKwRwF3Lz3zcOKOLDNah30IHK2oMeH343l/NlILuxhfxnHPdBcHVM4qePRUJQ89MJESdyx3HyaTPg/JRPJM1XkyeTyViwXSWDAdKNwuFHXEpI6RFBVcHons3hdfseKj+0HvSMkEYqp9Xs5g/B4CeDcfZ6zGRMlL/MPaoF/YcF81plAmL3bl7qP2eZ5KnknzBfEjGVwnlzmoNXgFztUglkQFU+X702z86g8nfSAdo29KaBjOtMdqTEx4/d2kTIVaDKChM1EeKw9ReTfx7DCTVC6XNlHtT+rW4hXsIgkWel2KA2BU84XRTA53SIdDGTL61fdJh8X++qNXn4JPJW0zD3p9TiSgpUWDCbYdmFRykEFyCpPD2kAgecioSQVDVA7ahHlUCxhgQgXaFuJgqnojWU6dqF4n7ZAmTmP0gqoQVOXCfe1H3zchTSpcMPUsD3xoxtrJMzUmLortzENB1Zg6VRHmncZ6mlz0kDxQhNlwEFE521CLqxj11oXpoDgoT1UocdCfN5h4H8mDghmB3nwJNUwvXfjLb/xn/C7uWnANRXhRXlzbSbjPfSU23Z1yWtFqwpRUngcVWO3Ao3dIf2VK2EUwT6jiKFxMmNwckM/LvVptRnA38HOkadJc7dYs3p3lCiTtfTAhOtNXr47Yhz+JiMTvRUrtmf0V/PAg1vYyscTkLap0LjckisrtytpYbhEhsjCHg7S2VFQtmMNDNRPJ58FaULKc+mVliHlDUQ6pKKlgJvhsMF1w9pvXJmvG3X8IJrMjz49WF+UPTR1HOy/7UvIm3Eue7RTm8p6CA20ws5s5LAAjF2r9hTIGbXLPN6RfjiRZEG2ayCntWyMaJQJXctMlRbkzkpsbOQwExu9nrp7h9iD+rQ9pesycKabM+DP/2ySpqj0EtejXmJz1LJ8lDSbUa5ixw2wQ5rBUysfFjNaIIRSv2rfKDUuV5z1KHmEKgIeFpEbzZeellLyjO5hXnbPf+lM/5r4fv/8ERaZ9i7+5NvzSd+RHa4/PoEsVJu70Z97BvRdaRJW99aXY5CiosOhkVhypRaEjO0tu35TP8yrPkoKFvpZHtEk+kLa+cj8Goxf6bDgeRcG9zy1G8UAPrc33rOnydHqa/oEvyN9qZ3cgHSQmiPIA4yV1IvNgbzDpH3YKJXiuLGJWrxF95T0b2vSDEoOOaDOCWlWdB/XZrPA5CUtU2dGd8NGnjtEmIx76g3+6qeG02kM/Xvut39HkmT5BCZd8QOMlc9Naf2CyVsXhLaJMnu24eW2poIBV59Uzr04ez9Q2Q3oTu54v9NMOzRfwVHnp6XNmFJ+a6KAQ858NVJyMzqb2/hpT+Ti+h5p5olOUuzk+osEETZSyrWXycFE4hX7ly+RJP0y0uRip+yKwMh48PHyeKZWhTJ4j5yy9gRfCX9/3fPfJH31vbWDEnYKZ+tD8JwqSrp3utd//oZbe1nStvDK7aFPXCJIXt8+SjVLUGoqETmn1l+MFxF85Od8v1pr7K0prz7iakPJ+Hko5QxTi2pvQPaAZ3Do+nQzBnvfkM3+6/sfEQnFltXVDfGBTIsL/k/Zvb7a1lq5p1da5VDSYgnCRl7Bx9S5DLaKWToF25ZCHG97QqI0cKWAMskkzfeDzyMOoxYJAoGhRKLMPjKdzFl668MLF3vue1ekD+mdaus5+t9dgWjX/ZZviFGtBeX5KjUfKABpqq0pmZ3o1JoyXfsIPnAJtGcPi6Mgy6h2wRTd6+OyirwSLtAqY7kWjZzjJcjItXJCVcS+9+Fx2Qv/IX8T4gOj0aKC3On8ATKqKjpi/vaa1tY6pcXurtOrGE6LYSPNx2uxXOLxLZZWHkseroKhXm8oLkPdcTxUb0P08+DzMPCbZgOIok0eRRi7KR745mzNIpY8NYvBkHJ5YMfjv31pD0m4Z/ovN9op3YqAxe31UKCJHrGxvz5uO/YgdJG9yOHm+C+dzyl4qYCTPYrcvagVs0/08z5cUJi2vpW7owZqbMd/+1nP36W7hxx+5Y0DrNf30RI/1D7cJD+Fqvff44Ei+uaJpTPQJE6lXyOAw2Ku8nTNms4hyCziF69nAu+9UfqxRwDSHe3xnpCy98nkWU8mj+1QQMZKXELwnX9j1B2YX3Xf3MVOP/HYr8j6kax9oESSUkba5ck9uSYQmD4g0akyBPcZ4udiLZYGQXaXeO6ByAW0wESp5JquTx9K5L/eI0K0w6TYljXZ2dedBAYxH3deeA5X19CMQWXefGBjRoN0adHqt1p0UISqpln7k0jFNFpfJfDd0CBP+E77t7oLK5Y4QnhjTQhzeG9Cu3PH4NKg1Ft3O80R0irpd7TbxLWzMPAfJI/1MHY3kbV958e/NeLAaRIYnrN+7A1xAQCJhaHdquuw2pO7iZktVFqLed85wX1K58INwVrrz+2jf3hTU6GBvANoMc2iDBIHEoMUcdogWEYfae4I2q0qqTbpTIj0V9MOpV3/0ScmzQTQ4XYmTbMAG1P6t7lp72pKJ043QGrTqcqflDC7DGkxIXpnmUd16MAVewqdLNuBw0uGkm8l7iCZTClg9cRAplRSUkjZ7MfqdBwkEaPfShef/6uJANwYGO2awvv/hSUDcCCTDnrYwdCrxYdUbaM0xBjHPXKfWK2Co9SSblnWY6K6nk/kH9xTABm5Y1KrblN6TVvDL7NqY01Xly3tnxA5eztwLz++an4H4QDajSWR2Rx/+nBYrUjLszcdaxJedfFM7OC2gL92cLzVUf56TXqlbT+0NZgdswPqFZ52SIsuM5XoECQsWozq38paQheIn8YDGtM8+/dB8TV9vpIYVBfMv/Y1JV6ZYva/3AOK16vmy31oNJvB7H8lTmDq+Zy/scl40GorW0kmQLtkAIioJJ6HSRPJ2Hvk4Pq7vu2MmB1lVwC9g5pEEe+2HZxg4/PbNVpv64nQR+ds/+tea1HG49nvtH+srgTNQc255gKmb5KLZG4QYL9U8iZtnIMAGiZhmh6nc8ZxUKmQUOkSUTJ5a2Ul/In0eksfizvjV5+5YjTyrfRL1S2dFrBl3PQOrxKREGbDb/4thm9r1iOiPEEq0UFBF3incmZeS71eqyKswXtxDyfPDIrTKhKkVsRJRbGniQZseiQMXnizY+sluYMX60Bl8ZFOGRW8PT7TiT2D8QzAZgKV95DGuqzxej8lgrlcoTL7geXjO266sBpMcL91GI6k5DGFHz8ko0W7J4DQqK3D8Lky62Z374SNPTQbvLWJzaA1uH9B19fbgSE9vf7DdbgEE/tdWgt71EWo6j5K3LwuK+Dxw9tx890y0unz6CNVz8LyB2pV3RyNTSeQwV4tnWvDTrooWlNR5O9Or+6Y+WPV6KKy1uzeBAclqaZ1b27/b1tWMa0XOQPv/HvBpJ0udZgwH9jSrZqMTNUNxsp7XaQPalQcbtql4leYHbZ7q57jI9rmz3Oo/+n9zUwdHhRaGG7vtVroOGFsbrml3btLMbWkGY7r2SzHx8bTo1JiEfeqxattlDSY7s8vrhB3tyicnUUcmzY9A2heG5NGEhDgRDi/Th5+5+l2qYmNwOl/TDH7bmi75mgpFu59C1NZQj9ovO3gf356OxBLT0V1vfZtHjTaobC/vHH5YRLLBfMJk5xEtYuaxaR1J2KfOlad/mKx+G60PTMN8raUP7+zFhoSEAOhTCtMKsza1X4lpfbZvNZhgSL38k2cOhF1uV/zgYRG5K8+tmXyYJFLJ86AFFG3CDZdf/ObLYWz87UBXtxUgJIffmAx0TaXPMEuqJO5rv+oA06md+WSJqdiuit2kwfT65w3krvyUv1HV3rT2nrXKMvnW8y/P8m4c/xgTLh5EA9Rxa/j1E0q60a9srhmRMNvtX4lJj8I9tYdSN87cWTWdssNiszh4FlHtyp2jFe3SSU3KJ/8c2Bd6is+7dOHhieFyFj8Qyzi1DYFaX99sZJKmrb5kdPxN7VcfsGZweWorp4ArBt4O9MqkwSRed0+BduXOCJaKKTqQnWez/mIUCfeR5ybcN8JJYDygA1M00HRuxe2Tmy3Vd9BKqy+npvZGpxUbYr26KBqnENhbrpslDSbSBqm1MbeYv1TluedseGwo3xKkFg8KJhYl8nbOH0RIajbsXUSFR0BhGGKtdfxWrS11EgLg5W8UJMmaMe+n6SFMYCjEJT7AVE76s+vZAFR+TPnAIc08t+Db40/8IOvpMWolcoX/eSRO+e7oVu3kQCeiBAOsumxwA5A0fRAFi/W8Lida3+8m2/TsV1NQuXQKB2wgksAJ5hOFiZ7M80Orc/8zL3wUscF86xndgj9AxUTKrb1qto+DpACl1eoXm+0bgQQNFYnL20mDidv2TjJNi0ZDdcoqzNj2IacA+Wn7aaUoLApSR4Tp+Jmf/zgaxGwQY+aezsWDEFA6jda2wQf3A5PWMuK8R4j0G8JkiO10TpKufgRiXFWzZpchH7ErrVOHtoh+Pwktt/amERqTu59+cf6vvr9mkus2grU48B+3lJjE/8O17UGM36yW8aAtM3gjBWUIMJTTkEFgb6f5wbOt3CsLdxQuDmwe7cqLYH6f/BPtcL744tXfMT748dMS46BzbK1bvDpRl8b8P9Lbhk9ZcYvNGwxSXeTeE7Nc6TrC5C6qNLUafRKUJOzGh5LH4R1ENlJ/0Tl74blR4PCTdxgGDBA9c+N7l160yCTJmbcaPHlrq5NQ3vQbqyaclWhoPzlOaq0JtRGAocYFqzUU9IpdWdN6vHCZvFE/2KgUpCs/uFYYXJh336E8bRx3BuyenxUwP3QzkFYoz+vuZFDH7QYxteLIvn/3MYlH4nK2advabDahDRzSBvmy86ww8ey7diiS/Z88d+zoxIjCtfd9VO5sWnqLx8bR77XqmGD0Gl9NzBsO0BJTLDbOzxy+HC/TedU8K6L0ikvPGywx+bSo5nkeD7d+cq4Xdwr4JvOuj7aloUW6fMN4kEJG5dwatDpF/GYhyYIKHxrXGkqOvJ2yPDR2MV5SPp37oikoCO7QTjP73qujHvg6R0j97seUI0K7QazN6k9ub65Mj715RPhJM/KujEdBg8m2F2W1e2YZF5e0gbvjNH8Bj55Uvf7ip189sdpig9WwQKQJE1U1AvSPN1sPy/3NQFs5ndH+5ob77SB5wHTvzv5SG8BRZXQntmk0+bR0ePnA5tmiCqsr3/r+wFijpVsnGRg8/KgcJQTsljVtT/oUbTWA0HxLpxXFwf0v1RoKp+tszMr1qVgmL82rJCBzwmuGYtvbz3/ttT83dNq5kZrUh/3Pqg0uxWp1M6XP1Vcri1Yo2ltJ3mocTK+NDzSU7c3KjbGzxFRV6L2DG0IiKJ+8+sqx2z63Ymwa9ESb6OmrJ/8kVpnT2+1b1naIjU5nt6rPf0uYTO49utWMYRhHdFmyO1qSJOmVor9kA7514WsPOr27Px7pa/EAehIzbvXD34lrgau1b4k/pWlRYLWlw71RTrr+rLBhdel81mCyAmd7no+nDZMjeQWE3da+T8+38ODeHzwoSja5+y8MDDhA2lyx16Lf+6zUs6ZOvmT4J61O/sba7VcWFGPe9Nr00Mhzd1J4kaUABhtkGNQFPbFbfvovLb7Wt6yjhAklDkYKesb7n6V0xbq8F3Dk7zP/Tbfa6zANe6F3bTs/wGTvpO7uKPKb5VjlpZY7szhG2dfmPYjHuwoefsEAJHOgtwanHf09z7br1aShaZ3zpv4Wc3ZQUL2O9/g4OShyYoPZfqPBuafYYNZzn7w2YQaSeiTn3ucQJECSc3bwns+SsZQbuFvCyY0I3DcqKLi0s+fm4iBQd86zcVonz+dBabuJfbkaX3ipFw3Qajz2fO+BKIKalAwwNN/zb/WWIfkprjDe3kqrvS553PTWvzI7KCjv5Hy+nU4ivymoBL138tM/eCBig8iAKTe7TvgpzH2iyXZLO8L++X9AvGjARYGuFkq/Zu60IQs2HlokjYaCXllU5Xh0kLzMHs/+7Of/hpl6ZOKXTu90HvydMI3athnitmcRMyASfvvXrO7mHIFMutJoKBGIYHK5TBbNeBHA5H39xef/7Lu0XKVbPLEfVcG/F2oPAN/WDk4+S2XN8zWK1a8bIk19T17de+6xwGqyN1nPsu119Twj3Sa79PQ3H+z+x89LKpf/1iXuVy+e2Wzrte3+R6c+tYm0OW9PiORpcVZtPZw6/rLzSADvnmER3WJg4SMXXoEXOH5fzOpduueEn/nZfW0531aFycI7/5PBncGvX9qHMfle+ej2wcgL7Seq5JMXmUUPfqxfOD9NeGndfYeU2BSnoR996f9MGKffw4LHKx/4cv8N9wBv8gz9IL80TpYaCnplXi1Sur8aXPraiJ+uRGXd/TG9OQZjx7/bbqmbSuiz1l27t76dQaKz6nB7fG52wFD5xs70+MLyo41HnprEg07lCOv2ZxtIsR71ht+lFaUmLRvd/nqbEYE16anfryyWDAXVtle6sxE/+/Qu7efpKWy7/6wsaQLVMm5tfVkpSxIo0Q2tAd7kQZEH7sOzg4Ly6Hnbxd6TVydRT+ebcT9Zs/tfGCxzF68ZL7WVNGrFb9qX3NgZQnffM9tf5i7Ij89nV157pSfpKDI7id/pP1BjIoEd63tttb+J39Z2O3RWfZ5f2ZvbPndqTO75R370D756oBZ9Fh4b5n+r1wPEaGmrtz7RIu2vx28Tb//iQSPZ2w+PAydQRi8oL114YfSyGatb99Gga7H+35hxbeJ0bWWw1aK83YxKqk8LkSivKQHMbd8eP/n0tdy+pDBFjG6c8JP/wyTJ1lLJizzEa3DTgkQn8sPq8mxOQiVn3hMXXv545tv3mvJJRBYPMDjEqe/IxaS616Xrtmbc+FbiLZ1VjLzt3V04TiGmjz43ipx+EvyRxBSZtFoOneC/So6k/ymDw7fgud/cMTizT52b2Y5fbT19nm7vdnP3np56YpNYkhfmH7f0ZqlMlv4mI5IMJbzLiySovvjCRSmaOin/IP3LOlJuJHHt+H8SZdeQ9JtaSTUm+pdHnxgn7qtPyX+uaXatDe+DZ+jmId32hirpRp9v1Rry9fcmb9YxWGRv7zz56icb//uxU6PjD3BO61KZsvf15iuafnCf4h3BxOzpt/473EstL50gO/53QjDS3FTXK2JWr7remSBpMnlB+Zl/+PNhs7zo+OWpp3xzII0A3jAQUyVN3qEg0Vllner+H+7b8hYVGq87KbdfsNYkUUtS4revaVrrncqbPIbPq+wVZtk2cVRgi2zjtZ/1NqWDU/92Zf2O1jvRbocONJR3ca/Va2q85/X/6meOrx5dJUWwcvRDN3eW/OIhUZ5fiWIlJON4jYXf+F91omTCjLD3ziLCOe176RX/lrg+Rux85NuaWnsTZN3/9dY3b+kccYLpvcfMuJknkRn9tb4i+RH8HTs3UZb80rMaCPfeiXp6NlZ3mb8jdzcto61H4h0uJXVWAse994wp/9ktSiraXDFfgqKkLddq8M6XkjytjlPe8zlTum8q83aLPaGt0DaQ7iu/LUuAN3+Gefj7X6Z/tk1md0C27Qos3MAQ70JxN2fVC//gOypxMYWpbdx5AsJKvBvF3RzDre75tl5DosGrn/yQEdwk93aDZ6Wfr/87aVSgduXzALeNxNu8mXizR++Up/5aMtOafJqzFVXWuxokOsPUpUdyzJjuKWHY2DfdBrzxMUrvu5EkTJC3EdyEZcmbP60w/x6PpYjDRB68W5x0PaZu9t84Crw9+GUP4L0LmE5nD/mm3jJWbfM3BBJYs/o6MBnMfzdp8nVnJfyjY3pk934Tirs5rbse7nWKzd+E2l4eYzV1zPZvFCRaAN+sTeBbPmod+C4C+H94OHFPavyPkQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_435\",\r\n id: \"435\",\r\n ProductCode: \"PCLTCTW107**25\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 2.5LM **\",\r\n ProductIndex: \"PCLTCTW10725\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"63.75\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"2.975\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"48.75\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_436\",\r\n id: \"436\",\r\n ProductCode: \"PCLTCTW107**30\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 3LM **\",\r\n ProductIndex: \"PCLTCTW10730\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"76.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"3.57\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"58.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASYAAACMBAMAAAAjGhnVAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAxNyBBcHIgMjAxOCAxNzozOTo0OCArMDkzMO4aBdQAAAAHdElNRQfiBBEIDAgmABCVAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f35+fn1tbW3t7e7+/vxsbGzs7Ora2ttbW1nJycvb29lJSUjIyMpaWla2tryGxy8QAAAAF0Uk5TAEDm2GYAACLKSURBVHjazXtvjNzmnR7H7QIt8mW4ES8tAhy877zUxDBQnEmK1GYBIyLfGUYQcNihhnEP/pKIE1LruXNxQ5r03gAB6qTyHyVGEye7dhbxh8s1jX1yrr7VzUiZVB/6B/C5iQ5IcrnWiRNcrvBZsZ2vRYv00uf3vuTsymli2bHsvLAFSTM7fOb35/k9z4+UZudPlNPUj5k8QZp7SbjI1Z8Yd4Kssk5WvRgn4mXBOrl5elEwZjImbF/gVeaO1Ktz3+S2H3kzi5k+47YQZYJ3hvsm3u0mAp+Oz+VbSWAHdmWLjZ2q6DjhwvGqrZeTwOJewSI+nZuabV+el7PEjBSIEpiCcXaAqcwLe27JqzIvx6V8Pt1XLwa4auawMDHpZV45wGTFPC3U1xPczWyfidSKTBamFn7CtnDRmW07QZU73iLLhfDGSVCNH9qxHWHnPovChaUF3saD2WLOFCaGj6mcjZmoQeGqeXVsZsfydEo/sh2zvyNfjgLHD3FVXkrIwAYgjhmVGT7aZ/Rq6jmM4sjYcFz4iNmZyA/3cmDyKieYziqH2+4Mgbp0LbcFvj9CvZ1owuvvZAt8jClBhGleFv2Zs8TkZa7YqGQkYiQvDmyzq5IXIWZBWlmRSl7cyWTy4jB1gMmUEa0QqO4caCIXETU7gM3Hc9sWSJ7jzioEKljkdjX+6a4tuFfhnf2ZJmxvK50ChNkkz0XykiZ5Ikg9+2jmy6tGXiJLZjuRBYX0CMTVrJPH3MJE7FiTPNvh7ty22HA6iQBH/m2FL9uvA2Xb4wyBEuXc9sonz+dIHl42+VgTQXV85u6NzBqFl4WZM6WvpgoKscnF3JEXjRAK1K55aq7CiirvU/IqJC+KzW5C+aSQyJ/Gq8Gcktenao2mCX4oRJWfXiQqUGI6K4sAVZ6jyh9KUFEeksdKTYgceb08ryEheXZZuIeTl+STqYxEZPKqoJLpjvGdcRkeIHm5QwHCy3jVojCa3VT+NCWvBGQT3wRvppSaHWQHVe7Yto28eeOSkjfNEKjHZZWjjVkATE61N5/uqMBErFOO3DPdvUL+AW/AVUPntkxhYviePKd+pldjSt40yc1+xmRfuhMz8hzz9FhySWRb/Ojcs1hUIlDICX0m+t0/ulcAk4fAbKMcO46s8rMPU/LwssmBqe88XpY7kzp53Mvs1Bon/kHn2Tnf/TiTFSUq6rx4A/3NIlSPoKaQnQfQUVD5Mbcpefi6CIrDO+PERuwlt/T3eS8KUPRsOld0ILwdqnKxNfKq8vE5JY8CBUyBvTUvx7kZNwVll1Y5O8DkoU3HdqQ6D18bnRcu6uQJSp6P5CnalJh8M1TJY7bvu/PAjzpjfAUmU8ptYodZTQdeitSr5FWX94gOqAmAya9OnSunpRlHNZWjoPqLYokpzLzilLumesvLZZMvZGPGTCBG4MqQcosPQOJQ5WZnnNNXMkPL787Ak2xjRJ89pR+yEbdgK7Pl9UFOVSECb1yE1fSh/YAC5VPufC/cS6djtLtqJqLyziE24KlddLM/VJhC9JRnxeWMshNHwkFc8x5PqfOAJ5eBWibP5mJ7hBIJqY/N/pzmiyernDB5OXouzUVAgarKyzsKqIxTmJ/N0p2JxISuBT9VII1l8nw3t9lc8SLDBInCQtImSCfiDqOJGLmJDBSxArITd2aqR0Lub8yRTJZO0CAdVeXIjuRyGSji8kC4MwRq/HiCnqlyH5hEJzk+y3YSJjFRRdqlE8pAKEz93PPdUmGimdfJ/eFWonId+DyrCiSPwixTi9gBA5ERVTmKBRVkugl9sptwMFguwOWZrHLH6c8kHYyTMC8f35VV7hAmYbt7WQptEMne65SFVwTjpTYQQeY5YcnUHA4rf2iLyK1pk1PyKuo82QTgHxo5kfpKJneE2MjRah0awehRxz9U5XT9QFa5KJHMpspziSnI90oqKGCKflEbBAxs0NmfKEwdZApzuLtwKM+4KvqJklcw4vJhSaSHv6PcgpSgQKp5YA3Z9MwQHzXFFzUJUxdDDlxeyqEHTGjkAANmXwJVmOz7s3RWrJn1HM6cDO89KKgw3+iNbdOQ6UJ6OqBNULssPyTPBQd1sh4hJlJFJHooMPmznYKJGfV3d94j1TFniBne4q/vBnKWOB4NvcDZ3gemS3seKl5hEvbGTonArNZsUDluEc4aNuB+UHlOP5FzmHqrh+wwGokm/kg9UtOmDGNO2fGj8GC+uPuBVScvoA+FigL2RR7Q0INAo0AhBBh64ycyqrIak32+3F5i6lR5/3o2KIvqtBJ2aH9kKnBiqWdietXvyJmXKFKVE0vEfDyS8yWk+RJQBcmPK6nWQwK2PQ9k8QhIO/wGMwpD79I5ymiD6YmqnE/War3iVWEmptkhNhhVUCDUWQgF2ozb4EWZPAKA6+VmN1NNgL6MBObLhvzxuOMwXC4ARUl9TfSG1AvONkhuyiofy4raoKG3dQ1DMFCYhL21n81GJ+qZh3eSNmjYAHM48SwoDmBCJO3cxNSIpvMe/lDPPDRj5aDGI5r85uH5Elj+xn5APAl1hf4puKKozlbmSIoUStrZ49zLy0fPAWiD6dTufFw1AjjAcBmFswOnwDN71E2VxKXOQ2vF1O5U5JS8En/lEW1G5rAEPQViOV/QeWFaoEn7GX0H8gqyR9g2FAuGXi7CMXG5mM4du7zySn6Aqb+XjVM/UnqFuzmSNz6UPC/PRVrUChhfE8mjmWfSuwXMQGWTSpLJC3OfRk6t7BAzLqYj4iXSEtTTiKMnMKFmkg6aKhferCCzMLcbTI592S137zMVJoZrQBvMD5xCmHj3lUrixqSBqLXG9fgRAaxC1RtmzgDJI1kecejFUOlCMxRsg8QBKwupraVXQAz9RUaBgi4PycAEYpx4eXblJdvWuE+908HgSXYTKmFTJe86NhA8C4qjlX+LISdt1SNepORFqt9FhrkcJgMlyzHbqNOmiWJ66JktyZNzE+yEBODvcmkGUE8OKApcnkGX93ccuzr7cratcSGvaZcLsAF9htIGhZcfdgoQdrbI7pMVE5GIQj+pkSpfFRUEi6RNkg6SNiGqMtFQ1DQRcr7gK3Rk7QMjx+cHgRPkdlCmEOcBKMXLvCs/fV7zuUwO3Mv0JCkMqey41AbTQ9ogTEJrwz4RmdJ72nSlYe09GdEmdPdQ+bxIam454wr5FREzb1dIipKdRxI2IGqdzgmTrHI4O2Fv74rw8qvPzxQmRmIzq3bPmMAUyfESlM4BG5B2CJ3by14sdXlQ1d5Tvk5Dt4NAxY2nQr0RkGHNcBiJnRnEALyD9ApzkpvSVCF5iAY6rUTy8MVm1dkLX3sUukBi8qkXkwVp+YhKqpNCrneXYpMHvLILf0dROXUeeU+YIhLAtBogG94kD51nyiaoresQMduYC0lR9FkkljlcEygqof5CoKQGzsX0iavni+0d6jvCBPe4k91fKkzx67UBaNMtPD+1YxmoWgFT5xEm0BGS5/lETcv5gqHWkX4ctC7YUYQEgcno3R6FjxJMXB7QmkCQYhF865mfv4QWfxh9h2/AfB7Yi3RjDP8RyZqC0yFtIA4lrx/cXikKonKI4D0pEPR+8nkVZh6qW+06KHn20nzKkZhQhZWyyjNiKyk3x4lQXF7OsvKnT1971OK52NJYjcl2xlkyG0nBIQeTQ06htp6m7/A0GHX2VRWD9DCHA7M7G0lMLOACAtnsVgqT7DyPxXXyoGcggQnEBiVvSMmDV8Av23OMWlCU6Fx+/MJX5+ZxRDM4pTnUygLRstdn1Q60gbJUSF5/1EnhxdUMxKB1PFYnJ5KjnRYHqvPkzJMblol8lZfIqfQvxCY+XvY7iwkFb07fARTFMRepyhcW+BpKqvvFF396zByu+0CDGew3mNydChhixeVqvBzSBgxU7riJ2SSPMDFXsQVmHiNCrldRjLZbDOJgWNbJg/BLaRdF4oKsNokVz4EwG89zYCrTC1fP5/ex6KRPtFRjQgYDZ1FtNHqFdLcoJ6cOCTtwdRHM64KCu5RGTnVmRD4PBUWdJxksoHkLY1fPF7QI88ZSRe2TvHYbimKwRwF3Lz3zcOKOLDNah30IHK2oMeH343l/NlILuxhfxnHPdBcHVM4qePRUJQ89MJESdyx3HyaTPg/JRPJM1XkyeTyViwXSWDAdKNwuFHXEpI6RFBVcHons3hdfseKj+0HvSMkEYqp9Xs5g/B4CeDcfZ6zGRMlL/MPaoF/YcF81plAmL3bl7qP2eZ5KnknzBfEjGVwnlzmoNXgFztUglkQFU+X702z86g8nfSAdo29KaBjOtMdqTEx4/d2kTIVaDKChM1EeKw9ReTfx7DCTVC6XNlHtT+rW4hXsIgkWel2KA2BU84XRTA53SIdDGTL61fdJh8X++qNXn4JPJW0zD3p9TiSgpUWDCbYdmFRykEFyCpPD2kAgecioSQVDVA7ahHlUCxhgQgXaFuJgqnojWU6dqF4n7ZAmTmP0gqoQVOXCfe1H3zchTSpcMPUsD3xoxtrJMzUmLortzENB1Zg6VRHmncZ6mlz0kDxQhNlwEFE521CLqxj11oXpoDgoT1UocdCfN5h4H8mDghmB3nwJNUwvXfjLb/xn/C7uWnANRXhRXlzbSbjPfSU23Z1yWtFqwpRUngcVWO3Ao3dIf2VK2EUwT6jiKFxMmNwckM/LvVptRnA38HOkadJc7dYs3p3lCiTtfTAhOtNXr47Yhz+JiMTvRUrtmf0V/PAg1vYyscTkLap0LjckisrtytpYbhEhsjCHg7S2VFQtmMNDNRPJ58FaULKc+mVliHlDUQ6pKKlgJvhsMF1w9pvXJmvG3X8IJrMjz49WF+UPTR1HOy/7UvIm3Eue7RTm8p6CA20ws5s5LAAjF2r9hTIGbXLPN6RfjiRZEG2ayCntWyMaJQJXctMlRbkzkpsbOQwExu9nrp7h9iD+rQ9pesycKabM+DP/2ySpqj0EtejXmJz1LJ8lDSbUa5ixw2wQ5rBUysfFjNaIIRSv2rfKDUuV5z1KHmEKgIeFpEbzZeellLyjO5hXnbPf+lM/5r4fv/8ERaZ9i7+5NvzSd+RHa4/PoEsVJu70Z97BvRdaRJW99aXY5CiosOhkVhypRaEjO0tu35TP8yrPkoKFvpZHtEk+kLa+cj8Goxf6bDgeRcG9zy1G8UAPrc33rOnydHqa/oEvyN9qZ3cgHSQmiPIA4yV1IvNgbzDpH3YKJXiuLGJWrxF95T0b2vSDEoOOaDOCWlWdB/XZrPA5CUtU2dGd8NGnjtEmIx76g3+6qeG02kM/Xvut39HkmT5BCZd8QOMlc9Naf2CyVsXhLaJMnu24eW2poIBV59Uzr04ez9Q2Q3oTu54v9NMOzRfwVHnp6XNmFJ+a6KAQ858NVJyMzqb2/hpT+Ti+h5p5olOUuzk+osEETZSyrWXycFE4hX7ly+RJP0y0uRip+yKwMh48PHyeKZWhTJ4j5yy9gRfCX9/3fPfJH31vbWDEnYKZ+tD8JwqSrp3utd//oZbe1nStvDK7aFPXCJIXt8+SjVLUGoqETmn1l+MFxF85Od8v1pr7K0prz7iakPJ+Hko5QxTi2pvQPaAZ3Do+nQzBnvfkM3+6/sfEQnFltXVDfGBTIsL/k/Zvb7a1lq5p1da5VDSYgnCRl7Bx9S5DLaKWToF25ZCHG97QqI0cKWAMskkzfeDzyMOoxYJAoGhRKLMPjKdzFl668MLF3vue1ekD+mdaus5+t9dgWjX/ZZviFGtBeX5KjUfKABpqq0pmZ3o1JoyXfsIPnAJtGcPi6Mgy6h2wRTd6+OyirwSLtAqY7kWjZzjJcjItXJCVcS+9+Fx2Qv/IX8T4gOj0aKC3On8ATKqKjpi/vaa1tY6pcXurtOrGE6LYSPNx2uxXOLxLZZWHkseroKhXm8oLkPdcTxUb0P08+DzMPCbZgOIok0eRRi7KR745mzNIpY8NYvBkHJ5YMfjv31pD0m4Z/ovN9op3YqAxe31UKCJHrGxvz5uO/YgdJG9yOHm+C+dzyl4qYCTPYrcvagVs0/08z5cUJi2vpW7owZqbMd/+1nP36W7hxx+5Y0DrNf30RI/1D7cJD+Fqvff44Ei+uaJpTPQJE6lXyOAw2Ku8nTNms4hyCziF69nAu+9UfqxRwDSHe3xnpCy98nkWU8mj+1QQMZKXELwnX9j1B2YX3Xf3MVOP/HYr8j6kax9oESSUkba5ck9uSYQmD4g0akyBPcZ4udiLZYGQXaXeO6ByAW0wESp5JquTx9K5L/eI0K0w6TYljXZ2dedBAYxH3deeA5X19CMQWXefGBjRoN0adHqt1p0UISqpln7k0jFNFpfJfDd0CBP+E77t7oLK5Y4QnhjTQhzeG9Cu3PH4NKg1Ft3O80R0irpd7TbxLWzMPAfJI/1MHY3kbV958e/NeLAaRIYnrN+7A1xAQCJhaHdquuw2pO7iZktVFqLed85wX1K58INwVrrz+2jf3hTU6GBvANoMc2iDBIHEoMUcdogWEYfae4I2q0qqTbpTIj0V9MOpV3/0ScmzQTQ4XYmTbMAG1P6t7lp72pKJ043QGrTqcqflDC7DGkxIXpnmUd16MAVewqdLNuBw0uGkm8l7iCZTClg9cRAplRSUkjZ7MfqdBwkEaPfShef/6uJANwYGO2awvv/hSUDcCCTDnrYwdCrxYdUbaM0xBjHPXKfWK2Co9SSblnWY6K6nk/kH9xTABm5Y1KrblN6TVvDL7NqY01Xly3tnxA5eztwLz++an4H4QDajSWR2Rx/+nBYrUjLszcdaxJedfFM7OC2gL92cLzVUf56TXqlbT+0NZgdswPqFZ52SIsuM5XoECQsWozq38paQheIn8YDGtM8+/dB8TV9vpIYVBfMv/Y1JV6ZYva/3AOK16vmy31oNJvB7H8lTmDq+Zy/scl40GorW0kmQLtkAIioJJ6HSRPJ2Hvk4Pq7vu2MmB1lVwC9g5pEEe+2HZxg4/PbNVpv64nQR+ds/+tea1HG49nvtH+srgTNQc255gKmb5KLZG4QYL9U8iZtnIMAGiZhmh6nc8ZxUKmQUOkSUTJ5a2Ul/In0eksfizvjV5+5YjTyrfRL1S2dFrBl3PQOrxKREGbDb/4thm9r1iOiPEEq0UFBF3incmZeS71eqyKswXtxDyfPDIrTKhKkVsRJRbGniQZseiQMXnizY+sluYMX60Bl8ZFOGRW8PT7TiT2D8QzAZgKV95DGuqzxej8lgrlcoTL7geXjO266sBpMcL91GI6k5DGFHz8ko0W7J4DQqK3D8Lky62Z374SNPTQbvLWJzaA1uH9B19fbgSE9vf7DdbgEE/tdWgt71EWo6j5K3LwuK+Dxw9tx890y0unz6CNVz8LyB2pV3RyNTSeQwV4tnWvDTrooWlNR5O9Or+6Y+WPV6KKy1uzeBAclqaZ1b27/b1tWMa0XOQPv/HvBpJ0udZgwH9jSrZqMTNUNxsp7XaQPalQcbtql4leYHbZ7q57jI9rmz3Oo/+n9zUwdHhRaGG7vtVroOGFsbrml3btLMbWkGY7r2SzHx8bTo1JiEfeqxattlDSY7s8vrhB3tyicnUUcmzY9A2heG5NGEhDgRDi/Th5+5+l2qYmNwOl/TDH7bmi75mgpFu59C1NZQj9ovO3gf356OxBLT0V1vfZtHjTaobC/vHH5YRLLBfMJk5xEtYuaxaR1J2KfOlad/mKx+G60PTMN8raUP7+zFhoSEAOhTCtMKsza1X4lpfbZvNZhgSL38k2cOhF1uV/zgYRG5K8+tmXyYJFLJ86AFFG3CDZdf/ObLYWz87UBXtxUgJIffmAx0TaXPMEuqJO5rv+oA06md+WSJqdiuit2kwfT65w3krvyUv1HV3rT2nrXKMvnW8y/P8m4c/xgTLh5EA9Rxa/j1E0q60a9srhmRMNvtX4lJj8I9tYdSN87cWTWdssNiszh4FlHtyp2jFe3SSU3KJ/8c2Bd6is+7dOHhieFyFj8Qyzi1DYFaX99sZJKmrb5kdPxN7VcfsGZweWorp4ArBt4O9MqkwSRed0+BduXOCJaKKTqQnWez/mIUCfeR5ybcN8JJYDygA1M00HRuxe2Tmy3Vd9BKqy+npvZGpxUbYr26KBqnENhbrpslDSbSBqm1MbeYv1TluedseGwo3xKkFg8KJhYl8nbOH0RIajbsXUSFR0BhGGKtdfxWrS11EgLg5W8UJMmaMe+n6SFMYCjEJT7AVE76s+vZAFR+TPnAIc08t+Db40/8IOvpMWolcoX/eSRO+e7oVu3kQCeiBAOsumxwA5A0fRAFi/W8Lida3+8m2/TsV1NQuXQKB2wgksAJ5hOFiZ7M80Orc/8zL3wUscF86xndgj9AxUTKrb1qto+DpACl1eoXm+0bgQQNFYnL20mDidv2TjJNi0ZDdcoqzNj2IacA+Wn7aaUoLApSR4Tp+Jmf/zgaxGwQY+aezsWDEFA6jda2wQf3A5PWMuK8R4j0G8JkiO10TpKufgRiXFWzZpchH7ErrVOHtoh+Pwktt/amERqTu59+cf6vvr9mkus2grU48B+3lJjE/8O17UGM36yW8aAtM3gjBWUIMJTTkEFgb6f5wbOt3CsLdxQuDmwe7cqLYH6f/BPtcL744tXfMT748dMS46BzbK1bvDpRl8b8P9Lbhk9ZcYvNGwxSXeTeE7Nc6TrC5C6qNLUafRKUJOzGh5LH4R1ENlJ/0Tl74blR4PCTdxgGDBA9c+N7l160yCTJmbcaPHlrq5NQ3vQbqyaclWhoPzlOaq0JtRGAocYFqzUU9IpdWdN6vHCZvFE/2KgUpCs/uFYYXJh336E8bRx3BuyenxUwP3QzkFYoz+vuZFDH7QYxteLIvn/3MYlH4nK2advabDahDRzSBvmy86ww8ey7diiS/Z88d+zoxIjCtfd9VO5sWnqLx8bR77XqmGD0Gl9NzBsO0BJTLDbOzxy+HC/TedU8K6L0ikvPGywx+bSo5nkeD7d+cq4Xdwr4JvOuj7aloUW6fMN4kEJG5dwatDpF/GYhyYIKHxrXGkqOvJ2yPDR2MV5SPp37oikoCO7QTjP73qujHvg6R0j97seUI0K7QazN6k9ub65Mj715RPhJM/KujEdBg8m2F2W1e2YZF5e0gbvjNH8Bj55Uvf7ip189sdpig9WwQKQJE1U1AvSPN1sPy/3NQFs5ndH+5ob77SB5wHTvzv5SG8BRZXQntmk0+bR0ePnA5tmiCqsr3/r+wFijpVsnGRg8/KgcJQTsljVtT/oUbTWA0HxLpxXFwf0v1RoKp+tszMr1qVgmL82rJCBzwmuGYtvbz3/ttT83dNq5kZrUh/3Pqg0uxWp1M6XP1Vcri1Yo2ltJ3mocTK+NDzSU7c3KjbGzxFRV6L2DG0IiKJ+8+sqx2z63Ymwa9ESb6OmrJ/8kVpnT2+1b1naIjU5nt6rPf0uYTO49utWMYRhHdFmyO1qSJOmVor9kA7514WsPOr27Px7pa/EAehIzbvXD34lrgau1b4k/pWlRYLWlw71RTrr+rLBhdel81mCyAmd7no+nDZMjeQWE3da+T8+38ODeHzwoSja5+y8MDDhA2lyx16Lf+6zUs6ZOvmT4J61O/sba7VcWFGPe9Nr00Mhzd1J4kaUABhtkGNQFPbFbfvovLb7Wt6yjhAklDkYKesb7n6V0xbq8F3Dk7zP/Tbfa6zANe6F3bTs/wGTvpO7uKPKb5VjlpZY7szhG2dfmPYjHuwoefsEAJHOgtwanHf09z7br1aShaZ3zpv4Wc3ZQUL2O9/g4OShyYoPZfqPBuafYYNZzn7w2YQaSeiTn3ucQJECSc3bwns+SsZQbuFvCyY0I3DcqKLi0s+fm4iBQd86zcVonz+dBabuJfbkaX3ipFw3Qajz2fO+BKIKalAwwNN/zb/WWIfkprjDe3kqrvS553PTWvzI7KCjv5Hy+nU4ivymoBL138tM/eCBig8iAKTe7TvgpzH2iyXZLO8L++X9AvGjARYGuFkq/Zu60IQs2HlokjYaCXllU5Xh0kLzMHs/+7Of/hpl6ZOKXTu90HvydMI3athnitmcRMyASfvvXrO7mHIFMutJoKBGIYHK5TBbNeBHA5H39xef/7Lu0XKVbPLEfVcG/F2oPAN/WDk4+S2XN8zWK1a8bIk19T17de+6xwGqyN1nPsu119Twj3Sa79PQ3H+z+x89LKpf/1iXuVy+e2Wzrte3+R6c+tYm0OW9PiORpcVZtPZw6/rLzSADvnmER3WJg4SMXXoEXOH5fzOpduueEn/nZfW0531aFycI7/5PBncGvX9qHMfle+ej2wcgL7Seq5JMXmUUPfqxfOD9NeGndfYeU2BSnoR996f9MGKffw4LHKx/4cv8N9wBv8gz9IL80TpYaCnplXi1Sur8aXPraiJ+uRGXd/TG9OQZjx7/bbqmbSuiz1l27t76dQaKz6nB7fG52wFD5xs70+MLyo41HnprEg07lCOv2ZxtIsR71ht+lFaUmLRvd/nqbEYE16anfryyWDAXVtle6sxE/+/Qu7efpKWy7/6wsaQLVMm5tfVkpSxIo0Q2tAd7kQZEH7sOzg4Ly6Hnbxd6TVydRT+ebcT9Zs/tfGCxzF68ZL7WVNGrFb9qX3NgZQnffM9tf5i7Ij89nV157pSfpKDI7id/pP1BjIoEd63tttb+J39Z2O3RWfZ5f2ZvbPndqTO75R370D756oBZ9Fh4b5n+r1wPEaGmrtz7RIu2vx28Tb//iQSPZ2w+PAydQRi8oL114YfSyGatb99Gga7H+35hxbeJ0bWWw1aK83YxKqk8LkSivKQHMbd8eP/n0tdy+pDBFjG6c8JP/wyTJ1lLJizzEa3DTgkQn8sPq8mxOQiVn3hMXXv545tv3mvJJRBYPMDjEqe/IxaS616Xrtmbc+FbiLZ1VjLzt3V04TiGmjz43ipx+EvyRxBSZtFoOneC/So6k/ymDw7fgud/cMTizT52b2Y5fbT19nm7vdnP3np56YpNYkhfmH7f0ZqlMlv4mI5IMJbzLiySovvjCRSmaOin/IP3LOlJuJHHt+H8SZdeQ9JtaSTUm+pdHnxgn7qtPyX+uaXatDe+DZ+jmId32hirpRp9v1Rry9fcmb9YxWGRv7zz56icb//uxU6PjD3BO61KZsvf15iuafnCf4h3BxOzpt/473EstL50gO/53QjDS3FTXK2JWr7remSBpMnlB+Zl/+PNhs7zo+OWpp3xzII0A3jAQUyVN3qEg0Vllner+H+7b8hYVGq87KbdfsNYkUUtS4revaVrrncqbPIbPq+wVZtk2cVRgi2zjtZ/1NqWDU/92Zf2O1jvRbocONJR3ca/Va2q85/X/6meOrx5dJUWwcvRDN3eW/OIhUZ5fiWIlJON4jYXf+F91omTCjLD3ziLCOe176RX/lrg+Rux85NuaWnsTZN3/9dY3b+kccYLpvcfMuJknkRn9tb4i+RH8HTs3UZb80rMaCPfeiXp6NlZ3mb8jdzcto61H4h0uJXVWAse994wp/9ktSiraXDFfgqKkLddq8M6XkjytjlPe8zlTum8q83aLPaGt0DaQ7iu/LUuAN3+Gefj7X6Z/tk1md0C27Qos3MAQ70JxN2fVC//gOypxMYWpbdx5AsJKvBvF3RzDre75tl5DosGrn/yQEdwk93aDZ6Wfr/87aVSgduXzALeNxNu8mXizR++Up/5aMtOafJqzFVXWuxokOsPUpUdyzJjuKWHY2DfdBrzxMUrvu5EkTJC3EdyEZcmbP60w/x6PpYjDRB68W5x0PaZu9t84Crw9+GUP4L0LmE5nD/mm3jJWbfM3BBJYs/o6MBnMfzdp8nVnJfyjY3pk934Tirs5rbse7nWKzd+E2l4eYzV1zPZvFCRaAN+sTeBbPmod+C4C+H94OHFPavyPkQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_437\",\r\n id: \"437\",\r\n ProductCode: \"PCLTCTW107**35\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 3.5LM **\",\r\n ProductIndex: \"PCLTCTW1fHR10735\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"89.25\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"4.165\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"68.25\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_438\",\r\n id: \"438\",\r\n ProductCode: \"PCLTCTW107**40\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 4LM **\",\r\n ProductIndex: \"PCLTCTW10740\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"102\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"4.76\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"78\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_439\",\r\n id: \"439\",\r\n ProductCode: \"PCLTCTW107**45\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 4.5LM **\",\r\n ProductIndex: \"PCLTCTW10745\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"114.75\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"5.355\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"87.75\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_440\",\r\n id: \"440\",\r\n ProductCode: \"PCLTCTW107**50\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 5LM **\",\r\n ProductIndex: \"PCLTCTW10750\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"127.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"5.95\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"97.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_441\",\r\n id: \"441\",\r\n ProductCode: \"PCLTCTW107**55\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 5.5LM **\",\r\n ProductIndex: \"PCLTCTW10755\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"140.25\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"6.545\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"107.25\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_442\",\r\n id: \"442\",\r\n ProductCode: \"PCLTCTW107**60\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 6LM **\",\r\n ProductIndex: \"PCLTCTW10760\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"153\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"7.14\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"117\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_443\",\r\n id: \"443\",\r\n ProductCode: \"PCLTCTW107**65\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 6.5LM **\",\r\n ProductIndex: \"PCLTCTW10765\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"165.75\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"7.735\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"126.75\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_444\",\r\n id: \"444\",\r\n ProductCode: \"PCLTCTW107**70\",\r\n ProductDescription: \"Lexan Thermoclear Twinwall Sheeting 10mmx700mm 7LM **\",\r\n ProductIndex: \"PCLTCTW10770\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"791070\",\r\n SellingUOM: \"EA\",\r\n Cost: \"178.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"8.33\",\r\n PromptTextCodes: \"TWS\",\r\n Colours: \"Bronze,Clear,Grey,Metallic Grey,Opal\\n\",\r\n LiveCost: \"136.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_445\",\r\n id: \"445\",\r\n ProductCode: \"FMKIIPFDO\",\r\n ProductDescription: \"MkII Panel Fence Post (Spec P/M) Classic Cream\",\r\n ProductIndex: \"PFPMCC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"280\",\r\n SubGroup: \"22100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.6374\",\r\n MfgLocations: \"200 400 500 600 \",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.123\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.7217\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_446\",\r\n id: \"446\",\r\n ProductCode: \"FMKIIPFPB\",\r\n ProductDescription: \"MkII Panel Fence Post (Spec P/M) Paperbark\",\r\n ProductIndex: \"PFPMPB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"280\",\r\n SubGroup: \"22100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.6374\",\r\n MfgLocations: \"200 400 500 600 \",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.123\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.7217\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_447\",\r\n id: \"447\",\r\n ProductCode: \"FMKIIPFWG\",\r\n ProductDescription: \"MkII Panel Fence Post (Spec P/M) Woodland Grey\",\r\n ProductIndex: \"PFPMWG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"280\",\r\n SubGroup: \"22100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.6374\",\r\n MfgLocations: \"200 400 500 600 \",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.123\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.7217\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_448\",\r\n id: \"448\",\r\n ProductCode: \"FMKIIRFDO\",\r\n ProductDescription: \"MkII Panel Fence Top/Bot Rail (P/M) Classic Cream\",\r\n ProductIndex: \"PFRMCC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"280\",\r\n SubGroup: \"12110\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.6374\",\r\n MfgLocations: \"200 400 500 600 \",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.123\",\r\n PromptTextCodes: \"PFR\",\r\n Colours: \"\",\r\n LiveCost: \"2.7217\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_449\",\r\n id: \"449\",\r\n ProductCode: \"FMKIIRFPB\",\r\n ProductDescription: \"MkII Panel Fence Top/Bot Rail (P/M) Paperbark\",\r\n ProductIndex: \"PFRMPB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"280\",\r\n SubGroup: \"12110\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.6374\",\r\n MfgLocations: \"200 400 500 600 \",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.123\",\r\n PromptTextCodes: \"TL/CO PFR\",\r\n Colours: \"\",\r\n LiveCost: \"2.7217\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_450\",\r\n id: \"450\",\r\n ProductCode: \"FMKIIRFWG\",\r\n ProductDescription: \"MkII Panel Fence Top/Bot Rail (P/M) Woodland Grey\",\r\n ProductIndex: \"PFRMWG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"280\",\r\n SubGroup: \"12110\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.6374\",\r\n MfgLocations: \"200 400 500 600 \",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"1.123\",\r\n PromptTextCodes: \"PFR\",\r\n Colours: \"\",\r\n LiveCost: \"2.7217\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_451\",\r\n id: \"451\",\r\n ProductCode: \"FFSRV50B\",\r\n ProductDescription: \"Fielders Slat Retainer Suit 50mm Black\",\r\n ProductIndex: \"PLASTIC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.423\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.015\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.503\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_452\",\r\n id: \"452\",\r\n ProductCode: \"DPP10050**\",\r\n ProductDescription: \"100X50 Downpipe Pop **\",\r\n ProductIndex: \"PO105\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"701\",\r\n SubGroup: \"291051\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.3\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.21\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.44\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABbBAMAAADn80TQAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo1NToyMCArMDkzMNW74fUAAAAHdElNRQfiBBIDGhQwebkCAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAACdQTFRF////9/f35+fn1tbWzs7Ovb29e3t7Y2Njra2tc3Nza2trlJSUUlJSdf5NTQAAAAF0Uk5TAEDm2GYAAASTSURBVHjapdbNTxtHFADwHWPTqOWw4w8JiRzAbdxU9GCyJQk3o5qUqpcYcMnHiVgVpOHWpGDsAzSITuScSlszGx8rFVc+xJQCLb3y7T+q88brnf2YsTfqHsBi5ud5b/a9GTRNPONp+JnY1Lo8A47PifR4RtMiOZzXA4FITkc3Mn05rHUTAvRtYB3h0QJGWjdhAzSLdQ3hw1ZTR+x3frgXmMPsB54/Kpab8AlNDXcHU5hNQxNLZK1e3mNrYW0q3Q3cHNOQrg+tErJGafkJj+5uWg0SkyxJnCgRDmijADnj8bQKhHMsIBz7lc0nl5Sa9UYB8tBuZOQg9AMLQcffEgtQ+kfjOYY1JYIBxDcI/XgkAIvqBY8qkZOAaRYPQneW+HxyYXJgNl7AtvnFgHb3FiSQ2iEWYJNB1BvnfK+8YkB7k2RgcNWaT4q081SvICo9MeMBkdIIjpeIHzABUenxGU8O4TfJp0QGmBgBEp71bGt4ZUkOmBiG3Y3NusE0nl+SA2qejrEdwbFNJ7g5hvGXHVFxA2peQH3g6KYj6RmMdXxvVw6oeTkJrzU6Z4P+AoZyvr0jB9Q8m4RKCFlNyEJKbfM3lFqVAyZyiH2j1baQdOpnXjepXTmgtLXBJiDEBS/v689hu9FoSQFoeYMXFggO+lmlwX4PlRSAskaHCazROfiAskpjJasNlip1Khd7/JCYTluA1s55UwwWFaAjvuoAWrvS2UGmJ8pKUdB1Pf4LB9cclRZXikYBRZ/pAlhCC9eU4reDdDvpiFWbpyBwTCXM031rWyP1jhiDlx5blu/t2VhszjqXOl9ZvWzXzbJsjTK7DkJzHPTZ41BprG6i//rXaDThOogvcyCGWaXBK8Q+UfsJDiN88CmAkGPUbPFzBb92i+oJ1B9+mOEhIeeg2dqAqPDrC+f8K6glNLGu+QGr5iZvkHkhzIsR3gALmhSAgPH5y84fVjIQz+CJfT94Myzv6bDGPUvwdtDi3+/ZwLft1iU0wUXjCbRaaJEsqAEtb/O2vc1E9TvebodH5K0NZO91G+oKpc6q5+zmRugLdnIJ8FQm+CWERk/5Tc9PCAH+ltUab3T8CWwZGuLHew9AGyfsJj7bXW6271dC1nsAdjQkzuguWd6nxANeyQGtteqUHYiH7fuS3O+1An/sy4xUMj1X8IBhGzzsAnZtsKUHAjsC2P9raI+6AHGbVQS4E2gFB/g4UA7/B1wPFBIR4L1ASb8z2A8ETAH+FOD9QKApQH8gsCDAtd+DgLcChB8rhXkkBfkH1XcCkbxSVFUg/2CxF1h3hsRFvTu4L0A8CyJ/WA8OlEIAfgYIkJ2Si6r7DLDAR1lbFNVA94C2+KeoAluaF7QTeeUWNXfDWeCzrFL0AFxsFaUhEQcwskphg8qeAMgw3Gt8veYDlW9uuYBSdMAzwwM84vGaGxx/7gMK0QYHs4YfeMWKAFsvDRlwCHjp7bYFUNk33CBkGLI1eBOabP5f7VEJMAyfYGDJ8IEPDUMaFRMmOTb8IKkUi+bxrDXizCGpFPnFl4YUOIThEnP2/KQA0aRa2CCZbHfcf/eG247rYeDlAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_453\",\r\n id: \"453\",\r\n ProductCode: \"DPP10075ZLF\",\r\n ProductDescription: \"100X75 Pop Square Zincalume\",\r\n ProductIndex: \"PO107Z\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"291071\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.1\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.23\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"8.42\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABaBAMAAAAsr5d1AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo1NzoxNiArMDkzMDwRAxEAAAAHdElNRQfiBBIDGylxCsRSAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7/H05efv0NPdvb/D9Pf8rbG5kJOaZmlva3B4c3N7qa2x9///dnmAVVhdc3NzntmpqwAAAAF0Uk5TAEDm2GYAAATNSURBVHjardbfS1tnGAfwWJWNrRNLIxm0jC017S4quJ7IaKmg5mRr5ywa86wDz8V+0MOo1E3dtBq2m0ldDeRmF64RcrMLk1caKmsT66FjUM/duVrGKJPuaqhVusK6P2DPe36/57xJFPZeKMbnc973+b7veTUQ8IxoJ34Jir8E+KPF+0Gwq70z0BQfEgf3Bxq7AIJCLwBUER7Q2AuamvhzFTQJxNb6oCEGmgb31zLj9DtXsCAqaZp0cWqMZMYlSYNoax0QPa5pasfv8hgp5CbQqtHXa4LgeUlTLy/J8liWClyV5Bcu0BQHDTYWZVn+DEE2V9EkjnBAYy8+P/FYNgDBOSqAor2zCmjoo4ueLemA6CP3nH7kETYQccnqhSlaL68RU/yLkwIrLBA9jjFiQBYo0EVli3O4jxojTNAeoQGtyDbIkltZ2scN3A812OMFTRgoJBdlBxBjElK8AVTEWUBPkGYExPRAR36Pdu4ICg71Ae6AEZAPoGjDzpO9DmgWQVKtgPRxnTBiuw333BIIohGQoMNV7wEoIriC4T4TnDzTBhBakasDUtg+jU0aoiUwF45AMi3Low6YIV7x9DS2/rBPB6FKZHhZZoYPoOjCN+phTO/h2G+zCk2oZM/iByjO05c3psfaP1syI60OSGG3SxcITkYSX5fqLImOnffxZjj3WiDZF4HEjFIfkJ04hO61BM59EgFIrCuluoDs9E9gD4evfgySNDRbUuqCYqpHb3rgCrYD61PWTozO8uvzzyEYp6D573sAqvpgqlQT5LfwgAQvUbCQWaU33eeW+INXX6BnEE79TM9Hlt50GsC1lC4ULniG+6CNjLcYgGQm8IzDgN4HF2Su0BNbMd44/QN600E3vQZGOaCIS9ASKfMV1ZvM/Erf3u5NLsh/T4Ncu2MCoyBToVfT25slf9P5LXpBncVtcM2A99aPpvACDAhBx6bSyQK8G3FVcGrFC551Yf1IWil7Acl9q4snnoDi+q2lKOVWE6zbv8vNgapJIUbkxjHwxGMFwaAPkOIW7ePYjuuTf3A9QzMpCgJ+oAsVQrbI/0V/vkDrHXCV2aK9NtzTkR0rINwwwIAY8B4bOj1l6gffGQHhtQ6hJcUYFrhI/EJKZvSANE1Lzpv1JQuc9W7sdgTn2CiS3Ff63z2lHjAEbOTo8RqaseqVuxZ403/YnkZUFb6pgBWQPiYt8Kr/OOPdCJdu3q9A96Zdr0xY4EPCEbsDuwVlfXnJqVe+qAVI4Qm5jdErPPAi4Y/bCjts8FIVQP438Mo+wR0LvLDPHj46KOg5KOg8ICgfGLRa4OV9Avu/maYFPliuBg49WDggEPli0ZOSC/BFVdAoiuI1jphn6+8ygCdYUF5lgTiwUBOUJ9/yAPHdm7XAlHDGC3xi21WfElxgWOCLPad+WmCBLW65QdppIMaAo4IjfuCB8k+CD1iiP+8H5UmBAzjC7KH8peABJwRGPPKAlPFrIewFPpG2A9In8ANLvPPIBaZj5vPDHOARaTsg+nwuYEXaDkiv5wJbXM9SYAcUdoPDYRcQoiZBkXYCYkBzuIpYmmbq3YARoiXmY+4FhcODLhA+wZnjU+b5HsAT7PMd0BD2CRdw6t/wAL/w1B+xwRGOiNYAfGEAd70B/gO3dgxcJ/3RlwAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_454\",\r\n id: \"454\",\r\n ProductCode: \"DPP6565ZL\",\r\n ProductDescription: \"65X65 Pop Square Zincalume\",\r\n ProductIndex: \"PO656Z\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"296561\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.14\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.84\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABVBAMAAAAlGd5XAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo1NzoxNiArMDkzMDwRAxEAAAAHdElNRQfiBBIDIDFe1LM8AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9Pf85efv0NPdvb/D7/H09///rbG5kJOaZmlva3B4c3N7qa2xdnmAVVhdc3NzocGWpwAAAAF0Uk5TAEDm2GYAAAQ/SURBVHjatdbvaxxFGAfwTZMWRYXOXW6o4IvuNdD6IpDrLiJKwOS22EYDPYzlxL5wQea1VWSVprFNExJz5yvzQnPlfBu8eG9U8G7CEUnLXcz0TU/wRdO+EhqtVbD+AT4z+3N2926D4LzIwd4nk+f77DNDFCW09DH4MWO8oySumdzImDI0kTGOJsnBHEIz2hmEUJIdPIOImbp/CxGMjPP95OE8IgT9tFNd5J99rY4JwVNLc7S6iDFBem+rXyDEHP3FmqPN+jz8lqkf7xX+BUzMYxuWNVfjFmrAerwcmkAEvbtuWdbHQGv1LsEkY8SHhz1T9yybUti3i7iN9uzwJC+u1BaUilV/DI9irAGlmeeWuLR2qGP/gTZEeqZfgKcQ3qVNXkKttQhFmbIdUXn4TcujNfo1L7g6j7CJgj0bgjah4XXLp9TemNbnTRzsL3/zxA4v1SrsHZMQ4tpDkwg6aoePUFrvwrZYTLEyYEA9bnixPqWyhRrQCLe6ijAaDcgQpfVvkW1Pni4gVNy0elPaWoWWpb9XVrMqGr5hWbM+XaERizLlo0qxq6Z/sKQVoWA7vAcXfy4xnr7t7RyldP+maNbrpbbTqJ70q5wYm5Nq6rN2/wKql7AJozs8qaLUCutH63xqUmXl5fdVhFK7rN2Tth5DX83OeeXI5Q8RxplSm/WgjQd8usbFm52+BPcE2l1yOztbksMXYOhPbYkODPz5I0KmeXupHUfXcvBWn7thT9ZApXqL3yafuPauFB6+Sa/fdOa1xm8TOEVXysKyu8HwYpTZtkedkzEt6g1QCA+b7jB23aHUPkXwcJwfxFmPNn7lgafKjC06VMSo3uHdG98L0CaER2h0jzF2zaH2V9Uuvwpe3Gt7sf5S4Q8V10Gyq8FdxbTb1qHVCX6Ov2AxFG4efjJObdq0fo3wS4zFUlr/XNjfRfi/IVJmxZZsy6G7fhtXkUlw8SEPz6+7c2WHvhehtPWA1/v2w+Y+750I34sKa+KpRyp8FDdcyV5x6GVpOv8oYHTsUQ674fnqjDn0NXk+9wvDv218k0vfYz5177cpeeob392nG4yusAB1b8KXwmepRiFP+SAU1h6Tlkefj9LNHvStg9NnEynrQ0O1tl36ZCJ1T6HyVCLdPjh1T6HyTCJ1T6HyRCK92oeW/w/aDNGt/0CfjtBGiLrnRRmqJNCy98/DoduVvnRZ86kRthLtfKAd92nYtgK0s635dNAwjCuSbQXkdS1EZdvw6YIWocZ0JY6WtRhqnF2L0mUtlhpnK+Fal/MhmtYc6/Wh5Yfn63SAhm3DD89X1qNvaJ51+iBoZ8HZMytT2Tb88LBnmEq24Yfn0qcntKD9aE1QN3w2jroW+tvww8dT3zbd8LaMobprv1wIFApLjVBv31elPeOpY/PSnj49kg1QPUA9mS04dCAbsXlZvhmgQasl0OwJad+8LG36L4v19Qh/AqnqAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_455\",\r\n id: \"455\",\r\n ProductCode: \"DPPR75ZLF\",\r\n ProductDescription: \"75mm Rnd Pop (Suit Pvc & Metal) Zincalume\",\r\n ProductIndex: \"PO75Z\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"270751\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.1\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.16\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"7.00\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_456\",\r\n id: \"456\",\r\n ProductCode: \"DPPR90ZLF\",\r\n ProductDescription: \"90mm Rnd Pop (Suit Pvc & Metal D/Pipe) Zincalume\",\r\n ProductIndex: \"PO90SWZ\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"270901\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.452\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.18\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.39\",\r\n AncillaryParts: \"8xRI43100\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABOBAMAAAC06Nf4AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo1Mzo0NiArMDkzMH0arQ8AAAAHdElNRQfiBBIDGA1mJHNAAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f35+fn2trazs7O7+/vwcHBtbW1paWllJSUiIiIe3t7nJycra2tc3NzWlpaMezjNwAAAAF0Uk5TAEDm2GYAAATzSURBVHjajdZbbNtUGABgJ127dQLtAs9QUo3BE6VmdEJIjDUEOnVjLzwiVRS57dSICVDdTi1MWqFOlQ60bl1P6lSIy1Q7rEK8oMbIQ7sUJ3IBoUEvqoe4SKgNcl54YKuU8J9jJ/U13nmynP87//l9nP+YopyjPraSE29QPmOP88bjCUlACKXS3XvvBxzMZ5E5Utn0S0Ggbk1A1pGZe7smeF0kM1vJzNwRf9C5QOJtALKM+oFj1uWkRDyMy6tNnqCjGp9DIj8uSZKuS1kR3xWOeIAnK/FqLt3d/HJGkmQdjwJOI3a5QINglMsn00fbkkjRtBUumUthVBBswgD1ZqXTidFn1ydYViNAzaFUpljScZIWO3iOVCekx2/HIdwCkCjKZR0288uTVtBgFJAeF5QVzglMccUKTpF4fkiYWOHcQAIBM97aBmYCTRyDeA8g6WWoPNVSBcdI/FR+THMB2EB4wnqxlEX8lQoIGwk60iO+QC9uCXzutAkaSfxkckSrghELwEvS9XKKV6dNcIaA4x9q3oBk0Iv/8ap6loAQeUmnXolbAOsCeqlPVb4nYCd5Ka/jBLVAcYpXkl0Y7CYraotrNZeky/8mFW4SA/JQ+YODAUD653mFW8VglZQQWwlYkpR9QuG00wDILnzawwUBKQrgOoANDC7FuaAlST8DGAHwPk5xo5cAzRPIBrgFYLhpDxXGKUZ7uYkgcInjNPYn2Ok1DAbvA0AG9lcAjwC4yREANSSXPUFBki5gwP5GUbugiM+5SgYPIBlgEoOBjygqdBf2ob+6JF8wgGsY+BHepxPQLvpqAGNJ8mHOzEA1wpr6A8FCJwa9rwIIbSI0pgSBv5IYnCJd4ykBXQ7MsKhiMEZAHZTdZwUsnHK4zVqL7lRhTvYro/O9hdDSkvkyLbOJpYH2x/bta2aGM2IVfKNicKbLADvuIX7YzKCOVfsoFWqbyZpgmIBEpXu/IAhpvCYukd4OJ+SwTGr4O0fA7xUQLiC0DiBxznUK1s0CKCR4VeEm7jRVD5RHNxCvaKu/eBy0+2d1/VtEwJ/bJ9DusoD43AeU13joGvwDMDjfsg0a9RKIFz1BaI2cZUryD8sZ90Dh2hZM84ZHfHiI9BVVEfdawK6CXLwH92+fdMY/nDBOD/WHs9ZT9EFdhhYNP1xutU9/3Dxd+fzX1lOU2gnAELz67iHzZj0dz1VO7/xdygYaZLw9xTLpUiI/rbEjg9bPjlRpyg52EKDL5U3kNWZK6qId1OlmbyiWFtzx81uKetMOwhWQnS+X7F9NKFXcgHfyoh2EqkAUgWQt4XJpDpqJesEOKF2qAhGl9LK5soxcWoCXAsAXDiBbATzbfHEzI+ulTaSqBvgkAKjcfEGY1rR1PzDvAkYzDASSBXBW8LEDzHpksIHvHOA9nyWtmsD4cLDsw4mCbvRcH5BvcYCOAKA87QAxH5AwgPqZA9TH7vgDuMx3u0B/TZCmDzkBM1sDJM65QJTp8wRJAqZpJwhHY8x5P6CMv0PTB5wgyvTIPkC9SLvBM1GG6fcBV9tputUNYgyU4QXmopCgNeIFmD7ZBfIkno64MxARn9+0g9RitN0T0CAYPIYy2W2AlrppMlojEQ8QI4IZRJmsyOeQwC8fjRjxdMSVoZmOWkash2XfJPNWE7xmB/ubcQrrMOaNVBK4APziim+tALg4UAH/A+cFpxhYpP38AAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_458\",\r\n id: \"458\",\r\n ProductCode: \"PDCTB100100\",\r\n ProductDescription: \"Powder Coating Tube 100X100 P/M\",\r\n ProductIndex: \"POW100RHS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"990100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"12\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: ' Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"5.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_459\",\r\n id: \"459\",\r\n ProductCode: \"PDCTB5050\",\r\n ProductDescription: \"Powder Coating Tube 50X50 P/M\",\r\n ProductIndex: \"POW50RHS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"990050\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: ' Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"5.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_460\",\r\n id: \"460\",\r\n ProductCode: \"PDCTB7575\",\r\n ProductDescription: \"Powder Coating Tube 75X75 P/M\",\r\n ProductIndex: \"POW75RHS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"990075\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: ' Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"5.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN4AAACXBAMAAACIHvggAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNCBBcHIgMjAxOCAyMToyNDoxMSArMDkzMBwsu74AAAAHdElNRQfiBQcLGTBz49G1AAAACXBIWXMAAArwAAAK8AFCrDSYAAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f3pKSkXl5eOTk5ISEhCAgIAAAAg4ODzs7O5+fnFBQU7+/vvb293t7e1tbWFGvnpAAAAAF0Uk5TAEDm2GYAAAdXSURBVHja7VpfiFRVGD8zO4vrtLMuSSpIubHB+FRmW2MPgSkyhFRC4vUlsnoYkATdmZ2jTtpGfwYfKgtkfVwi2cCXTYiJiNqHchFfNjT2oZcFg32IQIVSiKDz/Tn/rmdE7xiBnN/D7jn33nN+3/ed73z3O98dISIiIiIiIiIiIiIiIiL+P0hEa/vH9tLDY4n8estVbC+rmyexNaRaR7HVr1pLemRz95af9cAVUsOZ+PEQn8KL+sqVGvYbI3ruSbw8oFrjWoYJd2Tzue58Ci+E+eQmurBO9xugYZ+5UVCtOrbK1LAjtaxhPjkS5qPJhqrmwhuqW1L/Z/HGDIiArYqUx3w+FqkL33iYj+z2t/QEy6l/x7VWUg5DK5HyUIqvMXwbvtacz3dQ5G6qOeRXqltMnFlAi6qWD/VegEfU/616pHhkY2IUXEFMzsTiZsc4gHsZ12mcV0nu/VRcr4Bg00K02dC5mjZBnv/zSJFPtM0CfOIsS5e6DOLDvG1eN7EyIamnyBmBpUMj+3iL6JFitbZZiC9vHMDnK+O8g2rO5gLe+JEM+oD6N0csO6XcR1uk5Y5EB0KNQ3xF+5jHp9yvSZvsGN0odlDjPnboNVKOSXlEtebZwnaih1RzVxc+0YWPnu23+xBNO2dWa1HK92iZyrxadqI8Sxniy7EsYT61WnKa76xHzYZ4vZXNPiPFKrxDHMHVWh/uwldyNHBH3cD1094ohAktaq7XccpWkVynygI7fDwsxFdIBRjHX+oou4kGedKMokkJbieg/KAW2OFbJElCfG3277SZE2RKyCUQq8jyi2irAbhdAVFLvO1dvmVyWRNfDurbg5etA3p8qym+KJ98W98ZpFtrUfF+eBmVQbMBHdYcPlYszdclXqt4dprDjue81Cmg7Mtg27Xwp6DD9p3yvSpSfDrmiiAf6HMVlmESqA4B6eG74ds23IXveeoZe+YoEq1Ei1Rh0QZgLRb1Ejt8M+H1AzTfFWG+Om+ktL/Amm4qYvQpgWptHQ8dvimyTto/yWzTQb4G+lw1tR/A8ZVX7sqjPOodUYdHNqX5yt3232W2W5pvYssS9iqp/T5Jkx0tkBxV2YL30kiaj7dtYP+5E6ZH0dxNrf963mjKNcfXUAxTtvxHYnLmjSzW6HaA76fgfjCY9+M1vnfU1quXaSnVOm008cKOHOAYG+CDRfmuO1+fDQdDHXZ8da1RIdOql+FTxkB25BQrEYpn1ZRBfT5w/hZlumdUcz/7zUSVTKuodxiPMiMh58EQEOKbkjphDvHhq/ocNEoJuwvuw5psDhP1HkrO3JF/St5FIb4+Gc5fGBcxJFzLXYd0jLI8ysxQgSF05q3+yHU17RPBfKLmJ6ApvpJ08L1xHB3DQGmd3tHIDaMdHSzC+UTbT0BTfJTWcihasO4g3zHm1svhSjZp+ExA0xNflN4LPs1X6phBr/ElSNE4BwFpWuIWvnOiO1/eCBvkE1+YgKoDOyw5izgvrXtbuvrcbfiE9t4ufBjzFN40XgwScpCAbGQ8zffNkrgdX9kLMbfyic/HOnL3ZvvaQq+kLkSS4x5fa/sJ82CYr5AOMRERERERERER9wdOP+1mTblLO2TrlU/cB3KQqdLZxst9b8m/7gTFDzgrnMbu0DPU3eY8kvdz+574ch/qwfuw29bdl+0zWAqevTd8p/zBv9kzxYh55oaU7lmwF768P3iVPVM4ZyvUuXFP+Mr+4DPubAva5B3ZkrZaKoKp+p0BD4GtzdfEhdEan8HlxInhVaNw/Vtrg3ri1foz88GRjetQ62bp0EDrdso5Hil3OVzxasWZ+dQ08iVuDxP9AewMVq1Bl9WhvewVN7PyQZGi4VT12pbkrD2sqqu75r1iR1a+PmeVAImdFUzLBUTls5PKps25nvnOewdEVPcotyGG0Y6ALXNSfyzoja/sl7gHpHPgr2hdC/AQlJytw2Tlq+jqhzWvUbest/gyPlR16qWZ+ap+SR2+uZiz/A2texuZyq7DZOVL7HoB9BcrBBQosNFBS6pu03hyVr7UOK9qpDsl8hTv68l/yccfAfkbTM98h1J8xp5rub40Q+sIDnrEGZeJr+M6XRd/abMPu+XUHvzTrSAWUvvB+3Cg+i3tMD3sP6fg5XzyF2ZvemVLLUxWvrb0SsDgE/u5DfHsGMtgsLVHvmXplYAHpR+vIUWacfl0tTErX0H6NfWKfR/9zgG67fLp4JeVD7MlvWJzVN/9ATtQicfvIYnL5xRgs73fsVZOGn05S4vVGoHeL9K6C1u83zpMZr6/MNP7aFr88T7MAD8CkI0nhjc8Btfh85PzynDeVpn5nPQTZ1h0jbck6McBc/Ss/dlPdj7XHfRvIDQO8H3jUFXjMNn5nCI9zvCr6U7ggShxIlA58AHrrnHFEOCBpGh+9PMkiiPpxzKINWa39MAnLtGPpuTeaVKYCJvPYs+LcLbTC594cGyPnLC19+LoTtV9lDrn3YAHyr7VO19ERERERERERERERETE/YJ/Ad8nNgfOpEGlAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_461\",\r\n id: \"461\",\r\n ProductCode: \"PDCBKC\",\r\n ProductDescription: \"Powder Coating Back Channel P/M\",\r\n ProductIndex: \"POWBCR\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"990200\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'PCP Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"9.2501\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_462\",\r\n id: \"462\",\r\n ProductCode: \"PDCCNBK\",\r\n ProductDescription: \"Powder Coating Cent. V/Dah Bkts\",\r\n ProductIndex: \"POWBK\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"990000\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'VB CB Desc=\"P/Coat\" AltIndex=\"POWBK83,POWDBK83\"',\r\n Colours: \"\",\r\n LiveCost: \"3\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_463\",\r\n id: \"463\",\r\n ProductCode: \"PDCCNBK69\",\r\n ProductDescription: \"Powder Coating Cent. V/Dah Bkts - BK69\",\r\n ProductIndex: \"POWBK69\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"990069\",\r\n SellingUOM: \"EA\",\r\n Cost: \"19.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'CFC Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"19.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_464\",\r\n id: \"464\",\r\n ProductCode: \"PDCCNBK75\",\r\n ProductDescription: \"Powder Coating Cen Post/Fascia Conn BK75\",\r\n ProductIndex: \"POWBK75\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"990075\",\r\n SellingUOM: \"EA\",\r\n Cost: \"11\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'CFC Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"10\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_465\",\r\n id: \"465\",\r\n ProductCode: \"PDCCB1505034\",\r\n ProductDescription: \"Powder Coating Curved Beams 150X50 3-4Mtr Span\",\r\n ProductIndex: \"POWCC3RHS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"990004\",\r\n SellingUOM: \"LM\",\r\n Cost: \"18\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: 'CFC Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"18\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_466\",\r\n id: \"466\",\r\n ProductCode: \"PDCCB1505056\",\r\n ProductDescription: \"Powder Coating Curved Beams 150X50 4-6Mtr Span\",\r\n ProductIndex: \"POWCC6RHS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"990006\",\r\n SellingUOM: \"LM\",\r\n Cost: \"25\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: 'CFC Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"25\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_467\",\r\n id: \"467\",\r\n ProductCode: \"PDCCNCON20\",\r\n ProductDescription: \"Powder Coating Cent. V/Dah Bkts - Con20 Spider\",\r\n ProductIndex: \"POWCON20\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"990120\",\r\n SellingUOM: \"EA\",\r\n Cost: \"20\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0.002\",\r\n PromptTextCodes: 'CFC Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"45\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_468\",\r\n id: \"468\",\r\n ProductCode: \"PDCTB6565\",\r\n ProductDescription: \"Powder Coating Tube 65X65 P/M\",\r\n ProductIndex: \"POWRHS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"990065\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_BUYINS_$$\",\r\n MarkupCarport: \"$$_BUYINS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: ' Desc=\"P/Coat\"',\r\n Colours: \"\",\r\n LiveCost: \"5.5\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_469\",\r\n id: \"469\",\r\n ProductCode: \"FMKIIPPCDFDO\",\r\n ProductDescription: \"Panel Fence Plastic Cap Double Classic Cream\",\r\n ProductIndex: \"PPFCCC\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"820009\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.43\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.02\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.14\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_470\",\r\n id: \"470\",\r\n ProductCode: \"FMKIIPPCDFPB\",\r\n ProductDescription: \"Panel Fence Plastic Cap Double Paperbark\",\r\n ProductIndex: \"PPFCPB\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"820009\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.43\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.02\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.14\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_471\",\r\n id: \"471\",\r\n ProductCode: \"FMKIIPPCDFWG\",\r\n ProductDescription: \"Panel Fence Plastic Cap Double Woodland Grey\",\r\n ProductIndex: \"PPFCWG\",\r\n GroupingName: \"Slats\",\r\n ProductGroup: \"751\",\r\n SubGroup: \"820009\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.43\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SLATS_$$\",\r\n MarkupCarport: \"$$_SLATS_$$\",\r\n SellingUnitWeight: \"0.02\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.14\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_472\",\r\n id: \"472\",\r\n ProductCode: \"PCSSRB**\",\r\n ProductDescription: \"Ampelite Solasafe Corr Polycarb Sheet 760 Cover\",\r\n ProductIndex: \"PSC\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"201300\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.6\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Clear,Light Bronze,Grey,Opal,Dark Tint,Smooth Cream\",\r\n LiveCost: \"15.87\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRCAYmADn10AAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAYUExURf///+/v7/f39+fn597e3tbW1s7Ozr29vec5KDgAAAABdFJOUwBA5thmAAADUElEQVR42u2VwXbbNhBFKbkfYBJq1gapDzAwkNaRMUS39SEIb9uSGP5Ayvx+H+Q0UY9TR04W3RSHh9Tmzpt5MwNV1f/nR4+iavfwfeiGqc/M5IZq21RV+ybYeSejDzlykvSwl/dVZ65Et0dyMvmDeB9Wjk9rH3vJ9zdyX1XfirF1hsPgwLrj6vkIPq3jmFaRLomtbsbbV1hPYVZeULKwZ5ldLxJ5WVmWVfJBlqlyJYv2a6wOk/Ihmp3MTE8fHD/9yZxWzuPHuUeAIAFZNHuRuxc5qz47c5yJgjhC0T4skXmZDzPEkX2WjACLfEQK/yzAGX3Ip8KqXh69WyYHzvlfVi4BUhQIjyKSZcXnj0tdbjqOpnYz2b34YrrzAc7xMvWwjVG6JHBc8CTy2wVMdU2z0S77RsmgKGRCgMH5UnVfAoSFRygmiSmjf+8vc25VMGBOug7zmVOUMvl3SLr0vEfmMcUlB+BzkvDFMWdtlx50e5w7u5NTR09T549I2gtm1cF77mUeYyiy0JYLWDW6G01h63YP1sK1GohyvCJAwMBwEA6AOc1nOH6ut2k1+1Yf5qbtZGjtMdMeARRROpcwE2NikDpeRZslP/6t27Y6gHXZtnWYtFHpscOceDJuodJ0T0W4pB77QuL7qVNbbTfpBLa3uoG4sseps4jSeQVNoiIM9x2My1w2pTy/ftnhRjcIoG9/EqNu9x/Idj/jFx3lgaisCfZ0dhhUDDtIRpDPndreVduOoduJb0vVyqLXnelkQtnoOJ8joO6IukHiub8czhYBNnCt3YTYll7XVr3LhqA5AIYmY825NB3yuX+xVgYBdMhIYS9Go1dTXSOMeZ61UjJc5xTdGPmrO0220kYvk6aaslV0Tt2UYeXnljnxPDL966XQhlOLaVm8Jjp3m9Kw8yjAl9yz5+xfuZNwUWDU55pg4e8a7ZbTztNhNiV3yGe2r99nyldbhXxNrcqOP99QuJNDJB7dffXNs6Xebgjr5VUxzZeS0/l9BVxp7E5nDmVgaCfkcDOOniKr2yvg8+mGu0qd0EPl2RxQAQ98LfupAMcWtpOLeE7qTTDopvwXmRF+sbdvg8/nBvWaLjBd49dLfQUHd0xX+/XyuB+BN/ru++H//vwFlbgnU4v3xJ8AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_473\",\r\n id: \"473\",\r\n ProductCode: \"PCSCDK310OP\",\r\n ProductDescription: \"C-Dek 310 Polycarb (1.50mm Thick) Sheet (Opal Only)\",\r\n ProductIndex: \"PSCD\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"206000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"29.68\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_CDECKPOLYCARB\",\r\n MarkupCarport: \"$$_CDECKPOLYCARB\",\r\n SellingUnitWeight: \"0.5\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Opal\",\r\n LiveCost: \"50.05\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRBzktxGlBWQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v797e3ufn587Ozr29va2traCgoJSUlIyMjH9/f29vb15eXigoKNbW1iis9xUAAAABdFJOUwBA5thmAAAD0ElEQVR42u2VvW/bRhjGRTedupCqMydmtBatLcoZFVdyVxVRT/RUDqk+NgMtRF69OEvNO3lwlyI8am3RiMxUtIAkynNRiPQfYFEGGrRIgaIcIskZ2Ze0LaqoE8dz8hISREC/e96P5+5SqbfxhgeXmdxeeLsOKWTyqMnP39OIT73uSpx4p1JD23Pl9PreIvwu/wo0XcwjhOrNC3ip1FAXSki9t3oFWoPPmhC982KpVlMXxT749HJUEDLZEDgEaWNLV+CHpiJNU1f4aKWUGC3y+ZeXq4rF/Cxi1ckptTqm0/Y9X6/VNbn1Y5UQomlVpOSPfr4MTheyMYpQKLf6fcMc+I733UxW0Y71iFiWxdwxRPAT93/ZQhZShqQrioRNi5GW4w0Pf1lvyk3ZfKxRu2OZZ/Dv/2k3lxJEsViATikgLW3umJZB9h3vePBrviY3ZzvM0Kg5h/8QFuElLpOVsmEYAhpK6y0DWOp4o0G3LG+ryhajep2a7AL+cxFOi9DjbD5UQqSE4QvTMAmwh/6guwtJ735iErrXYCbrtL0YfpbUzBWXp0DGuoqUq3eIpRNqu97Q+WqziuphwyCGihmLYX/sB38lujf1TBlaFeaRki3MNEr7OgZ2PLIOSkip379rYKLXqAGw7bqQePB30rBbhjSJlPNoWpxhkz3WMLMHY9c6KCAkb+caOjZUmRKAn7iuN/aCf+4l3cLlaZQ1er4sU2YwqNdyPd/54QYMvDrdAnOQasOgzOxdwB8lNePyJFQm4dqdBiEwE2xCvd6wt5crn1bKOYwJ0SuYANwZuFEEQWJuQZ6GQG/MvgZRggkzPd93nb4OY9/Oy5GwWoF0qGXFsB8EC+beAmespl6AAgX3klb0F8cZEtgWn22SOOs6fFHbulB+uAA3pY/fbxhG5HxMLeiV59iDEQG/FaASHetIi+D+HP4+ge8+KN6keqTQ1KIZue7QHnijR7Pq2imUoZMmgqxIq992z9PuJvBydgbWBRdBW5jlwPI9WOKYoPslrEdPNS683TuD3ZNAXbRn7hR6TL64tQ82Yu2hBcLeMa5uyFAH1IKikol9Dg9OgmTOHPiFTwnpJf6dCpRsdcvrrcOxOyKrOV0DYaLGWRO7O1feeMkZls5KYo7CdvxNKoAwhF6tRDBz7HbcsOFJIL7sBBSicyEj5Z7f2GI6TI58U5SjZpMeeXKu/Ow17gCBK8FBqD1Ixw4lux/uD51I+egpfzXLn90NK6kSzJmyg6KmMxvwo6e3r1ZOgoOrq3CPq2HYq87g5NvrXF1nwcMDQxGl3Mq12bcB8S/YxldnFO/R0gAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_474\",\r\n id: \"474\",\r\n ProductCode: \"PCHR1CO**\",\r\n ProductDescription: \"Ampelite HR1 Corr Polycarb Sheet 760 Cover **\",\r\n ProductIndex: \"PSCHR1\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"204000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"13.53\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Pearl Ice,Silver Mist\",\r\n LiveCost: \"26.86\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRCAYmADn10AAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAYUExURf///+/v7/f39+fn597e3tbW1s7Ozr29vec5KDgAAAABdFJOUwBA5thmAAADUElEQVR42u2VwXbbNhBFKbkfYBJq1gapDzAwkNaRMUS39SEIb9uSGP5Ayvx+H+Q0UY9TR04W3RSHh9Tmzpt5MwNV1f/nR4+iavfwfeiGqc/M5IZq21RV+ybYeSejDzlykvSwl/dVZ65Et0dyMvmDeB9Wjk9rH3vJ9zdyX1XfirF1hsPgwLrj6vkIPq3jmFaRLomtbsbbV1hPYVZeULKwZ5ldLxJ5WVmWVfJBlqlyJYv2a6wOk/Ihmp3MTE8fHD/9yZxWzuPHuUeAIAFZNHuRuxc5qz47c5yJgjhC0T4skXmZDzPEkX2WjACLfEQK/yzAGX3Ip8KqXh69WyYHzvlfVi4BUhQIjyKSZcXnj0tdbjqOpnYz2b34YrrzAc7xMvWwjVG6JHBc8CTy2wVMdU2z0S77RsmgKGRCgMH5UnVfAoSFRygmiSmjf+8vc25VMGBOug7zmVOUMvl3SLr0vEfmMcUlB+BzkvDFMWdtlx50e5w7u5NTR09T549I2gtm1cF77mUeYyiy0JYLWDW6G01h63YP1sK1GohyvCJAwMBwEA6AOc1nOH6ut2k1+1Yf5qbtZGjtMdMeARRROpcwE2NikDpeRZslP/6t27Y6gHXZtnWYtFHpscOceDJuodJ0T0W4pB77QuL7qVNbbTfpBLa3uoG4sseps4jSeQVNoiIM9x2My1w2pTy/ftnhRjcIoG9/EqNu9x/Idj/jFx3lgaisCfZ0dhhUDDtIRpDPndreVduOoduJb0vVyqLXnelkQtnoOJ8joO6IukHiub8czhYBNnCt3YTYll7XVr3LhqA5AIYmY825NB3yuX+xVgYBdMhIYS9Go1dTXSOMeZ61UjJc5xTdGPmrO0220kYvk6aaslV0Tt2UYeXnljnxPDL966XQhlOLaVm8Jjp3m9Kw8yjAl9yz5+xfuZNwUWDU55pg4e8a7ZbTztNhNiV3yGe2r99nyldbhXxNrcqOP99QuJNDJB7dffXNs6Xebgjr5VUxzZeS0/l9BVxp7E5nDmVgaCfkcDOOniKr2yvg8+mGu0qd0EPl2RxQAQ98LfupAMcWtpOLeE7qTTDopvwXmRF+sbdvg8/nBvWaLjBd49dLfQUHd0xX+/XyuB+BN/ru++H//vwFlbgnU4v3xJ8AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_475\",\r\n id: \"475\",\r\n ProductCode: \"PCSSRBSF**\",\r\n ProductDescription: \"Ampelite Solafrost Corr Polycarb Sheet 760 Cover **\",\r\n ProductIndex: \"PSCOSF\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"201200\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.6\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Clear,Grey\",\r\n LiveCost: \"22.57\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRCAYmADn10AAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAYUExURf///+/v7/f39+fn597e3tbW1s7Ozr29vec5KDgAAAABdFJOUwBA5thmAAADUElEQVR42u2VwXbbNhBFKbkfYBJq1gapDzAwkNaRMUS39SEIb9uSGP5Ayvx+H+Q0UY9TR04W3RSHh9Tmzpt5MwNV1f/nR4+iavfwfeiGqc/M5IZq21RV+ybYeSejDzlykvSwl/dVZ65Et0dyMvmDeB9Wjk9rH3vJ9zdyX1XfirF1hsPgwLrj6vkIPq3jmFaRLomtbsbbV1hPYVZeULKwZ5ldLxJ5WVmWVfJBlqlyJYv2a6wOk/Ihmp3MTE8fHD/9yZxWzuPHuUeAIAFZNHuRuxc5qz47c5yJgjhC0T4skXmZDzPEkX2WjACLfEQK/yzAGX3Ip8KqXh69WyYHzvlfVi4BUhQIjyKSZcXnj0tdbjqOpnYz2b34YrrzAc7xMvWwjVG6JHBc8CTy2wVMdU2z0S77RsmgKGRCgMH5UnVfAoSFRygmiSmjf+8vc25VMGBOug7zmVOUMvl3SLr0vEfmMcUlB+BzkvDFMWdtlx50e5w7u5NTR09T549I2gtm1cF77mUeYyiy0JYLWDW6G01h63YP1sK1GohyvCJAwMBwEA6AOc1nOH6ut2k1+1Yf5qbtZGjtMdMeARRROpcwE2NikDpeRZslP/6t27Y6gHXZtnWYtFHpscOceDJuodJ0T0W4pB77QuL7qVNbbTfpBLa3uoG4sseps4jSeQVNoiIM9x2My1w2pTy/ftnhRjcIoG9/EqNu9x/Idj/jFx3lgaisCfZ0dhhUDDtIRpDPndreVduOoduJb0vVyqLXnelkQtnoOJ8joO6IukHiub8czhYBNnCt3YTYll7XVr3LhqA5AIYmY825NB3yuX+xVgYBdMhIYS9Go1dTXSOMeZ61UjJc5xTdGPmrO0220kYvk6aaslV0Tt2UYeXnljnxPDL966XQhlOLaVm8Jjp3m9Kw8yjAl9yz5+xfuZNwUWDU55pg4e8a7ZbTztNhNiV3yGe2r99nyldbhXxNrcqOP99QuJNDJB7dffXNs6Xebgjr5VUxzZeS0/l9BVxp7E5nDmVgaCfkcDOOniKr2yvg8+mGu0qd0EPl2RxQAQ98LfupAMcWtpOLeE7qTTDopvwXmRF+sbdvg8/nBvWaLjBd49dLfQUHd0xX+/XyuB+BN/ru++H//vwFlbgnU4v3xJ8AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_476\",\r\n id: \"476\",\r\n ProductCode: \"PCHR1CO**\",\r\n ProductDescription: \"Ampelite HR1 Corr Polycarb Sheet 760 Cover **\",\r\n ProductIndex: \"PSCPI\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"204000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"13.53\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Pearl Ice,Silver Mist\",\r\n LiveCost: \"26.86\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRCAYmADn10AAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAYUExURf///+/v7/f39+fn597e3tbW1s7Ozr29vec5KDgAAAABdFJOUwBA5thmAAADUElEQVR42u2VwXbbNhBFKbkfYBJq1gapDzAwkNaRMUS39SEIb9uSGP5Ayvx+H+Q0UY9TR04W3RSHh9Tmzpt5MwNV1f/nR4+iavfwfeiGqc/M5IZq21RV+ybYeSejDzlykvSwl/dVZ65Et0dyMvmDeB9Wjk9rH3vJ9zdyX1XfirF1hsPgwLrj6vkIPq3jmFaRLomtbsbbV1hPYVZeULKwZ5ldLxJ5WVmWVfJBlqlyJYv2a6wOk/Ihmp3MTE8fHD/9yZxWzuPHuUeAIAFZNHuRuxc5qz47c5yJgjhC0T4skXmZDzPEkX2WjACLfEQK/yzAGX3Ip8KqXh69WyYHzvlfVi4BUhQIjyKSZcXnj0tdbjqOpnYz2b34YrrzAc7xMvWwjVG6JHBc8CTy2wVMdU2z0S77RsmgKGRCgMH5UnVfAoSFRygmiSmjf+8vc25VMGBOug7zmVOUMvl3SLr0vEfmMcUlB+BzkvDFMWdtlx50e5w7u5NTR09T549I2gtm1cF77mUeYyiy0JYLWDW6G01h63YP1sK1GohyvCJAwMBwEA6AOc1nOH6ut2k1+1Yf5qbtZGjtMdMeARRROpcwE2NikDpeRZslP/6t27Y6gHXZtnWYtFHpscOceDJuodJ0T0W4pB77QuL7qVNbbTfpBLa3uoG4sseps4jSeQVNoiIM9x2My1w2pTy/ftnhRjcIoG9/EqNu9x/Idj/jFx3lgaisCfZ0dhhUDDtIRpDPndreVduOoduJb0vVyqLXnelkQtnoOJ8joO6IukHiub8czhYBNnCt3YTYll7XVr3LhqA5AIYmY825NB3yuX+xVgYBdMhIYS9Go1dTXSOMeZ61UjJc5xTdGPmrO0220kYvk6aaslV0Tt2UYeXnljnxPDL966XQhlOLaVm8Jjp3m9Kw8yjAl9yz5+xfuZNwUWDU55pg4e8a7ZbTztNhNiV3yGe2r99nyldbhXxNrcqOP99QuJNDJB7dffXNs6Xebgjr5VUxzZeS0/l9BVxp7E5nDmVgaCfkcDOOniKr2yvg8+mGu0qd0EPl2RxQAQ98LfupAMcWtpOLeE7qTTDopvwXmRF+sbdvg8/nBvWaLjBd49dLfQUHd0xX+/XyuB+BN/ru++H//vwFlbgnU4v3xJ8AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_477\",\r\n id: \"477\",\r\n ProductCode: \"PCHR1GR**\",\r\n ProductDescription: \"Ampelite HR1 Greca Polycarb Sheet 760 Cover **\",\r\n ProductIndex: \"PSGPI\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"204100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.6\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Pearl Ice,Silver Mist\",\r\n LiveCost: \"26.86\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_478\",\r\n id: \"478\",\r\n ProductCode: \"PCGR**\",\r\n ProductDescription: \"Ampelite Solasafe Greca Polycarb Sheet 760 Cover **\",\r\n ProductIndex: \"PSGR\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"202000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"14.38\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.912\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Clear,Light Bronze,Grey,Opal,Dark Tint\",\r\n LiveCost: \"15.87\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_480\",\r\n id: \"480\",\r\n ProductCode: \"PCSHRB640**\",\r\n ProductDescription: \"Ampelite Hi-Rib Polycarb Sheet (640 Cvr) **\",\r\n ProductIndex: \"PSHR\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"209001\",\r\n SellingUOM: \"LM\",\r\n Cost: \"17.17\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"1.3\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Clear,Light Bronze,Grey,Opal,Dark Tint\",\r\n LiveCost: \"24.22\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAArBAMAAABBUFG4AAAAB3RJTUUH4gQRCAESbsyXogAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn57m5uZiYmHt7e8bGxs7OznNzc1JSUkZGRtra2hwcHGtra15eXopjZEAAAAABdFJOUwBA5thmAAAEYUlEQVR42uWVP0zjdhTH7TC0A4PtqL0ON2BHrW5gIP7RI0OGO9VJqISqSrUNSBUdev5JBp1pgVYMWcofkSFrLIWqyYZ0iS5ZWEgECEIEg9W9jTwmkkH9eQEkHJ3dnxNBigA1x1Spb4qjfPK+773veyaI/32Q9OPZwbgSfiQafKIpycOeCqp/lCbGkLLK8dQ1Wp96j8Sjs2IaAMB2n6iPHOWwT5Ih6s5UjeFY4BdNU+QHm83kSr95fy5PRXkGAH5MmsA8Ob81YaR7VQ8IC8T9PSCpQPxyHPA8YOknM4VCpSXIe5PpmnFw07Tf9yeH7s9KDcxYiQMG0IAdlp1C9UorVl8ZtahxU/TgWUt8oIjB+WaiRoeGWPqZXHaqJfe0+moCgIhhpMJd1zz/Q1xavNWjazc9U1tTYY6lQ3Twp9PTahnNVjMCiKTBcCyHlMlDmgzMXYobSbbHDkiJg+6H7y4nWI7jaJpZPy1jVq9uiStRPmQczZfbhZIiCfE/pcRGYqQHf9Z4822nHZ86FwsMy9MEGcs71bKn/7UnroIoMIDsnla8K2ifNS7F4+WlX667FyBfV5oifiKJ56XmAk0TDLOmFQoFLzO3r4zzIX6YX1ftItYx71YrmUQqtSEIyzWK9T3xsYnhIX9MXzWTFM2OEKOaUyx4EBc8znOhUHhsBjkVtwWR13gjJlOp1LRre5aYHiICr839jA9Tg+pLIsDT5JHmOYWypRa3JmscCAEmbtnFEtI1q93IJNKp1NIMwnApC6W4ae4oncxjL0mKoYhPZny2Be1KZhWEeI4f1XKnFWTBnL1bEtNGKhVTkee1oGp7u6ZZUgTfNHj/KYI81jyvWLag5ux9E8TbQX8oZ+1CCWWmrXc4sWGkT+JWznaRDrNo12wgSbhxazBm40ZfQdVxvid4jqOC9ZbmlK2soqHdHWnZOEkfyVkPK4Mwa781G5Yk/GPqxzHZbqmec05RJJ55RM15bddSplG70Zys4czrvmArJ2vINs1GS0zcXg8uBotb/jEIM/SX2ZxTdhVJzVf3pGVgGIYMLdvNQlnNOqZZ0cWJ2+eODoC1Rd+DwyOf68guuKouw1/PI0ISG2ZMhlmvA1vtDvzFnVsZ6Hbh6XQr55VRS1LRzguCq2G4DnEhFlQw/M409xXhLkx0vmHr+qZTuMK/tOxzMkzwoAZiEOY9HUqyirrwIvnAWWEigooQknCP/EVkonwEq86jLowndaUkVu6DO34nWTK6FpP1swv/lgQMbs0fURYq+P/yvkek+2EcQyR2D97QIyn/NUWyBAlCMb9knFhScrN4UiUlcfCQ7Ovh4eviayG5YVnOar6tMTxnmhcxafzf4F7UsbNsF6uWIGyb23idUgd9oiSzLsOcq+sYlt3fGj8SuCX9v9SepvDIEVYtQ/3ttt9Shu0bxhE8WZJwqNONFzTVnUp/QXf2liEiMVnd3O67U72gfPsxQJB/eH8Wz62jlgj1L/hO+gDxCNX/rfgbxHML7ko6STMAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_481\",\r\n id: \"481\",\r\n ProductCode: \"PCSSRB**\",\r\n ProductDescription: \"Ampelite Solasafe Corr Polycarb Sheet 760 Cover ** !!!!mm\",\r\n ProductIndex: \"PSSM\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"201300\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.6\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Clear,Light Bronze,Grey,Opal,Dark Tint,Smooth Cream\",\r\n LiveCost: \"15.87\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAqBAMAAACKDIIdAAAAB3RJTUUH4gQRCAYmADn10AAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAYUExURf///+/v7/f39+fn597e3tbW1s7Ozr29vec5KDgAAAABdFJOUwBA5thmAAADUElEQVR42u2VwXbbNhBFKbkfYBJq1gapDzAwkNaRMUS39SEIb9uSGP5Ayvx+H+Q0UY9TR04W3RSHh9Tmzpt5MwNV1f/nR4+iavfwfeiGqc/M5IZq21RV+ybYeSejDzlykvSwl/dVZ65Et0dyMvmDeB9Wjk9rH3vJ9zdyX1XfirF1hsPgwLrj6vkIPq3jmFaRLomtbsbbV1hPYVZeULKwZ5ldLxJ5WVmWVfJBlqlyJYv2a6wOk/Ihmp3MTE8fHD/9yZxWzuPHuUeAIAFZNHuRuxc5qz47c5yJgjhC0T4skXmZDzPEkX2WjACLfEQK/yzAGX3Ip8KqXh69WyYHzvlfVi4BUhQIjyKSZcXnj0tdbjqOpnYz2b34YrrzAc7xMvWwjVG6JHBc8CTy2wVMdU2z0S77RsmgKGRCgMH5UnVfAoSFRygmiSmjf+8vc25VMGBOug7zmVOUMvl3SLr0vEfmMcUlB+BzkvDFMWdtlx50e5w7u5NTR09T549I2gtm1cF77mUeYyiy0JYLWDW6G01h63YP1sK1GohyvCJAwMBwEA6AOc1nOH6ut2k1+1Yf5qbtZGjtMdMeARRROpcwE2NikDpeRZslP/6t27Y6gHXZtnWYtFHpscOceDJuodJ0T0W4pB77QuL7qVNbbTfpBLa3uoG4sseps4jSeQVNoiIM9x2My1w2pTy/ftnhRjcIoG9/EqNu9x/Idj/jFx3lgaisCfZ0dhhUDDtIRpDPndreVduOoduJb0vVyqLXnelkQtnoOJ8joO6IukHiub8czhYBNnCt3YTYll7XVr3LhqA5AIYmY825NB3yuX+xVgYBdMhIYS9Go1dTXSOMeZ61UjJc5xTdGPmrO0220kYvk6aaslV0Tt2UYeXnljnxPDL966XQhlOLaVm8Jjp3m9Kw8yjAl9yz5+xfuZNwUWDU55pg4e8a7ZbTztNhNiV3yGe2r99nyldbhXxNrcqOP99QuJNDJB7dffXNs6Xebgjr5VUxzZeS0/l9BVxp7E5nDmVgaCfkcDOOniKr2yvg8+mGu0qd0EPl2RxQAQ98LfupAMcWtpOLeE7qTTDopvwXmRF+sbdvg8/nBvWaLjBd49dLfQUHd0xX+/XyuB+BN/ru++H//vwFlbgnU4v3xJ8AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_482\",\r\n id: \"482\",\r\n ProductCode: \"PCSTL5**\",\r\n ProductDescription: \"Ampelite Solasafe Tl-5 Polycarb Sheet 760 Cover **\",\r\n ProductIndex: \"PSTL\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"203300\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Clear,Light Bronze,Grey,Opal,Dark Tint\",\r\n LiveCost: \"8.5\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCA0bu6VgCgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURfX19efn59PT08bGxs3NzfHx8d/f37y8vOzs7NjY2LS0tLCwsJycnISEhKioqKCgoO1lOKAAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_483\",\r\n id: \"483\",\r\n ProductCode: \"PCSSTTL5**\",\r\n ProductDescription: \"Tl-5/M-Clad Polycarb 0.80mm Sheet 760 Cover Suntuff **\",\r\n ProductIndex: \"PSTL8\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"207001\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.39\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.912\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Opal\",\r\n LiveCost: \"8.95\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCA0bu6VgCgAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURfX19efn59PT08bGxs3NzfHx8d/f37y8vOzs7NjY2LS0tLCwsJycnISEhKioqKCgoO1lOKAAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_484\",\r\n id: \"484\",\r\n ProductCode: \"PVCSP756000\",\r\n ProductDescription: \"75mm Pvc Stormwater Pipe 6000mm\",\r\n ProductIndex: \"PVC75\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"801756\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10.5\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"12\",\r\n PromptTextCodes: \"Length=6000 AltIndex=DP75ROUND_INTERNAL\",\r\n Colours: \"White\",\r\n LiveCost: \"13.97\",\r\n AncillaryParts: \"4xST75Z\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_485\",\r\n id: \"485\",\r\n ProductCode: \"PVCSP906000\",\r\n ProductDescription: \"90mm Pvc Stormwater Pipe 6000mm\",\r\n ProductIndex: \"PVC90\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"801906\",\r\n SellingUOM: \"EA\",\r\n Cost: \"10.5\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"14\",\r\n PromptTextCodes: \"Length=6000 AltIndex=DP90ROUND_INTERNAL\",\r\n Colours: \"White\",\r\n LiveCost: \"13.82\",\r\n AncillaryParts: \"2xST90\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_486\",\r\n id: \"486\",\r\n ProductCode: \"DQG115CEC1P90**\",\r\n ProductDescription: \"115 D/Quad Gutter Ext Cast Cnr **\",\r\n ProductIndex: \"QGEC\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"111522\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.684\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.37\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_487\",\r\n id: \"487\",\r\n ProductCode: \"DQG115CEC135**\",\r\n ProductDescription: \"115 D/Quad Gutter Ext 135Deg Cnr **\",\r\n ProductIndex: \"QGEC135\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"111511\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.62\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"21.44\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_488\",\r\n id: \"488\",\r\n ProductCode: \"DQG115CEC135ZL\",\r\n ProductDescription: \"115 D/Quad Gutter Ext 135Deg Cnr Zincalume\",\r\n ProductIndex: \"QGEC135Z\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111511\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.21\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_489\",\r\n id: \"489\",\r\n ProductCode: \"DQG115CEC1P90ZL\",\r\n ProductDescription: \"115 D/Quad Gutter Ext Cast Cnr Zincalume\",\r\n ProductIndex: \"QGECZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111522\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.21\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_490\",\r\n id: \"490\",\r\n ProductCode: \"DQG115ECZL\",\r\n ProductDescription: \"115 D/Quad Gutter External Mitre (SA) Zincalume\",\r\n ProductIndex: \"QGEMZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111502\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9237\",\r\n MfgLocations: \"200 300 520 540 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.358\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"46.57\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_491\",\r\n id: \"491\",\r\n ProductCode: \"DQG115CIC1P90**\",\r\n ProductDescription: \"115 D/Quad Gutter Int Cast Cnr **\",\r\n ProductIndex: \"QGIC\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"111522\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.684\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.37\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_492\",\r\n id: \"492\",\r\n ProductCode: \"DQG115CIC135**\",\r\n ProductDescription: \"115 D/Quad Gutter Int 135Deg Cnr **\",\r\n ProductIndex: \"QGIC135\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"111511\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.62\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"21.44\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_493\",\r\n id: \"493\",\r\n ProductCode: \"DQG115CIC135ZL\",\r\n ProductDescription: \"115 D/Quad Gutter Int 135Deg Cnr Zincalume\",\r\n ProductIndex: \"QGIC135Z\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111511\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.83\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_494\",\r\n id: \"494\",\r\n ProductCode: \"DQG115CIC1P90ZL\",\r\n ProductDescription: \"115 D/Quad Gutter Int Cast Cnr Zincalume\",\r\n ProductIndex: \"QGICZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111522\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.21\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_495\",\r\n id: \"495\",\r\n ProductCode: \"DQG115ICZL\",\r\n ProductDescription: \"115 D/Quad Gutter Internal Mitre (SA) Zincalume\",\r\n ProductIndex: \"QGIMZ\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"111502\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9237\",\r\n MfgLocations: \"200 300 520 540 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.358\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"46.57\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_496\",\r\n id: \"496\",\r\n ProductCode: \"REFLDG\",\r\n ProductDescription: \"Refold Gutter Fee\",\r\n ProductIndex: \"REFLDG\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"990600\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.18\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.05\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.18\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_497\",\r\n id: \"497\",\r\n ProductCode: \"RHS100502GA80\",\r\n ProductDescription: \"RHS 100 X 50 X 2.00mm Allgal\",\r\n ProductIndex: \"RHS1005016G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191521\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.78\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"4.5\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"132.93\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW100RHS\",\\n \"Conditions\":{\"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"}}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_498\",\r\n id: \"498\",\r\n ProductCode: \"RHS100502GA80\",\r\n ProductDescription: \"RHS 100 X 50 X 2.00mm Allgal\",\r\n ProductIndex: \"RHS1005020G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191521\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.78\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"4.5\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"132.93\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW100RHS\",\\n \"Conditions\":{\"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"}}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_499\",\r\n id: \"499\",\r\n ProductCode: \"RHS100503GA80\",\r\n ProductDescription: \"RHS 100 X 50 X 2.50mm Allgal\",\r\n ProductIndex: \"RHS1005025G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191536\",\r\n SellingUOM: \"LM\",\r\n Cost: \"14.41\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"6.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"192.85\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW100RHS\",\\n \"Conditions\":{\"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"}}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_500\",\r\n id: \"500\",\r\n ProductCode: \"RHS100503GA80\",\r\n ProductDescription: \"RHS 100 X 50 X 3.00mm Allgal\",\r\n ProductIndex: \"RHS1005030G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191536\",\r\n SellingUOM: \"LM\",\r\n Cost: \"16.73\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"6.6\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"192.85\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW100RHS\",\\n \"Conditions\":{\"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"}}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_501\",\r\n id: \"501\",\r\n ProductCode: \"RHS1005040GA80\",\r\n ProductDescription: \"RHS 100 X 50 X 4.00mm Allgal\",\r\n ProductIndex: \"RHS1005040G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191547\",\r\n SellingUOM: \"LM\",\r\n Cost: \"20.3\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"141.52\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW100RHS\",\\n \"Conditions\":{\"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"}}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_502\",\r\n id: \"502\",\r\n ProductCode: \"RHS1005050GA80\",\r\n ProductDescription: \"RHS 100 X 50 X 5.00mm Allgal\",\r\n ProductIndex: \"RHS100505G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191556\",\r\n SellingUOM: \"LM\",\r\n Cost: \"25\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"152\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW100RHS\",\\n \"Conditions\":{\"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"}}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_503\",\r\n id: \"503\",\r\n ProductCode: \"RHS150502GA80\",\r\n ProductDescription: \"RHS 150 X 50 X 2.00mm Allgal\",\r\n ProductIndex: \"RHS1505020G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191926\",\r\n SellingUOM: \"LM\",\r\n Cost: \"17.01\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"7.49\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"177.19\",\r\n AncillaryParts: \"TUCCH\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_504\",\r\n id: \"504\",\r\n ProductCode: \"RHS1505025GA80\",\r\n ProductDescription: \"RHS 150 X 50 X 2.50mm Allgal\",\r\n ProductIndex: \"RHS1505025G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191916\",\r\n SellingUOM: \"LM\",\r\n Cost: \"20.72\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"7.49\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"217.72\",\r\n AncillaryParts: \"TUCCH\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_505\",\r\n id: \"505\",\r\n ProductCode: \"RHS150503GA80\",\r\n ProductDescription: \"RHS 150 X 50 X 3.00mm Allgal\",\r\n ProductIndex: \"RHS1505030G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191936\",\r\n SellingUOM: \"LM\",\r\n Cost: \"22.64\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"8.96\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"259.77\",\r\n AncillaryParts: \"TUCCH\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_506\",\r\n id: \"506\",\r\n ProductCode: \"RHS150504GA80\",\r\n ProductDescription: \"RHS 150 X 50 X 4.00mm Allgal\",\r\n ProductIndex: \"RHS1505040G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191946\",\r\n SellingUOM: \"LM\",\r\n Cost: \"28.47\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"11.73\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"336.00\",\r\n AncillaryParts: \"TUCCH\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_507\",\r\n id: \"507\",\r\n ProductCode: \"RHS150505GA80\",\r\n ProductDescription: \"RHS 150 X 50 X 5.00mm Allgal\",\r\n ProductIndex: \"RHS150505G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"191956\",\r\n SellingUOM: \"LM\",\r\n Cost: \"36.41\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"11.73\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"406.60\",\r\n AncillaryParts: \"TUCCH\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_508\",\r\n id: \"508\",\r\n ProductCode: \"RIVETBF43**100\",\r\n ProductDescription: \"Rivet 4-3 (Pkt 100) **\",\r\n ProductIndex: \"RI43100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"504308\",\r\n SellingUOM: \"100\",\r\n Cost: \"1.61\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.15\",\r\n PromptTextCodes: '**=Aluminium Desc=\"Rivet(s)\" AltIndex=CRIP',\r\n Colours: \"\",\r\n LiveCost: \"9.74\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKIAAAAoBAMAAACP9zyWAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMDoxMzozNCArMDkzMDDFc/YAAAAHdElNRQfiBBMNIxMSu+t0AAAACXBIWXMAAArwAAAK8AFCrDSYAAAABGdBTUEAALGPC/xhBQAAADBQTFRF////1tbWhISEa2trra2tOTk5SkpKUlJSWlpa+Pj4AAAAAAAAAAAAAAAAAAAAAAAAaMvIFwAAAAF0Uk5TAEDm2GYAAALUSURBVHja5Zaxc5swFMYh56HZkKMOHivo1WOLEpvRwmr6B+SEu+ckvDaOEWvjBlg98t/mSRDXzcUJJe7UN/p8v/ve+773kOP8b4W9Y9JcHl/7s+OJQ2Na3hHOjiMOYZ9mVcjRdlQfAzckkcpJzFBd19vRW3Fu7K/zkAQWV28x4m/BeYNgnuhVGKCRxSHEOQ8Omv3qiDGfVnoTctbiMMcA5AeBX9Xd7IVmeZzTDYVmdzjOeMw4QgcFCCF+HBTnUwo0PtoaHvRq5cUBeindl0D8/twfEKY0hZywunEWM26LIefFcidAVD+f/oqGoZ/7gLNWbGtkJ8cD9AoO6kRJIF7ti0QoJtGKEBhVvZudEcc6bfK7xCDTnTceJkZc0Igzs2tx2Ol4Gd4rBW0nn22vYMXY+tqIq23sLM/thnMxHhdaKSXVrc1JYYx90uvrVvye1pxOpUq1zpRMVmxMaUhYkzqDa5vtYEVjJfZ9mSjdVKbEMqfgREtDkBNscR1HB/dokmRGndZVVVFaZmJJWlyNdznpfKMHaqHSvARaWVUbmByJ1mI5O91fWd5xdK27MjXygAcbBrMDYiYW7PTRWIY99y9weMo+JqnON5ZmcA1RnDe94s6ze7TkIg2LVBl1DYyExKeRFPIGeHHXnOzPUJ+TqUw2TbeE0JASGpVKJDddVvaZGtIAnQm5MuLgUBHQGlVlJkXyqw/OEEM8O1kLIJrDZ3BVmZdms7/0JsbnLmQlNDjIIuQxL1JIeH8imV57a7Ew4oCnq2ipSwi4EB96Es/oZMEuRALSqoaZFmlhrs+sJ3Ee+GV4IZRZFxihzjNVTaSE9PR9Fg1NZAqpdKlBn8rlDfkEAqVQfYkDiGF8r1QOuCwJiYecgTQX96on0HFJQHghEgUBaj+R7r35dN32JZq2vUvYmb19+wbA3lZDYWbO9x+TuBfy6qjvVWcYLY/zuNyV2+tE/KN6AEljEqqFj6DWAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_509\",\r\n id: \"509\",\r\n ProductCode: \"CBBS9510865H**\",\r\n ProductDescription: \"Cen Swage Box Beam 108 X 65 X 0.95BMT **\",\r\n ProductIndex: \"SBB\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"367\",\r\n SubGroup: \"295108\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.3265\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"$$_SWAGE_$$\",\r\n MarkupCarport: \"$$_SWAGE_$$\",\r\n SellingUnitWeight: \"3.7522\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Classic Cream,\\nGully,\\nMangrove,\\nMonument,\\nPaperbark,\\nSurfmist,\\nWallaby,\\nWoodland Grey\",\r\n LiveCost: \"9.3265\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_510\",\r\n id: \"510\",\r\n ProductCode: \"CBBS9510865GA\",\r\n ProductDescription: \"Cen Swage Box Beam 108 X 65 X 0.95BMT Z275 Galv\",\r\n ProductIndex: \"SBB10865\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"366\",\r\n SubGroup: \"295108\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.1385\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SWAGE_$$\",\r\n MarkupCarport: \"$$_SWAGE_$$\",\r\n SellingUnitWeight: \"3.796\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Galvanised\",\r\n LiveCost: \"42.35\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_511\",\r\n id: \"511\",\r\n ProductCode: \"CBBS9515865H**\",\r\n ProductDescription: \"Cen Swage Box Beam 158 X 65 X 0.95BMT **\",\r\n ProductIndex: \"SBB15865\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"367\",\r\n SubGroup: \"295158\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.2469\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"$$_SWAGE_$$\",\r\n MarkupCarport: \"$$_SWAGE_$$\",\r\n SellingUnitWeight: \"4.5248\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Classic Cream,\\nGully,\\nMangrove,\\nMonument,\\nPaperbark,\\nSurfmist,\\nWallaby,\\nWoodland Grey\",\r\n LiveCost: \"11.2469\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_512\",\r\n id: \"512\",\r\n ProductCode: \"CBBS9515865GA\",\r\n ProductDescription: \"Cen Swage Box Beam 158 X 65 X 0.95BMT Z275 Galv\",\r\n ProductIndex: \"SBB15865G\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"366\",\r\n SubGroup: \"295158\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7.3901\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SWAGE_$$\",\r\n MarkupCarport: \"$$_SWAGE_$$\",\r\n SellingUnitWeight: \"4.57\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Galvanised\",\r\n LiveCost: \"51.50\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_513\",\r\n id: \"513\",\r\n ProductCode: \"CBBS9520865H**\",\r\n ProductDescription: \"Cen Swage Box Beam 208 X 65 X 0.95BMT **\",\r\n ProductIndex: \"SBB20865\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"367\",\r\n SubGroup: \"295208\",\r\n SellingUOM: \"LM\",\r\n Cost: \"0.001\",\r\n MfgLocations: \"300 520 \",\r\n Markup: \"$$_SWAGE_$$\",\r\n MarkupCarport: \"$$_SWAGE_$$\",\r\n SellingUnitWeight: \"5.291\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Classic Cream,\\nGully,\\nMangrove,\\nMonument,\\nPaperbark,\\nSurfmist,\\nWallaby,\\nWoodland Grey\",\r\n LiveCost: \"0.001\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_514\",\r\n id: \"514\",\r\n ProductCode: \"CBBS9520865GA\",\r\n ProductDescription: \"Cen Swage Box Beam 208 X 65 X 0.95BMT Z275 Galv\",\r\n ProductIndex: \"SBB20865G\",\r\n GroupingName: \"Beams\",\r\n ProductGroup: \"366\",\r\n SubGroup: \"295208\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.6418\",\r\n MfgLocations: \"500\",\r\n Markup: \"$$_SWAGE_$$\",\r\n MarkupCarport: \"$$_SWAGE_$$\",\r\n SellingUnitWeight: \"5.344\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Galvanised\",\r\n LiveCost: \"61.81\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcUAAAFZBAMAAAAbSymPAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAxNyBBcHIgMjAxOCAyMTowNzozMSArMDkzMCro5aoAAAAHdElNRQfiBBEWHSa/t7AwAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9PTx1tbclJSQhoaJJSYmEBASvLvBAAAABAQGa2ttRUVHo6Smrq62mZmZlJSc/n5fngAAAAF0Uk5TAEDm2GYAAE6/SURBVHjatFpdbBtXerWDAEl3ESAtulig6EvVoizSbF+oRRayPAQiyU4kS3qIyM4Mk+yLSQxFdBewVQzgit6XDHEvZ4G+mMQd8c0SZUqUlIeQzJDUaoGVAqH0jA2sVQwgz8hARoZbW5oBlg52mzjDfpf632JDSkYHgh9kErqH33e+c853ee7cKZ83yygiLJmmBT/00U2TU+SL4gQnK+Ekr161xBsoJOdxQfnQEH+c5rKqnJfXxUkuq9RiZMnUdGv/MbfY7HpCPHgsU3P7h1C6yGiG8b78266uLh/3cZdPfKBmmabtBBzbbX7343i2mh3ESFqyGdv19n75h9NCPP9fRI59olF8mqW3MOaTeNFIzMlsvJJSpXeMDTWYKaAqlzLEobQqV+QCWRQTapyEY2gM3rP/4QDG/NS6BeB8exAtrdk9JGCAaIkPyWWA+KP8B12iaObJkv2C8bu22w5j87ma7ldRZnrbcT3PPRPG8z/M4SBb1PZLCMe01spCfAE+6mA0yIZL/K74LBoNlqQa+5lxMxcMBblwSV406uVQJMgli0c1tOCdtW+twyomLM3uLgiZakCzbpayvwGIE+XiNVF8UApPN9uCcz3Xa7g95XCBJZHpEy8/DcY3z51/A+EaWdB0s3VK3dL1NYyzuriJoXS4yvGi9TjJZlVpCNHSyURWeHVq3biBgqispBetfYymqet1dMs8gmjpW053WZGK/l3LqnwCCLv+Dd0G6Bsq77mBdhVseG6v397mUgNwnkDTc8+I8dy5V/JClqxs0TalB9U0fWsumR42rEo2GiYpNWsYE0JIyilV/FFiciBdASbmlWHjF2oYzQt42TzACCDvq1O6cYyL9150D+FksW/HSrwXpxDfZsd8YuKRKnuNphNoU0av4Wy726o8mFSSK55z4v9OhfH8HMlWeCDU3tig/7yn4GUjkc9y4yp/KT0sTrARqYDnK7woPiaVdF4aSi+KYl7CKU6Bdx61qqamjWONampO/5Cg8P4d3aijd+m4UX8OEK0BaRqmR9NrhxF+Ank8r+LMjN8LOGfF+MMcCUWrukmPugdyraTIw8ZGJRQNcrXg+BPxaTAZBy5Gi+LNQiQYCQVL8cviZjkEtMwULVM/mDbWWqk2fBziPae7wEnVPscyc2EK8XquKPoSW7n4qNseIfRq0xkshec5JV4MOH/U16fA+BcqKSUXdNpv+0d9xGJZF2/gIC7BGC2Kxl0ck/NSLkm7V+ZkdorNWokNNkxKSnLJOkJobXAfJAxDvHYI0e6ew9JM3w5M6Z9dA4hvkc99orHBjtsu0+z1mEYbPnpuD8cPEST3NV3HdZpn4+NreSKTMW3/kDqU8pFKyLA4WZGFmsBXUkbiBmGzBVxAP7WgeytZdSoHjbrBxpUwRh/sv1GjarNRGdfF4xOV6S4gVBzZ0cXHaaqLf8v92udLWPn0SFu5gHkKiO51s+M9HJGW/P/3FR1j/POfEJm7qmmHpdASeUK5WJY4nhvPZS+LD1BSKRCeGzPE/1QqpIxzmTvipCqxMkvGDmtIQc5JF48gipa2CuMG8VecdeubDG3UH7FTIP3mQHbaa6saDcZ2GK9vNj3PErxi22fH+NfAxVBVs/balHbrgxKRF8SNMhushcLl8MXEhbKUrsVrwaJhFqRgMBgvxReMiTJIJJsp6rp+IIvWRon/1jgO8V53IZYBLupbQ3Eq/ROl4m9BF8txgOi0gQhc9Tzv63K8wOLsTMNzzojxzXOvcTiEF/R90aDPakWYMgyTk1BNqXLg2u4q7NSslEOLFlgejmf5SvaJNcEG0/MZvKyZhxNVX+N4wzjWqDrTn0PpmRFt3eJSXa1G/RwadYMdY6BEbacNSH/jKcsPISJNOy5z5jq+kifZ2BjMDO2g3e6pOHnZuF6Jw7DhOdkCF8BKucx89DNDzEcqsjqeS19O3OQkXMNoDKq436um/qCStfYm6jUfhWiuNoawUqSi8Vj6sqvr2tvcxz6fODkrjfhdBtS/HUYwqRW5h0Pykt8fsJmzYXzz7dlMJL2iHWgiPE/L1IbXQ2DQojWuuJ4YimbCpXgtsmA8KIFShGrl8GWxXopEgjHpU/PYO3tK1W/F49Lf7M4p0oynGWaOpxN1M7hC3U05PmI7jt1eNjx3qMwXBAKGjw5f72wYv4+SJenK3iFNSkWtnhTAcN9FLClnBvFKwsgTNsVlc+l3xElWJmEMg0cU66QklZLyi4MmpVDvkpU9dL495b/X3a8SeVrTjQnuQ9qo/0guw+/rsSITaN+lTca1vR6Bz2Eyfv9Pvq4DjK9wShJYdsAoALnBCtl14wHo3rzA41sicJFLzUYKZNm4mZfVMMfPptcTmzicrBGyYByZG73OFY0TVfT3F0AXdzRDrMi0ijfwHZ9orbEpt619azKe644wPdz4fAbJI6Mvg/HvMUpmtf1e08xJGqYgLJlqBPOxq3Py7427SYHkpBlwAWJeqWRZKOhlw+JkIZzEKwdjCmy4aarjJyDeD/RBCYr3NFH8qpU03safAEQtL48ybZNG03YDzVVPTUOjpvsYx30JjBWsEIXvNQ+yxtNSJr4rtsJSsKbyBnAxGQbRiKyIN0tRysVSeFGsq5FoiZOKpnVkUp+W+ScnNMM/mItBJNaNydkwhbhZXjKgihV+FGjVXjU81+4BLsZIfOa7rEIHGAWMBKJkhvd9eD1GrhrGJgmSilLAH4rGF2lwOeC+dShtNhYWePaWkajjUjpH0pqeOLIN9dgYHahdB+bGafRXcLavd3d9kv2oxUV0BxJxHY+N2gGnvWrYa8wFUpxFJOt3GL/zEhjfyCCEEcFTVMV1fYONpXcTE2wY1TCN+saFJDuek+fxgkjjRzx6NZ/dta7jICohBRRVO3SpdfCoB9OGQoRxM0uEJb9uJC6lgIu+t/BlUdS3uGzfI9cLNNs6HPt5HacKBMt9Th/Q9yV69Q2CMYEHp2jsN2chL4omm8Yy5tVUAjxqKJ1DVfKxaAxI5bQq5aVdMHByjBfQx/RjOZhVW5y8bhxUkY4bu3+IkKIfclo+TceNL/RLUTQm89kRJ+A02q81mi+YigypFO25IfclMP6ZguZ7SghjHL5irZWV+LABYSkItKvU1o0LoSh4NmrgrpcircVGfDixyQajQUEqakeqodfZonWci46/v0S5uGM9yvFfUi6yy1DetXK4DzJx28dxvECPGi5wKD7NtHlte4yvEzxy0WIVQJnu4diUlYCon84p88DFyQsZ0Ak5D5o2oYbZGjfGpdatZ6gk5UhseOfIv1l1tHJidbPq759VYBpqYOr/nXLxBgHRSNRRyoOJ2raGNuMFLgj8AEZyr3/VfVmMryHcq1UISdJSYvkdCEuRZEGZUSHq3xVCcjk9iBYNcU7GcnQqLz8xJoQ0qiG8pE0eRg1zA6fME7rY3Z/DuBjQLPO9qT1d/LxLtDbUVJ/ttMcIttTpZ+UhBB+T7VHuvhzGVzDRviCZOypBYHsvilYlK4TRlJo1rAdsi4v4I9G4IKlyWR7AveLNioyqLP4Q1NA8dA1zqYvHbLh5b7VvCGXAo64b/0Naiw32FqT+mxWpz11t36hNx/W6K3I/q+Alh7n/8r16jkNBJf7u03iJYCLpm2XgGtjR6hNxiHJRqoWmE+ZshKWbx+w7xlo5lAYuzhwuC2DqrKlV/UQVn/fnhAjl4laBf9JaMi7C74GL002n3YlbGJlBNlxglfgorXk7S9sBxjlFkbt+Qn5z7X2CiAwetIYKysdGYiDNjuflHFieDS6Mw0qxAh72C6Kmc1ha2Nu97j3P8EctiNcORAPGDZZHGM2ahCwMz8PMuyAoGxzvX7VdGo48x/mudvUCdWEMRGOc2QP40nw89984c/sGud0lTuYBJOTFJF8Bd/MQsVKeFJQF0VKzrMy1No/XBaqbmYXDJAXqscqmji82dMfun0VSkem1rPyt1u5G+YhCLI83O1hOQeG2vW5VHlKItNRByTvD+APys2/iv/OJhrnGga0jKB4sWpOFaJSGqeCyOFGOctCo5eqwWI9GJGjspcOFCEC8wH52tEelVXw+WCLpaUa3NspVCvFucBga9WmoNtr+uHTF6DEXQmEwcOG+DhJ0hxhfwzgFoTVhOquDAlQyg+4kEpckCMdyXnoCLVbL1EiRGzMSX0UrqVnw74dc1BLmN2TBOrjRoBDXGv1lFO/rBYjJX3b9DUBMf+nzQT//uhMiNhyvGRhKTl9SCG832g3UjjGeP5fPvNvlo/6yP4fgIcLnRi6jpOjabVj8BUT9cIaHQAGWJ0hK0KiA7UAZtU384QnR0OzuMpamA7qeyE/tLfzvXPMlNmI800lRwB7Yz9BYjpBx23M68EId1vHcP5Db9Hhu9zMSwaCTwtRDwso5lFN+JSYuyeU4m6qknxjX2TCuEWEZ5PDwWmOrwuuHHnXPwOWU5AyMm0S+lRffZpev+cQtdtxzGx2AbHjNHpYfIlgadZi2S9dTYPw+/hcwX253LhqMhoCRYNHZeCldiy+Jj8pBjho4fjdxNxiUgij+qXXMo34dKlrGwUTdC1MlHCk6mrVRKtI96rMIuBvIaVUq5e3mI0xbxx4M8QUBxUebdicTqmOMf4k/gUbtziXLpITGuiuQQhCWZ6XfJzaTUDpcZccM8bGkRlQkXTx0b0DKx5nFYwYuodn+QRXL/X59/TrXClM0GIswocec9lHKaS3ABzCEKcSPdIauY4znXyVZ7X5gAKxATeAZexsnkxjhJMSPigzKmGKvUg9bkkqKdMU8WKOCzXlAF/6HGA2taffnsTRzZce8Xvk5hfgWvt3lEzc5frU9Rs9mHM/fw/EDRMiOdNakHWM8f+7VpKz5B4V4LB7L7jSY5wMkBnHrlmjNZStxNZ5rDdd4ch6jlcOLcBPcTWXcOr5H1Vb7Cy0u6sZca+H/T9yv6Da8IjsdHNlm7IBHF/4CjKzONOM0vfoqkv2FWCgWClVH4PP0/DSEoLRdoUvGFhefhqKRIEpPH3kb03waqu4ev1/UtvspF5ua9aA0RiHeiCx3US5C43VCLNfxhkLVnKCEwcB5pylkJ3X8HpZzSWrhig0qSY7zB4XgGEZhJahUuaKR+LHAJlWSHTZ3D28YzWd40UocJOLWRB2kS0Z317iprtCJ+pV0jSaNGO80Ojkx1PobZSwHuhigG7sOx02ndXzzByiNQiSMxgIMfIC9vYy7PV9BCiJpYVxNTYqbBIYsSQ8fWxWbm8KYddSpVBf7VZyd8TRrS93XxdvgKzbZMc/fWmw021Ay4D0V+AsxJI823UDT7SBGn6pX30ckrsQ5uc9p0pt5u8kw9tcY06hFXcAECuIaIiumdbSDe8COneCi6T4vYFK0d3QQVLqB+zt8B7g4WZEbECIaXnuM7jabHeRQti/Q8uCnYWQHGP+K4Gg0GONP3uwNKQqgzAwnLpQjEQhTC4ehH4D2lKv6H31jI4fi8xCmJsqthX89uEgnKlsNtD/i3kuAi4UYCn96CmynwPg+SiZLpHiSAo3tSwIMHuXzh6QszyH522N7De0hWrZO3PXb3aoizdi6NcEt00b9D+F3wNRNVGz7pSL6p5xeptGDijmCpjpZSZ4FI4dImIzZjROe2XO+TlLzmsYlqdBaMh6Khg4kM0+IxnYDwtQMs2slKq3Lt4k9j4qnGi86qKPTaDg9iB8SIHO67TeSZ8H4PZKMRKoA8MTNnscEBmslBSkZMOLhK9ax1P9NpGgdF417DQhTYepRN8tFukd9mL3s8yWg+UbdzhynXYhUc9Co/rYXdWfE+DpWpM+YQMA5idEO2DbzPoHpiuVd+oWNg+XNe9Kuvn+5uOdR3UEWp/pHAKJwh1Yxn70GUe0x+dR/n+mkVwMv8mQJDFxxlHFBnf8/6vg6eBPbBQU+8T56H+E1tmOIzteFI4hmXVk+WUXgIpL7mR19E/8zhfiv5F3wqHU87e4wbVdqrSrShT9GqRGXYZruaYSxc4wk9SfvhLwBBCCJtNBK/NTd1PFPj77IKO6FTvK/1F1dbBvXlXYK7G4D7MNin3axb2wBLhZNHzJ03NLCDBCKsS3K1INlgT9A+7CRQYlvjIMpbDMv9rBzySJ5SCXcMYEusCIV/VkC1qQyUtMYiGKosCkJSBxwIYsJsMPUC1m+8zAKWjjaO3vPjNI4cSReSUMGvg8J0ELKfDo/3znnnnMuKjGIjYW8c4WKTjGIn8Xzrb+NJYi2aJBN1B+Bgr/R+icOjVF9m+7lzCxjHmGs4dzNFcehbkTOV56s3UB0M4/TDGJjXX8PbPFu4QaD+GVskfP7qDE9sFhFKBm124rx6t53gaIxHUeYMWUCbvw37uIbK1/3MzQanxrBOE53W7XsOnZs8S8sMZazm+otvmCMkkA4VdIx6o8KlDMjPhRGfG1PTtqxRcv6EiIexBhxY1OdXX6isMHy6u5xFsBJLAzHV51quPKiT67fU39p8tDcjkWEk6gS1vBw3xqxDsEavBifV9/e85dvG5ax1lVWR1EKz2x8yHJpkKL/r0Hq9jgaHZO2Vuq7tRuWL8oyC1hFUeTQvG0qBGL5CMLXu401qXXv41EwXt3zp6kIrtxg3KWpo78//42bKSbFYFVLAy/e0ytQ7z+ZPMvC8M2BBGdqRC1mi2WkJUOmLfE0Bh4aI7PHfWvWjOOMzRRiHPK7xleVG2i5dQK4ZEhauXJf+y+Q4qTyUUZuhHMlDnTUJMwJlHOlBVVNHNrZeIXRZjQuCJMp5l2LX1fgoB81UGUxqlBrbLjdU3dHXmTUv64mujg+izCXbYbRzWmsDYeEwxqiZxgt5vyq6ak4I8o/fIURqD84ryVLW7XGw9gfHEVN/w/73yODJY6GDTimNT04VdVGF4UD5VFtwUjpkqWPRFnqi7URN+93Cv4RFSW6uxrLd5wGf7+eZ7lU7Ti0tHFgZOwvjitTOlZvRjkL/u3EyFirXOxdqcuXWDTwcibjXoQb3XEtDQHcJc3hxT8VPmK8+FAdY15Kav1VlmWHRyuTGkqItthHjmiQR5ejFUEzBBzqBMK/Bp8DAVxgASmlblJ7Y+EcQPxE+chJifsZaQg7PHI8ifqnVTTctFikbB3aox4ZI9whGXbz98qccy/1ZSEGTVJueWpeTZYYL24OvA8dt5HkCSbFyGBFMuG0hrhdHZwqq7lEyKSU56qnbRgtw7Z2rMlCL4tQ/b4zxfqvcEGuN2pb3T1MybrJSv1u7mWHNApMulfCCk+dwjCJQYRxpRRT1ZuEHlGCR5ejRag5ofTWIFu8j9/Jvo5HstmVWjOg40KJsABuwCn4f57+wOfP3lXf53GoBoNohEfHxvFQPxEOHdp4hdE2RSuiVlYb9Yzv0ui7y5lL6kjdLTIqJaurdm/+1YzvH518EWyxYvBonSERO5jqLyOUNxjE71uOTFvLylitXs/4H6ZvMn39N4S3nGSK2WJt5c55p7ABTQ3MWAcXKU9rEXT5lwcXy1pusU/6dl7+fWC0Jq4zW8zIvtPqCVlmWYWGfhPoGcKJkLhS/4LF31DYyGf8cv20EhItiesSNaoXmSKoNwMixAFHdzhHw0gntJlGXc747itnAaLvdVW71hPD+T6mvhdTTpHx9OBHjEw2tYppEFPi+B7zOJ6aV3GFOOEQPWqoeniMcOkhihE8V2MuNfNj9C77J1PL00jtnsAKFDbecBunL6egGr6O+lvOZhJiA0+YQbUyjtWC7YkAj4aR0kBZma1Bshg5PyNnAOIlDWvnERQZVzarkEz5IsUHwIvnF/liVGpakZHFqoYTfS1nAduOkSU+2/pI10pDzvhvM0WFFD8jp5CGGC+KG/X7+F1HUX+b8fkbZ4ZmDR41tQRiLYyU5kfVCsS03zdGapAwfo9FN37f5Zxrixn5HlKxVgyR2srF+A2ndqN+4Pc37uCKJNK11l9ikmYY3xxH6jmrSQyOP0qbMbJkKrriKGp6xrFFFgbcZ1lysrurtnJyECD+tJxgMeqViDIHQyY8n9ysFqeq6uii5VSnvm85Po4ntphH9WcmRx45isrC1I0zuDjVzfLFnxfdgfBrcPemj/SKks0To9pN/XqPqqquRzW8iXAOhZFSU6SmXthaAdK4W3R4ESA2wirOh7pqjXU3mZr4rVPwV2+1/gSWbhmGRSbU0gJSFw1veP8IGAn7KwvlkdkaczeZ+0M3XI/KpLiJ5/HbpFZfx06M+on2AdPfu+oYD8ERwZZ2WFQ4oeJh5m48lOChMMJ9bjU9B6QhTyeZLcquFMsjpeP4zVojeH4Gkqnp4Y/cZIpPKAQMfLewwds81UY5Cs34MAWP6n+pUHeYHxoiJ4rRrs/xm/X7GnS//2Thlz4WwU2M9HKMhLEjsl96PRDTRsdE7h64NmKUSHm0t7bMwIWVR5A2+iHxP62Nic2T6NodzR0IhyHUbEQZE4gR4vgGc2tc6daxWhHWbMlLh3o4jGvTuRnH3VyGZRyuu5HvoMoO6dpEI/g3YIu3Cy9m4H7x/RDhKodTqZwrjassuqHSGiUH6dhoA0YWwDFbZO5Gnh7sdUiDIbxyUqnYBgtTNAS26Ge8yKQ4PViCluHWd6gW3S6nF6t4tCJ4GtwcFCNcP64y3ggOFXZqDKH/T4UHDWaSgLExoYSoCXc0E6mXwRb/nZloNqxEOTIpSCtMslDogQqX5E1CfBSMLJcTxgejcPXmu60su9SflRtf4LHdcfzjuV9D7QakGMnNSBw6R21zTSorJR3hW1YbiPGAGFnasxRWZlh448tcxDccW2RSzN5FJdjhAhib+LrvYZHFqNl13G/xlJuY/MWwejOMcIL9BbmmHtoqRwK2CJmG7Gzg2A3gGAWKf72in0TVJKP+DWaLnF17zi1CFeUWDWa4XHWCdmK0PtSLUeZu/PLp4gPZlSKMIYdWDSoQKLxQ8yQG0rgyPjILC4ta6So0FYv6SE9cGy1FKYkerJexLXIsF6PQHua7jE+5Wb8s1x/iOSo5M/zU6UpC1xnw46NzpsWi8FaaxzASlmfrSE30iba1Rj3N/Q+IEV81zcBCEu40GGkU3XyRkcZGWRl7cseJFNAU+bPp9BjPf5chEgPV5NQ8zlXa5lAPgPGaEET9xnKWscXpYQbU4Qx/TR/u+4Z2LYn60MaC0scximKblAhBfD04hApjYhvCtwNifB5dJXpR3IJJlIliY9fdZBu3cyHyjTpN1ECqUuwTVjk+uYu5YRh8Q7gSIJb3qcZBMarX9JEQ2KL/dfzOV4oqh3OzTqPsE/G6gVU8KxCL44slApeW4yxftLYkriaPtmL8IcoloQKX8Zd3U2KG8LNyukS+VZAgBKFrBhF5Unjz8TzY4khFsA3L9Obq5igY1es70Mzwk8l83a1OQStYUaKS+c2A27Aw/p1oGFw9qfF8JIVGQrZEic1XXW4nxr9DbzUA3Bl0arfICIu05r4tRKiDYPU/Wo8jrjGfGpgoTsWhGt42TjwYxh/gq0CI97FT2JD92Wzji9ycdEiMLAwXJWNCnZpHqYrh0aXNkTEei+VlljGl39ll/gajwNJTf39uObL/EwK4eW2kYtJ2exvny4z/bQnxuckL/hf0VyHp9zlLfRgFPn2BzY1RNJt6OhLDShRmGNovRyqRn7WW4x/Rf36u/HlXitlGRJlde7oPnFtXxaau9OjMFrd51o54cETxj60x/os2WlzeJY0sIw1wN081zXDLsaeanI6hwTHgi05Yo7W0xCHHY7p6zQ8IM3Ljw3jxu2dNODACS1ibKBHBo9eFjjhU5xgBvbU9HvsbDUZO/T65sTE+OHdYjBTMbzuW6EFaLiR1DKO1HVdbi/G5v1fxiz5n6np8NLpHAsQhR8mkol7o1rXRMdK+ZPGJP6rEEjxjWy/y6Oqx19Gr4G4+LqfH9pqw4MBo0J755HQcjVTEjtAiM3djVZhUZzh8znPP/SCWgy44PS8S+/AYxc2hdAShAkuqecarPcAo0WA13Vf7bw4x/sOxn2tns41yIWSIh8dIN2PDUwN4dM4QwRo7IEpCuuMFWqv/ikdXj/2T+k4jjGZF09hrhqQ1RktXpnQ1N8b+TlDJ64Akm4GFovioIfNh/Ftcqab37ZHeEyO4YaDC4EByKqYVORqtPTtdYWV2q8GJ8bnnc6ggSYfCCEdqkmA8UVY1pa9ddalvHfYZ0mY1Ha1BEYpTV1GxT9p3ec9+GE1xJxgv9FzQlGjrBYdeHGbvlGzGE+Yq3Oj7eXzOsWP/rF4ldN9e9/0wUhuaNXUMnY8dYQ0iCVYgViTQtCD71zligGMwO/eWvX9vxr5yDDBenNeYQR9ufvHAR6Bk5xWwRbjnzi7wYXxefbNFqL0fxiCLUVW1EAXi2fcP5dUhdnM+3etIMXM/fotPV3+ovtXy1343RtM2DGaLsZzCU3b1BCAhsFd3q+ZMmq7jG5zccViMwIORWIIlU8kxqXMYxYURWJHNIF6CmZP2Ylyi9KFaKSMtH+AcXTnyoQIJzid6a1BK9EeSs+xf/9pWjKIRRP09Q7gQqnWGNUxqioyKV52OTP/nyiPoXWivHA1jshhJYW0Oxqc6gVESaTNWrD2C3uHMw9GzUFFss672xBMsmUqXOJbAeXPMNWuc2SJ4VN+l1C+yoLCccc7BMbLYnZIIKk1jrdApj8qO+Hg+Cc+4OL3Ds3CBwVL7NmG0dixTCMTzERaGd8rbwPkSVZwQVfYfL5xisnS7wNqDkQWMRnOh2DOkqXPeNxXt8QWG0RzI1xxTzNxWHIgwGjXOGcsdWFdFu2cgOR3HhbHOFDaoaVlE1Au9K8vgZy6m3nNbh7PZiNouOQbC6CYEcJJodERXqUGsoJ7sdddoRAZnGERHiuWRMa6a1SHs8U4qAbWbkGVw7eQ48rGoFFTPQUYs++Vw8YSjp3L2Y71oim3CuB0b7o6rORjp7MS9DeRvzXh+Z8OZ3L+MoYEoAxf6E3jWNDjqcgfBeJXANj+jZ/eZqU6gs50FgkYkVnETjWwk3esqavbjanKO5XN8b1scACO1BOMkZoqqDnMNyh39EJOKSxFt1qFF3wsThQeyc5/f+FBPOEmv9xglEtQTQRXn+g62ze+wh1q22OxB12oNJ6qZVB7A7h6/fOU1vSCYUI/3GiPMJw8sllkyFeLpz/XgCMReDSwUV2HeJOO/rN1oOKRRh5exiLMxxnOM268opbKGElFidybAoZbZM7C45UKMFM661J+9V02HdssznmN8fKF/GuEiIcKhdhYd/FhbYe2Wk2j45InrD2S/Y4v34gmJ2sTwUlcNWMWM8ZuPY8OM+rnGqz06JJhK1DZgU0jmL+gstGUwiJ9OFCTTlgzbS10F4zM0dP28k0z1dTAMf7ww7Cqq767LixDdRAqzIrQ5E8tTOVLCdFUtMUVN2KsdKoebhNliostJF/3lwi7E7NJ8cuyJ0MMzjEQyHqtDw2WEC0tU6ohLFUw78BDdWoHuaF92IV/PwL6QOrxSJ5lPbB72CiP7hZsxjPIprMxKNu1I/Mbijc3Y4hb0f/vkT/CJ3ehmY7wQtS3Re4w2PYlUDaVQsk9odz/qV6dL2I4XnDDcJ99HN9y9ffVGOTdmEPpE87BnPsdayCEV4/4OFjYMxos7Dmm8ALOmbjK1Vk6OwRt07bDHhyiVyqFilGMq15NDCOlJnXNLN/Jkse6+YpO9F8tbkkFtk3ovR+MljckxGepMiVE0JVEIxobh1oYx4knlBpMieNSNyULfU6GHZ7p6RkuiRZMedfcU32G6aPScZ+4mCzZYTp9yFVW+pyelp1e5e4VxaUHV8qIkbUmdgCgQWk7N1Bzmf0N/NesmU9k7qF/6jtd4PJOjjotRQmlHbhgtArs83SsNGR4PgxqjvLERK0Yh3moXRqqrHeMMWJSk9jvvR/v9XxZOwDQG44wNvRiyv37Buy0YOwWQnemBRfeS+Eo5fWLX3XyoJ/sItb/jLeVnDaNlWoQeV2+6tngF3n13Ia6jc9IeP/OsYSTb1IggeAENsqhXCk4fv5zNfrxQ2HN92bOGcXtHeKzlNx5lIcW47ayZgHzxiq5I5l7bfp81jNSKnK/suLY4nTy7C/HefHIO2rm+W5LPGEaLRtCYMxeV8S84tuhk/fE8kfZ4cPYZwwhvzUTQuUfOOhT/RHHZXfiycU8fDplre6eszxjGZjy/5dZRf6adAqQwqTCuhJgAt/bswX+GMBJBjAxUak5h44Xp9Fl3VUj2znyiz973JZdnBuOOba2WR2EDA1zXTBag2c+h/lSiVR7gXX213XIk9kP8qtvNwCAuM6QAcTU2LLQqrDw7GJvTg24Y7nut/Ps/uwU4eI24T/Lg/UdOjLi9EOm4MusI0XcROYN8ULq5j/oD4pqzbY8c6Q1oToyovRjDuVmnncF/xeFF6ElprMcTwpblPsXeAYxG+zBSg4hiMN5fW2G5cMZ3ptBwx2kbDb3A8dOC4dVduWho7cNIjfIFhzR88sVqEq5toAIHtsjx05blnRzbZo+UWGWl173SuBLrh1wKIN5JJbheGiRC6xlPToykbbpKjFfw+7U6RDcv6K9mM7u1m9gw5RrakohXGE27bbpqBIf6d6Cy4fPDrKkjxeyGXuglPB34lAhe2aNN2yNH5i0jg7sB3E+r6ZXddgZ4pc6iXBitnphXPsdKeQvOGXOldpdQHeldcaj/RwuJr/rD7qAKz6+wTNGiPbj1jCenPT70PM6BlV+kGdZurrpNKXrRWdknwyMneb5GQ2GpKzLUf9orjC95bY8UUDpbpRv1TMZ3sVpZ3lXUyMBilGenG5WICC9jpbzS1TMe2yODuCMGJoq9NScKfy31HiybgIvw20MVYvM8kCGS0IRWKite2ePSgtdyNGmTTKBZxxb9FxkvskQDeHEdLRIqCRy/gUhBrVJWY171r4re54+Usk90Pap/Ib2823fzaTxvSBbfEoxNNdGTOo+8kqO3OTKVTMtkHtVZEJrxX5pPLLt9N9mT8UVnJeT++zJMZwk+vMZz4YKy6FWProcYQUSGuBPQi//nrJb0/3io4u5AzWYjXKRhsPDPWA3jynwuVpgKeeVXPcVI7SXJCGsztXrdKfj/Qt5tZ7iDzv0/c9cT28aVn+U97aEHp6f2Zs8uwKK1c9ih65ZiZlCTtDfkWgJqijsk7d1DIoGUCjThuhDgWJtDTGKGLNJLRhiKiwIbkTIl2jIQk/KQcRzAdqBCGtJd2wEBmeMAGQaLyvQboKM0W0d97HtvqI0bx+ZoKBTh1bDAj+/3/99nRUihxnT0gFQO8JxU847sVZyzl7KKXoG5E8jm63WSCxdzzV5/8baccVrhGaY1YPiFdIAb42v5kc5ezejuIUYddsFWQSyb0c1ZOdLcqcCFI11g5ZIUq+mBni7mR0F9r3YD91JWDeCUMyMtvMPgOCdcNwsb0zNfp+YZhbHSxAUgkMrLs3EEkd5Wmt9DWYWatiAuE24+PD21o4sbQhDhs3TUW/NhlroQX/N6tuvqJ3vlH/cEo4YPeSJZxbUbUp46/NPcqhndzNwPW8n6MXu9wbjikYAwlqrlPdsd9dfh75V/NJcKtkrjpG1DUW9Xa6s9Qd0MRawcvMbZChOYqJUmJkQEESrq8Njlvdp/3BOMOqszmlbtFTYS56SPzERj+vwX0lXDzfb/C1sMruDli1I4ueRl3XU1kLm5Z/uPe4LRAMYtppAk0Y2DOhxON0kffFq9xWEyLyvvqNPr/GSJH5tFughbKmaD+fH3Sh+RpDkLUyNkBI46x33cTJgVuECoTBu6pXlRJOhLhdmJ8ZqX7SitUvQEtTb2vYrlINMOZ8iytCOxIVw2rU2zVRC9mtvaedb2goidxtSSl3lcV4/nEtS/CScG10eoG4CBg+cdQGPo9kLyEjkt6TjLB3sxqrou3LDw38lwEDyeyhekULLmHUXmxpf83HF2L3bnIY3yNE0H1cEwAp0BgCmkRvAqioN6uxhs9lam1riIlTPgEJ8E25wIlqRQqualYV19ELtGnRWu7cU+Mj5Ozroq/EAYcTJEb+Gr0iTT2AiVTYs6ow5PWKIZxnyETGmiVhCJLjbqDz+c+sqxiXfnZwaO5VBwaSA1yg0mqzSgGVrObNdJRvxW6kQvCm/5Uj9jrAxuI5MMF5L5qhjLLM3TnXprce4u9am0SqG/MXhMzmpMG/NuDYIRQgNqhczPVDID92sOJ1M4J1Zvx8uGtWMtgD3O5wuzIeT6vR0Uo4p3qXPCCXJNbWCM+KJhUcqXpIHekYF3Fvllsi5Nvcy93jS5CJAuBhmGtsTkdWs4Wy4ISBcRxHpzTbpI/Uj4jcm1PUgvwByIgVuV6FJFsI8RIpvIOCtTO+WpsVrTLBW3AuM1tu9hAfTMEHeZk7UPJ2bHUQAH6jOlzEXH2tglAhHQA9QBICYDAvRmeNIvSwJnDyP6IxqkdSeXcxNdpM7hO69kqLj+Kj9v6SC/YUCjmpyvpmIogPOAVr04l6D+KXkMCar6EHj9g9TJoe6mIcrN27KQLa/YfEdo0OCOUc2NkEwjcTZ8dSdG3ZTKVnjYAWwD4JPKBTGM8kVPR1HXpc+pt1JHSetHaXvkQWrIKIDu0IUk0kUp2LZrc3SmQzNHJHK0yOE4H0r3mm/qfSEI+h7kxx+6qwWEWkDi+NoSyTSEi9Rh7sw0Mjd1RfMWpEHiVWQM2ytT+YIg1mzXVzErZLti3ulPUGsrZXNAbAYX/Flrf6FrlMZqlYmJcZJMtQKZy9R66LLJ0mx4V4TJAewq1JhNbtIlC6krDKPZxdhlN6vpTovo4lvS9Z7rX/2S/5ixdmfX2C7y+QWRE5e8oygMl3OJxLp4AofyisL65Wz6wA/tYzQ0ICe9C1K2rDPQbVdWDbCQpJUZUp7i8tO9/cWvhbymWeqhdrcDUr6Q4maX8k4kqF9kL1J/iYSV0N5rzqow9+9DNjHiZZ+uPxTxrwhiGRuG3ecd2Oajn8mFL90Rp7E5dsO81ttsBZKWSsVal4VGJWkKKnrFeqswteoIRImgKg3aX+FrbwzZxAi6DIurJv6YNA7J7T8buRXo0gxwhtMdQpfl+IN0stdCbRVFp5VzO+i/6zjEQgFcDiVTbuVh8TXK8UXmJg5ulI7TH479/UtDNjFCDUBtMzaJRGH2qofc1d09Rqh3QMdZnew1387xyz2/qH4tXbXiNLBdhz4hLyfDGQSx02wuZu5SvuQqodrWEUQh/dKQXYy6AWltQURmOX6VAYZhC6PeBTRdTI4oqziLOiecnjHPSquP+CBKI1gL76gxpfj8Ih8Wank3sqiPkl8hXbyGw3D1Ttu7wOcODtnGiEA9CeE76rkya5grXFDebY/VAPDJSmTU3Hxbi5axuSEUPWN51lrrDWwVxntOgwZYF/+TejR1Ard+FED7Q9na74bsY4TdJ1wN6WIK84mzmimru51BYnQUBRKOxWlqXXhl54r98SQ+uQyslMOZasYrJ2NRLKhqS36dchzJ3SROQ/P6OeH0H7/97jAyhg4MoLmENLaoT93F242sQsNgoM60UYyKnQaKUfnLPTJQ1ZdaZi38BfQtGK0wm5dT2Nywncfql0mULwrvk5s5uhOlesGDNjFijpgOTaMfcIXnbzxVDdyNrGrmxYSF5LKCEkYH9WPhHbJSjAv+UtASYyTb7dAoRvXxuHbj6dTVr5PHqB/FlkmM2hhF0U3uwJBNjBB9uk456q8gv2g81XvYlc3RNV17soL9IqatXRvL9zpTrdK4pTAcf492CeliaoJEN/XPCtGjVGDKdP0NA8lY5M0huxh1oGnDUtAf5zMe0Hlq8GA3GHXaMJ6Ey8Dclu4VGbFP8yWvWNothMwtrSr65UxsKu9xd+qKnKYci3Nk+LrVcLrifHA/PlVtE2MDtsNIUJG5oXW6YQ+joTPbMtJFYlHJ1UmzyPjF7LzF9UnYXRDnZZ7LLeXZx8qMD5mav5JwYQMFcLRnRXh9///59rvEaBjVdH4hy5fb2PV/M/27q3fUjYJ4qUV4FmbCwV5/UV2LBwGwQsXX7bJfC1dL0thszcM26jNf8u9TZ4VLZAey0Xau8OIbTz+jZYzv4kFKyEDXCtbFZO+i2tM2xwpG/J9YnXGuTF0ym2+PQsvNnWRqotztP+Vn4J34dmF8qZKKj5fzzHbrs1L0qGNdvIy351AYjnRx8uC3vr1FjO/Arr5NM5tC2svxmSvP9MksYYRdTBDUWAshv0iab4/EkzMJvKaBSc+WLfxIBqBZhsYF/1x8CmXEjbpazSWo/yAx6kwLbPlTQvCNIXsY30XPaDQ2MaeBIHz8LOuWRVnVWY3xLGTcCjaoyC9ea5q0tapPuL5lRRAYALBfXJgIJ/NeGqyqvrm71H0JRzeq0tGQS8sd2G8Xo9EFTCAc9a9IU3kW2ntHUslzVSPE3FD46mTP3DwsTeUtUUEYQHdhlrqJCWRRGaV+r1K76yjkTpBkqkv7uWz5zf1DNjG+wwBtWCj7eSE3anQ1aE9WWR34hbKb7DBQX2RO/jGAy3mgpllpa2goGfNz0XgUOQ2ldTZ7IXG4+h7yQKqqtLcCgnDmwHd8e6vviCwFF3HK2aRXB7quf7s3bxEjVmhyRWSaCpCrkwTiYnIEouCnbUESNDmTDydjOJlCQdJi+ib1qvQ5RVJiJ7IUrx8cso/xX2C7Ool0kb/qZjDbiD1ZZYwiHkrBvdO3sqcJRCSpn0hXNXKw1YKsFqX8QopDAdwIMlt/EO9SG9L75PJRg0bfLvO7oQEwvusPITXgc/PPI8vpjxGZfayL5hLD8Pil6Z0ALpm36Pm1NmbGmsAtVK2j3itFbjpIMoVeEaCUWDr15pBdjPv3/7mQlMouLjbFPm9wtB9GfH39Fl4IrxN2bF/uq14Yri7mRq1MFTNA14xizh8b56N5L+NWH4YnE9PFDAkCW7ecfl66cWDINkbMF5CddMlZURsFzzEM/TAajK57ubTbvB36icnMi1/xVWlet8IYCRi6LYs4X8yQgn+r+l6C+kQ8RuqoWtsl8/9wcMg2xn37hv4slfbI8dmr3edequqHEeqsU57TVUKs/Kv4xwmT6ry5JpXRP1mSVeCLlQtJXEelkS6+Kt2k3po1BbVDezlp7s0h+xiHflDKSukKL87D57Nt95dVF/eh27x0tz6+kxK3CuIV1sp0GPq0K+JSZSKGnIah1B9WkC4Goid6ZVTktcsHhwbA+BKypoIg5DwM+sH17nfzW/W1OZvCL90qqaMuivVpc2TjvDw3omlsfw5e9NnC15VFIYJeUXl8vnohQS3iAA75xTtbyPVf3D80CMa/EHiexwX/F8ri8zCiOJdh4Gi7GtlphGc/2uEePiJZiVHxAekuWxQ9C6TIyHbUVhHFqOviURLAaW2/nH33BRCtYKzyfDYb7XMv9kXvCLowgK9Okk2U0k50M3OvkrFIPQMhYalDgrrkYTv12ySAi35OIAJvKZy9dmBoIIz7sryUnWSBZu8ddRQEMr7ZeRKiUo7iXI+BENNljbotTU4DzRWbDPBjQg2F4XV1I3uGOhQ+g0s3CjA8BUk69mIE/TH+gI/HMwytv3i84vkYWYPdjAUVcszP8Te5emLa5HWTM6O6buX8FcTXubzhJJ9Dr1hvPeROUdR/5UhCpihOf1z6YN+gGP9EEpKerg5usbYw0gBshifdj1WcRT2QLvfaNjNHZucbtGHldBIN5Nm8LHJTtTzdUZrFKYo6It6kMMSG089JF5Cg7htMH3+YzYxiEt0Xi9VzMeKKdY0xxxkKyYu9ELVVmBqBhoX5d2TFN1eiS+GJeHQpj3RxoxK8e9iHnQZO+p2l8OzFA30R9MfIvwP6fRm9S1efqa8Co8t08UWf6w18HpU6VJxb7R3zu1+dZLv9P5qG4jckBQFhPBXBY37qZ+FT1OHwnFmAQ+ZGSP1dXwBWMfaDCJXqM70AGjB3urorXusQXaR+mj1BehozOJlatqKIkOniSUgvJ8ZQGA4ZtVX9BUX9dYYkU422MxCXft4f4p5h9HynrI6AJ9zktjmxsWHqIlkoEuc1K+/I0O42ZsbCEEnafzyToD5N3iWl4jsomcq+1ldQLWPs94PrKHd9RlaR99cCvWvMFE6Cen7xYWHqCvNitqwdWYVbmPI7NBElvf7bK5HEoVLk973+YimUur7fAkRrGPvJFewC97OznSiRDghBMh+WmMFLqGYZ9e1qjtasEVy7n3CRgCDytbyHVur3uY8ox0pm2oxuvIG48FsrCPcII+hqm+Fn9BGyLi6imNNTnyRPJvD9CWTwF8TlDjuqWfD+205ZzFeT8Ujea9SVh8jUUMXc3YRpUQMx/vT+ff+P7wi35Owz7wjbctoUVOpB6mRvZ0otJK/oeDbcShGuIOaLSdx8Q4LaPJ5DyVT2mGO6iQK4NtJFK+ZmjzAyDKO5uOjTNsf0pYFwhGyEUygJutSbu8GUrpbuCGt6F+tiaALr4kin3kC66Cjlfk8EteEMhGat6eIeYAQQ0Boc5n9RL34jqxBqjAe6pDI5j0olFpNHsc/AHZdqmqEtFDYMlKu4shFXbFyKLHm6irohnKGoxQtmdUpDfpH/rWWIA78jQMnfZiiiqIvf2NVtmrnVcAlBiHlfHNR67hUzX2y2Cpnn0Ct/W8xZsCVn/MQv4kxDlZHTWMS78yhf1L3+lHDaOsQBMZoyGUIPthl+auda1+jSeG2bCOrhhejRXtZ/fyU6olsqh0OIpB8FcFhQGUVdk28kXl6o3STVcB0HcNetIxz4HXWolWaX680vpaf9o+b2SfN4JgUFcOFTM+Z51OYDIYgzLdiv+0bOyPG1RwInkSm/+oaAnEb4N0TYG7rXl03d3MUrDq6PzLAUVJob2YuL37wjZAKxvPKYrEsfz6wmetNT4dwI47ZyuwCF4ULaz43xyGkwnfo9pIuO4nsJLOwN5DQE/oPdIBwAIwvwbICG86bVjdTPqaJAvh5uIbLoKyooJ0Ye8UjyFZJLOaZbxYzHipQy6BW1as4fS2Ynl7zs4/r5xXSC+lvJHEoBXn8s+9GuXnEAjIRwzUB5k6I+iS5TVLH3jrqulUgA10w4UBK007a5XYlagYgnDgy/HClhp0FecaNapl4uREyIWBeT13YJ0T5GGj0Y48te7agPsj+hqD81fYcBGM0Xv4KiG1xAlS/MmHxoM/eltBPesQBSg/SwEPRJIamG/KKClPii41A46CBzNyhf5IVjFlDtEUbkA+GTWKSjbkgnqIPIefVsDghI5W0yseFYJIwhpI5anKOtFMOx39kKp/3hMQxxW1l9GH4X/VSn0O+EXP8dpIvSbgV1IIw6zpuU1ln+n5HCUefM3QegO7kLvUb4f0snzehGVYsiElRr5XBNnvNWU1Jmydt5XH+I3D6KdZuJaXWmBTSXHDuze4j2MRrdAD6C/mjsMkLo8E2ZvkMvhcrmNeZD5tVJbFFvV6ZGoYV5BvxxrURL2C/mPduKek+uJQ5VJpu9ZCrAzdp4RZsYkdbRWkC4Ua9vSu9jiNV/pBZ5BrS1gkgYwlHkVs00d/JFLmPlBQ1sqF18JMCP9Qb81/hr1CH5lNmZcjsLkvSBHYh2MMIG0DRA8qYHwjUsqIu5uwijRwPD0g1I5HS6mFvt9frvyXNuKxkxRMmIKxzx8+N8ZGkUxaj3uF8ic50m40kNvY3yxf7lqT3CiDmzGGaLSwNkES5giA/Er6jpRd6NcYNVwk34gDCGYEk9X5QuOa20bXQWr995ZTGeyXu7HRS/v0ZR65m75hID7Q/z/2rrFe29o25opbHatjocuogFNTCFa0hFng5MRAhLAXW4kvmfhPmKv6pE57vAChsEJLrITeBxBtBRb1dqicOF6E2ii3ecJW72ok2INjDqGguQX1TUR5mfEF1M45qwKvOF1LxZ2DhUTOORTeL6wxEG6JZmGY3NeGRYGMvWcHVqZkM6Q70cPo18Bu5pOH0p6X2bCO1gNLRtF+55nxOwuaE+xR2y5v8yd7WxTWTr2Wwrde9Hq71bXfVDupU6u2p6d4FKOJRVAo4ENlliPtpu4o7t/fhR7I5jVWoN1VRszI/CjM6JV90fy7hnYmmvBBnHsRNWKrF3bNhdNbmrVDBjVGDrCmaCtGaL7hLG0jWoFcs6PeeMsy0S3Ey+CEEkP5AiHr9fz/Oe97zH0FQA+ulUMdnGbNqTjLxRTrnJa0JLxqNFu+l9QIKD+T0e3bxaxjWRHoTjX2119sXAytLNijC2eurNQmRKN/0DB4gVFSzPqW7NwXP2ktsj2cqONoG7XgrZL4YsUTWaOIlhVkgI3Pk8uRV2ceAzZmtpirePUL1KLNO7cojLwlgnLxEtHMzCCa3mS01jAreVfZMEHZEDKtxPVf8W9m3SuqEZNdrvpI1at8jJFhlkpDc0Lb32jTTNvMReYHAo4srfmZPFv3UAZU0weuru+sOFO+jcXd0nXaFFI0X6icZlq1OR4SdUL6qH23WxdlUdbCw4ad7UF3aSLSIoAivkrN+8xn3MbAmeotOQ2ozXB9O7V2HF5WFsLVQ97gfgDct8V8Z18UXmfmaanCQa852KyIG/JubLSd+2rZgcFw466WuQ7mxXbLCLFUjDn/RRg9g59g5foRCrXhyL/7gqiMuLx8ZCE3O1u6Y/vgPj2JINk4lKLAe6ijE5DEcSzNZi6HZbEpOtkw5Hi3r8JRqLFSqmHgxMJV4u99vtKSymOCH9Z6uCuMycY/kA5mq+FHHUDvxx048ax2IUxkdVdHqr2t/ONsnrsRCuowtLkjicjZrfcP2FdCCdx3VRS76Lxl58RR5L8MmapjW9WShN/sXqzLg8jJ4COrPT/ArsJrH4XyMJOlbR6CyliZe9Dk+omZptRf4qe7jVIk27pXg4/vcHwco3MIAJHOndXAteYDpKp0jvRqvWvXlOHPu7VUJ0iLHVY9Utd70LDGv6dY4oDcaXSdC8V73lQ+Sus+crKKcmF/XiXumgk3EGnJN6brHDXWyE3LY5aJk32VNMx+sjJBZ1XBf9ELy9aogOz616FtyeuuUfwLrpmxSx4halcrvdYCnGUBibQL/JwsPty33XSvGDSzb76bK/VtPPhgpREot7ejS9u3Q2sUWt1GhdbHgLsfTZ1UN0aEfLg//4hAkdq11CtbfAE/bMaLWzJAJMMEn5v8HB3faONLbiQCy2rAV3o9EnVxQxmK6Multa7Qs0xmwFH9O+RvXenhwSVu+oju240PKQB8jnZ28gQsOZfcMJetPA6sxCSCQ7ObrpUNE/01gMjrgb1sOlJm49ZMK/i2ydjMihUVw0jOtwEhPBkx1kqrjqJo66JhCdxiPZ1j+qzSmZL4kV1SmqW7VGXzEWxY5KIfLJLBgh1xcDlUOkyiyZbRoWZoVkuxa51r9TM7vDk8zR4JR91u/2Kii+Fo7qGGPDIou05spELv7hy1gYU47a7AwIZICNdov5pJqBKd68iM6R9Q9Ln71hBudDo4pgby7Qa6+h3WSLyOJMiopSd9cGogOM3wOHG5YinNFrr2eIn3aoJ22IlreMYzHv3UkfRuG3S/vZdO0i6p9ZGt6C5Wn1VP1gVEEsJnDEitfJFhH5PTqBZXV6FSgcWCOIjuZzTri/wXpR/xrSujh+ko6fYBqeA0jKjz7Uagk+0XFDPKCVwRybOXSwZ0mICwetlqdLHOnjBvCnNNrESoM4R26QHsNWb5HDtwtrBdGJHeEpEouaQovGZqVCaXgVEzhEr5Dq9mPv4bOGKSO5ctDJuVQDC5gCFlPRiFAhk4yGPz7BHC99lrB7N14FZCbWDKITjEgUDlWN3GHCwreC95gE+X80+1QR0kDiyVcuM2+aOkIn3O6lh1EbVo+nSWIxHUzRumh+TreInKbjDNVOr4oya+aojjA+nxYPaWZOwBz1xY7xk3TvcnWhC8fiYN6r2fPhPmm/rutJUf6rek/PkjNwuPTPdMMpPwqQJqP7Lo6CXqw7+2213fQW0NrFojOMPwQntVq3QIoGk8sQb9KsJvamWGa0RzeIETvug8khwzRMCE64Lztoh7fqt1jSR8V1ERMk8yhONVvL71CIVt1bAGgNHdURxufQqctK+Esai1NXaGq/3FWE5Ii3Ra5M83whfFbTTfwF0AeW51dUjfbxqqenEK0UxKiEf0WPZnQPTDBHSlOU/mIRU+SktYXoZA45mCoNEyNuCb5F+7lao0uNiJX8oYe0ucH/aeZb0/4C4Gf26s0nfJFBxx7LauBKlBMDuC56H87PdkvbmFfAaZtV3PJm5eG1qovLwKgi6ZcM8yPS8Gc6yPzPLVUEcSz2TDsWhW9NTXOEEasMrF48d+QpPyjhTwk7gnkJjDGby5+STGZUf47rIuj997WF6ATj6/I0rYtCgs7iWW4lzcbpLAIdgYcTuunQjq0mJqmeB2Uci8QRyD2Nq8F3MKsYpodvxmV3N0Rn1xqiE4w/Rf/CMC8VpxLt62mlmIwDyaIclfen9puGburO7LjQaLn9gVAhEo1U8qPuedMfmCSvHdDVlVhMFWPCuTWH6GRm/rfgMLMl8DZ5LtPQrC42Ss5cdpo0o+Yydw0Taz1ndrTHQAiBS9t60ZfpZV6OEvprEKWRlVM71jgWHdrxR0HIk7a1fQiYFUljw4aYeE2cxBB13aGvYm/1o/4CIKuKSZPxunya+ZPgYosWx6K4xhnVMUbXH4GBc0TfG3P1rkA0ShovdEfqkUJ8/yI+/ONmAaEnYmy1n+OI5BVcNHDp92haIbyDuTZAdZpWrfcVUXz/ekB0hPH73CkMcUifb/WxUZIr6KUiPhkYxk6qU4CaOVdVZe6JdmzV3a3WQVw0RlUxhon8nod3zawwzXwBdpPmiKa5O1U4qK99LDrF+BOYslfudXFpFM8fqtLHQvnxEU2vGcSIJOnU9sop+GQ7ki0YPT74qQJKmIbvWdBNRZpmjnBj9JaAVvcW5bUlcMvEuAlIdHFiZzaNlcaox15C8bm83/ZR21fvAyErPzkePZdbCxe5kF8MEEc4ZGk3wMfMVviXdCbCaHizQFiXWHSK8YXX0aypWw9K0TSG2KJ3NTYXMwRiO6Ga1UJsIBD/FfFo9dSVCFnhj4uGd0HT/fFe5mLxIxrmRqMTx+LkekF0do/1j+F72uVuSGLR7t10bM6F9P9nRCOHQmwoi55sR6upZs6URZbEYkMzfcNYTMlji432Ehw01w2iM4zPw/eqt4ICIjScppst5YzxHULTnPMhQc340vDxGJsL9YWWD4wq4gDp3WCI22nvZoxe1tWqt1ROWI+6uAyML7h+D77fWaaXLPZr9E2N+8LEYrIh331AKkkF8Obj4hGLxYfNhuUHZGmRPSCmX5Q/YTbHTlBHNS+7FSSun6M6tOPLnDysclhMjbppLG5R4rt03Visi3MFhGPxfGQi+dh4JEce9YJUKZANsITmat3SGHO9OJFo754qwsi6pRunGH9dBojjEI1FAvG4ethYNCH+oWUBjkUlc6A2hB5rR8vTyAl7shIr4A8J18Vx4QpzDNGWuqm1cF3M6OsK0QnGf+AQFDANP0szKo8FyC7DtEWxYeiGglKqoMBJfmgveIwd65a7mUdnsiKbOT+KrahfQmMY4seUwOF6lJPXr2g4x5gFMsSlf9Ru3vDbpV7qqMRX8d87UMpKeW6qlvSJj8s5mOB0w/5uGACYo+6x9OtYL24hd/vt0SK/CCb+dX0hOtEdLIIQxyLdrskPKeEDOKUabYhVhRsohnEs8scVLvpoPNqbkjxkfN5+2obEoj81xhwtX0i0F1AUQXzt9eLyMf4GglhMYXZT42vM5uCIaWcbjfycG5dT3IgyPM8nVREVH41HsnHHY7lz8hlFCKZwOD/UavviCeYY12vH4gyOxdR6EbhlYfwewI6a98yT2Rt+r/Rt20t1zMfn9qFUOeVDk/ysT5LPQ/FRO1rNutXjF6f2gqBEmPx87RI6zbwE3qKNDW3mnrL+segM4/MAR1IPfZv4aCmEJXE7o+r6z8+jATZcTO1PzpVYCdf3R/Ujhuih27VsAtczT1rtHV0DB2jpN2YeFOX4xLo7qlM7eskSCp4/Bj/CAsOmqBjqnApCYn8udZs/hjigSl3BR+PRY3lusSkvG4ml8nRrUW6EYT7PbCOzO3q14S2D4Z1PwYoO45FcmU4kOsrDGtH8dvfGMHIgxaZykl4bYgVUkKfY+KO1wyI7WsmFcMJR57VaFkwz74q37QGxe14VrnmTccUYNyG0n4z68bnUPE01bR6+HZOfTB+4wCfHMZMF/b7U2KO1w/L4xFEfOXyjm9EvSl+S1QW26m96s6K06+lAdNRfJU+FdRwvh3d917gxzJkiJLGYmeRvFmORgUilGJrl/w8jWUBGt062n7bRDTLleikwSfnb5Xt9JRB+ChnVMcZ9aITvOAb6TVtq4Ixq6jNlOY7eUIeTyRkQ5cogH+yvJb/g2r5KdtC0mmRzgRCLj3p3tswhdiTB3EjtoOfgDS/ZXDD7tCA6wfifEEwn1RHNsAsj/q4ZKgypmZy4y0yO46IBJsrSbPKi3LajZXnqLY9PGs2JhKO2cMbySduwXjxtX0K95y2jpxWLzjBu+l1Z/KfciD6rY2xtX92OJFXyyxM1PpeWU+CNbKrXPIqERYzNnnrTBz4t0Oc0DnkM81K6l9nKXbCb0GScAfQ+PYhO7PibHELCLt1cBKhfVeSBQFjJTNauFbnIQKBSiu/g7wTT8UWMnuY9JZ4nsUj3TxiFMKbhkTF7F0xnX1EOrU+TceUYX/gpgJBEo83ijGtBFIahckrnj7MCVhxTwXd4/g5gQ+U2B6g36lmhT6Wzmh5MHnKpBNkiQldsWGQbc2idxdTyMbp+AGUoT+kk2xC9kYOD5dB26QB/PCfA82A0mzH5G5DDCguiDzw99XpPPSueyXFB7Khu7N6+zJf22nB6WtJXQqmnl24cY3wOQATABC6NsxilD0hqqiAeqNXGQSzMDo9H7vJzwQFBQZjLvW/VmzP17lg/fZuQzIbP3hcxRw1+Qvuo1Xve0jo1/FeJ0fXbKpCRVJnH/npTQTgWi/EJ/gjmoQNspRQ+wHcHovEB4XxABifI24bnsZhK0+c0dpIn33Yw18IXEu1lfkU59uFThuhwh97vYG+FaNDQbgZIk1GN12pXyxGhIHwWGJmtdQvsoJpS5AmITtR7mpj9sFIMi+pD8zpPn3wD7e1aXi8rx5U/f8oQHWJ0/QEACKL+oSzKBAcVabI2VCaxeG48dTt5TGYFVe6DF2oAfNiycpI3mw6KWGjgfLNdmGaOimSq2DRm3N6SLORXN/++jhhdL6tQRigKI4HzpXgvf7EUxQQur4Zvm/5oNDwQL0Q+5Y/I4GedxXg+EI1F8l4ci3NK6DbZQWpfYujsC2Al+vQhOsbo2pTDhkQADrP9tdoxFBCyUh/8JJncK7AhNj4u99aOlCH4IIgdlQ4VLzw09PIphrGHig1yCRWA8OgGQHSO0fVDFkCAwzKi80fLAVFJnwmOmPx9MZgqp7rQp9h7RYDkDOaoXCY/at3VTPLk27toG53wr9/zsjC+IRCXgdH1ExbJQAZ/g8VUWg6jfhVDvMYFJAXl4dtJfrsQQzIZ1mSlinfPzJz5GrebeVkes6eWiF4UNgbicjC6tpawu8pinsZipVSZTeJYjOBYDJ+rDSnRSBjB4VKUspt5/Wph8HbHpdQkLf3WLSKmNgjisjC6nmMJGxAjgiLmwc/MIV+GG1RDPu4Af1WNpgsAATYCBvN7Fub1ZHk4wbyW4u2RW3efKIc3It0sH6PL9eJeAhKJH6kjOr8PspjyEPlRw95bAQMACpxEXu8xzdzIFXuqmDTDvX1lkNooKy4bo2vTOCYDWFlhjnodFQVFyMsnk3y3EAupob2InC8S1V+7BKdpw586KtaLQNowKy4fo+vXOFmGSOhNdgvRSCByPvAZjsV0JByonEdIHsh7D2nmzWLmSsfF8ATTJnADYEPq4ooxun6MIEDow3EpGAoOdqNJc0iNygo6l5O5GH2DST9ONhf8D2qvZKRiauMcdUUYXWXMBDB/LeEi4Ydv1XifFKvEBnOSCqX8HnfVSJKlRceE/2ZoB87dh4vGRlpxRRifM/ti2C0hmXs7UztSjAkD0UoxfiAmT3k9un6tVJnu8Md/ydhbRPxYUW+oFVeEESeeH2B/hXKMEDiWlZT02WDGHALynoPz5hCZci1n7FObqtsPQWVjrbhCjFg1YzuC9GSS9Kyw/MgN306+i5ClmUfI5oLPhW30qL96a8NjceUYXa9i4grRm7howAob2gd28ddYBKtmjRyEXxIpRyXdcBanoY2GuFKMrjs0u5IWeaBSDO/iv2aFIKxdLfZf6eheXOHv9gc3kN2sHqMr0RUDIuQC6TPl4Rr/FRImxqFHbW8RSSbNKq6LnLzhsbgqjK4Xvk96A3BYTRH5AT8xfgG4EYa5k5nmO+wXJln0DDjqqjCSxeVQxiR9snadtEz1S7K0jfl7SJ7T4DWt06vKG6QX1xLj7yNsRzhY+zqYPqebxlxM4v3hA99tnRSfhVhcLUbXKxxBmYKSPY68D5TIFhGe3pbmUOgZgbg6jK5XYzKHALpADwn0/0DCdMIeR+3juGfEUVeN0fVcDgA5pRtkSsD4N/F9upNxoektyZlnxYqrxuj6cQzXyfB+jRz4/ELO2EsR+gLPRF1cK4ybXuXI6x4TGKL+uSzRK1N9wWcnFtcCIwYZwxUktdMw9RsA/u9AJ8BaZQyqWKSCH0Ge7OjsaN135u7pzs494CP8B7ozRXU/MjBqpc0AFq4hZ4/O6JjsvLpz2qBowFHXjwyMQmHTOjunrQI2e1q8O2cMfGeKBn5kYBAK65gBrEQ6ZsyK6BzQ4Ska+pFBCDyEDuw3D5oGHPX9CPQksM+c0dk52PIiNf0ITK6dna1pgy4vUtWPQE+mBam7DEIvUtGPDIJKAsKD0YvU9CMDgeuJhokfBycY9ePwAJT6UUhRkFRAsg4lBQr9CABkvE704pPwMwAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_515\",\r\n id: \"515\",\r\n ProductCode: \"CTSC\",\r\n ProductDescription: \"Custom Timber (Suspension) Clip\",\r\n ProductIndex: \"SCTF\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"99100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.206\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.046\",\r\n PromptTextCodes: 'Desc=\"Timber Susp. Clip\"',\r\n Colours: \"\",\r\n LiveCost: \"0.213\",\r\n AncillaryParts: \"2xTSW1016B8100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_516\",\r\n id: \"516\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Spanform Cover Sheet Only (Metal)\",\r\n ProductIndex: \"SFCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"400 520 600 670 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.2\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"4.56\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_517\",\r\n id: \"517\",\r\n ProductCode: \"TRADEGA\",\r\n ProductDescription: \"Steel Frame Fascia Sup. (1/CON19 1/CON18 1/BK62 1/BK64 3/12x40BNW) P/C to Frame Col\",\r\n ProductIndex: \"SFFSA\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"150\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"20\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"150\",\r\n AncillaryParts: \"POWBK\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_518\",\r\n id: \"518\",\r\n ProductCode: \"SHS1251254GA80\",\r\n ProductDescription: \"SHS 125 X 125 X 4.00mm Allgal\",\r\n ProductIndex: \"SHS1251254\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"211026\",\r\n SellingUOM: \"LM\",\r\n Cost: \"31\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"14.8\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"345.13\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW125RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_519\",\r\n id: \"519\",\r\n ProductCode: \"SHS505016GA80\",\r\n ProductDescription: \"SHS 50 X 50 X 1.60mm Allgal\",\r\n ProductIndex: \"SHS505016\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210501\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.7\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"2.45\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"68.95\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW50RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_520\",\r\n id: \"520\",\r\n ProductCode: \"SHS50502GA80\",\r\n ProductDescription: \"SHS 50 X 50 X 2.00mm Allgal\",\r\n ProductIndex: \"SHS50502\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210512\",\r\n SellingUOM: \"LM\",\r\n Cost: \"7.65\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.93\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"91.52\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW50RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_521\",\r\n id: \"521\",\r\n ProductCode: \"SHS50503GA80\",\r\n ProductDescription: \"SHS 50 X 50 X 2.50mm Allgal \",\r\n ProductIndex: \"SHS505025\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210510\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.55\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"4.25\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"123.16\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW50RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_522\",\r\n id: \"522\",\r\n ProductCode: \"SHS50503GA80\",\r\n ProductDescription: \"SHS 50 X 50 X 3.00mm Allgal\",\r\n ProductIndex: \"SHS50503\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210510\",\r\n SellingUOM: \"LM\",\r\n Cost: \"10.38\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"4.25\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"123.16\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW50RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_523\",\r\n id: \"523\",\r\n ProductCode: \"SHS50504GA80\",\r\n ProductDescription: \"SHS 50 X 50 X 4.00mm Allgal\",\r\n ProductIndex: \"SHS50504\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210507\",\r\n SellingUOM: \"LM\",\r\n Cost: \"13.25\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5.35\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"154.97\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW50RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_524\",\r\n id: \"524\",\r\n ProductCode: \"SHS50505GA80\",\r\n ProductDescription: \"SHS 50 X 50 X 5.00mm Allgal\",\r\n ProductIndex: \"SHS50505\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210506\",\r\n SellingUOM: \"LM\",\r\n Cost: \"16.47\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"6.56\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"175.93\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW50RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_525\",\r\n id: \"525\",\r\n ProductCode: \"SHS65653GA80\",\r\n ProductDescription: \"SHS 65 X 65 X 3.00mm Allgal\",\r\n ProductIndex: \"SHS65653G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210656\",\r\n SellingUOM: \"LM\",\r\n Cost: \"14.2\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"5.66\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"163.91\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POWRHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_526\",\r\n id: \"526\",\r\n ProductCode: \"SHS75753GA80\",\r\n ProductDescription: \"SHS 75 X 75 X 3.00Mm Allgal\",\r\n ProductIndex: \"SHS75753\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210556\",\r\n SellingUOM: \"LM\",\r\n Cost: \"16.67\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5.987\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"191.40\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW75RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_527\",\r\n id: \"527\",\r\n ProductCode: \"SHS898935GA80\",\r\n ProductDescription: \"SHS 89 X 89 X 3.50mm Galv\",\r\n ProductIndex: \"SHS909035G\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"409\",\r\n SubGroup: \"210897\",\r\n SellingUOM: \"LM\",\r\n Cost: \"22.4\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_RHS_$$\",\r\n MarkupCarport: \"$$_RHS_$$\",\r\n SellingUnitWeight: \"8.75\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"259.47\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TUCCH\"},\\n {\"Code\":\"POW125RHS\",\\n \"Conditions\":{\\n \"Use\":\"=Post\",\\n \"Colour\":\"!=*Galv*\"\\n }}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_528\",\r\n id: \"528\",\r\n ProductCode: \"SEALCL\",\r\n ProductDescription: \"300G Silicone Sealant Clear\",\r\n ProductIndex: \"SILC\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"630\",\r\n SubGroup: \"10015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.19\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.36\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Clear\",\r\n LiveCost: \"2.8\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_529\",\r\n id: \"529\",\r\n ProductCode: \"SEALGR\",\r\n ProductDescription: \"300G Silicone Sealant Grey\",\r\n ProductIndex: \"SILG\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"630\",\r\n SubGroup: \"10015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.19\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.36\",\r\n PromptTextCodes: \"\",\r\n Colours: \"Grey\",\r\n LiveCost: \"2.8\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_530\",\r\n id: \"530\",\r\n ProductCode: \"SMG40**\",\r\n ProductDescription: \"Storm-Master Gutter 0.40 ** (WA only)\",\r\n ProductIndex: \"SM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"197\",\r\n SubGroup: \"40101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.0942\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.9433\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.1932\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_531\",\r\n id: \"531\",\r\n ProductCode: \"SMG40ZL\",\r\n ProductDescription: \"Storm-Master Gutter 0.40 Zincalume (WA only)\",\r\n ProductIndex: \"SMZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"196\",\r\n SubGroup: \"40101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.0579\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.95\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.216\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_532\",\r\n id: \"532\",\r\n ProductCode: \"ATS164040SM65\",\r\n ProductDescription: \"Bondor Aluminium T Section 40X40X1.60 6500mm Offwhite\",\r\n ProductIndex: \"SOLARSPAN\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"699\",\r\n SubGroup: \"11620\",\r\n SellingUOM: \"EA\",\r\n Cost: \"35.13\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"35.13\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_533\",\r\n id: \"533\",\r\n ProductCode: \"CF12GA3004\",\r\n ProductDescription: \"Solarspan 50 Back Channel 1.20 (Suit 50mm Panel) Powdercoated\",\r\n ProductIndex: \"SS50BC12SM\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"236\",\r\n SubGroup: \"122304\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.6927\",\r\n MfgLocations: \"200 300 400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.9125\",\r\n PromptTextCodes: \"MAX_LM=7500\",\r\n Colours: \"\",\r\n LiveCost: \"22.40\",\r\n AncillaryParts: \"POWBCR\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_534\",\r\n id: \"534\",\r\n ProductCode: \"CNSSFFO5550**\",\r\n ProductDescription: \"Solarspan 50 Fascia Overhang Flash (Suit 50mm Panel) **\",\r\n ProductIndex: \"SS50FOF\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"201050\",\r\n SellingUOM: \"LM\",\r\n Cost: \"2.9307\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.1971\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.46\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_535\",\r\n id: \"535\",\r\n ProductCode: \"CNSSFRB5550**\",\r\n ProductDescription: \"Solarspan 50 Rear Barge Flash (Suit 50mm Panel) **\",\r\n ProductIndex: \"SS50RBF\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"202050\",\r\n SellingUOM: \"LM\",\r\n Cost: \"5.1849\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.1179\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.52\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_536\",\r\n id: \"536\",\r\n ProductCode: \"CNSSFUSB5550**\",\r\n ProductDescription: \"Solarspan 50 Uni Side Barge Flash (Suit 50mm Panel) **\",\r\n ProductIndex: \"SS50USB\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"203050\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.3686\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.6014\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.99\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_537\",\r\n id: \"537\",\r\n ProductCode: \"CF12GA3504\",\r\n ProductDescription: \"Solarspan 75 Back Channel 1.20 (Suit 75mm Panel) Powdercoated\",\r\n ProductIndex: \"SS75BC12SM\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"236\",\r\n SubGroup: \"122354\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.8482\",\r\n MfgLocations: \"200 300 400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.113\",\r\n PromptTextCodes: \"MAX_LM=7500\",\r\n Colours: \"\",\r\n LiveCost: \"23.56\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_538\",\r\n id: \"538\",\r\n ProductCode: \"CNSSFFO5575**\",\r\n ProductDescription: \"Solarspan 75 Fascia Overhang Flash (Suit 75mm Panel) **\",\r\n ProductIndex: \"SS75FOF\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"201075\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.2125\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.3122\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.46\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_539\",\r\n id: \"539\",\r\n ProductCode: \"CNSSFRB5575**\",\r\n ProductDescription: \"Solarspan 75 Rear Barge Flash (Suit 75mm Panel) **\",\r\n ProductIndex: \"SS75RBF\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"202075\",\r\n SellingUOM: \"LM\",\r\n Cost: \"5.4668\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.233\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"13.52\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_540\",\r\n id: \"540\",\r\n ProductCode: \"CNSSFUSB5575**\",\r\n ProductDescription: \"Solarspan 75 Uni Side Barge Flash (Suit 75mm Panel) **\",\r\n ProductIndex: \"SS75USB\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"203075\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.6504\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.7165\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"14.99\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_541\",\r\n id: \"541\",\r\n ProductCode: \"CF12GA3504\",\r\n ProductDescription: \"Solarspan 100 Back Channel 1.20 (Suit 100mm Panel) Powdercoated\",\r\n ProductIndex: \"SS90BC12SM\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"236\",\r\n SubGroup: \"122354\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.1999\",\r\n MfgLocations: \"200 300 400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2566\",\r\n PromptTextCodes: \"MAX_LM=7500\",\r\n Colours: \"\",\r\n LiveCost: \"23.56\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_542\",\r\n id: \"542\",\r\n ProductCode: \"CNSSFFO55100**\",\r\n ProductDescription: \"Solarspan 100 Fascia Overhang Flash (Suit 100mm Panel) **\",\r\n ProductIndex: \"SS90FOF\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"201100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.3817\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.3813\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"9.46\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_543\",\r\n id: \"543\",\r\n ProductCode: \"CNSSFRB55100**\",\r\n ProductDescription: \"Solarspan 100 Rear Barge Flash (Suit 100mm Panel) **\",\r\n ProductIndex: \"SS90RBF\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"202100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"5.6359\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.3021\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"6.5721\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_544\",\r\n id: \"544\",\r\n ProductCode: \"CNSSFUSB55100**\",\r\n ProductDescription: \"Solarspan 100 Uni Side Barge Flash (Suit 100mm Panel) **\",\r\n ProductIndex: \"SS90USB\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"203100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"6.8194\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2.7855\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"15.58\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_545\",\r\n id: \"545\",\r\n ProductCode: \"SSDFWASH\",\r\n ProductDescription: \"Bondor Solarspan Deckfast Washers (182160)\",\r\n ProductIndex: \"SSDW\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"699\",\r\n SubGroup: \"11600\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.17\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.25\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_546\",\r\n id: \"546\",\r\n ProductCode: \"IRSSEL100****\",\r\n ProductDescription: \"Bondor Solarspan Elegance 100mm Thick Insulated Panel ****\",\r\n ProductIndex: \"SSEIP100\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"201005\",\r\n SellingUOM: \"LM\",\r\n Cost: \"32.23\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.56\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"133.19\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Solarspan Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_547\",\r\n id: \"547\",\r\n ProductCode: \"IRSSEL50****\",\r\n ProductDescription: \"Bondor Solarspan Elegance 50mm Thick Insulated Panel ****\",\r\n ProductIndex: \"SSEIP50\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"150105\",\r\n SellingUOM: \"LM\",\r\n Cost: \"28.09\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"12.696\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"123.28\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14125\",\\n \"Use\":\"Solarspan Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_548\",\r\n id: \"548\",\r\n ProductCode: \"IRSSEL75****\",\r\n ProductDescription: \"Bondor Solarspan Elegance 75mm Thick Insulated Panel ****\",\r\n ProductIndex: \"SSEIP75\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"175105\",\r\n SellingUOM: \"LM\",\r\n Cost: \"30.05\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.128\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"60.8\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Solarspan Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_549\",\r\n id: \"549\",\r\n ProductCode: \"IRSS100****\",\r\n ProductDescription: \"Bondor Solarspan Plain 100mm Thick Insulated Panel ****\",\r\n ProductIndex: \"SSIP100\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"201003\",\r\n SellingUOM: \"LM\",\r\n Cost: \"31.42\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.56\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"133.19\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Solarspan Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_550\",\r\n id: \"550\",\r\n ProductCode: \"IRSS50****\",\r\n ProductDescription: \"Bondor Solarspan Plain 50mm Thick Insulated Panel ****\",\r\n ProductIndex: \"SSIP50\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"150103\",\r\n SellingUOM: \"LM\",\r\n Cost: \"27.28\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"12.696\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"93.69\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14125\",\\n \"Use\":\"Solarspan Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_551\",\r\n id: \"551\",\r\n ProductCode: \"IRSS75****\",\r\n ProductDescription: \"Bondor Solarspan Plain 75mm Thick Insulated Panel ****\",\r\n ProductIndex: \"SSIP75\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"023\",\r\n SubGroup: \"175103\",\r\n SellingUOM: \"LM\",\r\n Cost: \"34.33\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_SOLARSPAN_$$\",\r\n MarkupCarport: \"$$_SOLARSPAN_$$\",\r\n SellingUnitWeight: \"13.128\",\r\n PromptTextCodes: \"SSC SSCB LAYING\",\r\n Colours:\r\n \"Classic Cream/Surfmist,\\nBasalt/Surfmist,\\nDune/Surfmist,\\nManor Red/Surfmist,\\nPale Eucalypt/Surfmist,\\nPaperbark/Surfmist,\\nShale Grey/Surfmist,\\nSurfmist/Surfmist,\\nWoodland Grey/Surfmist,\\nClassic Cream/Classic Cream,\\nBasalt/Classic Cream,\\nDune/Classic Cream,\\nManor Red/Classic Cream,\\nPale Eucalypt/Classic Cream,\\nPaperbark/Classic Cream,\\nShale Grey/Classic Cream,\\nSurfmist/Classic Cream,\\nWoodland Grey/Classic Cream\",\r\n LiveCost: \"99.00\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"SSTS14150\",\\n \"Use\":\"Solarspan Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins+2)*5)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAuBAMAAAARncALAAAAB3RJTUUH4gQRCAE3JchD5QAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf////f39+/v7+fn597e3qWlpXt7e9bW1q2trTk5OcrKypiYmL29vbW1tWJiYoiIiGOv/RwAAAABdFJOUwBA5thmAAADU0lEQVR42u2UwWsbRxTGJfoPZK1DIfSQaAWFnhrPBoFQKfUOTFjWEHooJZSE3uKWHGJNmDKsL70Y0riBHnrpIa1X6Yjp7C0YQsAEbLpmMpscbFBRRy0tBFpCG9LSkhzi9o3kJIZKsutTDnlatBLo931vvve0pdKLes7K8w6V4DpY4RCh6lHvILaB0vCSUJoJnC6/XDk6tV+Uy6elVQ7fbHMtP78f1CfSmAHo7N1dyHhr4c6Xe6JTlUiaJ655kidccKFYHst7e8JDV7B7KrAVd2NRkMXT/0yOvgzoMwoKjPMTmyc245TfuvfH5I6DgSuTw2M619mt2fV4PX57oVj9a+LU6jvpSiX0Luc45/rwtdsffjwBrahhwirpMcXho0g0B473XrO1SxfuPxxLHnop00Zww0EgT6zUvMhhvDrJIzlvz/f59g/zY3OKrAA3I6zgRZY2e0qQbK3ZjfJI04V0dv3y3Z9fH5NTfZCw2bno1cUGNNFOerjDVBr3Dtvjjz6tjtmnxM1VaQhJSWVElsbdxNIsDzaWFVi/1U+3z/1UHkGWapAToBYmk1mhBVci6yanUJbjznLTCTQ3v76/Wh6xIBXVlxZ6FaTQPXDmTiiPTL3QtFhr9IMsbbz7ytyN90cEVXeHdEEZzTOmNIPEC8ptS+mgkzYuzSx0a0Vr9e7f/zUuNy6bQURKc6Vd0huC91PQUNBuu2FbiT1WbF34feXkqL3gS2IQtFoS/DteWKosvgrraRpLbQJnUTNvdKJHZz8Y+Y/wacAwEUwSNZixcY0To0PTDjqiXrTpxs2VK99+NXJMNYRZGGBMMGHYORKlqZFMQtt5TelQLr45996fo9ejBijBUHTaJyHhtKFD2A1l6krPJBePxd+8uv3Lj0fGwBgjx4aIUESnEaKIsCCSLa5RYlukWDvz+ScPRrOeD791bTscQw/TPkYBDqt1Iilfr3R0fP3sjbHPjyOlqSoAmO74O5EwYCE8slGNUbZy5c7J0uTyqgi6R2AKzOAc7p0iFP36+NwebKnslT3PQ4P+hyJOxWfR3G+3H+wF72rBR2goAt6hf+v7L/bNDruooqEAnJ1fv7l/Y+/JveoUQu+jz/6X8e4c/No78weD4aEICgdlX9RzUf8CYTfwDBFm5BQAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_552\",\r\n id: \"552\",\r\n ProductCode: \"SSNPWASH\",\r\n ProductDescription: \"Bondor Solarspan Neoprene Washers (182162)\",\r\n ProductIndex: \"SSNW\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"699\",\r\n SubGroup: \"11610\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.2\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.25\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_553\",\r\n id: \"553\",\r\n ProductCode: \"CNSSFRP55**\",\r\n ProductDescription: \"Solarspan Roof To Patio Flash **\",\r\n ProductIndex: \"SSRP\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"849\",\r\n SubGroup: \"204000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.8324\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5654\",\r\n PromptTextCodes: \"D\",\r\n Colours: \"\",\r\n LiveCost: \"4.4689\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_554\",\r\n id: \"554\",\r\n ProductCode: \"SHBF14125A150\",\r\n ProductDescription: \"BF 14-14X125 H/H Screw + Neo CL4 (Pkt 150)\",\r\n ProductIndex: \"SSTS14125\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"15130\",\r\n SellingUOM: \"150\",\r\n Cost: \"81.82\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'AltIndex=\"SSTS14125_1,TS14135P\"',\r\n Colours: \"\",\r\n LiveCost: \"1.15\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAA8CAQAAADiHyRmAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMTo1MDowOCArMDkzMP+SD2UAAAAHdElNRQfiBBICFgJp2iloAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAKrtJREFUeNrsXGmQHdV1Pv263zrvzb5pJEbLIGnQxmZjwOBQWC7ABbaDSziLcVzFDxcVE+O4SKBwWCo2AVOUwYY4YFeclFMuCkMwhGIVBhmjhSCQhHbNjDSLZn1v5u3z1u585+snxMhOoRhmRhW9O/VmXt/uvn3vud855zvn3h6RU6q82lV2ep19P9vxtfnuSbVUyylXti7afv8+KEjUGXO2/cN896ZaquWUKptuGHWGnXedI84hZ49z0Pnvz893j6qlWjzz3YFj5e1u+4eTMiVhKeMnJ3XiuXa++1Qt1WLMdweOlaRzUBrElDx0NoFuNUpmbE37fPeqWk73csp4kBH8NElRQuKTGnySYlvz3adqqZZTREHeeiArLTItXrEkKBl8y4jHnO9eVUu1nBIKsmtD/Js50Kuy2OiQH0pShi9JD853v6qlWuaExmxrqt1odRc9npeKv5qunT5Ud6Q37odq+otmd+05jcn91wZ8KRAsP5VkAt5DoCrRu56ouy5xrI14Y/3kfAurWk6/MidB+p7vrvrHjDgAv1+yEhPJlKYdwyPlcqr1QviKjRKRA3K2tCL2KElKhtGtUvFgNBIK7HF6xq2OUqDLv3jk9dqA5538z66bmG+hVcvpU+ZEQaYcD8PvHOBv4ZE26sr8ZkAlpuRJWSuDciEikFocRWQbwvRp6ZFGHAs8SwxxSQHKFZcF0rf762vnW2jVcvqUOaBY/7ysXqJQhZwEcFTAjw+PLeKojOMS/tbjyA8l8OCcAxVxcL4k46gfwxXqe7wM23NyWOp/Pt8iq5bTqcxBkN7SXoJ6WFCLAo9NKIODmnKlAw5UJANf4UONB79NkKwAFSiNGlUmVQ4D5KwV1wZL8y2yajmdyhwoSHfRAtgd/KgKmPhtk1zZFX5XhH/Ik0Bl4Dc8rFcPY0MxghKWJJRHFxBDUBGvXPGj+RZZtZxOZQ4UpKFNuD6OWASQN+kzHHHZnQNFEKhAmjSqDioQxzcbilQg0YqRWA1QSRrgWermW17VcpqVOVCQ8ctzeIyBjxImLTbD9BJVwQ9VKDFYL0EVcow2UqRVQfidMDNfNTg/gDjGVaxqqZa5K7MepD8cjvy5aqFSp6ZK5KFL5BqFFJjJ0m9RKIMX5/R3DqG5AZ9TlATO6wKihaNpXNNEf1Mt1TJ3ZdY9yDfTbYdVJXKAuCZ7PVQVLUXUmlAP9SBl/I3jmgxq4gzU86BbJj4Gzrbj3iZZyPC+WqplLsscUKyho25wrqlb9R12pd6LI5s/mgCOSgRqUIuPMHsVpUcp0edMgWQVqGRH9s63wP5/lfeu2fTEiXX7Vu540/m99bFtG3YtO7Fug/la+I9/9q6G+R79yZRZV5AX/6J0mU1V0FJm6K0RiUuWDOaqbCiCV3aAWk3BR0zJiDwj+5nv0oC+HYqhqeB+aZbAqvkW2GyX55a9ORS/6cTanf+0/e4T6z46uEfblj27asM762eeMb7fcfGOh2bW7Vix4Insdud9Qu6Cu8FzWWrveTOvfHttv7Px92bpjWXbPnti3ciF+53ezhNrD1/08B9Quj+xnvDNjrw/rMy6gvg323snaP91GdAG1Et8JUq4KmLz7Y8yqJVPVkgnVCGFn4ukRRolKX3c22uDaNlcVz8KNeq9Zs9qeKWV/V8fur13/cjS0YcGrx/8+6Gv7O8eXzBy9citmxuPLHippv/eo38p8pq1OXin1d8l8m79wJpHvS/ViDzq3XUbjhd+vGPfYH5gT8IMgB5ctPPSQ5ft6tbvu2cAZ2hlz7VHbhlZMrOl83s7Fh65cWbdvvMbbw3c4cxI4f3x4HaLgju9cQJUNvC+Oiq4ex6wvpyUmpve7j5Wq+D2fiMki+p3Nh6rc8F9w1L4/08fb1PBfd/epERmLOYquM146bmZz3+lqd2XkcwjM2v3bpr+zsrWE6W7ffHdf3pd4eObrf9LmfWtJk9sX3Vel77dATyaALj6jDxXOkblTKhGSt6V3fj+GemQGNTEL1sRb7TLC1SgMO6qYxySwrV1Ui/XbUnbvmAAdiuEdsogZup9spLpc1qDYfijsWBQBqz3sodKk+b11jbfYDmc31lebd0ud/oSTi7fd8ZrTy7LWCu/OvGLaw59PGN0vLs+Y8fO3SHywoKrxt5aeMf4fa9Gus1N00sKprNs8WOZ32UHlr8TX+97ZfKZzNGVf33grPT1NdHgA2FVeCd4TveuYy31vWx8LouRyQ1L//VY3WTn+D5fyJTUbWvuPf7Mnq3WpyxJPrvqi8frBv6ucJ8aneRZn9h/vHbPA21/m5No2znjH+zzthXLD+RkEiZpqcTuWXG71m0w7yzVwbfHpVUSW1df5F65udEYaRj1dDZJ7M0Vl2jNK02tl5R+7X3evrLW45eFFQzt3SQTQ99tKvl3GcFM5wWVvdjbF6cuuOxXWy/t+G3iP9Ze/8EebP9B8NtLrMHbV95zrObAi81XJMRfHr/z3O8fq+tvyP107KmlvwxJk+dYEvON1Z8s+M86+oV973iaLn9FpmKeEd2KZJRN73BtsxFLdRyX6Ects64gjzidshYK0gDB5xFjFKEaSrcceUXWyXmA96tQiaSsxhV+WSQTsh2+ZKn8BNAv4CNM8yahAn50tlP+DEqhS4bqcTW2SXB7vMF1+gxX4nVQ/ko471SyZJpQPvH1Evt/dSGTYn3P0yRrjbdTEjBM+jubOTcP77GlaPomfD9NXdkwOhXLtxT2Ly8nPCV/TNpLBY+3nDIWJaOriwu96zP+yFcST/vX1P7aukWpZOHxhgOlifBT2SGfuS/W0NQgQxh37hGjIB67XK4JfSMKKTVi/PuvbOwp+6xyzpffatXEuWRa+NqyX7g97L0teM9McKOu09d/IrhBzs7zP/1BcLtlt680HfFoYt2GdBH5Pbz0pv23Ba4rn20YObShMq9bs2APKPIZ1qqlL3rd/XC7nzr7bvs4uA+mfJGgpC5et0XBHb4iD3BPbAldYsnkXZ+42wX3wOvdP7Ylnq4N2w92fXtbU6H9GLjbH9FZs8v2bbHnG5yy6bs2eFcOM7tY+u8P/OfkHv+lTuH+1+54xndZdKP/ix5pPJR+1FjuWS21C9e9Zx/wDKNPVqnRqrevMnS2B438s2f//L2nA+P+VvPlYmAIc7XNV9qZeqzrVtlcdFo+ORiKLCr+5lN1n75RTrrMuoJ8zzkXgHeTumHGIg4VJCGv4duXQKZekregNuu42b0V8BjE5HTJ/bKQ7xU6AJCHC4omAfFX+O6ppIiDiFcaEMNoCiCI0L4G6majfgrHun0lgBYcblsxGO5rrFODu3MEub6eFSHwPUwF6Oq+7hbLs2V5X8H+cClLviC+JO7wS8oOGWUqrVVRIMM2i3bRDORj2faM02bYcljUH9qxjr4pX93A9Lm+DmdivK1DjgCeSsRL7EUfWtGN/5ZY5YhRNBzHtPNWAmML07taX1j8X4d+4PzI/HHpSx8E94FbAteWm+XME8G9Mz5ufys9E9xu2TGyrL0fMnBXoNpwT4SzMyrjlE+NLNMto0/FDtfcLNZg1gilZIHE+xblWlalpwvBPGZQZdgs0Z7WO5zzA9/xoqWURNHXdklsKT63vD91l7fTHjEWD2Mu9X3RqYlmb039hDNpRGAEJrjByJElnFkP+hhDFJqRbhmeOrPB4VyU0NoIF41fhjG9HHHoW+ARR2Qf7nYq5jANDJyBOT6E1nLc1OrFfYUKuP24psjMqSJDl6OL0vzqvevlJMusK8hDjh+w1sF2VNK5woikKM9DIHsgHg8EOgIP0gXheAHuPnyPyKOcNBWAxQVCfU89gisvh6AjpGgF/E5hgjxUixSOg3yfJESIalTjpQjLUDPdEzyFXtQweaz1eQJSFUeh6aUADf522LpdSUjn2UaBG2VM9r4EoZe48GnQg3nxxAz65HoqsxJvGRxjCYBNiNKWPsDrbbkUstCtNRmCcauswpTGoCBhqpxeHUU/F+CcD8bCononZIBS8PNJrcz6eXJHAh8Obu9PnJvtgf1f9rR9ENz2sO/xngnPg90A2iRT5wVArJVUVXe8KTfK0Uh0SbHU53R6/dKrBgFt5u1FRsiw6J8PQ+Z5puobYOZ8HK8jB3HvOJ4/jZHWcwuR7su2UH82xtYC/+AaHl34tTGeEp7TiW8BpvQPQBpr8CnjOndhuSjDGJdP3sQsXohWNL1zFOrhg2LUMZr1VfDkRUtlmlI1xdO8P8hd4zlcq7OucPfiXESuvvnSh04Ov7O+UFiUN2gRO+BH1qLTGYqnQPtTYoyh74joenkUg4hQY5M4E2JIr1BX2uXh5hMTteP46FDdnb8BXOulMAJKfCCKoCS588ulXClYqjCOLTyvQGrmJggc9kw/ZcLQBXWZBFDhW2BfyoS8ijzIdRmDT9ZV/jwJn8k2EPnjGUUmExxYMV3WVK+VxvM88kuM628Alufk3wDSJipImorv4Dmb5Xxcn8GV2gs/2hnDtMeobnbl1QAvJ3oEpiBCxVVI+AKhyhKqTYXNEty6H1rri4BflziX7Lu60x8eturLlJFiDiYo6O+S28NjSbaqu+DStLz6HIdyFCZN1PtmpdZaweVb3ThaBFBbPWnA3qY/r0OdjtTA35YKAc1xr3YD7gchpLR1fushfRMfhavKzse7p2gcmrnvTiXvY+9HobbN9A825zHIGTmIn4VQElWCWrkSbebpcdwtSUnOZ57fbJL5MpcOlNQ24zlFznoY/VG8pXDtrgdfcK46qV19s64gqgS6SNiPWKMT/mIdQaekZ1xfnYJYjtldBf04hqNDTVVsvK6WHEELNQznXTt+CKBvxZENEZVwPM3NKSHUuouOOfoJ3fi4gKQuR5EEuF2ltrIaU2I2TSOcLG2vCyyDm/IdXq0Q1le3zkJNnhZ/mjbUx73GOb63UqbypXCkcVAcffVTEQuYfosWeVhWovW7YRV9oJPD8gJbWijL8TxVr33SRRU3KQOblrlEj+gqsMEXASxSkCRVwKBqnRS42xTcZsf74DaPg7sWPqVEf+GwxuDoS1T2DD2j9ihFqeiPAjFH0zLNYwdXmqQzU5iLMiNE3ftQj16k2VKRNj1Z4QyaeDgKI+lGcQbprc6da/31WwYyS5E0JpjZHOfs11E2STCNdhiXIFoIcA7qKZsO+p0krmhGOzGYoqW4U2U1xsxnHOfjuK9MqQh6qqhS79In0Tudx43xD8fvrCuIww2KBb4Mpc6yB55kCSyEEibXM9i0hGqxs7RVJTh+G59GgiEDgfghhDg3yQs3M1qYBD8tpUAsKYjLS3+hkA5ysrx0/QYnNE0vEYewNe+VJIyUnoQrPRNem+ZftUJ5giVCoIXkXRjeIKYrSJITII3I8sWvSVrGPFpoJY0zacG0b9OwqHkCegDtfAtqkASzVns4jrONaPUwplJZeR3Vm/+iogJGXTCdgqwUYlOVVISO2n3NLFMxEh8HuIvoVbQyN/pdPXOqIvMorgMpQ10KffFU6ixGcGq8ajm6NDNeiJf4Ro9NgqxQLIr7GkOYtDdN8KoPLuF8M1+q1jhJaXCC8k/yBTmlcV56FfXcYzAiRXrqVtmE69TknYEnuX40T1qs8UeQZi6P1mrxPJ23GmZBAzRho2Jxzvo4AhcfY4xJphofe1nO+XD8zvp/Drn8rgSttPL5MKdgAAIqk1tO0+YKB6yuWSGb5UKhssYMHXQd4a3Ocoo+QxcDbPoYi1ePVya9ADFP0YUrW1bFydLyJ9Ga2plpfCtSJXsZuxQZEaU5yQXSgUlaZoeTkSDYNXekHitD8BXZN6UKGfoRLy2e6zumqVwaxbieKFtJG/TKRXTzCoACrmvEpNXi/E7ZLhcDAsMM7DUGmKTlNPF3skISM1Azm/RgCv22aT40wjJoVGKIFQpU4iLNgZIoVaksgKxvbxbpzUIktZO4v0QjosmHCFPmwzjTAu+cqaRNfDhymIBP4XoFk9r4BrSvvqsAqDkYWZiJjEbKTL1oks+wuM9ugkkVnTl3b4SBkXo5r+o9HBgFTcHo/IXQhzwp1iTV38MR1LDHKZoIH+6PMDKzMc4x/D4D8lqM2KaRhNnLkSnh8tNsub8N2nuTjEGV1H01T69ux7NbqN4FvoCnZDnbfuPhJ3d+GH5n3YMoZC1CPUfiEUT3E/jx0bHafDHKoYh10qeY17Ah5BTFk8D5aQzOYCtKIoYwzBzDU83BRNimRctd5N4tm1FIrhKmqa3Iym4y3TF8X4kztSQ1WXoWXUcpVsK5AEAj3HQ/iekeZ8+StFmj7KtD4adpK3shbv1/Emrx/cyNeEgWslTFAEegkUUbt+i7MUQQ1CrGmCEvl8iT8jrgdwAxSIjKHKCCBBjrKCFtAxRMSq1U2clmE5TqQ4bQvxb4pQzJiNKTZhIz1xPmaeW9aEEjugTJqUn1UZPSxtguT7U4TMUpkuyNoqYeR2ooYrhviJRnCL1rp3oo9U2xRbNCjkKQaJ7+oAnnxuBx0uzxUfQtx35MsUVhhKSwHMbcRdGuTS+UFl2mjOK+CXwcjrxAojaG++JQCTWKbs16PE3De6MSvbmxoXq70vsJG08lUaJPzFO1ipXcZInSU3K2At8m8cxNxMzGf+8Jnfkv86wgBXJllzXHad3rSVPKtH0F6n2JtEqdfh3BOs7MlA4yggnW4MrDqYkDUGGIXylYK4EcQk0NV9l9TBqqdVzARO1gJebIMCQ8ijP6/7Z+CzjXMV9UoJUNklS4O8KUUCTRbh96rApaQ2BpKnMh8zVJPKVMVq0EoZdb8ZVQRRhXFAjgMO39IkKuGUBzYKP7uYaRk98wEqmtJJ+/iucpbA8x1dyDZ3dgvMPos5qEMHNBmqPz4bo0l1ANWtIIoZL6GMC9l+nlFGGoY1DD0sMVq34c5zjmTrTyLu5SuqVetgXfY6RES6GgZiWKzJIKpTDuIq8aQWtq08fQx0VozUBvTaqyD/Oi0V8TRppAOyrhesYMNqS7GNKYRD+acYfuo6inz1vCt4EWMFI0KqtXRc5qme+pFklPpTKLQnNbyyizTG+r3szk/vBp7g9vh+othorsx3Ne/6HzpBGdVwVx6BE8XG3QhwXZbeWPZeYoXDvgEgSDtj3J/E2EfkcFqK9MNXBSDAKxj+1EKdoBiqSFlClIl6+b5TvwN0PLHmc8oNNWS7UpEnYOJiiPcx4K2KEviXDilA+P8c4InhCmEkZkB/NnqQqh0MByAv0cJRGpx5T7mCqu5wqMct4+tF0PCISZVxqhxVZ+vgXXfQ49Ocgw/AAD62lM/VFSuC3ot7LzIVwRpw+ql9+BJke4TKqRhhKGPkxuEqD96OAeQM8M+q5BJlVD8rwIUwgJtNFPH5yGvKKVV9ua0M5eRnImwKX0dRV7nmSqfRJPyzOOSYr7lqiucPTJZvTxoFwA6NfgeSbjnQH5PC34AGPPJDNSO2QdWn0O8D0kunI2jn6/StUoymepbhY3stqk5+rNDaqJl+TWYsLZX0lpcCWK0ZqfebYSCZmPMZFBql0n12PU/9PemQDXWV13/L73Pr1Veov0ZGuz5B0JvGAWYwNmAk0mMGwNU6BNmrSTaQh4woRA0pBkpkDTFjJQMoWEBChhmIFAW9KkC5BAIRQCJKQ4xga8CmzJ2mXtevvSc37flS13AVMjyQ26nrH0vvct97v3bP//OffqF+ZXwaqBd091zHge5BvlXfz0AhyD0rURQGSBwSpjUYtwPiUougqxNh22pqABwjcKL6LhTC0exUG1VPhG5VuF8sNclyKZlmKC/ARCHpmUBTKJDj4jAGJQh10pV9TYdfBZO5SO3KmPZKWDYnmx01NwUwU0RvqxH5UMW5A/grWasMnLNCAxDf2s2YWlMgn9okhthF99IkgdIpxazl8tIvA60bqXXEgl4j+GOVDw7xExHRKRGRCR9Mt1XfK2aYIuLa05YIt23MBMhXv5IeFWm73LnMTZ04X7oPTzSOHulTuoilfiI5UPi8u47MIaV8kTl2GyUoxgBaJXxv+OQerulSM1clUNQVIOKn+/nJ0AOHvs3FVJX6Gc7QI4Zf6q5UiQWELnpFPUQQO/gvm59LyGRGNU3nhS3iuCadMw8aPSwzz3yPPufRi2HEFpGAZQ6x8ShFseFMhVkzwj72BysxjijCV0KuQZPvMj+e2L76oDM+5BYocSOZNo+6TllmI2h+3Cd42PYzKhuvajFzbDQ67EzUQEgV0lW/6eI1J3GGCF2V4CMiUzR/AqPqB5DWTyGN9OYn2U/p2A8xqRiQxBASovM2kZniEAqlseqYO/B1VR3iMOnuhkUryIlQaK7fI5BCJwyNurlyqJMBls+DAoKWtz9VkQjUMYlSQW3wY60jqA3SJww/Kpk/Bngc0RaYLzZYHxK0Sg90PlFkT447Btg3KPEsLts8lKxTIq3D1G6Yks2E3xUAPCXUDhlXjtlGctFOFWzLAbP+miv7Rc1SMzkJT3HCHSL8FG6QwtNFtszUEFS9kmZYaaUI4xwucCxEgfpmnUKpWbIyoRNqeYhaLNUmThI7dhzIoYvDR3yoJDotLDCfF9Gsiqammkod7Rb85BRbvl/yghdgm/7ZbAGMJeB0QU5P56XQqFDlNv1gz2LFCNoLFFjTz1VQm11pmf3vHu8jvjLNYlN+/CFjsw9wo3x5gA1yl6gLcaLw7IEEegT5WZKtrciN+yTSq0YzDgZaxIEMtSOATYFcQG4DQMSudmEwJ2GRa5Z3yUWpEMgp3nzjkYGpeaLAH3i3wuknkZgjXyo7I5kFCOVJjDpOcgaEtWETPATgMrlEfIeuSqHrirCd4zI59GEaF6EdF+bGmBEKAIo1PgjUawWX0obgpsdlD+eQm51I6Pw27tZAFyAbXRtTT92G0tNFE0MEGmRv3TCgldXJLEI3dSqNxpR0kzE24qMowHVsqhB/5wQIS3DBM2iZqM2bDGyxuGGIMhgp8cIz0J0ksR1CkX1QdbZAi2NPyKyXu+iXUvy28HCf8CcsYgviAH+a6AfbGc1QvYHmc2CpiCtPwcs35gK6q4EyUtsT2UVilEbHSQQV2HeJMhksSqDBOoRhr6OA+mzDGuSvb+ynQcPOn6H75rNmQW9sXyigV0UIQUHH6ZQc4jxA4CG7YszTgvm7VFHGWbQymhSJN4lRjRbYH7ZezmQA6cTcJaLLUnJSxehrx6mTRbpQ2JciiO9iWCBQ7aKa5iSsvkECapH3atUgneKIIyV5BBGeKolyePkrMIEU5VMZgpVNld/xLh6s8QbfeK7V+FiEbAFC8LCohT/lIUO7mU/hZ5vqtMHkSyIGc5ZH99dnT8jFyP+JkxK4QD+Bwt/NiHPa1DTTV1pyP7OkvN3KAng7UvkBNYQD67BY7Rg+lRNFAn924BTA+Sz0/K70FyTmF8gMsW5chgNcu4aFbD4E/deoS3CSSrMVjqw1Xl2/lUicL1yRM8kO6qPDG74DqL4XHkXTdSVJOxnj1G7mocE9gvaEpxnPa9To6l8Om98l01d3Mrxbvks45uAOMaJAZwQ0z3/QuopoFhVC/YbOom6t/DRcwCi+UQxY/ZyiGPiLJbt+MA0P1YOx8iWIf6OIDOAsUcmiHIoQB5eKRauJoA10aYXMUxq0i1GTBHGvc6DHNkyLlmidVjWPI4zLtLh9bI8Qj58TieooTgZ0R4fLYMpgIBMtQ75eDXHYn2C/zMwa67accQfc2ahDFWeUZRpyh81lqB3yER4BFzKSPwoHmNHH+v/FNQq+Bxgng7yPcFOZ7mrimJvAOYBMVWSblDLbTx6Aci3JtEHJtEqAJyrB+aoFbeYJAAxVXXMOnGEyxx2sve+16KR7T8tF2wRQS19UJ/NJOk64Hpy2FqNLOeoIBmuZwdxtw5BLw+Npp9g2do5da4PNuRoCooT3sT6kKfGZdxL4laqZx0wm2p31MRT/MGRu7+FtVVXgxuydZwF+DU1JuN2FzKQRjPEZmREJmzmPxcJT6rf0IXKcypgjh2LxIvCMJrXPbBg332AKgLiEYIC2+wnoZo0a3H1LRRBfghR6lFiIKPEiCvirg0DI2sf2tnP0TvmJxTLU9KUA5XKT1I4DWSIpYK9CeJi2OsVPQi7hXkybPQnzvl7ntEcOqYJq9E8TlqaX3kzkuIWh6+SMPEFs5SanUBAVsVbzMoRxdjFiLmcfMU3FYRDmWTRN8pESU9Z52cPURIMATZHRfhqmdVTA3RfZny/qiIUZt87pa+KYempXYn4neOVbiXiIhocNVDAUo16hiRfitV8SY4LyBHtcQjRyWYQY39VAmslivXynV75ao4gjoKY1cpWKhX5iEgCKdZro7JPRcJNvKZVhHxKMxghTzXrbFeCRHfIXeNUKW2kLmptbRKTI75qF/Q8DAlsxIGtzxFutjNbfQSDodBrT6CzXbmwIfXKEH5lAmGg3xfll74pI8TMhN1pv3ZK9+zqnfGFcQjE94gopgkPnasgBXZEC6Eta+w8XceQFymvqeOiN9HhF2mkNwDq18mylRvUSffxQDRAzIRjSImKRiWhcC4skzbuExADl/ixY8UsTIh8EWczLTBUjUQtEVseNMoz1HhHraVV65/iBgNVJtxziqEa2Bo0gQtDmBTOTNNR3ZIz8JYuwTVAstFuE6VuxYA3S/KmafQr275vyBq9RZir/1bDx1ZEKV7Tfo0QTgSlzf5GGGdAw+VJ59Tj5Adq3BnoWW9KFgIY2MwXAtkRGM2cFG1UlarVUv15X0j9NADRK4TcYzDA5agJ2pQ015wxgRmLSTnqxlawTpRh6KVIKnYajBSDTA8RMDr1pT5oDomyOErS+bHg2ZkTHaYLTBvSRnN7ZjCPHkkP/xeAR/SAprJ2QjBJYA9hN4xUFWRxOSFKHST6Tjw0oXvLb8zDtI/cfMAHHTWZjXdCNtrwbW7dYOxuXAdaMUjWynHMHZTB7WBbtFyCMJQp7Ae9iuPB0rbwvUEIuCmlDxAQc0UpPE0PgvPU5zntQUUFRQ1FPBmbkY2QxlEChvUhFKmQT8prhgnHKoUsYiRUwjbwosEn11exo9QuTVleXIujbqWHmhdIUqhZ4eJ0z0I4Dg5FZ1uXQWcpay/gKjGCE9bsIBhrG+aXEuRQni1jhWkVyMk1GoAvpWUkeRYmqajqcUq9XJ+huLNBM9Myh2bIS8K+KAl8nlInuMH5jtA8QY8UAP9qqAKQQO3BMFwBKGuJMRTwrqCTcX9eNE8fjNKCWmY5QcB+MsE4d0Y/JH2fwTTmEchOmVWg2xUfpCqLi0ofEfCLk2S1kOqx1EfjQHGCIxW8jx9vxowmnpQjRiy0ADGFsq78+C1NeKTPE9Z0g1yVlLVsu3akfeW3xn3INveKK8qWhY6QMYhxIsoUdlvc58BGBkvi1s8wGS32Dtnee0pGB3tarpx2Fv0CrQteJZ0RGoWOfsyubrf96ZDdp2JBm37y7U+X9a3qKpeVaCeQMbd4zfMncYB6CERjAwMjIN9c1OXBgDox+aM2kLKOrxYlixNH5ZxkLUIAct1pbFZZdBDCm6nyvpJTX8ulWl/SgQij2fR7E03grhWFFCt6CJ52i55QjP1X35KGRNy/bPye6N8Ustby+icJlgmTiajSO6+X8RjnQQe+7G0XmoCVEWXYRyS1E6NA11VbJajdG4IGAUl6LhoLZqSz72sNHHL0d2SlBWYLB2lsNh5t+SlniKbBjxqpbxHVt6uhgqHiPRZg+kWEfeEfDfC6psofFit3OEAfX0ClaqxpTlRWLh6wi4P6DOJesbkzG7pTRqCN4TxyslYdMu3J1AKqtJRK/dfSDQRBbf6oGXKcHZ5GwaH2AQkx98MGGCeMhACmhHa861Pdx+N/M64gnS8WLWqBKTNACoN9ruWEoASGMBgb0r4mIxd1lLJQBR5PQ8gVcnZhflPPvw/POK/7fdxYGXT7pda23b8Yjw0XHV3xUnjd0Wdosdd/2EY+DTimxLxHKNAPm1XoOjR3enzroiucfI5BL9oi/nChC1udW3E7GNC1aNkypnM6X/o5/1KENY+fGKKckPNd0yKaiRFdAahZ7sopVim9nF/3c9HHq+8L9SgCKtJDceuwKXhWJPccfi71ZvUT1VpHvwv/Y/GIz3jrZsLXziA/0qag0/s/Xq7b3lrc6l0Xe+GKeHO/zT6amVjOrTo/LHqKeHe/3R4xCmHFidrS0sPC3f/Vk9X5MJmE+h9s07XrWhePgwSqzHjI7viQbumZQVrTRaIcj4hijhqTpa3aMLYaN1V1PyYTL/X1tBqFUNQUNdavLouoA6T5RgRRBKQuMBP8FkJVhgXoe0wG2Vc2rk+QWWCg+o3ybzkEPKFcrQPMW0Ty7+P7MuErVzOwFnVEvoFYbEyzKFijzoWLvtBnCpjSRKNKQrgJ+R9dpz62S1HJ78zriCJQIaY1Ud1pyOvXgkAVcb/gN2kOoz9TxP8hLDwGUuclsgqeO16vp5bju6ZTbvluedV/5+rBL67/X1e8On/7Yvy7yYXby06V5++Z/XTrxSdszOf6IuoxV6QGf/2WQ8sbJdTGre1duxQCxjMrT+0k4g5576JXERZsNzhtW/XvrJ2y6ZlMtWlZz5+kR648zfyhCc6OkxChbv1zNgrU5d/55/zF6twh2791NdtTyTKdYU78MZpZ3rG3aNvbdzxchXlIoroTOc6tuH55i9jZzSxOjArfV2+uHq/Md+7x3NNwpZCLjC5+zdc9dYjgU+2EyYG8YTmP8664NmG+s2LPq/CrUhGF5Nte6sYXrr4JIQ7jQw0yLy7uZLFhHgarLaw6Go39XFJagmCcsVGcjkLWXi1R75ZDDbtMM6TOd94NnGJwSPrNOegNCIEVQWMmQdFcfijTHnLRVYR3ufN4DVHqx6zoCBa03QywLYC0G2AnileQuPqBHDSsTA5R3zrVmGWLPHqZRMGZcFPD/3dUT/3xHtm+s2Opnl+ov+Xv+Nxa2fu/WVT6brsVmfR2Q8cXqyzZuf37/FsjpjYddOvXHl3543VJl9ec++0u13btrXeZIsNn5t2bOKrD669XoX7sHoY0zK6D+Hu+PND5+VeuCl7iwp35uEp9TCmbasr3Nlfd52eK623Wz0sGlfhbjTPTZxV6b1M1cOYq69/4BrFNIGegfqafauvkhH+1K5IafHBtS3mpO6hhqhJXe4ZlAm9+t6VkXP3mQ1E/PF1m7f+LFJT9/rnGr6qwr1P04+T7c/WXFKywl0AleQIhw4Lt6Yel5LbT1jh1movUozXXPCcGkBjvh33X/9HfzZ9zMpOf0vXuU6Dp1DyFMKnfsOYJ+8I/cW5gjQe/1rAV5RoPu6rGGh9ZmX7+5jBmRaR2x965zNNZBkMviJEHFomlTUsIYdyMKtlMP+R9QgLJFYeMQ/a9dh+8IEHd60E8Zc3X/a9me7v3LQX7ywe+MidRx674x9OObvxihNenH7soScXXVD52fVH7Dv1zfOTT51SWt/s6Tp8rFx34+4rqxKXLfnx9DNve2HZptZ9q5dMP/bY2vzW9Sa1ZFt9y+BH7DZITzZ1dTaatnW/Lq689eSLps68d+/KZeGd6SuyjyYvOVUzdqZn/d31y37SbOL3bw8vK629Oc7RE/1feiZyTvbR8d/U/97lZ0xd/bPPf1xU/YErWx/z/emG23+0pO9PNrMby/bbhp09NwR/cOb9nszQadOF+/kfjn7p0j4VboNwO+9buD+INuMKct8dfTfEgJoDuNMorJIDERcgHyx2RiLNLXA5dRCRz4vqVJCmm4Tj9kDE+sy3vrzpr2d3eOa23RS8JXPkkXLj823n/tt/Pe+hjYeFe6r9/erpwu2251dnH2m8aFXHkUd/8PBh4Z5qd31lunC77caNF7+swv1y9YEJdxu3KeHe8P3h3aeNTj93+5nPvfbF7NG9Zdnz9qpl7zeonbU2C3+j8KZXY6e7f1QtaNdau/uCOHaplFtC+K/kfhslHCuap0kPGrvWuUBxglZtPhU9HBzMt+OhHd/C/UG0WajFSh6sINdQYpG/u64gRwqsZHcxKpJz9fK/gdPotvtgRYHxBkY9Mkt/cnS+HX0TbPVbrR6zsrv7F67u3F4ayHZ7u4vd2U6vGe4MdFd357uzXZPdRei+SmjeKKmqEpxDAGY/cGgHqgoK8V66Yq6Ha7592NoseBDPfrPmkeRosUNCqK7CBW3P7fiKo2Xfg8VF8cnLPXfUUG2q5QdpuxuSW/NUtBU1KVCIpp/O/tu5Hq759mFrcx60lP0XO3/wSnDNv7MCu2RaRFFeFAwSgSlPU2ZYoDIoae6a897Otw9bmwUP8u7NkzO5q/7KeSzIHlPKb71jzjORon8o+8Lb/9QX8lE4KKpSMdI5132dbx++NucKoq3qpe69S5brVjcOtUwLTHrPiruW/JbmPObb/6c2CyD9vdu5B5xHctRxeqlmHTHVrcO3v9401/2ab/PtuFAQYxbHdXuHnWa3ybP2S3RjydoDc92r+TbfjhMFWfM38ceirP2O2breg2cc+13n23w71nbc8EKv3LjlVt3YeC8F3a3mzOOmZ/Ptw9yOEw9izIa7w/+yw2y1e7Qac+SfrJxv821u2nGjIJ7JP75homjYtNNnhr7mGT32e863+Xas7bhREFGRPTXnLzS/Y7w7vW0X3Xbs95tv8+3Y238Cm/2SlnAPJE4AAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_555\",\r\n id: \"555\",\r\n ProductCode: \"SHBF14150A150\",\r\n ProductDescription: \"BF 14-14X150 H/H Screw + Neo CL4 (Pkt 150)\",\r\n ProductIndex: \"SSTS14150\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"15132\",\r\n SellingUOM: \"150\",\r\n Cost: \"97.86\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'AltIndex=\"SSTS14150_1,SSTS14135\"',\r\n Colours: \"\",\r\n LiveCost: \"1.15\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_556\",\r\n id: \"556\",\r\n ProductCode: \"SSVS\",\r\n ProductDescription: \"Bondor Solarspan Vermin Strip (VS2500)\",\r\n ProductIndex: \"SSVS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"699\",\r\n SubGroup: \"82300\",\r\n SellingUOM: \"EA\",\r\n Cost: \"2\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_557\",\r\n id: \"557\",\r\n ProductCode: \"DPB10050**\",\r\n ProductDescription: \"100X50 Downpipe ** Strap\",\r\n ProductIndex: \"ST105\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"701\",\r\n SubGroup: \"110501\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.53\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0716\",\r\n PromptTextCodes: 'Desc=\"D/P Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"5.49\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_558\",\r\n id: \"558\",\r\n ProductCode: \"DPB10050ZLF\",\r\n ProductDescription: \"100X50 Downpipe Strap Zincalume\",\r\n ProductIndex: \"ST105Z\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"110501\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.44\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0942\",\r\n PromptTextCodes: 'Desc=\"D/P Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"5.86\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJsAAABkBAMAAABji19zAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjo1OToyNyArMDkzMAogP/UAAAAHdElNRQfiBBIDHTvU6RKcAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/v5+fn2tra9/f3zs7OxsbGtbW1nJycc3Nzvb29g4ODY2NjRUVFra2ta2tr5am56AAAAAF0Uk5TAEDm2GYAAAXRSURBVHjardh/SBtXHADwlxhX2NjoXZBCGSOJ8wdlE2PaajcW0hbKGOwPdYqzINOiOAsF3ahiQTqdmtk0Kx2sHkuWbmDbORgtxbVOrfvTkAs39l+oYqvTRmWxf+ZY4u3u3V1iLnf3nkm+f/jH+fjk+30/7x4AOUSV+7b6P17PASuOrpGXDheIM9wbsxKEeb0wXJ3XTghR8WUBuI/cPxNS1Fny5YzRUSIV5GZ+nKll3Ersi/J/8uGOxjqIzHBW58ydda8TyiAHXblxhnsThEqUDefEOd12QjWqPjs4d87dR2hE1uJAcsaBDUI7zCMH4kxtL+w6GkEqFoc+V+FuJ/TDGbTgcmej66RVFyvzrITv43GG7gkroauRV1aWucRLLK4iVo/AWsLLLMclbmBw52J9hH4cW1hhOA6LMw6MITDzrojxHKrvTG1euz5GXgwvcxwedzS9Q2pErX/PxuBxxug6AivzhNqBMc3p9V3RoP5o8pODWRN+FY97Z0R/3raE/4CLHpPzhBqs2qmVLyx9IlWBxy3SezbNybEVWZPbFeNxswn6oWp6NrKb/t0FDspxdFB1njjn9yz72r2S4pJ6E2WW5eh4VrnWEs/T9ox2PMcGMDg+e3pGOQa/Lo+4Mtu9ylAUBkexFEUzmcvfGb5lASCbgx6L4gIcvVSTxsrn5cmxPw4xrMxd1eH4RhSVoL+XRpc0bwXXAFDjKCmQXIBLMMPSIqBnXADBPUNlx5cbauCxCv/ScQCQnOnSF4c1uCBsEkjQP1rNnkgvAGhu3N3R6vZW63BC93npURfQ5jiZSzyEC3BgTJVjxUYcHbEAnTjEypz/uTQDvBZtjuL+Bnhc8rk82aOWLI6BQ8v/4f7S5d7gMjg4r0i3K4uTm7G4HF9sbXQbeuYHmhwiu6Igx8rZdc/NBeJwHVVaFBzH4nHg0xS32XtxjroFDyzya+U0xswOHPFxIpiMtTrDkb46OByVyuwoPM40tCOVmxyY+PzFtdImyL31rqLvMDnDUMzDsYKX7Fvk+84tfiSQ/2b+KC5XFIvFfBTkekt2HtumpC1oQZ0LYHBiuf6f+KTk08qaBxf7lpW4VHRfz+wSyPHjwSE445DgzfP7cTL19myt8oc+yOQiFN4iM/YLXJRhWX+9pJV4Vh9NfazCCV0SQHEwva0gJ3H8e/LkHbtikRlWU9sYiuuXyhW5umRou8EFtLk/UZxYLsyufD4yfgFu8HlwML8dut68tfxkyi4+1+Re6nPTd6X8PPFwfNAuP9fkbiC46X7Jm5voSH82ZnJGBp+blsrdeHvf8zy4u6KXcSGQK9cje9uuQnBdsncZFITrmha7D4/zITnJ0+OKgvjZSZ4eV4zNNcueHvda6pxFFdskeMJw3NHmjrgTDB5naJK9KS1OuEk4T0snre8+imvqgp4GZ/htgj9ASA8tvXqgOdFT5UxOL7xJIMt9DDyOUdwJwRPq7VTh9l0zvU/D09h/VZ9zyF42Z4yOpT/ryF0agzM5HA7Ru6Dg+Drt+z9yyuaF0fU/Q3LQa1JyLYo7SLJSSA/BGQQOFtyo4L6SlJOdVrFk8hfe8+lz4IzsNahy5LUfqP+k8TDz5aI4QJaKnpJ7ADVn5dws5ZVGpCoR9KM4cAZ6DlWO2Oj4hpk8IRd+nk4iOXAaejUKbhwK4z3U4k2H/DZEesJoTszvuIJ7E1Z46nF8IJ6+tT7mr0Zz0FNyH94UX1momdr0pULFEoYGPSVnpMScSmvI9E3C6m0sjveqFRw49Z3yJmHliWLtaAdpUXJF14czbhKSS5e7eu648LjTWRx4z5f2yhdCm538KYDLAVcWZ2jzj4r9Zt5dftQJt0VsDmRxwNC68FQY1ZbwZKe8zebBAcPJK+HIOF9no7gt5skBYG4eoCYaCWnXac6XAybSYU3vis2deXKi6ZC9wnCl8ibbVBDOJnuNheFEr3CcTey+gnFqe3YenE1lz86VI21SuQXhACF7uXL/A3bHW2OUpa5cAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_559\",\r\n id: \"559\",\r\n ProductCode: \"DPB10075**\",\r\n ProductDescription: \"100X75 Downpipe Strap **\",\r\n ProductIndex: \"ST107\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"701\",\r\n SubGroup: \"110751\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1234\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0866\",\r\n PromptTextCodes: 'Desc=\"D/P Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"5.04\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJsAAACGBAMAAAA4B+X6AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzowMTowNCArMDkzMMb7FyYAAAAHdElNRQfiBBIDHx6t26RZAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////7+/v5+fn2tra9/f3zs7OxsbGvb29qamph4eHc3NzY2NjtbW1a2trQUFBnJycnwdrVwAAAAF0Uk5TAEDm2GYAAAasSURBVHjaxdltaBNnHADwS3rqBjJ6F5wDZTSJaRXCXBo7+kFoRLt9tZ2tDoSsdu2mjKkbNjoErdL2Vizdm2+NVRls6MVEP+xLcqSbL9OqZf22SbKLOkRYi2XazRZb193L8+Tlcnme564H/j/0Q3r8+P/vnvz/zz2hKBPxztw1/X+8YgKz908ytRVWccFZJ8OwPdZwy7kGRg5PpwVcPXeIAVH75nw52+hTJhvs/sD8uNppH5MXjsn5cG/PXWEKY+Uu05x9uIvRBvtRuTmO3nLEyRSHo8sU551rcTF64b1mnFvff5gpEWywwiBHH5hyMiWD7TbGeacbGFRUdhrg6rkrDDoqBzaScvbRLrTldPROCD+ScXRw2udEamxwaFxM3Sfils59iqnTG5tIiKJIwpWVXhwg3M8nkqJIxNFbpjBlsvsmxkWRjMMtDqnXZSCG5ernsIsjHN+UJOPso0/RdTLsrUeHKIqMs3M+DBbMHJfbUo57gOCWTaJzqwr/tEa5kIy7HW9EYI6++G5wIRk3I9wpmR67Xfg3QBniBtPCN/qdkqmN3anIXUjIiUJC78vFembiH+RfmOPuITlRuFtdrN1MHg5Q+twlNJcWjmrKZYPCce3MIuZEIXmo4HFIi6N4/0DOiUI8Vy7r6Bu7QlHz4dLCDzA9dqdwNECZ53he9pJPVG1tweIw8WRTvFpuIytt4WbiLfoYRRvi0sIfLmlxTFKlwpbl0gSc5B2LXSinLOCkiKaigrCGQoTdCCeB4kMKzaXki0g5PvonhuMhh1ooUUKuDHIpazk+guJEQ1xKujx9FsXxMO7jOSWQXDJlmPvyRXAPXgwXwXBR9XHcsyY7aTEpCwXNLUi8GA4uYzS30FpuESHHG+UyJFxURHOLjXG47Aq4Kh+Gi4oY7qUcd6z/6t7+nnI9jjbAgYeW+c0pzXhP/ySKS+E4eeKp3GN1wntPBIo4m8qJ2Hsncby63CHHOqYDOpzc3qUmS8CpdWQ6szvn2SLukToAiLKTypX+Spxn/2eKt+QfXU7pO2huofz1UbnLdQMnB88pW65VFYWc/VG2jV1Ccvbb8Mmmf+m8OcCfU18wvzXJ0cuTYOilRzavjSSeBBVutUmO2tsLFnJmtGfHed79lsK99kYhl+vZZ9HFDnPhqMpd5Z+dGZxW3x7Y/0xyHMep1WYuVz276O8Au1/T3DD3RULlGMblhHtps9yIlN6MnF7scu6Vwek9bZYbOcJxEekrlMd5ZsY/Mc2NqOXGdsN3hn0TFzteL7iqLGGAk7znYgpydZn4jcZA4borM5LdiHT/wnysRcYqw2NTreXaFmCQG+H6kzLH9o6f2KNszQu5BQa5Ya4308IGh+5er1Y/L+QWGuQk7/SF04meRvgKYpbbPwLLjZ5qW5H9vJBbVGKfVRS2UNbr9uV9bpoLQXATVZJbnOTB/i6G5ugQ9G4E0ByvNJ7Y33guFCLheBKu/UOQHxkXOYjk7O3tIdVDcglCrqy9HYDXUVzKCKcU3IHgXk5GCbnmdpAfgqt/JqQI711TM8ivJGc70O3qE+CTxXFNTaq3R5+ja6d9rNMTSRJzqtdG6XHwl5zVoFwSTqm3VSc7+2gXGG3sLdUj4ZT8Wouyo7cc8eXON8NKubGf0VwN9LZpOS+3Lf98baWQIOD80NNydZrDenaHXC6Wg56WewzvGjxTdMxI5cZ24Ti/yjVquCfgdJOPngF30JtOpAg4vy6n7rzrdp7k+SmQ53tCKvY+nlPq1XJfKUKX5yR/fivYb7B9QmwjkrOV5L5ThK6OyNDXbrjfqIwMkXByvVpuVAF6Z7+v+r0ne+S5aqgCzbmhp+WWNcjAq4PnZw9chZprSZxCcy7g1Wi5RQ+VnBybG7Onz+w+4SCOc4H0tBz9a97+ERzWx683YDngVWs4amnSl495wmPdUhvDc6rn03K2nX9lf65zsrfGT7VJTbuwKxYFLXNuXY4q+3ysAXDS3mqP3HZCmOwUTvGKOWrJ9oljTtblrAonutWmiCtW5Vz6HLX+43DylL9vfKoN9FhNzy7FufU5al3N3gHhXJurxAgoDhZ6upz0/5q26oCtCc6AVrRGrwNeKU4JYk6qB6SH55pIOFjuChQHOnYzAUcTcH5yDpSL5oBHwlEMAad6zQTcBpol5ZreJciO2iB5FRjOT87Jtw/L1ZBzNIPnFI+Mo2xsOZaT6yXkqHUoji4x7xDlIjk4n4g5TWg4OJ9qLOFy867aCs7uguPYKs5lIZcbn9Zxbms5xbOQKx6f8+Pc5rn/Aep16Xy1KxihAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_560\",\r\n id: \"560\",\r\n ProductCode: \"DPB10075ZLF\",\r\n ProductDescription: \"100X75 Downpipe Strap/Bracket Zinc\",\r\n ProductIndex: \"ST107ZL\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"110751\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1234\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0866\",\r\n PromptTextCodes: 'Desc=\"D/P Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"6.07\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_561\",\r\n id: \"561\",\r\n ProductCode: \"CNFCSHSTU\",\r\n ProductDescription: \"2400 X 1200 6.00mm Fibre Cement Sheet Stucco\",\r\n ProductIndex: \"ST1224\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"992002\",\r\n SellingUOM: \"EA\",\r\n Cost: \"44.76\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_INFILLS_$$\",\r\n MarkupCarport: \"$$_INFILLS_$$\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"114.28\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_562\",\r\n id: \"562\",\r\n ProductCode: \"DPB6565**\",\r\n ProductDescription: \"65X65 Downpipe Strap **\",\r\n ProductIndex: \"ST656\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"701\",\r\n SubGroup: \"165651\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1815\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0686\",\r\n PromptTextCodes: '**=Zincalume Desc=\"D/P Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"6.52\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_563\",\r\n id: \"563\",\r\n ProductCode: \"DPBR75ZLF\",\r\n ProductDescription: \"75mm Rnd Downpipe Strap Zincalume\",\r\n ProductIndex: \"ST75Z\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"100751\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.41\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0882\",\r\n PromptTextCodes: 'Desc=\"D/P Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"6.20\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_564\",\r\n id: \"564\",\r\n ProductCode: \"DPBR90ZLF\",\r\n ProductDescription: \"90mm Rnd Downpipe Strap Zincalume\",\r\n ProductIndex: \"ST90\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"700\",\r\n SubGroup: \"100901\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.43\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0651\",\r\n PromptTextCodes: '**=Zincalume Desc=\"D/P Strap\"',\r\n Colours: \"\",\r\n LiveCost: \"6.49\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_565\",\r\n id: \"565\",\r\n ProductCode: \"CFFOLDS\",\r\n ProductDescription: \"Bends Standard\",\r\n ProductIndex: \"STD\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"239900\",\r\n SellingUOM: \"LM\",\r\n Cost: \"0.0001\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.96\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_566\",\r\n id: \"566\",\r\n ProductCode: \"CNSTK04BFP680\",\r\n ProductDescription: \"Cen STK04 Barge Finial Plain 680mm\",\r\n ProductIndex: \"STK04P\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"400001\",\r\n SellingUOM: \"EA\",\r\n Cost: \"25\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.732\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"92.14\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_567\",\r\n id: \"567\",\r\n ProductCode: \"CNSTKO5PVC\",\r\n ProductDescription: \"Cen STK05 PVC H Section Strip 3000mm (6.00mm)\",\r\n ProductIndex: \"STK05\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"400000\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.8018\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.28\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_568\",\r\n id: \"568\",\r\n ProductCode: \"PVCSBFF7545\",\r\n ProductDescription: \"75mm X 45Deg Pvc Elbow\",\r\n ProductIndex: \"SW7545\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"802754\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.05\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"2.65\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAAB/BAMAAACOMIhAAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMzowOToxOCArMDkzMN4mPTgAAAAHdElNRQfiBBIDJyaSRqA8AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////ra649/f7dHeCmZyptbrDyc7W3+PsXmFshoeRvsDF8fH79///R0pSaWtzbW9/+CjPCQAAAAF0Uk5TAEDm2GYAAAWDSURBVHja1ZhPbBRVHMeHom3WJtAJrbZwIXrooRfNHOzEdKabjoXlQje6gnsqKB4MGiWSYEKAZDF5PczbbmYR5iBBcKMphhhiSwKcvHjoBcKBxWQkZDwMh745jCbrgTf+3pvdzuz27Z+IJfgOm032s9/v+/3eb37zm5GkPmlzVv+YrRFYQWm+I7dsFcqGYWRsW9GcwlxbbnDHn/KwwRaQoYedN9uRO87JslEnLY0g03xLDG4tZeV0g1QUikyM20jKcqyp6IycEof1CMBomxCRpYM78i4JycdyNqHJ3U2x5jdvNGkCaf4hTtR+s1TXzESazllZTGaIs5COs4RQSR6eFpIznokc5NqgaRGE1LScHR5qQyJEggAOPVThTNMsFeLYZ2omkIptl/kOGCnP90x+9j8he49InKWMgJxrrxk2k+Iz2iEgp59D8p3eSboJpMB9rmdSfJpXnhE51zMprpAr9GlIcT4/iEj1+SEXn5I8rfVKntoEchuQ+F+T0z2TQ5tAit23PyNy8T/VHObknt7IbFY+37Pm10Jyays50jMJ63yv5MhiL6Qhy+/j+93JNGhmSiOVrmQaBpILf00s5w9IgyISRWSGeQ/X/i7vmqhU5gc6kExzDAWqbRxbyeekDiSbmLCiWHZ5dvVIZa4DaRszKIAvoP7jr7lcJ/f9iOoBiKp2+tby0oH25MUq8cNQYerlPauV3HwrmYpIe7IKs1XIUNZ1j67kl0Qk8YPJKiIcDbjq7PXjuUsbSYyCSQc+MbOPRO3LNyqtQaV0cF9jIBP1uahil0u3b+bfayEnEfIcB/HF/RWGGnsgqc3+KQWmSrNaZSBuiEJSjcPjO5uDSl2E8RNGXoZiXA8Kcmrvmziev9QckVOECdUx6/Y8KD4/7Vqt5JNJTa25hMK0Gu0Ux0HZ5ZMrTUFtL7iUgmgdJY2gVDUz++qRpOgnhVDXCWmQDX9eVJfHcyMx+YJHAzckHjJb/KNKyce9dPfBItFDmhStH6qtZl5Z/fZQ7D+AfQVIFlQiqdGhGkdXdr4c+29jvzBRntN1f8iUCpXyeXZOWp9xL/gB+Cczxfx1XilXb+SysegW7Gp6FFTDP2wktXRyeSnRJK+hwNX4TluTCpU68fG7iaA0oriRfzXhz9Hy4ZVkUr8krhaKkgonte/W8UriBjVK3CAhGvuzShmvfBdP+P3YVUAUbRAF/9KxmztnY9ETNZZu5r+eVJ4p1bIzs9cPZRKVqpEgTCQ1ulACnYlmxhznQUz+jP0g6c+LSoemotpPHgZ0Le7TfQeJpkWVEgflQlDW1D0/9GmiTw/gghs2J9Wn0NJqVU+H2O4mqv+0B/60KX4aBqGDiiTUNTV58V2AyYX6Tf4+nYK/kZAqbpLcAg81vFLWi6oY+k7VQZ5P9YWYg3vANcKLet0f7Nf4d0zoV01dYoAQJUzEjz1S5QXmEbflHpXCvqZR2hD1vDUUfff8M82ktBcr/EKtFzXm0qxqSesd8iVCNMXXGv7m7yhCsbnhefEUpgG/Uk3WqEyCIxShVlAanFzw46Cg93PUdH7bQEopj0blB0JmoUiwx0XPbCSlUSB17o8cCn+JyHkB2Y98nfub5sOQcnUQl0TrNLsw2AbNAtsHKQIqng2kiwUtCKBSTHYnY/vw1sTTIzRKXyE+wVUFzjasUUTE72d+kqQf4EEZgrrHSdcj6I7UZkGlQKOoLSiKzvy9J/PtSOk1zw2CmmoxlNLiXan92utp4RPbspi/PzU92J58ERrlJH/lA6X9QOq0PsXu4+GMbSlBOLXYkRzU/Ec3DSAt7a7UeaXw2V8+LAM6NdSF7BslVwfYi6Q7UrfVby4d+8KwznQFpb4T576/PfZ6F2o3/1Te/mi6u2J9JaL5B81rtmk2Tk4RAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_569\",\r\n id: \"569\",\r\n ProductCode: \"PVCSBFF7590\",\r\n ProductDescription: \"75mm X 90Deg Pvc Elbow\",\r\n ProductIndex: \"SW7590\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"802759\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.05\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"2.87\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_570\",\r\n id: \"570\",\r\n ProductCode: \"PVCSP90CSR\",\r\n ProductDescription: \"90mm PVC Stormwater Pipe Coupling Slip Repair\",\r\n ProductIndex: \"SW90J\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"865404\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.47\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.06\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"3.68\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_571\",\r\n id: \"571\",\r\n ProductCode: \"PVCTJ75\",\r\n ProductDescription: \"75mm Pvc Tee Junction\",\r\n ProductIndex: \"TEE75\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"865490\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.3\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.17\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"2.29\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_572\",\r\n id: \"572\",\r\n ProductCode: \"PVCTJ90FF\",\r\n ProductDescription: \"90mm PVC Tee Junction\",\r\n ProductIndex: \"TEE90\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"865500\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.1\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.16\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"2.70\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_573\",\r\n id: \"573\",\r\n ProductCode: \"TL542**H**U\",\r\n ProductDescription: \"Tl-5/M-Clad 0.42BMT **H**U\",\r\n ProductIndex: \"TL42\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"021\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.5755\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2573\",\r\n PromptTextCodes: \"CVR TOP.UNDER\",\r\n Colours:\r\n \"Classic Cream/Grey,Basalt/Grey,Cottage Green/Grey,Cove/Grey,Deep Ocean/Grey,Dune/Grey,Evening Haze/Grey,Gully/Grey,Ironstone/Grey,Jasper/Grey,Manor Red/Grey,Mangrove/Grey,Monument/Grey,Night Sky/Grey,Pale Eucalypt/Grey,Paperbark/Grey,Shale Grey/Grey,Surfmist/Grey,Terrain/Grey,Wallaby/Grey,Windspray/Grey,Woodland Grey/Grey,Classic Cream/Classic Cream,Classic Cream/Mangrove,Classic Cream/Monument,Classic Cream/Woodland Grey,Paperbark/Gully,Paperbark/Paperbark,Paperbark/Woodland Grey,Surfmist/Monument,Surfmist/Surfmist\\n\",\r\n LiveCost: \"18.31\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCAIjFD/EWwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf///+fn58bGxrGxsb29vff399ra2qCgoO/v787OzpSUlIyMjGtra0VFRX9/f3Nzcx/jzaUAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_574\",\r\n id: \"574\",\r\n ProductCode: \"TL542**H**U\",\r\n ProductDescription: \"Tl-5/M-Clad 0.42BMT **H**U\",\r\n ProductIndex: \"TL42DS\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"021\",\r\n SubGroup: \"142101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"8.5755\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.2573\",\r\n PromptTextCodes: \"CVR TOP.UNDER\",\r\n Colours:\r\n \"Classic Cream/Grey,Basalt/Grey,Cottage Green/Grey,Cove/Grey,Deep Ocean/Grey,Dune/Grey,Evening Haze/Grey,Gully/Grey,Ironstone/Grey,Jasper/Grey,Manor Red/Grey,Mangrove/Grey,Monument/Grey,Night Sky/Grey,Pale Eucalypt/Grey,Paperbark/Grey,Shale Grey/Grey,Surfmist/Grey,Terrain/Grey,Wallaby/Grey,Windspray/Grey,Woodland Grey/Grey,Classic Cream/Classic Cream,Classic Cream/Mangrove,Classic Cream/Monument,Classic Cream/Woodland Grey,Paperbark/Gully,Paperbark/Paperbark,Paperbark/Woodland Grey,Surfmist/Monument,Surfmist/Surfmist\\n\",\r\n LiveCost: \"18.31\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCAIjFD/EWwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf///+fn58bGxrGxsb29vff399ra2qCgoO/v787OzpSUlIyMjGtra0VFRX9/f3Nzcx/jzaUAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_575\",\r\n id: \"575\",\r\n ProductCode: \"TL548**U\",\r\n ProductDescription: \"Tl-5/M-Clad 0.48BMT **U\",\r\n ProductIndex: \"TL48\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"021\",\r\n SubGroup: \"148101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.4941\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.69\",\r\n PromptTextCodes: \"CVR TOP.UNDER .48\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey\",\r\n LiveCost: \"21.55\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCAIjFD/EWwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf///+fn58bGxrGxsb29vff399ra2qCgoO/v787OzpSUlIyMjGtra0VFRX9/f3Nzcx/jzaUAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_576\",\r\n id: \"576\",\r\n ProductCode: \"TL548**U\",\r\n ProductDescription: \"Tl-5/M-Clad 0.48BMT **U\",\r\n ProductIndex: \"TL48DS\",\r\n GroupingName: \"Steel Roofing\",\r\n ProductGroup: \"021\",\r\n SubGroup: \"148101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"9.4941\",\r\n MfgLocations: \"200 300 400 520 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.69\",\r\n PromptTextCodes: \"CVR TOP.UNDER .48\",\r\n Colours:\r\n \"Classic Cream/Grey, Basalt/Grey, Cottage Green/Grey, Cove/Grey, Deep Ocean/Grey, Dune/Grey, Evening Haze/Grey, Gully/Grey, Ironstone/Grey, Jasper/Grey, Manor Red/Grey, Mangrove/Grey, Monument/Grey, Night Sky/Grey, Pale Eucalypt/Grey, Paperbark/Grey, Shale Grey/Grey, Surfmist/Grey, Terrain/Grey, Wallaby/Grey, Windspray/Grey, Woodland Grey/Grey\",\r\n LiveCost: \"21.55\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"TS1245B8100\",\\n \"Use\":\"Roof Fix\",\\n \"Qty\":\"=((Area.NumInternalPurlins*6)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCAIjFD/EWwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf///+fn58bGxrGxsb29vff399ra2qCgoO/v787OzpSUlIyMjGtra0VFRX9/f3Nzcx/jzaUAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_577\",\r\n id: \"577\",\r\n ProductCode: \"PACCSSLM\",\r\n ProductDescription: \"Tl-5/M-Clad Cover Sheet Only (Metal)\",\r\n ProductIndex: \"TLCOVER\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"915\",\r\n SubGroup: \"160000\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.56\",\r\n MfgLocations: \"200 300 400 500 \",\r\n Markup: \"0\",\r\n MarkupCarport: \"0\",\r\n SellingUnitWeight: \"3.311\",\r\n PromptTextCodes: \"$$=1.00LM\",\r\n Colours: \"\",\r\n LiveCost: \"3.9732\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAoBAMAAADHxCMWAAAAB3RJTUUH4gQRCAIjFD/EWwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAAAwUExURf///+fn58bGxrGxsb29vff399ra2qCgoO/v787OzpSUlIyMjGtra0VFRX9/f3Nzcx/jzaUAAAABdFJOUwBA5thmAAAExklEQVR42q2WQUwbRxSGF1UbkVtIZQtuDaAktOohMWFVI6EGu6SkF1vNInoDnGzia7bViLVE7Kq20lsFFOTcGkfdZgYZNaR1NWutj5XisfeQY7zh0EpI3mX20EMkWLydxW5LEiU0tHOwRrK/9/73vzcz5rjnF88dffFc+j/QHD8bOzob+fyaeMRS+KXSpJTmGM5LAe5glEP1xLjr8HQmuSLNprk7W5OsfPEw5EDehHZRCp6xDQ0C7Wb/DV9wrGv5287Xr490hV7MZJYqXktzjZtz45ei47NZfrUw3gn9Wvir6kRv8GqRtHDZKCwOnXEMr5RClhzK+iWJ3WMP0x0DXw5zbH3ydjBZJFQrkmcT+eWU4zRTxCgNh0AoOhSIfeo1z3a86ep9kV04l+nJjdmGpbnV8yv5y45HS+ukOhwVKp6FIVzfgSPifu7uy+pHz7Hx0XPxG7lRz7N0VrCUX9I9bydFvMJ4RNE9aum1TayUQqHhoQD3FnF+PMjmwMTt3swZt16HZVJYkRZHDcdS1xpWKCIgx9LU9VoVKXrLpZosrG0u/HFgcqZu3ezJZq67LQ9VSPO0lLzktGhpgRiFaAToLQvCWsOSVURtTaeuWdedD/6amthx+24gHkh4ntdMufURSVoqGhRDu1E63x9JscRQd+uWDBGl/t7cofqzEx34uP0gHT9xpWIbVCXGvVkpOeq1nI2FRqvQHw3r+6rN3VI4rDm7mqa55iNa/K2Tearyezab/TLlEguvka1TfT3vUldvCjZpnh9c8rMBJmIXCIrmWBhptkkx3WizXWMbM7z4NTN6F+pkd6RHSiB7l7lFWOJ+QacWBsUaacqC4u8R2mto2OrA7z9Od6fjYZfUt3S7Pp+b7Qv7LQ7vGVvj+UGo0yYEZbOuhgDbaxCimg8/bCfWP45NT7/nMLNQjdy/NrWySp2WDtaJd29u6BJT3YSKzbxmcMVCbVjDD9rwWa6XT5QNJrpMtmZzgbc1u6pvsMHEk8nB8L5qVDNwKKRoFdYzZvZTiPDPbdndse6lskEM5uivE/GM9InltbC81vDuz51exZRiFVR81QymFlRgxXyKEWyPGB/rmhpg4krC9uZIb6bnDqUs8Sip45HkYtj/vay4vmoh5ZeswLJZZfAv/0yYKCajY+R7ruvayZRDKBbsRms+OZHAlZaGZcTmWmZjqlsIq4ptPsIp5afnriA+E2QffQp1LU2+RerqSn7OH2tUCK81qspwRIFMhQrQtmmpCvzihUMpMjioUM/DcpmcyuVXllPUt0shJt2IRhTUhvcYDF6C/TUdl5KLobDLpi8pCYg6qCAg0gDz+zCGgDlvagy+8Kp7cLovOjMd60lAVqVWCNtmfSs66JvNYLVYa2DwCljkRbHdhOlVZBtYDSnu5jjoH2STzbosgw784WsuQ3bW+T7mEVQF5H7Hx4cGBaj7JQO/zQCAd7hDFi9mkhGhSGdEbnmATbZfMrDNJ1gWwDeHsDH/jeEzyxPdsdhnTMU+zNr8BDJ45rDMB61g55GploWFPXMDAAEE3gQOLgvMABnI24958Sp4I5hnTRCDi5EUrP3A3hYAsv+W/Pt5ZQYO3OXS6WMRIf0GmQ8UwGLxCXD0/w/cyeGjs//H+hNlRtxoWidlOAAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_578\",\r\n id: \"578\",\r\n ProductCode: \"TL5HRGCGA\",\r\n ProductDescription: \"Tl-5/Hi-Rib Gutter Clip Galv\",\r\n ProductIndex: \"TLGCL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"99505\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.113\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.05\",\r\n PromptTextCodes: 'Desc=\"Gutter Clip\"',\r\n Colours: \"\",\r\n LiveCost: \"0.113\",\r\n AncillaryParts: \"1xSCTF\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_579\",\r\n id: \"579\",\r\n ProductCode: \"SHBF1016**100\",\r\n ProductDescription: \"BF 10-16X16 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1016100B8N\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"10162\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.746\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.104\",\r\n PromptTextCodes: 'Desc=\"10x16mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"4.746\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_580\",\r\n id: \"580\",\r\n ProductCode: \"SHBF1016N**100\",\r\n ProductDescription: \"BF 10-16X16 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1016100B8\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"10168\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.746\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.3\",\r\n PromptTextCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=\"TS1016\"',\r\n Colours: \"\",\r\n LiveCost: \"4.746\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_581\",\r\n id: \"581\",\r\n ProductCode: \"SHBF1016100\",\r\n ProductDescription: \"BF 10-16X16 H/H Screw + Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1016100B8NP\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"10163\",\r\n SellingUOM: \"100\",\r\n Cost: \"3.453\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.104\",\r\n PromptTextCodes: 'Desc=\"10x16mm Screw(s)\" AltIndex=TS1016N',\r\n Colours: \"\",\r\n LiveCost: \"3.453\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_582\",\r\n id: \"582\",\r\n ProductCode: \"SHBF1016N100\",\r\n ProductDescription: \"BF 10-16X16 H/H Screw No Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1016100B8P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"10167\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.4\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.28\",\r\n PromptTextCodes: 'Desc=\"10x16mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"3.196\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_583\",\r\n id: \"583\",\r\n ProductCode: \"SHBF1025N100\",\r\n ProductDescription: \"BF 10-16X25 H/H Steel Tek No Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1025B8100P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"10253\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.361\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"1.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"4.361\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_584\",\r\n id: \"584\",\r\n ProductCode: \"SHBF1025N1000\",\r\n ProductDescription: \"BF 10-16X25 H/H Steel Tek No Neo B8 Plain (Box 1000)\",\r\n ProductIndex: \"TS1025B8P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"10250\",\r\n SellingUOM: \"1000\",\r\n Cost: \"28.61\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"12\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"28.61\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_585\",\r\n id: \"585\",\r\n ProductCode: \"SHBF1220**100\",\r\n ProductDescription: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1220100B8\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12200\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.388\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.2753\",\r\n PromptTextCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=\"TS1220,TS1220N\"',\r\n Colours: \"\",\r\n LiveCost: \"5.838\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAA9BAMAAAB2A6tHAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwOToxMTozMiArMDkzME16fW8AAAAHdElNRQfiBBEXKjdEwlrBAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5+fnpaWlnJyc0tLStbW1h4eH9/f3ra2t7+/vwcHB3t7eJCQkc3NzVlZWAAAAAyhi8gAAAAF0Uk5TAEDm2GYAAAQ6SURBVHja7dZfaBt1HADwX9Oa2IK4PYogIZddq5PS3c/fGaspob1G276U3n5ZbEHG3fpbmL3MoggKQmkbOR0dfZDBii/agaPCqK5IRXyZkKdLNnvdMTC/drS4B7lcHnx1ib9rUih4tT3j476QPBz8Pvf9/fl+7wdAc/Fsk+OfAIcA7U0CLSsnmgMC8980ByRjQ80BC6fWAXjvPwLTz618QdQ3HpmqRmjCLxBaGoh0RQfJSy9rlEVp1C/Q0ZXDcnqOCCXDFaZ8Ax8wAOMxktly8tTKGz1+ga/X1iFGkAjbjl00bNsv0DKHxiFkQO/lqlNxHN9AOyTaKT3HZyfv1tzwDXSIDFgbjFOlDvwV9gm0bSkrcH6wbO4DfjMIbCxDnJ6ldKcOVB+ChyyvRQBOHg942sTuLlKrsQa184ECAJ+cB4CvO0cClyDCeJxajSlUf/2yCMDVTdBGwiB4AYROHAEEUAPYrdSBQqlgZrqJMAC56KfifH8mKg0vSV+dXPnokAwQ2puCup+BVsqbkQWqpgjhODKZ02K63qVHJenGsCcQbAAZ0shAm7LNPo2qPCVQVJVeclPX53Ban/1evugFtEIoQzRGlX3AMOwptywJjVtqZkclE5L0ls5iMm55Ac9wGEOWARLcKTyu1R7RfMkFlDLdkDf/wDimn+5fk1hw4mueGWC2imO054dK1XEq1VqZUJrjqfV8d/z+iCYuX2HVjk9HpMRiSEp6rQHEsgu8nWSV5EYhVqbnBnd3pFT8/puQWGkMIUxjXWfbMe29BtCdwuiH+4Ci9Z0LmbsfJ8Xfh2ZVjq2xzF4CZZZpj1cGqA7MXCvahmE4zp3Mre4Z8ECdDqrvLnLKBFu+OZjKoVQEEk8g5r5hzFltLeYptQznzugL2VEgxIdaM78tDm7MSI24rZ255XkOzuZYBuPZRGCvJVrFwrfvxDfbrOzN22r5yucKSrs7wH4jsnrBE+gUcgjnson3DXfzaNE2F6glE6rxhEJNJJYI2R9hb9ESnsB37Te6Ztezq08xwGQZGFua+QuxKMmSrJgicQhJnKqqaCpR72J6kTVmaaQ7zACTfRZszaLO1bGfiRlO8hdBsjPk9bk62JGi1/t1/Scx0VH/LNjmPRB8wLpBGITYnEPAMw4COcjmh/oSwaKRNwy2BOzZPXbEWS85Aw6Lg01VMBUsor7VYMWx2TmyN9nDI68KB9u6KHAwgvhwsH4Sy0eN/QcgICgoiMwkKzXHqVYe+wZUJAgEkVcH7taqrJ59Ax1Y5rkIJq8MXK5VHSb4zsCUBcgvq68PbzPAqfoGWi5B2CtALpbaZuNZNfoFQjxiHUMhCPaxciZG3i8Arrn9oJfHsakCpQ790zcA+lWoqgQTccIt+x/9A6Dl+pLEy+TssYZ6AXsxoHzWHBDgO5sD2lCiOaCFa/K2/q8XkmMBvuIJ8H8AfwO+bye/XsSyfQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_586\",\r\n id: \"586\",\r\n ProductCode: \"SHBF1220N**100\",\r\n ProductDescription: \"BF 12-14X20 H/H Screw No Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1220100B8N\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12205\",\r\n SellingUOM: \"100\",\r\n Cost: \"3.67\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.703\",\r\n PromptTextCodes: 'Desc=\"12x20mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"3.67\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAA9BAMAAAB2A6tHAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwOToxMTozMiArMDkzME16fW8AAAAHdElNRQfiBBIAGwumLDvvAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////////wsLCubm57+/v0tLSpKSk////ysrK////3t7eQUFBc3NzkJCQHR0d+/v7skj6/wAAAAF0Uk5TAEDm2GYAAAOuSURBVHja7dbRaxxFHAfwyeV6ZwJK+ygUPG6vm6iBtjvOesY7PHJ7p8lLwm3negahspP8ejS3alAEBSEkOVmloXmQQuOTpmAJBR+Evlx6SIIvtjlKNl0KydR/IdogeRGdS9eQh20TZ33s77j9cg/32dmZ3d8sQuHqhZD/fwY8AegKCXQsHQ8HRGZ/CAcU04PhgLlTu/LA5ItL3wB7UxKIL+STvakCvPKqJNDdW6dmZQa0TUngEwFQWoLqliTw/c4upgSD9lAO6JghoxgLoP8DOaALg33Kqau18aYc0K0LYKeQ5ZYkEN2ylvBsYc2VBSLri5hWpjlfaaKfxYDmETqxH0cBnnNpexW5N96M3Eboi/cRUvej7RwKXMKE0lHuWc1vlxG6vIGikPg3YmMofvwQIEJ8YLW1edut9oGWx0rKjy/12YFqyhhaML47sfTZE0ZAyN4lMKu5ectNznFWBlD8UGC8bqcdp9dJGcb1oUAg5gNVaE3ccTM2ZyoH7IfOrH644TgztOJM/2FeDAI6MTYxKXELWo07E1wU8KznB6uuMLhgGO84osazXhDwvEIpFiMgWpPf2mwD1hpf98Pc+JXStHN6YMcQpehvBI6Ailks8TN/toDzusq9l/qy9/0YtvXFK+Jpp6eTRm4+bhSD5gBTsw28W2yl1/j5wuqKUc7e9+NtDF6FYowr1HHEckwGzwFuX8LIpy3LzpyPu6ufF/Vf/BicZoqYY1OcBJtipGcCV+ExMHV1uXqzbwo9YJMx9qEf84p1QUzfDC7XSTmJIRBIt89QurvduTxysjaCtOxgZ/U3P+YL61OGX4/sszcD74NzdTGC0Vou0vjxvexG1KvdeMTW/LjytUUq7RUQ32GTjQUCPVqd0Hot93HDneOeCdxWgfuBbR08HYsDiLPYuUDg967rvdO7te1jjS3b/Qk8DjXxeRx6GbIYQ5YzprtWKvhhelk0ZmO4L3Gs4fG7l0t/gZsoqn5cRMWe+EdPfxqjqWsDjvO3nutu3EOxB6INJFB8bD/iKLAOAnUsro9kcjHRDaL3xL0tmsjZ/UCHAt2aa1GdZLZjLfHrqO8IB9u6rik4SdTEHnDUOghoBGsWgamiLMCIpgGB1/OyGws1VSVJ4bW87NbmmhpWF9lbQ7Kb6yWM+zWspMuSQFwlomNYQHBGDkBX2/2gX6XpCUkADTDMGFDQZQHUcW3BUE04Jw3sVd76KhwQUXvCAVGSCwd0KCHf1p/6QnIk4D/VM+D/AP4B+bd/OdJc7SAAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_587\",\r\n id: \"587\",\r\n ProductCode: \"SHBF1220N100\",\r\n ProductDescription: \"BF 12-14X20 H/H Screw No Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1220100B8P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12207\",\r\n SellingUOM: \"100\",\r\n Cost: \"3.5\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.703\",\r\n PromptTextCodes: 'Desc=\"12x20mm Screw(s)\" AltIndex=TS1220CS',\r\n Colours: \"\",\r\n LiveCost: \"3.621\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAA9BAMAAAB2A6tHAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwOToxMTozMiArMDkzME16fW8AAAAHdElNRQfiBBIAGwumLDvvAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////////wsLCubm57+/v0tLSpKSk////ysrK////3t7eQUFBc3NzkJCQHR0d+/v7skj6/wAAAAF0Uk5TAEDm2GYAAAOuSURBVHja7dbRaxxFHAfwyeV6ZwJK+ygUPG6vm6iBtjvOesY7PHJ7p8lLwm3negahspP8ejS3alAEBSEkOVmloXmQQuOTpmAJBR+Evlx6SIIvtjlKNl0KydR/IdogeRGdS9eQh20TZ33s77j9cg/32dmZ3d8sQuHqhZD/fwY8AegKCXQsHQ8HRGZ/CAcU04PhgLlTu/LA5ItL3wB7UxKIL+STvakCvPKqJNDdW6dmZQa0TUngEwFQWoLqliTw/c4upgSD9lAO6JghoxgLoP8DOaALg33Kqau18aYc0K0LYKeQ5ZYkEN2ylvBsYc2VBSLri5hWpjlfaaKfxYDmETqxH0cBnnNpexW5N96M3Eboi/cRUvej7RwKXMKE0lHuWc1vlxG6vIGikPg3YmMofvwQIEJ8YLW1edut9oGWx0rKjy/12YFqyhhaML47sfTZE0ZAyN4lMKu5ectNznFWBlD8UGC8bqcdp9dJGcb1oUAg5gNVaE3ccTM2ZyoH7IfOrH644TgztOJM/2FeDAI6MTYxKXELWo07E1wU8KznB6uuMLhgGO84osazXhDwvEIpFiMgWpPf2mwD1hpf98Pc+JXStHN6YMcQpehvBI6Ailks8TN/toDzusq9l/qy9/0YtvXFK+Jpp6eTRm4+bhSD5gBTsw28W2yl1/j5wuqKUc7e9+NtDF6FYowr1HHEckwGzwFuX8LIpy3LzpyPu6ufF/Vf/BicZoqYY1OcBJtipGcCV+ExMHV1uXqzbwo9YJMx9qEf84p1QUzfDC7XSTmJIRBIt89QurvduTxysjaCtOxgZ/U3P+YL61OGX4/sszcD74NzdTGC0Vou0vjxvexG1KvdeMTW/LjytUUq7RUQ32GTjQUCPVqd0Hot93HDneOeCdxWgfuBbR08HYsDiLPYuUDg967rvdO7te1jjS3b/Qk8DjXxeRx6GbIYQ5YzprtWKvhhelk0ZmO4L3Gs4fG7l0t/gZsoqn5cRMWe+EdPfxqjqWsDjvO3nutu3EOxB6INJFB8bD/iKLAOAnUsro9kcjHRDaL3xL0tmsjZ/UCHAt2aa1GdZLZjLfHrqO8IB9u6rik4SdTEHnDUOghoBGsWgamiLMCIpgGB1/OyGws1VSVJ4bW87NbmmhpWF9lbQ7Kb6yWM+zWspMuSQFwlomNYQHBGDkBX2/2gX6XpCUkADTDMGFDQZQHUcW3BUE04Jw3sVd76KhwQUXvCAVGSCwd0KCHf1p/6QnIk4D/VM+D/AP4B+bd/OdJc7SAAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_588\",\r\n id: \"588\",\r\n ProductCode: \"SHBF1220**100\",\r\n ProductDescription: \"BF 12-14X20 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1220N100B8\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12200\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.388\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.703\",\r\n PromptTextCodes: 'MSJ=SHBF1220100 Desc=\"12x20mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"4.388\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAA9BAMAAAB2A6tHAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwOToxMTozMiArMDkzME16fW8AAAAHdElNRQfiBBEXKjdEwlrBAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5+fnpaWlnJyc0tLStbW1h4eH9/f3ra2t7+/vwcHB3t7eJCQkc3NzVlZWAAAAAyhi8gAAAAF0Uk5TAEDm2GYAAAQ6SURBVHja7dZfaBt1HADwX9Oa2IK4PYogIZddq5PS3c/fGaspob1G276U3n5ZbEHG3fpbmL3MoggKQmkbOR0dfZDBii/agaPCqK5IRXyZkKdLNnvdMTC/drS4B7lcHnx1ib9rUih4tT3j476QPBz8Pvf9/fl+7wdAc/Fsk+OfAIcA7U0CLSsnmgMC8980ByRjQ80BC6fWAXjvPwLTz618QdQ3HpmqRmjCLxBaGoh0RQfJSy9rlEVp1C/Q0ZXDcnqOCCXDFaZ8Ax8wAOMxktly8tTKGz1+ga/X1iFGkAjbjl00bNsv0DKHxiFkQO/lqlNxHN9AOyTaKT3HZyfv1tzwDXSIDFgbjFOlDvwV9gm0bSkrcH6wbO4DfjMIbCxDnJ6ldKcOVB+ChyyvRQBOHg942sTuLlKrsQa184ECAJ+cB4CvO0cClyDCeJxajSlUf/2yCMDVTdBGwiB4AYROHAEEUAPYrdSBQqlgZrqJMAC56KfifH8mKg0vSV+dXPnokAwQ2puCup+BVsqbkQWqpgjhODKZ02K63qVHJenGsCcQbAAZ0shAm7LNPo2qPCVQVJVeclPX53Ban/1evugFtEIoQzRGlX3AMOwptywJjVtqZkclE5L0ls5iMm55Ac9wGEOWARLcKTyu1R7RfMkFlDLdkDf/wDimn+5fk1hw4mueGWC2imO054dK1XEq1VqZUJrjqfV8d/z+iCYuX2HVjk9HpMRiSEp6rQHEsgu8nWSV5EYhVqbnBnd3pFT8/puQWGkMIUxjXWfbMe29BtCdwuiH+4Ci9Z0LmbsfJ8Xfh2ZVjq2xzF4CZZZpj1cGqA7MXCvahmE4zp3Mre4Z8ECdDqrvLnLKBFu+OZjKoVQEEk8g5r5hzFltLeYptQznzugL2VEgxIdaM78tDm7MSI24rZ255XkOzuZYBuPZRGCvJVrFwrfvxDfbrOzN22r5yucKSrs7wH4jsnrBE+gUcgjnson3DXfzaNE2F6glE6rxhEJNJJYI2R9hb9ESnsB37Te6Ztezq08xwGQZGFua+QuxKMmSrJgicQhJnKqqaCpR72J6kTVmaaQ7zACTfRZszaLO1bGfiRlO8hdBsjPk9bk62JGi1/t1/Scx0VH/LNjmPRB8wLpBGITYnEPAMw4COcjmh/oSwaKRNwy2BOzZPXbEWS85Aw6Lg01VMBUsor7VYMWx2TmyN9nDI68KB9u6KHAwgvhwsH4Sy0eN/QcgICgoiMwkKzXHqVYe+wZUJAgEkVcH7taqrJ59Ax1Y5rkIJq8MXK5VHSb4zsCUBcgvq68PbzPAqfoGWi5B2CtALpbaZuNZNfoFQjxiHUMhCPaxciZG3i8Arrn9oJfHsakCpQ790zcA+lWoqgQTccIt+x/9A6Dl+pLEy+TssYZ6AXsxoHzWHBDgO5sD2lCiOaCFa/K2/q8XkmMBvuIJ8H8AfwO+bye/XsSyfQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_589\",\r\n id: \"589\",\r\n ProductCode: \"SHBF1220100\",\r\n ProductDescription: \"BF 12-14X20 H/H Screw + Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1220N100B8P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12202\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.388\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.703\",\r\n PromptTextCodes: 'Desc=\"12x20mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"4.388\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAA9BAMAAAB2A6tHAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwOToxMTozMiArMDkzME16fW8AAAAHdElNRQfiBBEXKjdEwlrBAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5+fnpaWlnJyc0tLStbW1h4eH9/f3ra2t7+/vwcHB3t7eJCQkc3NzVlZWAAAAAyhi8gAAAAF0Uk5TAEDm2GYAAAQ6SURBVHja7dZfaBt1HADwX9Oa2IK4PYogIZddq5PS3c/fGaspob1G276U3n5ZbEHG3fpbmL3MoggKQmkbOR0dfZDBii/agaPCqK5IRXyZkKdLNnvdMTC/drS4B7lcHnx1ib9rUih4tT3j476QPBz8Pvf9/fl+7wdAc/Fsk+OfAIcA7U0CLSsnmgMC8980ByRjQ80BC6fWAXjvPwLTz618QdQ3HpmqRmjCLxBaGoh0RQfJSy9rlEVp1C/Q0ZXDcnqOCCXDFaZ8Ax8wAOMxktly8tTKGz1+ga/X1iFGkAjbjl00bNsv0DKHxiFkQO/lqlNxHN9AOyTaKT3HZyfv1tzwDXSIDFgbjFOlDvwV9gm0bSkrcH6wbO4DfjMIbCxDnJ6ldKcOVB+ChyyvRQBOHg942sTuLlKrsQa184ECAJ+cB4CvO0cClyDCeJxajSlUf/2yCMDVTdBGwiB4AYROHAEEUAPYrdSBQqlgZrqJMAC56KfifH8mKg0vSV+dXPnokAwQ2puCup+BVsqbkQWqpgjhODKZ02K63qVHJenGsCcQbAAZ0shAm7LNPo2qPCVQVJVeclPX53Ban/1evugFtEIoQzRGlX3AMOwptywJjVtqZkclE5L0ls5iMm55Ac9wGEOWARLcKTyu1R7RfMkFlDLdkDf/wDimn+5fk1hw4mueGWC2imO054dK1XEq1VqZUJrjqfV8d/z+iCYuX2HVjk9HpMRiSEp6rQHEsgu8nWSV5EYhVqbnBnd3pFT8/puQWGkMIUxjXWfbMe29BtCdwuiH+4Ci9Z0LmbsfJ8Xfh2ZVjq2xzF4CZZZpj1cGqA7MXCvahmE4zp3Mre4Z8ECdDqrvLnLKBFu+OZjKoVQEEk8g5r5hzFltLeYptQznzugL2VEgxIdaM78tDm7MSI24rZ255XkOzuZYBuPZRGCvJVrFwrfvxDfbrOzN22r5yucKSrs7wH4jsnrBE+gUcgjnson3DXfzaNE2F6glE6rxhEJNJJYI2R9hb9ESnsB37Te6Ztezq08xwGQZGFua+QuxKMmSrJgicQhJnKqqaCpR72J6kTVmaaQ7zACTfRZszaLO1bGfiRlO8hdBsjPk9bk62JGi1/t1/Scx0VH/LNjmPRB8wLpBGITYnEPAMw4COcjmh/oSwaKRNwy2BOzZPXbEWS85Aw6Lg01VMBUsor7VYMWx2TmyN9nDI68KB9u6KHAwgvhwsH4Sy0eN/QcgICgoiMwkKzXHqVYe+wZUJAgEkVcH7taqrJ59Ax1Y5rkIJq8MXK5VHSb4zsCUBcgvq68PbzPAqfoGWi5B2CtALpbaZuNZNfoFQjxiHUMhCPaxciZG3i8Arrn9oJfHsakCpQ790zcA+lWoqgQTccIt+x/9A6Dl+pLEy+TssYZ6AXsxoHzWHBDgO5sD2lCiOaCFa/K2/q8XkmMBvuIJ8H8AfwO+bye/XsSyfQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_590\",\r\n id: \"590\",\r\n ProductCode: \"THBF1225**100\",\r\n ProductDescription: \"BF 12-11X25 H/H T17 Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1225B8100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12254\",\r\n SellingUOM: \"100\",\r\n Cost: \"8.142\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.003\",\r\n PromptTextCodes: 'Desc=\"T17 Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"8.142\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAA9BAMAAAB2A6tHAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAwOToxMTozMiArMDkzME16fW8AAAAHdElNRQfiBBIAHxRPSPMeAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////5+fnpaWlnJyc0tLStbW1h4eH9/f3ra2t7+/vwcHB3t7eJCQkc3NzVlZWAAAAAyhi8gAAAAF0Uk5TAEDm2GYAAARYSURBVHja7dZhaBtVHADw17QmtiBuH0WQkGTX6qS097wzVlNCe422/VJ6e1lsQcbd+hZmL7MogoJQ2kZOR0c/yGDFL9qBo8KorkhF9mVCPl2y2euOgX3taHEf5HL54FeX+K55hV1drWf8uD+0fwi5X/7vvfv/7wBoLJ5t8PonwCFAa4NA0/KxxoDA3DeNAan4YGPA/Ik1AN77j8DUc8tfYPWNB6aqYZL0C4QW+yMdsQH80ssaobE54hdo68gjOTOL+U3DFSZ9Ax9QAKFRnN1yCsQqGF1+ga9X1yASIOa3Hbtk2LZfoGlWGIOQAj0Xqk7FcXwDrRBrJ/Q8l5u4XXPDN9AmUmB1IEGUOvBn2CfQsqUsw7mBsrkP+K0gsL4EUWaGkJ06UL0P7tO6FgA4Xv/C8SOAp03kniKx2B7UzgSKAHxyBgCu7rB0OHAeCgiNEYstofrLlyUALm2AFhwGwbMgxNKxw4CAwIDdSh0obhbNbCfm+2E09qk418dSNiYNLUpfHV/+6GAFgrC3BHW/Am2zYEbmiZrGOBrFE3mWtLiud+gxSbo65AWCDMhiVoE2aZu9GlE5gqGoKj0s4Wu6Posy+sz38jkP0AyhDIVRouwDhmFPum2JScJSszsqS3hckt7SaUwkLA/wTBQhSCsQeHcJD2u1B6Sw6QJKmazLG78jllBcP9m3KtGIiq95K0B0F0dJ1w+VquNUqrUyJiTPEev5zsTdYU1cYukibXp0MiIlF0JSyrMHEMku8HaKdpIbxXiZnB7Y3ZHSibtvQmyxlEEQwgzSdXocUwf2ALpLGPlwH1C03tMhc/fjlPjb4IwaZYlutUx/C8q04C7vKdSB6csl2zAMx7mVvd45De6pU0H13YWoMs4S3b5ZmM4L6QjEXiDu0qPOSnOpQIhlOLdGXsiNAD4x2Jz9dWFgfZolicUNrfu69z44lacVjOWSgb2RaJWK376T2GixctduqOWLnysCSxn3BOjfsKye9QLtfF5A+VzyfcM9PFKyzXliyZhoHCZQEzFLlgjpP0x/TEt6ge9ar3bMrOVWnqKASSswtjTzZ2wRnMM5MY0TLEGIE0RVRVOJHWimF+lgloY7wxQw6WPB1iziXBq9ic1wijsHUu0shTxPrUcnUuxKn67/JCbb6o8F27wDgvfoGAiDEF1sCOynw9q5JQ/pwoTeZLBkFAyDbgH97A69xekQ6a5/pfsfJ1IbbypIFHpXghXHpveRvUE/PPJV4dGxLvJRGBG4cLB+J5aPuvZvAC9AXhHwdKpSc5xq5aFvQBV4Hgv41f7btSrtZ99AG5K5aAThV/ov1KoOFXxXYMo85JbU14e2KeBUfQNN5yHs4WE0nt6m19Nu9AuEOIGOCgULsJe2MzYKfgFw2Z0HPRyKTxYJccgfvgHQp0JVxQiL426//+gfAE1XFiVOxqf+1aWPA/aiX/msMSDAtTcGtAjJxoCmaINv649/E/ED+IonwP8B/AW+B1KsRxrMXgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_591\",\r\n id: \"591\",\r\n ProductCode: \"SHBF1239**100\",\r\n ProductDescription: \"BF 12-14X39 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1235B8100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12352\",\r\n SellingUOM: \"100\",\r\n Cost: \"13.62\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.783\",\r\n PromptTextCodes: '**=Plain Desc=\"12x35mm Screw(s)\" AltIndex=TS1235',\r\n Colours: \"\",\r\n LiveCost: \"9.35\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_592\",\r\n id: \"592\",\r\n ProductCode: \"SHBF1239100\",\r\n ProductDescription: \"BF 12-14X39 H/H Screw + Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1235B8100P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12352\",\r\n SellingUOM: \"100\",\r\n Cost: \"11.50\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.703\",\r\n PromptTextCodes: 'Desc=\"12x35mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"8.92\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_593\",\r\n id: \"593\",\r\n ProductCode: \"SHBF1251**100\",\r\n ProductDescription: \"BF 12-14X51 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1245B8100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12452\",\r\n SellingUOM: \"100\",\r\n Cost: \"9.667\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.915\",\r\n PromptTextCodes: '**=Plain Desc=\"12x45mm Screw(s)\" AltIndex=TS1245',\r\n Colours: \"\",\r\n LiveCost: \"9.667\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_594\",\r\n id: \"594\",\r\n ProductCode: \"SHBF1251100\",\r\n ProductDescription: \"BF 12-14X51 H/H Screw + Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1245B8100P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12452\",\r\n SellingUOM: \"100\",\r\n Cost: \"7.8\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.703\",\r\n PromptTextCodes: 'Desc=\"12x45mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"7.6\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_595\",\r\n id: \"595\",\r\n ProductCode: \"SHBF1255**100\",\r\n ProductDescription: \"BF 12-14X55 H/H Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1255B8100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"12550\",\r\n SellingUOM: \"100\",\r\n Cost: \"11.318\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"1\",\r\n PromptTextCodes: 'Desc=\"12x55mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"11.318\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_596\",\r\n id: \"596\",\r\n ProductCode: \"THB1265**100\",\r\n ProductDescription: \"Bf 12-11X65 T17 Screw + Neo B8 ** (Pkt 100)\",\r\n ProductIndex: \"TS1265B8100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"312666\",\r\n SellingUOM: \"100\",\r\n Cost: \"10.363\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"1.097\",\r\n PromptTextCodes: 'Desc=\"12x65mm Screw(s)\"',\r\n Colours: \"\",\r\n LiveCost: \"22.12\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_597\",\r\n id: \"597\",\r\n ProductCode: \"THBF1450**250\",\r\n ProductDescription: \"BF 14-10X50 H/H T17 Cyc Ass Bra Full Thread + Neo B8 ** (Box 250)\",\r\n ProductIndex: \"TS1450B8BRA\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"14500\",\r\n SellingUOM: \"250\",\r\n Cost: \"64.977\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"6.3625\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"64.977\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_598\",\r\n id: \"598\",\r\n ProductCode: \"SHBF1450CY**250\",\r\n ProductDescription: \"BF 14-10X50 H/H Tek Cyc Ass Bra B8 Full Thread + Neo (Box 250) **\",\r\n ProductIndex: \"TS1450BRAB8\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"14527\",\r\n SellingUOM: \"250\",\r\n Cost: \"71.025\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"5.975\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"71.025\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_599\",\r\n id: \"599\",\r\n ProductCode: \"SHBF1450CY250\",\r\n ProductDescription: \"BF 14-10X50 H/H Tek Cyc Ass Bra B8 Full Thread + Neo (Box 250) Plain\",\r\n ProductIndex: \"TS1450BRAB8P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"14526\",\r\n SellingUOM: \"250\",\r\n Cost: \"61.67\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"5.975\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"62.275\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_600\",\r\n id: \"600\",\r\n ProductCode: \"THBF1465**250\",\r\n ProductDescription: \"BF 14-10X65 H/H T17 Cyc Ass Bra Full Thread + Neo B8 ** (Box 250)\",\r\n ProductIndex: \"TS1465B8BRA\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"14650\",\r\n SellingUOM: \"250\",\r\n Cost: \"74.017\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"4.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"74.017\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_601\",\r\n id: \"601\",\r\n ProductCode: \"SHBF1465CY**250\",\r\n ProductDescription: \"BF 14-10X65 H/H Tek Cyc Ass Bra B8 Full Thread + Neo ** (Box 250)\",\r\n ProductIndex: \"TS1465BRAB8\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"14652\",\r\n SellingUOM: \"250\",\r\n Cost: \"79.277\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"6.7\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"79.277\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_602\",\r\n id: \"602\",\r\n ProductCode: \"SHBF1495N100\",\r\n ProductDescription: \"BF 14-10X95 H/H Tek No Neo B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TS1495100B8P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"14952\",\r\n SellingUOM: \"100\",\r\n Cost: \"19\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"1.61\",\r\n PromptTextCodes: 'Desc=\"14x90 Hex Screw(s)\" AltIndex=TS1495',\r\n Colours: \"\",\r\n LiveCost: \"19\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_603\",\r\n id: \"603\",\r\n ProductCode: \"PCLTC50SW25W50\",\r\n ProductDescription: \"Lexan Thermoclear T17 50mm Tek With 25mm Washer (Pkt 50)\",\r\n ProductIndex: \"TSBW\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799190\",\r\n SellingUOM: \"50\",\r\n Cost: \"19\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"19.0001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_604\",\r\n id: \"604\",\r\n ProductCode: \"SWBF1016N100\",\r\n ProductDescription: \"BF 10-16X16 S/Fix Wafer Head Tek B8 Plain (Pkt 100)\",\r\n ProductIndex: \"TSW1016B8100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"10164\",\r\n SellingUOM: \"100\",\r\n Cost: \"5.85\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.3\",\r\n PromptTextCodes: 'Desc=\"10x16mm Wafer Screw\" AltIndex=\"TSW1016\"',\r\n Colours: \"\",\r\n LiveCost: \"4.746\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAaBAMAAADF3lZdAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjowMzoyNCArMDkzMF29GeMAAAAHdElNRQfiBBICISu7bxEwAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAC1QTFRF////9PT57/f32t/jvsbLpK2y09bb6/H15ebrOUNJW2Vrdn+EanN5hIyQlZyg41mYLQAAAAF0Uk5TAEDm2GYAAAJ5SURBVHjajdM9T9tAGAfwawkYVbRiqbr0G3RhYEYZbETVKoqqHFUCyVIiBl7EUlV0YmhUqW+q1DI4CQwVpfXZiRhAorZjIREGznameMCJLQanlIS7z1APOIYKS/17+z8/WT7dYwBuyi0QHQZCOn2t4aajdXYOcuTwSjGsNSPxPZZlIb04C5v7Ghepf7/wNczKYfPJitSDHJtv14hFDsLP9lJRujHOiZSoxNT6lZdiI/BdzmtTVYNVF68F3bSXeBAfjjNJkBw9BUkwNRyMlmDWpfxGZ8Zs7/RP4j2hPwuHhe2X9cLWYD129OiMYV69ZQDIdXrUEjY5zlR/BLrZSWQVopD2TGsmM9vNZNIGUhxKAHA7CsnxpUlWN7ZDnZt1FlsLmYlMIr2U5tKL7Y5jTeafgQY1bYHHxq5qbAXa8rX9sTvRXe4u2/lz1l7Cv0zqpP4Ak1YFgXf5ddv4HmjNIr0T7hyeQBvanuzhjgx7kkY0oJOqwFc5ftPGodYuWjaVqdzEe3hPbioNIcUmVOUI6E6jpdKFdgPjr/0rqNnG8QYScUmSDMlPGWFsILQP3JoJ54qlRE6SvgS6otuSUZFEScQVUTQ2dAlZ1CVyHMzWTvIsv0kIEr4FWpTkiv9m3yJR9h+7dKw5jtMC4IOubrN8maYROg20LuLnq8nV5MOdOzsjByMHhc+v5y9vXjeUFHVzZSSMBVqVzJUYiIGhldjawNjAGBMfupwwJR2Lbk9AeL2/O11Uj9rBx5JqCIIk8/01AU/Di/o3sSJCCCO+FFbv9fpaFH9X9jkSpq78IJXmSpQGab7I8/tX5+YuiM44hPPXijdT4P8zenv05sFfGc1Ov4YrtzYAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_605\",\r\n id: \"605\",\r\n ProductCode: \"XSW1022N100\",\r\n ProductDescription: \"HD10X22 S/Fix Steel Wafer Head (Pkt100)\",\r\n ProductIndex: \"TSW1022\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"761010\",\r\n SellingUOM: \"100\",\r\n Cost: \"4.15\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"1.01\",\r\n PromptTextCodes: 'Desc=\"10x22mm Wafer Screw\"',\r\n Colours: \"\",\r\n LiveCost: \"19.11\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAaBAMAAADF3lZdAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMjowMzoyNCArMDkzMF29GeMAAAAHdElNRQfiBBICISu7bxEwAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAAC1QTFRF////9PT57/f32t/jvsbLpK2y09bb6/H15ebrOUNJW2Vrdn+EanN5hIyQlZyg41mYLQAAAAF0Uk5TAEDm2GYAAAJ5SURBVHjajdM9T9tAGAfwawkYVbRiqbr0G3RhYEYZbETVKoqqHFUCyVIiBl7EUlV0YmhUqW+q1DI4CQwVpfXZiRhAorZjIREGznameMCJLQanlIS7z1APOIYKS/17+z8/WT7dYwBuyi0QHQZCOn2t4aajdXYOcuTwSjGsNSPxPZZlIb04C5v7Ghepf7/wNczKYfPJitSDHJtv14hFDsLP9lJRujHOiZSoxNT6lZdiI/BdzmtTVYNVF68F3bSXeBAfjjNJkBw9BUkwNRyMlmDWpfxGZ8Zs7/RP4j2hPwuHhe2X9cLWYD129OiMYV69ZQDIdXrUEjY5zlR/BLrZSWQVopD2TGsmM9vNZNIGUhxKAHA7CsnxpUlWN7ZDnZt1FlsLmYlMIr2U5tKL7Y5jTeafgQY1bYHHxq5qbAXa8rX9sTvRXe4u2/lz1l7Cv0zqpP4Ak1YFgXf5ddv4HmjNIr0T7hyeQBvanuzhjgx7kkY0oJOqwFc5ftPGodYuWjaVqdzEe3hPbioNIcUmVOUI6E6jpdKFdgPjr/0rqNnG8QYScUmSDMlPGWFsILQP3JoJ54qlRE6SvgS6otuSUZFEScQVUTQ2dAlZ1CVyHMzWTvIsv0kIEr4FWpTkiv9m3yJR9h+7dKw5jtMC4IOubrN8maYROg20LuLnq8nV5MOdOzsjByMHhc+v5y9vXjeUFHVzZSSMBVqVzJUYiIGhldjawNjAGBMfupwwJR2Lbk9AeL2/O11Uj9rBx5JqCIIk8/01AU/Di/o3sSJCCCO+FFbv9fpaFH9X9jkSpq78IJXmSpQGab7I8/tX5+YuiM44hPPXijdT4P8zenv05sFfGc1Ov4YrtzYAAAAASUVORK5CYII=\",\r\n },\r\n {\r\n DT_RowId: \"row_606\",\r\n id: \"606\",\r\n ProductCode: \"PAIS340H**\",\r\n ProductDescription: \"340G Touch Up Paint Spray Gloss **\",\r\n ProductIndex: \"TU360\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"660\",\r\n SubGroup: \"116340\",\r\n SellingUOM: \"EA\",\r\n Cost: \"12\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"23.77\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_607\",\r\n id: \"607\",\r\n ProductCode: \"CUTTBEX\",\r\n ProductDescription: \"Tube Cutting Charge (External)\",\r\n ProductIndex: \"TUCCE\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"900\",\r\n SubGroup: \"60101\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.2\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"1.2\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_608\",\r\n id: \"608\",\r\n ProductCode: \"CUTTBIH\",\r\n ProductDescription: \"Tube Cutting Charge (In House)\",\r\n ProductIndex: \"TUCCH\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"900\",\r\n SubGroup: \"60100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"7.5\",\r\n MfgLocations: \"200 300 310 400 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: 'Desc=\"Tube Cutting\"',\r\n Colours: \"\",\r\n LiveCost: \"0.001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_609\",\r\n id: \"609\",\r\n ProductCode: \"PCLTCBTAL2450\",\r\n ProductDescription: \"Lexan Thermoclear Aluminium Breather Tape 24mm X 50Mtr\",\r\n ProductIndex: \"TWBT\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799110\",\r\n SellingUOM: \"EA\",\r\n Cost: \"18.9\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"18.9001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_610\",\r\n id: \"610\",\r\n ProductCode: \"PCLTCBW25100\",\r\n ProductDescription: \"Lexan Thermoclear 25mm Bonded Washer (Pkt 100)\",\r\n ProductIndex: \"TWBW\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799170\",\r\n SellingUOM: \"EA\",\r\n Cost: \"25\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.4\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"25.0001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_611\",\r\n id: \"611\",\r\n ProductCode: \"PCLTCECAL1065**\",\r\n ProductDescription: \"Lexan Thermoclear Aluminium End Cap 10mm 6500mm Coloured\",\r\n ProductIndex: \"TWEC\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"899125\",\r\n SellingUOM: \"EA\",\r\n Cost: \"31.2\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.95\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"31.2\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_612\",\r\n id: \"612\",\r\n ProductCode: \"PCLTCECAL1065NA\",\r\n ProductDescription: \"Lexan Thermoclear Aluminium End Cap 10mm 6500mm Natural Anodized\",\r\n ProductIndex: \"TWECNA\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799100\",\r\n SellingUOM: \"EA\",\r\n Cost: \"27.3\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.755\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"27.3\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_613\",\r\n id: \"613\",\r\n ProductCode: \"PCLTCEGLS150\",\r\n ProductDescription: \"Lexan Thermoclear Ezi Glide Lubricant Spray 150Gm\",\r\n ProductIndex: \"TWEGS\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799160\",\r\n SellingUOM: \"EA\",\r\n Cost: \"12\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.0001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_614\",\r\n id: \"614\",\r\n ProductCode: \"PCLTCHBAL1060NA\",\r\n ProductDescription: \"Lexan Thermoclear Aluminium 'H' Bar 10mm Natural Anodized 6LM\",\r\n ProductIndex: \"TWHB\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"793016\",\r\n SellingUOM: \"EA\",\r\n Cost: \"54\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.575\",\r\n PromptTextCodes: \"Length=6000 AltIndex=TWHB_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"9.0001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_615\",\r\n id: \"615\",\r\n ProductCode: \"PCLTCHBFR1014\",\r\n ProductDescription: \"Lexan Thermoclear 'H' Bar Finishing Rubber 10mm X 14.0Mtr Roll\",\r\n ProductIndex: \"TWHBFR\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799130\",\r\n SellingUOM: \"EA\",\r\n Cost: \"56\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0\",\r\n PromptTextCodes: \"Length=14000\",\r\n Colours: \"\",\r\n LiveCost: \"56.0001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_616\",\r\n id: \"616\",\r\n ProductCode: \"PCLTCHBR1014\",\r\n ProductDescription: \"Lexan Thermoclear 'H' Bar Rubber 10mm X 14.0Mtr Roll\",\r\n ProductIndex: \"TWHBR\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799140\",\r\n SellingUOM: \"EA\",\r\n Cost: \"31.5\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5\",\r\n PromptTextCodes: \"Length=14000 AltIndex=TWHBR_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"31.5001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_617\",\r\n id: \"617\",\r\n ProductCode: \"PCLTCSTAL2450\",\r\n ProductDescription: \"Lexan Thermoclear Aluminium Sealer Tape 24mm X 50Mtr\",\r\n ProductIndex: \"TWST\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799090\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.5\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.5\",\r\n PromptTextCodes: \"Length=50000 AltIndex=TWST_INTERNAL\",\r\n Colours: \"\",\r\n LiveCost: \"4.5001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_618\",\r\n id: \"618\",\r\n ProductCode: \"PCLTCSH352550\",\r\n ProductDescription: \"Lexan Thermoclear 35mm Tek With 25mm Washer (Pkt 50)\",\r\n ProductIndex: \"TWTSBW\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"799180\",\r\n SellingUOM: \"50\",\r\n Cost: \"25\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"25.0001\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_619\",\r\n id: \"619\",\r\n ProductCode: \"CNVASPBPD\",\r\n ProductDescription: \"Vergola Adjustable Single Pivot Bracket P/Coated\",\r\n ProductIndex: \"VASPBCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"15.89\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.2\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"15.89\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_620\",\r\n id: \"620\",\r\n ProductCode: \"CNVB12V65AFP\",\r\n ProductDescription: \"Vergola Battery (12V / 6.5A/Hr) Factory Painted\",\r\n ProductIndex: \"VBATT\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"15.61\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"15.61\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_621\",\r\n id: \"621\",\r\n ProductCode: \"VTCS655**250\",\r\n ProductDescription: \"BF M6.2-13X55 Vortex Cyclone Screw Bra H/H B8 + Neo ** (Box 250)\",\r\n ProductIndex: \"VCS55B8BRA\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"61198\",\r\n SellingUOM: \"250\",\r\n Cost: \"71.052\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"4.58\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"71.052\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_622\",\r\n id: \"622\",\r\n ProductCode: \"VTCS525**500\",\r\n ProductDescription: \"BF M5.4-14X25 Vortex Clad Screw H/H + Neo B8 **\",\r\n ProductIndex: \"VCSM525B8\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"61186\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.0643\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"3.8\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"32.15\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABB4AAAEYBAMAAAAJ6Si6AAAALHRFWHRDcmVhdGlvbiBUaW1lAFdlZCAxOCBBcHIgMjAxOCAxMTo1Mzo0OCArMDkzMJDvupwAAAAHdElNRQfiBBICGwFFfQafAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////9/f37+/v5+fn1tbWra2txsbGnJyce3t7vb29paWllJSUYmJitbW1jIyMLS0t3FR/ywAAAAF0Uk5TAEDm2GYAAFCWSURBVHja7J3/cxPnncf1GEp77d3M7trlrp25jnfXZS6d3gxoVffIXHpgL5s4qe96CbJBnBjAQqlITScTYF1pUOcacmywog4pVmI66uQL8pZ1zFyaAzneRL9ck/gSFbcBQexU3KXNjTcW3f4DnvM9z7NftJJNp0PiCsHzBmxphaRH3pc/357P86zPR0RERERERET0pxNAX+hGj4LoVhHlAzTNUY0eBtGtIdrHQQksTYggQt6iVRT8HPxLXAYRUocgcBzv54jLIIJi/DTyF36GYwkQRIBjOZrh/CiIIDwQIR4cER6IGAsFFEP4CQ93vAAMJFmaYXiB8xMeiCAPNBTDCDDFIDzc8QI8xyEeOOQvGj0YooaL5niBhTzAnJMn8SQRgypRLINLEIQHImgeoMNgeIaDEUR7o0dD1GDReOKCpkn9gQgJ8cCgBIMmPBCh6qSA800LCMLDnS4GFSYxDAzHbWr0aIgaLACzC0HAPNCEByKXB4alGcLDHS8AgwbWih5YwgMRmty0o0nUA9Ho4RA1VsCa7LZ4gKknaPSAiBqqWh54Yh/ucAGMA2sXIAgPd7po1zxgHrobPR6ixorx4sAQHu5wwfCB9/Ig2MfJwpw7UzB8EHi/Ez5wvOCZv8CHCBl3lBAPgsB67QO1IV+6ko1GGUDTFAX/Aor2AR8NAPCR2a7bXCi94C1/wSD70A18vl8vFi8aivJ6SctlxExXO/ChPz4KktHo4RKtsqwmOYQDa/Hg87X8frGoKMW0AmWmleGz2dHB0ikpsgkajEYPl2h1hapR9mw3S1s80OtSxeliUZlWLFWUFPqWNvMjY6Q6cZurBbkL1D0JeQA436SpvyguFqdTxWIxBc2EkoJcTKdNjEbxUqPHS7S6YjAPqH2SoRAPAvQXn5tZQjTYmkZ/ppXUwvXpYuo/Gz1eotVVC162ifNNlF5yQjcF/mpmGpOgYBoUxeYCMfKLRo+XaFVFWTy49Sgu0O2jPlO8eBWef8VIG1YEUTUVb7Y3esREq6rWGh5YLrDVR30TRQ7TBkJi2FDSSgqjgPXzRo+XaFWFJ7udchRAPHQD6l9QPGkZBYiConiCCeIvbm/ZPHj9BaBSxSVkHWwerMDB1juNHjDRKgpY+UUND1t9a+B5v3i9WI0iU274UHyr0UMmWkXRVvODhwc+sJdeV/QI+g2vfXiDFKxvXwEKbfyAtpXDtUlAIR72gU/Z5x7FDbhI6eWh0WMmWj1BBBweoIGg0AHEw6cdy5BCX3C66WacJJ68jQUTCs7Lg2UffF+C6YUFAgQibXjNQ/ENMt/d/AJ2cOAewDeRh8C9crzFA97QnOvc5/sq4gGZhWl7TmvaDSqnSf2h6QVoBvdPV7skGSd6ZK1WewG3V6P/yfGQh2/aPEAQlInrjqEoYibebPSnIfqYwssycbHJFefcxxuIOTxAIGiWl/aC78wszkAe0gXIg6xYnkOBB6C5KL5F/EWTi+GqOGAngaYx8SMAhpOIB7/gWX4h7fX9egaVJxEPNTIQFO8QHppaKGJkXcOAjiAenAcZtKE9b013W16E79lLvYR5SJsmQsA0qjiYqem3G/2BiD6W0JJtlvahZBLQdsM0ihTwr7kTTgpclQdoH16bgYGjYVZ0c7hgVgqICDTROb0wmjAID00tYHkLCmNgMeB5lAbOrtW2CWGRfQApyMNF0zR1o2IiKkxoKhAUFS07RHhoalmho4/yOTjUPGjtHwbtg9/NNyAPa4qIB8NIVwoFI63rpjEsG2nTMJV5jdiH5hbjt9wDxqFu6gEnGP5a+8DxvXvWonTzoqFA21AxlQK0E+bC7jQ0EvAI4aG5ZS2s8OF1Nb5lU1FWZaKeh3UzS8UichF6PqEb6Ls5nMDuI10gPDS1QHVhpm8FHix/4ecdHhjIw7Y9f7YI/UV6Ss3Hw/0JYz6BIoiKLlfik4gHMr/ZxGpx1mXChGI5D4Bh6niAwcS2LZ+C7mJx+LCWODzbXzCn5ISe1yt5VdcLRmWS2IdmVgtqhKNQtgnoG/LA1fDQu+XTS0vFxXk9nsgFQ3lVjmtqPAENRAICMT9J5jebWU44iQOIP5aHLy1CAzFv5lTIw+GricPlkDYuy1NqbryiG8eIv2hiMZxVlAQrxA8A1a3xFfV4pz0K8gF5+JtFGE8el6G/CJbi/fpUMKQn4mpezo2bBePxRn8koo8hznIXPjRpsYJ9sPNN3tM+KfRu+XvkL06Mx+VcuKQFE7Ks5vP5cV3X87JpPE7mL5pXwI8nsvAElj1n4W2DAG49yp0I5wK9W/5paWlp8X8TcjwXCuZCkAZZ1uNqoaJPqeGh/2r0ZyK6edHu7z3lTFlY0xjOLZcHN4AIDG75LsRhcUHVNPg3F1JVWcU8FCp5TdxN+qOaWAxrb0OM26EoUHcunSugCAJvL8jhIA8b/xvZh+NySNNkLRjS5Liqm3mYdRbyWpbkF80sxp3q9lUntKqq8mB7DJhfdAxu/D7koTgc1zQtAc1DXIXuApUq84W8qhtvkvyiecXjeBK1wuAJzhvbB6GbtS+GAnn4PeIhPaWFEiaCoR/GkZWCnpDhd90g8UMTC89e+BicY0Aa6ngAXvtgNUcJXEe2/YfIX6QrOchDHnoLnFkkK/BrXDUJD80szAPg6ZU3fQI07fTD2BPevODvyLIzmIc8jCdl6DNUU9YLccxDPmEapJ+2icXjVVcC9BYrbRPo4cG5/AXkocwtIR6Uip7rz8FwEjqNRDyXrMgwgEjD+IHkF80rHD8Azgon0YmsjShdHvzO5S8ELjDbhnmYVtL5RFxTE3pFluMatA+FqaHhpHms0Z+J6ObF425qDtekrCU4NQ+DZTz42cDsOpsHxayYWAWYbaIWykrhfJL4i2aWgDNN7Auomp0jraTRtg9clQeODZQ/i3iYrhRMs1JArQ8m6pRCTdboZorkm00st/zg2AdH6KTSLg+8ywMLefgcMg8Xp2QNRpOyLOuJgqmj3gcFbzlI/EXzyumOoqxpi+WRoGMfBJcHGD98BvEwnI9ruZCGhdKMoKoXUMtc4cNGfyiimxbgLAzs8uTyx5f7Cy7Q9+eYh3g8rsWhjUBlynguGIRYwLu5/kON/lBENyvQwuElFcBarLdSu/0yHvjOsa/i6YscsgvQW+TRFEYQ8YDIyPWfIfFDswq0wPPM+Gm0rQMqQUDVpZtOe7WXhyP/gHhYCGvYX8h6HMIQQtNaMqpOyS82+lMR3bRQNy2/CUWPyELUPwqP4G4YnG+yVrc9x4vbcfvDAqSgFMR2QcM3NA1FE3KC8NC8aoGnmW9HVSjcJFUvdC093ssDap+UHvqu5S/C5ZKFBLwVtG6HoM8g8UPzqoXjGI4CdlC57GEUTtbwwGEeUPvD0jsa5gGrXLa+ITZyF9yn/zGFa1LcvpUEeaBtHuz0wjvDiafAeTt+sK7GyiMevo95QFbBggHKISMYDr7uPL2OL3KdlFtfDOLB3RcGwWAlGW7jHG3vPil47MP2l9D85gkLBOtruVS2rEUoF5RZ67m1C8V9K11Xi2Qit5gYnmWcldt47we7d7LKA2vz4Hd56DkaHFdmUDwZLlcVDFsmIhQ6t8d5MlVHACDO4RZXK+QBTWFQlF2jtHhwT5zdDsPX8CAnF3ZDHnK1PCDzAA+UQuees57bcbL29FPQQtQDQQzErSWeY1sE2p3YrOMBBhYMW9Nvj3lITJTPpRbnNReHrMMDchwh+bf4yUzPgU1178bVh4+AAHFrCfLQKrRbFeuVjDnDMk784JSj+N5EfNxMLeZdHmZHs7bLQHlG+OxH+KmtkZFDtQEEHROp+hiTeJBbSogHkQUrz2Wh2SynPul223MdPQndRDzkqjzYLsPKO2cr6KlgvSRe8PIAfAEpvrHuXaSNxEDcSuI5uiPiB/QN+idX4oHv0fL5pFmMa2ELCNdtlKywcudp7HwC0mCh3ftiQJT6f1Vz+qkNfV11bwjqQgzouShSpPiTiecYXuqib8SDFU/6a/1FrF/LjRvFqWDYG086TATDfe/5AEeBbjGYa/eeyDWSGHqs5uq9rQeC9ZNfQhdVa1TQJaDrBkWuCL1qgjxwgU119qFmfznG5sHv2odYKB8eHyrOB8OzMTdusGBAFapwbje1NrinQ5Qun2n3vldr5B71o5oz2ZmJaTUeBLRIZ2uv97zCGmOSlayeUDstx1rzWSs8XJ3f9PDQ09czmjSK87nwlZhtE0pBTEUQ1aRKg8GWnqOPbo72iC94X4tqk0ZCWk3KIfZkp/bWELI+8sy7NSOgQKC7flTEOqyaeKvs6HO2IaXr22lpxl6N47enszihd/uGkmooMJ4czQadSnXYqVeXS9nSXZm5hzZHo/v/2fuLTPVK0XBsi/flxfsHta3eAy0btv/4UO3pbsueqiOV4LBqAg4PNL0SD5TdP8l7eeClcrA8Z0IeZjNZNKep5YI16uspjw10xGLRxPkB76uJPaMT2ZMuIjAKEEul5J4af7E5owY9HgT4QGfpaG1SAkA78RerJTtMtPYpXuFxUNsPg2+LsUy0NKRMTWRGyyEvCKiTMhfMjUd3hi+cio5Ep3TvpbxbpezlUvKM5wgjZU4/s7Um5BwUz+7e4n1/ENgvP1jLw9q+dmIiVkeU0ybLUstKQ1aN0rEPfmd1Ny+IYrR74G4lPwFjBnj+Q7kqDahjLqR33bNLPiOGgkb6Fc/LfeHM3M5xM1LNJ6m2wcjOez/a6HnPtbHYQ5N7PU+CFI08/GqNPWiRdp1s9M/tdhWFlusxHI16IFb+nXN44Nx+uUB3IMb/aL8yH4cMoAY51DtZCqFuWsxDcKpdHO08IspJZfLfacvdQ98ABvf1y3Klrd01Q9TmzMGj713Y4tyHzqEtNpIZ/5+aAc6Wnun3IuPje595kZQ1V0fYPnCIhxtUINx40u/lQQxcfmC6kkfdcaiFVguhTjkVdU8iPvIRcdP934vpiQtDj1Zfae1ILK/qJld1/i1SZnKwcKjdvguZaYnsLO1671FP/NAiaeVz4XbPiEDnYOj19tpREjo+KWF/wdF09foXtbuCAJcHZ7cgXuyJcJ1b/06p5OOa3UKr4m9oH0p4QzZeiXZfO3taTfQpz9mniqbA5tI51TwydGWP+97rY6Pz2WsnPeWENfsv9Ycmv+U5vWvEUr982ONBqJboYFB+mmn0D+42VXXbuDrZjwPXXzg8CGJnV/d68bSSrui6LKN/cgJtHIWpkBN5OfVhbCByQDUN0/hZFaxob/5+5enXog85h6gNJe2jg/rW6l5VoPPA6Hk1+UvP+DqkucOJKU+HLtU6OKfqL5AMY3UkLLt+Wq2NqLZH0a596D0liqPbUujqOPmEjlfqwVuQhwRajVHRUx+I0sA9c/OTafNpYNeWQWvf4PhuJadEj7BWpEKBDaUdr9xnnnTK0cDXcvmAdi6ceM7jLwKDoSuFJ8XqgGlButqvDxAPsTpC55lB+SbD1VoK9xJK9TwExG2nBKH7gaJ1vSRLabOCthyEgndSP5BioyNq5ZoZOrSGwkAA3/py8FzBVJQLE5usRkpqTezMjm/tMJ5zp8CptoED+SFVfrl6slt6yuqg/lRb1cyAgDSXmIyQadFVERBYXK92lmE5NNgXYWXtCrXVPknZ/mJQjGZmB4v29VgtISgwDKaSnn5MikKjnh4yokcfeKyFZwWule8tBZNps2A8emAAT1AAX2dpYvLFIeXdli77bNPrpYlJxaxUnYyvddtEQq6cuLvdHfAaKVvOD41t8X4I0qj7SQnygPcLstviOJZz7QDnGgprczmHBz4wmJ0oh3uuey7mbjGBrAX6/tS+QHQ0k59UhvmpL//bXZeFkdFYdvZ0vPDUe2bq5Xv7rOwR7M9cq5z/tllpO2OfT2rzgTNDyRPJn1WH17YtqFXOHf/KFvfQ2mh2Vkuef5fyfgjiPT4p8Rw+0ZxHllFga92FJ78IjKhnd6nGTLFeFhXF4lMneTH6o/wO5Yl16bYTD++MDoYj5Z29+f1Pfv2J137wj1cGYPLaynaUM9eQXRned3Sjj4I2gwazc7kTX0knP6TciKLz9OwjFdO8+3mnv9e3ISbkZPPIoWrLL7VuItpFESQ+EfHYSTBcrWjOAgHz4Hd4ADYPc/Hs+DllZrF4A514mZHES48YF48/clFQ8qOxWCyT7ZN2ffbYvW9e//l958Oj0Uw2E41mdu9Pm8cf3qMOsDjKaAtfvva7+94++AS8g6/nRYGeYG530lAkd2IMSPs75anhB2Nuw68PHFAPH4Iuj0QUn4BQ/8NKwo1Rln0QLB44tOiX5QRevBpPjD2bvCEPM2/9KyN1XfqyYgxPXh9ILxwRY+WoJEaCBxfef+y1Y/cNa5EowiEqnbt6Qjnxk65K9vBltkvokEb6kvPKL549jjYmQTaCbsuWQ7mCOSl+6CQhbbG54N0Lr/7qnmqZs6M/OTYOs5S6NhqimxDtd+OGZRaCYb08wP/jQ36F94tX5cL3XkrN3Mg8zFz8gO0ULv11ZcexA5OX0/P/IUazo9GOyP58+uC+6y/+5bC5cxbSEO2RVHzZ74eU8OvhsUy53Cdq4wVFSSpCK27Op32d4ZIqmxfue/qoYw46Y8Gj95r5B79+0vEXrQfiySPqdrGdbfQP8zaQw8MyHOx6BMugKx14eICGQuovFCpG0eVBWc4DHRD3fS1hPH6v+a5xfEwShYjIdPeq6Ud2Kt1fTJtj0Ug0EunMzBlPDCnKscn5V6/EOsSoP1YeP3H9J+njd53qiEjdgW5BKgXHvmEu7HhhfJN1+plsNhgqTCq//fyLeDEZ/Ld57vD7vzs7N3WJ2ISPL5sHpgYF20C4yaaHB5R5du4yFTNVvKF9KP7fy4wodX1t3HjlWeNyYV6+LHRHOkVRKO04c8ro/EI6PyZKETHaLf7YeOGnivKbZyuHgz2xqBiRBuPHzC9OP7n+jdFwdDAevCJuU498QzH1D94bEPDQNsxNqImCOXXk84esdSI+sC0kj5+/tl0/XLf4p9E/2qZUi7DMNLBWKYpxkgtMA044YYTHC36h831DSRX/gN55ng0E9v1tfuj5Heb5qWF1oFWM9vhbt0oHf9mtJDsrySOjUVGUTjKPGKKZVh7/jrEQjcROdV/u7kyk3/p2Oi9drGQykBcx0gETGcOY/82zY6EoCjli0XI8Uagc2dZ2lgV4NU/rM+dyevmnD+qhrR//x3HH6w/xwNXywKNl4BALXrqKs8qlG+Gw9Pb/s3d+sW0c+R2PnSLA3UMhiUqKQ3GFyeW5uAANrN01EzuwEXNHo1CuhCIWRYsGBdgcjbUyKOCcyJJFmA+Jba1Ne9DE1FqUQaHnhPpDgXpoLJMWz4uiF6AGTo3as0iLMqiXWuaYGw/QeyqKoO4s7fN/KWn7cFdEP8GQtFrJEucz39/399vZ2ctcDIJvDE5+HqF3jPIEn9sS2Cwooc5FEKWhoV9dy7cjGcaEEDscZfSrv46WC/w7AARghvsJMlC4oaVRHCKeaEYjGqH049ZVfxzqiRDSExMReuvMJVsa7amTal6pc0WM8Rkw+QXre2pRxKb6hg2F+N/E5pf4h7o1eBD5QYsHV+e5G+vx8O2NjwUF7KlPzdzN0g8j5sQhkf8wmw303DaT93q85Nw9BItIkiHubCXH4cl3SK6PywHmOaWTakTTfknNDtzINQS4ugwajWgn/5JldKiHuAlN5LLU1IbqfN7Acjs/pTRjRiL5zl/SqfHqquBXeKHRUHOpAz3czqKmZqPY+B+E7UV9eNSSqqv9/YKohziI1QWUvOwUXDNU40A8WLP/8B9/LwSBu37iwFyEfdBZntgn2GtsSm19861jFd/yMmHlmF10Ahnu6Z3UzjSeb9VyHQUZIlkCFymLdlcuD7A+XqECBcnLEUbC2pndJLcIEyoCwDMR0U5NRu2jSf2A1+8NJDoiEZOOfmAGvID/MVbVWQfx6tveRaW6Q9qmh49wqN2g4vuETRS/Nw/WQYsHGDY4D+ee5uEZO7HwnxcgBsqrvomMcXXPTC51DWypqwMN9Y0zn/omjTghmeSeWhtwA/dSTiPZzBhjU3E++jJQWjLUpFfa9tNZ1TqwaHcZ4W+KQ6f+ghhtSFEx96GjjODJG+/tNb+Y6CrEWjCeMUwtfNlM5vPJwMEQ2irBpWOn/3R8um/Lw7+xpvoch1c2OpjfIzZb+75I4kt5qH2Gh+oNe44qD1nN8pPP54sbj6H4r32KJLttoVHDuKscyE0cs75Vdks7fIVORlRSnksEN9t57pFnPJpGVvcSeh0iUZCABBmh7F+n9psVmcuFHNzmSq3Q0pe5PyPm+D6ZqwNQeoyhn5rkg/fJtQAvWj3FeONclpGDhjee9ya9vtSyN30rdmbv580+HXHCBPHhxv21NRsC8d2xLg/Vd094EC0euDX00HPW0D/Pg0Yf54ujDZK8R3AtZzITqKmcOiYCe+1mOeYa7J8zqM4yZj64SbBLMhiJ0Eo09zphq1KDvc4uSDhAKVm8t5+VlSJAwCHGejoZvUaamHnigixh4HJvN8xL2vKHb5GKWkCueBHDwaxW2bbkLS4nS15/Rz5QmDp8ugvuTKb6/N6UN12AMOYKivbq9gV/6Bf8jzw2S9Ka+eI5HvhEq6vqgyeiWWLwPA8k+/jDT2QkKfLP9Y9WW6/szaTmMBJlESpyZuYX3bTNzJjJoChsEWygldG20907CatcsNfWcDcTKmbpufLpbsbG3a9KzrpN7tYwpQZpMtl1uUGWXJLSFcmwAfPKW2QIARXrPKsMjkWHfttbKR4olkqBDnU43tF5OuxrTC4n08VUypvypZPL/X1t1joc6wGzG3lj7aiTwBo4OKrLKqs8iA/9g8K/wu2G0BLOzt+Yf8FPPu5JLMyfbClILtCkDp4dO9Ma7u/DQUlWPIoUePtfus0Yy7Hxgw6x1mZ3vFumqd9MNBFmjis1fPpKnlFGI9qZ95kxHnRYa7qVprCZZVoLYxVebihQCbZM3o9o7N7uKGuDGFsWE795l51sqpSmUbyYjxcToWmTaWTrnD8d8Hb4vPl8R6m07L2PgFJtaW+IxNqxuTrKa/BQ92T1gxWPznR6stWRf6QPN14oLxbmP2nu2OYEPcmB07f6es3BPgQaHBIMyhdeXxxgQWZG7hWUBoEbiJ0pRkeP7yQGSyuO2ppaCawY0e3RO7vNSBKJkkORwM4M01az0DRIMOiwyfDQzukMo7PHeZJpQ9y3ujAIrZS1f96dKqz0d2DsjydGtQlDI46Uf7Y0HBsN5IN5b6ldnfb700UVI573/tCv+h9vbJbX4MHxIg8PM4sgtXwz/xQP2gs8zH97sim5TZCbU/2n/c23c5nZmKoIQP6tvPj2NGHHImGjMogUxe4A2/2M/Ky/h/NwHNUINTWC84DBLpH7vTkjzT1pnQjERi9lJkVmb3QRSXaH2PDzMGPsjtdFyIeyJCCnInaxbHTo9eT4+/d4/lD5m7cxqx0/5PWX1VA+FUgEUSigJ1YK+VJ+2J8MeNsxVB6u4dy0scHZs/FyHp4sj/r9zbyK9TzWRzw0Vo3jQjVfvIQGnkjuNPUHFckzWPEle44wM7OIMR/doDN/e4Bl7k4axmwfktySjD050ziQ8RBG78qiIG6S6sf6mTY00WmwE9xOSqK8ZVfKoBr9jPnY4qIs2ux2Z2+OJ48TuyiruLh5kBUZh1nZ3NU3NXZHxokCBAgGR7SPLvsHIzqOlwIJ73ueRNdi00fNJV0t5fOB5X5fChQkscaqQavbjWz0Mh/FZll8KQ+O53jg/kF4dKakTn4XD79u6lcAgJnxkbnUXi3cf5PbB86UPLocZonLkwa93hGUgaxgjxGmpKOeMLaKHHZHrQzHwkwLhI+w8iCEQKx1ii3cbhD6BTXoOBC4JbTLR7hA0PtOLhsggWwyDm67uMSYPDcxdkqBsARl4ESt86eP9lwcGMehRFLvQolCAsHrnqQeT+RLobw37/d2QF8MBrkmWetoNnB4FGvUF46neRAeXb54FFJosorDmv3JBw/+oamDmz+1Lz9zN7WT5TJtPDdIIsDDo/fTvX83yWglHQTQaiewrKGtSowZlYLD7lSc4GfMIOFoa5mV44oIJAhAhJtDrY0aZj+QaixmDhv8yBcoolUOepAgIbHuIq9TDp0oNUXdEEABIidu0siXriZjHHjUkg5xXsdqwSsN8nSSKMUTw+m0mvIup33DBy5UuxMbvapHsVkS1+Wh9jEPj0+Ueqrdh3V5OFwAMlDbptlg/08Yy0xxtyBJEHVN31kZuJtlc+E0AGgH8ODZrt5ZFuOGINouWRe0pNcGNYOdfXfVKBcht4sxqBzIsfCtz1mE9e+T7Q6B//+RHDt3JRbRkos2UWpQHMJMeOCbLwe9F3+jgAabXVJRcNdt7fxPj++/5lKBWlRjHpXjmT94qxDzxAtxFcd1OFz0BwLNrL8dbNkoQR+HbU15eJ6Hx9zIPQ/lYc3rWfML/9iD+OTHU6lcNvMGn/zHg1a+ACCUurafnRkxA+F2XiYCWZWObb80Rds1Qs/qSK5ewPL5CZ1tinKIXNh1gSeVToNk05+tUK2vHSiKQ3L6racynQdUmyvIiuKW6hwj0Sz9ctp3iwQVQRJF/pMhZffrr0/ekwHmv0phRykWx5fea0piVY9hJwfRU8Tqcqk/4J04EVNqNmzlo6gTxLVZqH26vnh8HteHhQfz6/Dw7cLvmvlwK2o4aTD9dWLQ+4dk62oEDKVyM5Ur75j9po64gAAVhMfMHNU17iELoeWgKMh4bJSQ5C7CMgEAXTEAxDGTaqt/+w5hqxgBRVKco8w07nlljZA2zgM/Q+5lYfpvK/5msg84RbtddG6VKTtrSw2csjQGOIDnVgHDw+6daQw4lzarkcF/Q6jqPfpw4XC4TdjoZT+M7+Kh7oV08d08zC/8uhlxRfBMzGQixZ18Mq8G+cwXJdDoCxtfFt4xabmkI+4XFThZvrdCFappQ9ZYy1xDBigdnP0Rd5glBHsKuu7uNWeYdvR9QldjAClBBXq4PtwNAfrNjX0uYIHXfElL0I9bUwlyRXZKUp3bpSj72fktvuxZqOtAlRSwCNVY19U3JB1IdlsDsDps0M1lBOser9efyrs3ehLVqBNeYijtjqflwfFU86Haj7J4eLAuD191wc+cIDE9fXVmDvKhPWtdmwJQaUyFjTtePrRD/oIl6giu5I7NaNB6kGsauCXLVDBKbp19jR8IcPMA5ILS2zdN2Z391Bhq558jxeU0mMHuK1lKjgGLBwke6R+KXO1O5XnVKiv8HCdSlrSTm3zZIaSHkEcA6OYbOkDp+j0uBWyp3WKzyzV2Z4MiIxCSirz4COQXrctdG5e8BOklPNSux4MgH66Kw7o86Dsvy2B4ovNaeGgr14ezfNCkkK54piemy5Uxxswpy3ACqDeZ13tpgVKNnbAcBYAt0z28wpA1RgcXeT7hI9YU4IjcWaK8MOUaYjGSzUXoyU37Ne0qd6BYAYorFTWi3ZVhsipb3QcFjrpHtK92zPqivK7AWMJqXI255NSPPgcCbrBZF+a2WE8kltyyB4VwMe+dDsS2bdr0g8fhMQ/PlBkv40F8wsMRy03yf2vy8ODf0diH3C4MQzPndxJmRq3eEp/aHiM9SK+MMMrSRQSLQYAPn7j3rnZ5P9XMND+FM7LDA0mENGqMzbXBoMwtw9sZRujJEapF03z4FY8CBnIRdt45oGn3kY6tlZhBw0fJ3tm8dop/okCoN6K/uqEF0r6vY5wHpOtyqKMFwfxrszdfBUEbaHAIW+yC/VU3CkIVJwqj/lR70/jGLcKPeRDW4UF4Xh96q0ur19OH391md7h/PHIwPYBf5eLOeNbnxk8OJZODA8e6+XzviyNUBBhelO/2mkf5VI8GFjkPutToiVV+TLoII7NeD7cdGGw3TFr6pNviAQNPENUr+zkPUTXLeYDYWiEDDxZvU3Ik5dVOQaAijBFWhXPapy3TWjvGpQIObkVdO4L6KEgtOrnfwA0OyS6DLbIbbnPJaDQWyvuNRu2Dmo1bvASxSsIzrvLprWJexsOYxcPa/Sj+RcckuRcDwe62a/tPCAZlZrsoX0AumJjKZIzVdwlh5UAhiKCuLm/ntcLlJW4gOtq5iOhyS/jW0NtGFyFkLoCtWhG0GIwGj3YzLdrBiYnxCnQpbJAy5PpwiosDFwi451An0w7nSloUQa4QAOEeoM3f9Mxo7SEcT+g8Z/ghVkdjg9YiXViQOKxIEvaIUKl3o5ZEcXTGNKcn3BvPa+E8VEdZdDy5R+u7eBix7tRbux+1cIPzYFa4lC+VSeT2zSy3CwFdQcpW3DXHyvTaj3mlSNKzfBzR8IGLOcM8OqJpbDyuID6acG6MmI0eorFUIWatsAYeNpNJH20lmpbm1sBKGSO5HBsCHKKzOpcCHod6KNFaoqVzX3M6QjqMveFrPEMve73njqlxHcpqAfd5sNocHOSahGNIANKf6EjaIwDZhdAOT0foespcYf0N//cX9P95CI6XxFM41DkE4Xn/MLJQtZPr8FC7MtsvJ1ATWYm2fjigEVZsR06wNeY5YMyxyptcDaKlEyq3j4lb5XCG/k03PzLuQVaDCg4bWvQI4AcG22MQWjwYkbnIybc0TZvCkAuCAnpzfTPR4JKlD5Y6YBRbYozGz3rPfR0vQk4Adnk9leg+kKL31XgRIxjXvTqOH/lscKpqQBsEgVe3KOjkhsUTa1QDo3d387QWFX/o8rAGDy/pPzxpP1R5eLBOv3p+QZhua4Q4eIRsJ5HjWUrZFOIDWR9TWq/mskNNfLDJFEYFAOEwKc+t/MLiYdazuFXCEOy+bt6miPLJ3wEVnu3BLoMN7T3955yH+1jhEMmg15ij7FPOw1CcC4gnDnEkTLXC0AFNuxmH8bgue0uegX9alPq/OY/VhF7EoUIAJxJxUP68HseLiigDtwjABaA4nDbgSuu3WVZjkTvSD36fU+Fhqng26hxPcBDEZxc/iJK8NL8uDw++XfCUD75ZDBT/m7zz/W0iW+94adFWt6+WH3ervrjSTcKlui+2Wog3t6zEahebYQ0KbzZjx5NOtJDxSSbIvLkYB3vjFy3gQ2yO7t3YA2M6qC1MnEzWUdUSbBzwq66wtG4iXTID49yJ2rskPmTC/AWR0nNMQgKE7Yu+4FaxFCkZZiYR5zPP8/0+z5lzbmCzjkc6IcK3GUZo9YB057nR8iUaH5wwkMnDD/rj9di1i1+QIyViDVs9guvsA+cGzhMeHN5zpGkvsY9le/HTK39LeFggw09f6zuLnt2EX/1+CiKTAMRIjDA35eDZZATCESAKVjATVoCDnvZrqauKKcuKYABWnm370pW79Z7VA3a1CMAluj/ztIEDO0iEMFu6nkxAZ/zu/m1flmpp3WIy7cus0fzmZJgGDzM/ykO12l86fYyXtK7ihTtF3xMy+gFFIJkfBGPRGHz+U1p+KoH0IeAJHAtd6hu8R+PDIBDkVjd4b9yOIywRsYiIAz2wj4jMsv1g9LtPCQ9L5C4kYwhn0JW/wf/cNwaRj8YdyQNuxhAcRheWU5NAONWmBAMZGaLFDyN2WDbJR/lqvy79ducjT9cI8J5qO7ATiGmB6fHKxM4K7veEfc9/dRQ5U0lc+Ojn27v5vXV5ck1WNm+oybXT6DRKV+caD6tb00AOZ0tGTZf1/iWUxB1ksB0tmmaALDOj8DauZ2l8iHZ4+omZzP6uPr8wSR/+Sfm0y93s9Tx2Ihh/Qxwo0mapV2DScaeEhj4lEaN+hPG4vBLTm1w4iX84W4BJH6ASFIAur4NvOedGU/cOfym1s7oUEjG880EUXzJNQzH1zz+upU/tNIdv5C1RCrkPA4+RFkFb2pPpcbfuYaxoXxctow44w9vccbZs0e9uelGGatq9a/fuV3loWeOhulLdgofVNR4qKS5nZjO1gJ6EMPnrPohgJAokhpE8E+Xz+ME1ykOpwyO7QmLtVrmYWGg8/HzaIzR/ALrtpANvj2LCg+9gmwAYYaLsXA5T/WAPM24iU0EvGTv8Q0OEkuebiE6gHrb7b8XOfZu62h5lNdaShfcwuvgLHQ7xsk8x2g3uWsBglN/eGMuYVkhU5I/AmAKkNLmcNmL1buhgx7l61k5s8/e4mrcqV6/x0JhV+woP9O3NTTysbMXD6gzhoSRm9Ey0luxEi99cJzwURkTD45L0295gqqMRH5YMnc5BsOSyA4d6SXqos8Mel8CA0NIEcp5RHtTAkd0etxfEy8Uf1D+n65URZFwZQTxOV7P7BxpURiTm9H5yUa4Ltf9LfOw+vNLOK6bRZsz+pBNd+aAdf89nfNajnbOZOVXPWKfmTRIfPF5DOcIokssAPXuIIJEMzqE8EN2Liv/0rkfkj46HpvX3/BvfbOaBBhPCw9r0qK0TRuPotWeHOMvS2KFfXuI6BuiTfT4dlESFPXdsDo5wDT2psm4XEPPZqQsDQ9fIObaa9rQCIPyp+glGd0i+gGFTaHV7vGLOGVisExEKk3nJzYRMcHyaxIeLlIdBBaSJBwHzU075v7pzy3DogwuK7NsZMMS/riTaxIHpQMYwhH230x5RFs3hx15JJClGkERjb8iblgCREO0gk7HLzoSDiOVEl7ezeljPF62vAdF48WJttaCWzfqB8sC81A9b8PBinsy189ccv5lV0cF71+9QHpxCWszIMluYJz6yRh/1TIkLACUfmAvP+ofOUmRUmRYbBU/tLxEauU55kCWRqtCjjmOj43QhgAUggPa80E8cC3xKL1o4KimSpzWUdRz4h8d+nPqu7QL1m5bCn6gkfqkUp8cUQ2LAsOAmHGUMPwWAoavTMHsJCAFiRjsOifLPNITitlMv2g7+bFsD8YKHli1CxK6mV9qb68gQHkarK6tbALGyFh5Wp1MnbLs84s1o8PMoXXEUonosIAWBrzYxTnjgiDSEsck8a+l8R/+NGnx4kvIQNYQ2wIjd9V8VY8+ekCORgOBpJab0Y7qq5XEK0ZIogeAsqOErc/gPfQ0HKmV4RpatKQdeHvdj+D1zLyQyrGWCG3DI1e9MD1oBAMBn3tDY8ajSWgsoQCeiwZNud83KIVrOMgCoHSPZAuGy4yTj+DfbnIc38sWuZtfBzTy80u9uITx8vR4etrCctHD5cPksXIpIhywWj+DouUa+KAVARraUXphDCZ3yUPDzplLjO37R70BaoYKJ3JjgJc9rd+HYqHSXisWIobzvIkPWRUaL8pCiw+/JSILx5D88E3//BRWhpiCKUtCoEXPAdkXs1LR1z8p4FCuj3MBDR46SfGGF0kQjCHuUoBX4PKsQCUnuSZwNM0xrFyZDYpLMOoW1dZcx+mrH+z9/16PyLnnYYsL92lZ6a9OrX2lgtFIeXuaLldd4mJmhQrOSumFLOdNrsUUIAw+KyxWYnMibGVOxRDh/IeGnq8qVarxpWbLv08krnUs09KMSb5oiL3XlHRg4Rx/+SVPeR6K7mENnJqZpOxOGeVMKSWL/+GVj4BK9aMgyaDczVMNOIpu145XvjbwisoGgBebgkMcVr+St0AgjAeFPgj07A82htNDj2g9ciiRLbjfIgNvE9chmO67TJbhJjLhT/Lf3t/PunvQd+9erD7vXO1q7mzb1s9ZPa/Xer85Ut9YP9Aj9erxAd9KT2YEcdJ5pX1RSQ+NqXlRCfAzhdJIuN1Spc7wiWyY76lx8MjlHCamrsiVlrDliUvFtmi8emGKQl3VrHB1OwuFvKQ+qydbyShYhMnrjNKgE0iFZTodqZQSXgvXRCnrU7jnMRscN9zGIQp6BymSGNRXJYPak9+57tNfweCXgZlpCvoDhItmp7TTxNLL3aL0X2sRjIPyv3cnBj/7v/63/bz9b8EAw2P0CieamjdcvNqbbM/er1bfoyZkGD9P3u+4e1y9IClfMJYrPIySwD0VNhbcAF0OlMMpSHpywKYuyqcSdhBN9wUM+y4s657cdZ/nXVFEscVae7hPfDQ9N46++TcFKSbXM/pI+SBsgsSk665I3aqaZYdkywg+DYZyaHlH6uVxeEqxeuBTKD1QnlYAlhgRlz+zh0Kl2nm8HUhockUXJS6SEuL9NcAntIoMnJhxsxyFeHHCip3Zt2xrljjfr1U1rlUmaLJo2Xs96SU0rs1xdXf2RAuXqd7+fe3S865mV4QcS9tzViQGYSqiBUJ4FXKFYdpIyGciKnSfuQVKsUYQTjr9CS9gFRTdDY13ETcCLX5Aj9VzYpxCt2AW7IDz1NeGhripSMMzli4ssfj5ObpPUeNY0QVZ1MH54VCP3DYRzku45EOQKsM76nqSirKFm5J4MMHVVAPsDIeYbr5wmmemQyTNuMWi4GaEdYPQTEnKmyiRG2PXFbZww3tSTDSm5zsOu13g4SM4nPMysbNQfNpahXMNj9crN3h6RMRXDXbs7n13ohLCaVPnQ7MdAS44716CP6sk6a8oy0M1REjy6Gw7UsQ1ZFm8F6XJhT/sqBKKcalmKznPkAOy4TyEKhyxd5fWB/56HizepAx3UectK79V6IUgEH+Oh+6raSjyq5O+pFROm5wkMc4av3exgWCWfN3nRGN43qzCyL88cP5hu73EJgRajZ6c7B5sxQrZz9aZTry8d2cY8vDHfvmEsdm+8jbPOw8EXSrOV6ofqpo7WRpBYWWtvXpnvB7kwCBl/ZqhPJtVRyoNmil/+FfAPOo55faTBgxaQgWhZEwhf/pAqTDQVtXg5ODLbV8L46nUy2MmSrisKAWA0OgBH7sNUBYUzdCdgDl+5DxepxECDrMWb/I5aGzxV0PsJD6XsXt70a9ZXn2AbWJ2wzrMjTODRjpDJcnwuLAtuydUuSbrZm/akvXuOeIWenr2fd8XuwjgqlIdulB07ttSzXducO97sX7yNh+Z1q0F4WN2Sh/V88bB4rVwoB/T8/vIUvng0TiuLWmxwhBG4HCrX5y/QRauTuTFZsUylGzmXftpwHE6UtUQpa/T1IniF1qNQ1DIlPaD7HXJ+RxFWq8Qt8CxrsRFYIfEB055X1GLHQvtyNfyoYPXjaqWUy7Iay3KP5nCSUzvJb9Z01Qq4RCvH1zSTAR6pLRMQa2HWEA4dCfo+fMS4Q6fPjKOkVsvFsVN2yG0Xht/1wPyR8bBr0+YXza/zsEwiwczLdPEaDzOrK5VU19TS4/NcQcdPOy8ebgytFlctNsNqDkT4fJEMZyIXMBWPZXWOwcSHHMkFhAdel7453HEyOw4v9VFFEeV5iTWtLufq0NyFZVipooimW5FQbRwiuHiWhpmwxnM+PRPFsJaw+PupyvMCq2oWq6qlk9/XxvpwIq/pvF5j82zYN8cJIYER3IfcrUAUM7PeI/0aa8RO14SJKWTb4wMY2cS6OFzh2XZNGC0t6+s/vNQRTU0be6u9hYfqBg+bClErawXrSmqi+/wYCPjZ7oXRy8G+Bg8aS/d9H2cRhudphQqpxG+6Rb1zBKNgFMLv++wwz0qnP9bnkyJc6KMhJMryOsubvfDfM8ee41SV8BDOqBqbK9NNePqoLI2qLCurNa6Iy5dqxLiklqJcjmSUHDf5F0mBPZtChAeWVRVO0BV/7stDaYnxHNl3oG3PPrcHeASvKqsPNGNipJyrP05ihHNRB+cXap+964F5VzzsE97gYdf/wkNqrS79anXyxXoQMyskPuCb8dsZ2ar5Tjh4SH/Bg2opvGnVcuTxW6Q8JMO8qADF7E5ohA3yc6cdZU0JZPwYWvDeGcoDjfvkqixavN77jC5ShOxwMMyqJrUW/9mHieMoaCpHR5sQMhTh0HK1HtVUVVNz/tiHD08Hb5K8lGc5bhAED/Rb0blbQK4VCudDgYzMiQcbc/UPmkB2t1+ImPmfobBTtjWH/NGf/OZdD8y7+by/wcPm5kXz5vrk5vmTLa0tre2p6tsnSNF/qBRvlge5C2Ju7Fp5aNy8ScVBJK+Ilvm4VISoePlFBVulM9n00TvEXOi0IkF5kDOarwgdePcE5UHlicI0dQ47OH73W/Jrn3Maq3L67CiCJKXQi0p0/3hWV+nke9GcWq4mc+SApnaFyyeSJnuT5CWeZ3XNynzUa/lzPi6aGy9EtWhgv832hIDiCUlpxs14Y0UIQ7HBuIGws4Tt7RsfWt5cL+hHeKA/0Xyx+qM8lKcKWmwRcFwOL8Qn+xrl6bAl63qxTpenfkpLzyhS0gKWwk1cyTlneKof7DCRj1kuHYEYPTsBU6lplSQLxbI4zMHU4t/BVPVBjW4fH/zdSZJ1Hp5t8BDleF1l/WWMhhRfnEAUifrZMb8/Eo8lOZbEB6IweKIpNY9fqanuk2VbkkwdgI+NWJiVQbu/MJsVABMSlytDVqwYLuO6Hw2Xt2mNckdLy3qeOPg2HtbtZtNaM6N9+cfjw0qlvDRul5/JnNZtI5igfSe4EOXNkF6fI88+fNrQD7lJjoQD/0Sijo/zDX9RssgBPTPlFCeHCA+V6TDLyzrRHUWiLxY7CQ+opKocF7zVt/QFRERPpmAhQgQlyRmEh0T29iisEtMYzQdq6rjtJFhlPoVKvozBqbqqhYMRH5hH3rEQHwoofkwnWRF1i5y4Y5ehTb73iaEIcZ12cdHarjy0rs+WXK9L0Xe7dzdt1g+vlas35Ys369UNGUGcwvjS3HMyBN3GAFw42ShGa6rPa/GddBZSQz+gyGDNUnSNS/q/9pv0UUeTOm+KCjeAYHjoDOGhEiaCIgh0ziHh4Nl8igx2NKexfn+4C52FyWyjTRqLsrcO5aJxEjC8PYQZFGELYU3muERnXctfS01rvw3OBnNTai6gc7Oj8BK1JXG6QWTPKP0zKIjk9rA6DVPTY4zHUwsEuuzb73pg3hkPb64/uVF92JqHo6mZt9WrG+2LFdvJxZdcg2yUHecxvNvgIRlbMlmFiyOM8d3RBiGTrKVY2Si0/jEeWKs/NFoRcSIukmdgtVJRedM4eiDIYlSGS/OVagUWNL+mjece0ZEEjbL3/7B3/T9tXVmeB53ZX20n05FWqhRMulJ/iJRghu60GqkphDSJiGbUOBBT0LbhSwOFHzaQ53lv8n4K8Q1+udJ0QxLIEu1O4zzyXCzNNOQ5vMn7aTt5O/WSbSemQORoNQ34xi/cv6DS7DnPYGySQKodqbOCi5Dt6/euLZ/PPedzzj33nnhWP9agiXFOhzo62yiJthwXJTMjxq1W2nprvxqZv58JBoNiWp+Znxu2VNVWCRYMvZWuGkdAEczsx0ebDHXUjWcnOtvHRobf/7//tP8vmxCoqX8aD/718FDToa6Yi2esX/wF9AMlspTujAXFGDqGj/J4ECeDcjAUZ7kkO5Vwe/TWi50nLukkwZw5FAcZCGXSY8G0lgyTyFVgAjaZCgYnLnQHUW6TMPdB/OK8EQuJcwAQ2g40JJW9oeu6pocSnES6uiMAJW0GfI6xg2byphW7/gaJNE6Au6nLsfn7Ixev3pxtU/OlY4/vAxODzzKMsGgUNcQ3DY2EDoWt63X+zRp+EAJP88niSt5r8YCb9/bde+76Zj4MYavZua/JlK7H4oyRwUOuMTCCE5mR1m6ydJn0g35QbcyXPTGS4NEuujAC3ICokSZLMlrTCYc1R4A/UDvLRS5PBUPhoTAxZm24xxhI67FhOU4SxOl08aDfmD/SLQ48YJweODSIfqwuHa3Qr4jJnHa78wohnSPBkBTK/nLfzIVQYjDyIxttBaMTzbYog2agOuAhy5OfH05RlVw7+Isw2azKIY+Hp9JhCmdPlsar84l18Nh9D/TDswnlvWU8iBZRF0ISEAhCIogHMOszM71H5jVGm+mtZlc/8KlYWpct0kZv9oI3kbKpfHpUkkLdlHZFD4I2SPXHnUw6FguGYfo6fYAH24AxY5lQE0+0ReoRD7mWa5e++pk2Cfwhe/+dc7iyrkvDO80HQBGHJy/MRulca/DYvC6l58YugtKxkxj4JCySVEk0gXhQXZNBzr4HVoS+/fpUtDNfWGdTNiFQ9awCWr7n4QEB0eUm1T+bT377LeBBTbVEwvzxfEzXH4Dad/EwHTo6kjk6P3WViGRp1l3AEEUMHCRomCxm0BbYjI61jkqt/xBlg0qPW/dZk9IS+ptg4CNXVZVQMxTD9SyZsN5IA3N5yXVNTwcHFGAO7ZcfMxIZ1SQtffrH1CTz0tFxOhUEf3RY1+tnenHTl4rVuIA/cizziXXHo07S/nz8Vpi4NcgnwkR+6/sWyt8aHvzeyvXw0L2OuUjlj71vW7pqDcXSWlzJKnR/Hg+y4QQlY4z0J88jHlI0qw1k6jU2lCb0BuKBmDRz7OuJ1sYo+7wPF7NtO6rNjAbTOrs1G5mcBRVCyaQEBCMEmkH/ohfxMPj1J431o9JUCyN2/aeDSRLtCIWu9xhjssOHxXnwS4bTI5nWYPx674hmg2mwbivwUTmZsnFy7gkhEqiIyK/OhVXXyQCTdKRsM1fcWrve7b4qqIe1eHBDU135rNnn4MENW8enkmxIlLQ4X7iPmfLg5cuWY+iaKZMhcmscA1LckfTgCHDFU0l+3eX3HGZ+0xQeTU+VSzhbIyFtomsulk4uzp450EzslEtM41QLg8rPung423Oy8aVRQwN7Qds/jYwTKuuxQFrcvd9kGfkBjBEbm+vM6Frw6E+5ZYBiMEkqIpsUEKieDIMdIpFoMwGvx3JpJj29Z7NySWxCddUzynevGoyS7f5Yyr2+LjC6zvYLVz+oqdg8cyJ6TJM5ecT3gVAYUbN6UIqLBmfkuuvoUVPXJGmeqY9+lTuKBZiII+q64eDqNqGXgG8yB9hCqD3YBI7Amdea0QONmlOWPjGsQE/wAOqdoa/N2NiYmEaXpfO9L5pJRA/pmeBE9VWZpUNxGEmeaJwbCQ3cOKg82p8Ewdtk0tRZSs0HHzjVH7cpBNgoJ9xyeLZ+8+bC5PGAK97ep/BQWcBDSfpDQ3tdoKcQfnjmBu97KfVuLMEvOoYkZiwyqDQCHkAVO3L2WKhFPAUqvNldrrBEU5y4YrHzLHIKQ43EEoELhuIYNSRdQCEZNW7tOh3UgYTys6/NYtjA0aYUYAQyDBDD+APwVEnSM/qwCQhpmEU8hELajXR62NS4NIa5DGZspvPEmJ7IKhGS4/TJbTVrcRLFXSERRNHCnTDl3Dl6mTmc86XNfXRxOW64eoZ+KIpXl2zvbqgP1PT9ZV08pFLkrm5aZsQ0zRmpeSjS6E7ELI+zSS7Kdzg9/yGW0oEf35J0C03H4KkkkEXCZUMUg5znABCjg09UO6obTVJc0pM8cr73Q/RRczHTkDTDAmVPL2CiDY2fGr3fcKweETJydTrMolLLJ6OZix2t45apUbALXDN0ccAki5eYY4BncRqVEzMsysx3d4FlItTh8FfXRyzKI+9uajgAHvILGJWlVqNEPyAilkETwDNkr26Eh9TnoYzFk47F+UIXy/3MDQCZ4hTMQ9VxokODiAebEoebk4mjaMP7x5E9OrJoGprVBswuOoqxogi8lnQd8DAUnvwQ3YGsromyJuYwwnnRtTrW7c7a2tMnFEr5TB+4KM4d7VrH2FxvZhz0i8MtllUs7jCdsbOHe5fjkVnGTQ6A+Od9aZoknGsWp/Mk2sfN25Xft0S+ZzysTY/K08tCxHoFD4XjHwLFeHgOHJyF0NcG1tiKtuR6k6YrhRTOPpjpdGrhIe6kAb8vldNzn/QdAbmxm7MobMfKmgbNLiQJjXYgOYiIoqjHmkTwEJPn30EQOZouD2fFSfRQ2hW0Ms7CSOOwJCqcLMx12Xg2spSeAbskJig1LSenADPIJslxGK2HmSS/cGbJjkKz4dji66C6AJhJGIlqnLFNHIpaxQP8r54OFSjBg9e/cp6YCxUXD5furYuHe3ff/smxpms7j/SQxaqGzrg5hpPSducy52RSC5/vQ/cSLo0qk4p6V28euv8e1lWxQX5hmS7MMtvpRjx8AXiQTdNgMKfPIR6AHYpijSMpaGXaJeQAU0YIVIiYu0zHb+2bBoXgGJkZsUWMJbKnuhJ8ypxSoip5cgzFbh7ALXmEYnkFtngFPAqLuD0Sw15gNrs3t7kolHN/Gg+VvpLj7avzZ8NUVwVqejfAw1nfrtaBvT6vUAVG58DoZK+DDufi/fqGE2NBETyKc3k8AD/AuNDdE4eHLryH8AANISY1GiZ6ysHUtxQ1wR+RnclxR2WgH4CZUFE3Q1kDNIhqt4toMHJiqz4Q0h8fpofPdkRNsANiqyZqsqTwIYsqyf7AYZes0naKBgyag7s0kbMCTUU3hy0dppPjYL/Y1CbNiirCg38NHvJEwd2aVYSHavfgB/dJoKZjAzz8wffq2J+wqiEMUvnTsVhHDNx69qW3zCtUencemOg7565wqbaamqZALEd67JPjYAtSKBwzZ3E2QOgIYdBlGZoYN7Lh68nL5w8TW7WpQk3HAOMAGqehDc2OI55+IIUM8Gzbc2NUtqgliqaMG2sShEf18a92JgB1Udlp4NZQG2ZP49+tDsQSANXhA+TRhyQSXpIs8v6mDUOtxUOh5fmEb3mhswgP1e5ZYi+EB/+r77ob3srh7p1jYkeMciu7p8IdzvtSU8dQHg+/aHj4QXXtgbaBHvLZOJID1BBuUAg0+EUVLYiT1XVZktkN1Vo4hPEoylKG7JgmAQXf3kaiKqXwSjSkpEoW+AyTwWCYQB8xOTvhyM5Qi6hQII/XcEf/44EEc3JJThzl/VqwQageHGIAWi1GcpPKqcodmx0Qa/FQ7HyutRfwnouHjezFGf9ru/NV6wTftopenmmhTuimuydS8Pj8ly5GDmPKQdTrxbiwUJEepY9mVSzN5lgqFv61TZnOuCWhce0JD/KhZDrSDW+4gc6prijyQvu4Qm4xSnNNCAjzCnDJGFPwsGwG/NMxpizoFwEcFpicFpll+RL4EqwfaUJfe3jpPVzDiLrZMHDHtTDJ7dnsaCgr8z1TPRQtcPqeSq+u6V3f3wQ8VK0ML/j9vbGLV7nR9OUyURO8BweMPpyan7lnRQuC55Vf8kX0N9U/eP214M+28AgjM5i1ci+luh8xnSBkoQcAooLmT0SbHTeB5X7CTWRBBWEa8kGSlY0kkgN0ZMG9cAAK8I61eNU91yHajR4s42NAG0Rrnpy8rHBm0WjcScIdpInnTn3fwvgbaNuK8uyrqos2cxbV3yzezot46NgAD4/8OwoxX2/lvlDsgWPohVUB72vSVB/lCtmbfy2UbZeURxixVH/uc2vd+XaGGb3g4sHOwQTnXAWLP3QY7AnJtziyQcSDTdRpzIMEraDmTFNOwHNQC5ImW4YFxgYdmqEkIEChZz9EPFgUzIMhWyZ1gxecXOsDFcM4paR/67BiPM68qrBOtSbNYXVDd0m+/YZ4SH3m21EYX6jcNTYxapm3C6rYu10324BQDBVyDHxxBTPoUnQPFlwvA97Z5yRdPKQu7Kmu9Pv3NBymJLIf1YNbHdrmKhgS+4KbZmUz13/kJDvZArrBsrgZBwyZeLwHnisD8m+DJ4vooZJBXLSihmWRCNggnr8vSUS0HB9v2qSHolZVXR3wB57f/P7ScigvoB9SJ4vx4N+eufaGJfevzr3yUbkL5HBz1Vj3JBAP9n9CDwJCqHw92uXiwfa5pba93pcdOnQQkTA9d7HjRqOcpb+Pq/+isBZVtaEBBwAdcr4PRexwmncrl5otcCtpZxIYCLVw4wdhpxieAQN2BIhkZJxYrr2Bfptqzltb7AHxACKuqX8uHqpL8eDGo7o3wMMnRXgo823LzD109PdX8SB0G7tAP3y5WqvqTW0R7IV9Jl8ZFe55hVy8/0S1U4P+5UG8scfiITcSjhUJBGHHnk/nE0cUlsCwZt4pgUeqEvAeqKswGHIF11kBlQBaAHMlW5bf4o6Dp48ygA5bGCcM/JjfVAQ2b1JUUcOD5aqr6jbGQ4FOFuPh2eHq3xTjQfB1NoaN20VwKHsjexBEtNez8vsLu4w7bSDQf1oBSPl2NnAft2v+zpOvcOb1Zu709NlgLP7sxdOdvOV7P7K0W22YwWKfq902cr02LbJkBJOf8g6ro2Tdjdr4mlLM0mwlVDdxQVsxTNMxs5Z8uhvD6OjGkLfA0dxSD9B8a8jDswBRVQBEVUM74KFrfTh8+24xHsorD+qK2V/8ma86cbDkqxWShW3OAFCB1O4CQnxhPoPbNX+ev0go29HldPWQlJra64rNI2zv47T/IS54//HLMo8nIJQ1PiF52aZS+QxqntcPyDwRJIkhYJVBhWctM88biKyCgrNT0ZPHgbdsVUpy23fEw4kLgIeeDZazvgL/otCEylckxfm4qKfsB1mdkW9WXBCQg6/tziyx7+5Y6RCEj6KIh+m9yzbFI7xJ0g9B0v/lyd/hrbhCokcTjKXoW25VPI+n/BC3GVIM/AouMlI2agdMxEu54VB8p9TIfcH3Bmp3ezxbdRZXWtH5UOvgAUmG63b0Xihe33wOHj4uxkOZf/uUki0uKyFUaHqS/Huxc9e3BPzhZtEl70SPhFX7Pwo6RDjIcg8AD/+THwcEeMimN/CAObgmL0vhJZM0r+Ahpea/CifOqh+csn9/z0XKUMpmxsCv99ZteZhrW/kL4MFVDi4edvZeqCvKh3khPPj8IXnJX8zVhK50mJZUqnpnIEzUX6++rnyTXoeeP6/MW4/3VRZ9AKL87+WRPcJlQgbijKR+t6xnBKEizFn+C+QhYbs5eBj1ZipJRPmU2V6xd2fVNq+3rGqPr8pTtmOLQT7VBP+G9iJvLNwTjWuGZ14ED1U7ij+hsivxqDTL5Cch5XzJzHwnGybUU9T1I3pj3P5jQYt7PD9UHNAP0ysVMj3CR4SIpkVJAVeC53W+HK4CmNjoYTCu8DjXs95ab5Vf2F3lRjcED3IF0Cqb+BC55zfBtwEeAlVF0Yea3ht1G9oLu0Q/CELl/rav9hZ/pufvB5KflXyL17IKWdxRdM/L5HqSnC1CyLbj5kOu3l0V4T9SIslJcn61x/OSgpnZFgazMQRh0f62ukDlNn+5B8XvXggPboRj2bHdamub4H0RPPhL8PBwg2y5D0p2PwreN4260jSTlyeTpR0VWYs9KhHQv54Ok98WDeKpwpPQzxdon+flLDOy4+SMUKClQnmjOKW0OV1S5pgmYqmEqjKf+w4upLk3laF++L5/8r/t9iJ4qF5Z0qjpOPp2oObBBnj4uHQ3rHffqZrSz3xJWiiRilAet3J1xTd5fvw4HCma+oJQvl8j9JvVK34wTbWsRf6t6C5QA9Wg7yoqA3v8vnJv2bJdQKuDPoj7sHLlVntOgx8wL/eadTCxspJRM3a/emP98KditgAigbFLRVDx4GTpdyh73eovmbhC+UBysby4o0KUGX9/dZi/m3ZTYlfpA/4LXo93+RIPPAd7gwgQlj+9oCM28farjZt3ffVQsp+vJt1eHajdAA/fflLCHgEQwg5PyYwsr12Ttup5efzj4itAqF3imYLwkfoJPzT4wqqVESosS6TJxZJjXNw4gtc1CZ68jVjVMJ4V/rClG9Zvgm8Df7MID7WZ9kCgdgN78e0H3/kn95QvVZbcJAg9ubdLejwvm3yxSMDeK3HF4l9uSfev3ryuwaivex4eCqmVPn9tK8ar5++t627a33kDpCB4qtf0eLZxT0ltde/2uPNu0WvPG00mj/i3pvtfv3ldwdcFnlrl/N/2zuA1jiqO4/OSoF6Emd0ePWx28gckO49cDc7rwB6KVLBYRAh0M7oq9SKlpcRLL8GGxFK6GKEoFFq3QTx58aAgopGOWbU29WDxINKCJV4EK126vt+b2ZnZTTq1TdYxb78fWgKhpI/up7/f7715v98IkdprKh8OS2v4S9k+3HnmoT8jZvZ/rqZxuS/Hj77V80SaPXbt5O3nGAqB3aebMdIVpVA6iJ5qUvqw4doOb36emS8ewQe5Ke3/juX0/Qnj+ny6CmGFldXfZkp5/9vpiawpuVRAJHlDhLjp+GAVuO+WpQ/vZ/pwb2rnCyL6nzHZvYecFq8emcRGYUDIEMF5JEEYLLo+JPXDeFH6UHG85rOZ+eLKrvjAWG+U2ZJSzBGGfePgkBGb2WkRuEu/0+2dhbL0wXG8E09n+nD3UXrezAd/Y8vJIp0vmKgnB4Q6zLWoqyqWIowPKXp9uI8Q9x7ah3/zv5xtOWk2GQ4a/xvIiTh5bPWh+VRm/fBXCZ+SflBrVs/uQvlQc8iHJzLzxbfwQT/Cas4qJKeTzni5PEG1pjf/eGZ8+AY6aIuV9PORGOoitjf/ZFQ/tLY14ivcOtIW1p1+H/qgEog3PxbHhxZ8GC6sQmrHGZ5jes19mfsL+KAz5SRCRPGherGY+YATPuhMeiBAeFOi2rSiB1rtbQuIL1FPagxLHVDa6olX9cTU8n1u1C4GNB4GPmhM2gdHuC7li6k/snxAfNCadL5QB9jVY1MfZ9y4b53Ke8VgcLBuAWGr+oGr+sH9JaPDGz7oDUsdR0X1ZO2NLB9+Rb7QmjA6VJL95ryf9mHLrvMD+KA1NjV4q1v34XlU9ZPziQ/toH/P2f4u7wWDwcEoPsTTxZQPBz59/vXtfOh+HfqZv5pTTAYOqq/7b176KdZhmwJiNu8Fg0Fixv1bkQ9zp08e76QCRD8zea8YDJRi0sYZ+rC0uZn40IEPQ0bXh0rZVlev98c+dPtyKEbEXrQnd/5Xgv8vcX9npcxrdB9mbuHWQquTzhhdH9RtiDvYbuoNi/OFuk7r0JuM0j50Aroo1YnevBncRU+E5qT6Oal989VgMVhONhiddqsV+hDWEn/nvVwwYHi0uRC+8uHlIFhcTqqHTrvdkYlC7jxblC9afyJfaM6+0Adb1AS9DuU1erCdzhcyQpAd4V3K1hfIF5ozplp8SQWKD+JoEKz1+hDGinboxkHEB80ZiQZDVNT4akf6cOXy7WD90tLm6tri77fW109/dvTrDz+62Gg0Vq5dQEel9ojuJKk6jYd5Ze3tEWuMzxqGbZQ2TLNkjU5aNGAyHNqFUdC6Y/LYhyMO5+8uTanWakaj3NT0LmrFtyxmMcZME/FBd9iEjAoVerOS55IPp+hCPesO7osmzkfjGUxM8NGfgqseXtD1Se6In8/gMx9uWPQwS40JES+U0HAz5DiumlvsctcR/BCmcAw7E+oEgruCfPge2WLYiXwQvvRBXMUUryGHRT54DfLhrIG5TcMNK4ZDKec25P5iegYyDDuj4fWHF5uuy6dn8l4NyBumTij5e4ddzqev5r0akDfhpFI1xNidvpD3akDuFKIJ+IILcTDvxYDcUa9EELwmhfCO5b0YkDumOn7wGsIV1bN5Lwbkj01PLrwV8gH5AhhFudMU3Jf5wj+z858G9jqjqpSU9YOoj+/8p4G9zhhtNWm/6Z+v7Pyngb1OUXg3KDp43jnEB2AURP3GhvBrnv8jHl8Aw+B1KUO95lVn4QMwLNv3hSd/rezS2/PAHodTMw6vHngHtyeBwZjj1Rv16zcLDPkCGNS1V19dCH4wcVsOEAUuDh1/s4LoABTMMsdtNOOBNMgVIIYxZmBzAWIQHUAvMAIAsC1o8wcAAAAAAAAAAAAAAAAAAAAAAJAj/wApgRM34t4WVgAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_623\",\r\n id: \"623\",\r\n ProductCode: \"CNVECFPD\",\r\n ProductDescription: \"Vergola End Cap (Fitted With 2 Retainer Clips) P/Coated\",\r\n ProductIndex: \"VECCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.53\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.19\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"6.53\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_624\",\r\n id: \"624\",\r\n ProductCode: \"CNVECSPD\",\r\n ProductDescription: \"Vergola End Cap (Spare) P/Coated\",\r\n ProductIndex: \"VECCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500025\",\r\n SellingUOM: \"EA\",\r\n Cost: \"6.53\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.15\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"6.53\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_625\",\r\n id: \"625\",\r\n ProductCode: \"VG55350**\",\r\n ProductDescription: \"350 Valley **\",\r\n ProductIndex: \"VG35\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"253\",\r\n SubGroup: \"553501\",\r\n SellingUOM: \"LM\",\r\n Cost: \"4.6592\",\r\n MfgLocations: \"520\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5822\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.19\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_626\",\r\n id: \"626\",\r\n ProductCode: \"CNVLB24413PD\",\r\n ProductDescription: \"Vergola Link Bar (2.44M / 13 Holes) P/Coated\",\r\n ProductIndex: \"VLBCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"12.88\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.1\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"12.88\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_627\",\r\n id: \"627\",\r\n ProductCode: \"CNV1MSFP\",\r\n ProductDescription: \"Vergola 1 Motor Switch (Factory Painted)\",\r\n ProductIndex: \"VMSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500001\",\r\n SellingUOM: \"EA\",\r\n Cost: \"548.94\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"548.94\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_628\",\r\n id: \"628\",\r\n ProductCode: \"CNV2MSFP\",\r\n ProductDescription: \"Vergola 2 Motor Switch (Factory Painted)\",\r\n ProductIndex: \"VMSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500002\",\r\n SellingUOM: \"EA\",\r\n Cost: \"616\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"616\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_629\",\r\n id: \"629\",\r\n ProductCode: \"CNV36MSFP\",\r\n ProductDescription: \"Vergola 3 To 6 Motor Switch (Factory Painted)\",\r\n ProductIndex: \"VMSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500003\",\r\n SellingUOM: \"EA\",\r\n Cost: \"622.44\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"622.44\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_630\",\r\n id: \"630\",\r\n ProductCode: \"CNV78MSFP\",\r\n ProductDescription: \"Vergola 7 To 8 Motor Switch (Factory Painted)\",\r\n ProductIndex: \"VMSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500004\",\r\n SellingUOM: \"EA\",\r\n Cost: \"877.06\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"877.06\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_631\",\r\n id: \"631\",\r\n ProductCode: \"CNVB12V65AFP\",\r\n ProductDescription: \"Vergola Battery (12V / 6.5A/Hr) Factory Painted\",\r\n ProductIndex: \"VMSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500015\",\r\n SellingUOM: \"EA\",\r\n Cost: \"15.61\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"15.61\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_632\",\r\n id: \"632\",\r\n ProductCode: \"CNVMSFP\",\r\n ProductDescription: \"Vergola Motor (Spare) Factory Painted\",\r\n ProductIndex: \"VMSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500006\",\r\n SellingUOM: \"EA\",\r\n Cost: \"151.8\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"5\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"151.8\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_633\",\r\n id: \"633\",\r\n ProductCode: \"CNVPS24412PD\",\r\n ProductDescription: \"Vergola Pivot Strip (2.44M / 12 Holes) P/Coated\",\r\n ProductIndex: \"VPSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500035\",\r\n SellingUOM: \"EA\",\r\n Cost: \"23.15\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.45\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"23.15\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_634\",\r\n id: \"634\",\r\n ProductCode: \"VRF125CBLM\",\r\n ProductDescription: \"125 Vent Ridge **\",\r\n ProductIndex: \"VR125\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"248\",\r\n SubGroup: \"590101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"17.8181\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"7.7739\",\r\n PromptTextCodes: \"D T\",\r\n Colours: \"\",\r\n LiveCost: \"88.75\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_635\",\r\n id: \"635\",\r\n ProductCode: \"VRFSE125CB\",\r\n ProductDescription: \"125 Vent Ridge Stop End **\",\r\n ProductIndex: \"VR125SE\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"248\",\r\n SubGroup: \"590201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"8.1041\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3.3117\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"20.42\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_636\",\r\n id: \"636\",\r\n ProductCode: \"VRF125ZLLM\",\r\n ProductDescription: \"125 Vent Ridge Zincalume\",\r\n ProductIndex: \"VR125Z\",\r\n GroupingName: \"Flashing\",\r\n ProductGroup: \"247\",\r\n SubGroup: \"590101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"15.8434\",\r\n MfgLocations: \"400 500 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"7.6629\",\r\n PromptTextCodes: \"D T\",\r\n Colours: \"\",\r\n LiveCost: \"103.25\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_637\",\r\n id: \"637\",\r\n ProductCode: \"CNVRCFP\",\r\n ProductDescription: \"Vergola Retainer Clip (Factory Painted)\",\r\n ProductIndex: \"VRCCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500028\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.16\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.01\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"0.16\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_638\",\r\n id: \"638\",\r\n ProductCode: \"VTRS650**100\",\r\n ProductDescription: \"BF 6.2-13X50 Vortex Roof Screw H/H B8 + Neo ** (Pkt 100)\",\r\n ProductIndex: \"VRS50B8100\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"61195\",\r\n SellingUOM: \"100\",\r\n Cost: \"10.26\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.15\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"10.26\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_639\",\r\n id: \"639\",\r\n ProductCode: \"CNVSLP**\",\r\n ProductDescription: \"Vergola Steel Louvre (Poly) Colourbond **\",\r\n ProductIndex: \"VSLPCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500061\",\r\n SellingUOM: \"LM\",\r\n Cost: \"19.58\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"2\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"19.58\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_640\",\r\n id: \"640\",\r\n ProductCode: \"CNVSLS**\",\r\n ProductDescription: \"Vergola Steel Louvre (Steel) Colourbond **\",\r\n ProductIndex: \"VSLSCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500062\",\r\n SellingUOM: \"LM\",\r\n Cost: \"24.94\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"3\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"24.94\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_641\",\r\n id: \"641\",\r\n ProductCode: \"CNVSMDPD\",\r\n ProductDescription: \"Vergola Standard Motor Drive P/Coated\",\r\n ProductIndex: \"VSMDCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500008\",\r\n SellingUOM: \"EA\",\r\n Cost: \"262.98\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.5\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"262.98\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_642\",\r\n id: \"642\",\r\n ProductCode: \"CNVSNFP\",\r\n ProductDescription: \"Vergola Speed Nut (Factory Painted)\",\r\n ProductIndex: \"VSNCD\",\r\n GroupingName: \"Misc\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"500051\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.08\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.01\",\r\n PromptTextCodes: \"VGCO\",\r\n Colours: \"\",\r\n LiveCost: \"0.08\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_643\",\r\n id: \"643\",\r\n ProductCode: \"VT622S100\",\r\n ProductDescription: \"BF 6.2-13X22 Vortex Shed Screw H/H B8 Plain (Pkt 100)\",\r\n ProductIndex: \"VSS22B8P\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"126205\",\r\n SellingUOM: \"100\",\r\n Cost: \"8.318\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.8\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"12.36\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_644\",\r\n id: \"644\",\r\n ProductCode: \"VTCS625**500\",\r\n ProductDescription: \"BF M6.2-13X25 Vortex Clad Screw H/H + Neo B8 ** (Box 500)\",\r\n ProductIndex: \"VTCS625500\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"126209\",\r\n SellingUOM: \"500\",\r\n Cost: \"0.0643\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.0076\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"79.18\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_645\",\r\n id: \"645\",\r\n ProductCode: \"VTCS625500\",\r\n ProductDescription: \"BF M6.2-13X25 Vortex Clad Screw H/H + Neo B8 Plain (Box 500)\",\r\n ProductIndex: \"VTCS625500\",\r\n GroupingName: \"Hardware\",\r\n ProductGroup: \"650\",\r\n SubGroup: \"126208\",\r\n SellingUOM: \"500\",\r\n Cost: \"0.0488\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_HARDWARE_$$\",\r\n MarkupCarport: \"$$_HARDWARE_$$\",\r\n SellingUnitWeight: \"0.0076\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"70.70\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_646\",\r\n id: \"646\",\r\n ProductCode: \"PVCSBFF9045\",\r\n ProductDescription: \"90mm X 45Deg PVC Elbow\",\r\n ProductIndex: \"W0029045\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"802904\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.6501\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.13\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"1.46\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_647\",\r\n id: \"647\",\r\n ProductCode: \"PVCSBFF9090\",\r\n ProductDescription: \"90mm X 90Deg PVC Elbow (F&F)\",\r\n ProductIndex: \"W0029090\",\r\n GroupingName: \"Downpipes & Accessories\",\r\n ProductGroup: \"990\",\r\n SubGroup: \"802909\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.6501\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.13\",\r\n PromptTextCodes: \"\",\r\n Colours: \"White\",\r\n LiveCost: \"1.24\",\r\n AncillaryParts: \"\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_648\",\r\n id: \"648\",\r\n ProductCode: \"OVWBG55**\",\r\n ProductDescription: \"Wide Base Ovolo Gutter 0.55 ** (WA only)\",\r\n ProductIndex: \"WB5\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"193\",\r\n SubGroup: \"55101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.514\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.2755\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.5882\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_649\",\r\n id: \"649\",\r\n ProductCode: \"OVWBG55ZL\",\r\n ProductDescription: \"Wide Base Ovolo Gutter 0.55 Zincalume (WA only)\",\r\n ProductIndex: \"WB5ZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"192\",\r\n SubGroup: \"55101\",\r\n SellingUOM: \"LM\",\r\n Cost: \"3.4626\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.298\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"3.6515\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_650\",\r\n id: \"650\",\r\n ProductCode: \"OVWBG40EC**\",\r\n ProductDescription: \"Wide Base Ovolo Gutter Ext Mitre ** (WA only)\",\r\n ProductIndex: \"WBEM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"41211\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9904\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0521\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_651\",\r\n id: \"651\",\r\n ProductCode: \"OVWBG40ECZL\",\r\n ProductDescription: \"Wide Base Ovolo Gutter Ext Mitre Zincalume (WA only)\",\r\n ProductIndex: \"WBEMZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"41211\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9623\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.12\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0663\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_652\",\r\n id: \"652\",\r\n ProductCode: \"OVWBGFCM\",\r\n ProductDescription: \"Wide Base Ovolo F(Metal) Clip (WA only)\",\r\n ProductIndex: \"WBFCL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"41902\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.276\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0563\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.33\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_653\",\r\n id: \"653\",\r\n ProductCode: \"OVWBGSCT\",\r\n ProductDescription: \"Wide Base Ovolo Std (Timber) Clip (WA only)\",\r\n ProductIndex: \"WBGCL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"41901\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.291\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0622\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.348\",\r\n AncillaryParts: \"\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_654\",\r\n id: \"654\",\r\n ProductCode: \"OVWBG40IC**\",\r\n ProductDescription: \"Wide Base Ovolo Gutter Int Mitre ** (WA only)\",\r\n ProductIndex: \"WBIM\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"41212\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9904\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0521\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_655\",\r\n id: \"655\",\r\n ProductCode: \"OVWBG40ICZL\",\r\n ProductDescription: \"Wide Base Ovolo Gutter Int Mitre Zincalume (WA only)\",\r\n ProductIndex: \"WBIMZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"41212\",\r\n SellingUOM: \"EA\",\r\n Cost: \"1.9623\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1.12\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"2.0663\",\r\n AncillaryParts: \"12xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_656\",\r\n id: \"656\",\r\n ProductCode: \"OVWBGSEL**\",\r\n ProductDescription: \"Wide Base Ovolo Gutter LH Stop End ** (WA only)\",\r\n ProductIndex: \"WBLSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"41201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1736\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0582\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.179\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_657\",\r\n id: \"657\",\r\n ProductCode: \"OVWBGSELZL\",\r\n ProductDescription: \"Wide Base Ovolo Gutter LH Stop End Zincalume (WA only)\",\r\n ProductIndex: \"WBLSEZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"41201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1724\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0582\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.1802\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_658\",\r\n id: \"658\",\r\n ProductCode: \"OVWBGSER**\",\r\n ProductDescription: \"Wide Base Ovolo Gutter RH Stop End ** (WA only)\",\r\n ProductIndex: \"WBRSE\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"711\",\r\n SubGroup: \"41201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1736\",\r\n MfgLocations: \"670\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0582\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.179\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_659\",\r\n id: \"659\",\r\n ProductCode: \"OVWBGSERZL\",\r\n ProductDescription: \"Wide Base Ovolo Gutter RH Stop End Zincalume (WA only)\",\r\n ProductIndex: \"WBRSEZL\",\r\n GroupingName: \"Gutters & Accessories\",\r\n ProductGroup: \"710\",\r\n SubGroup: \"41201\",\r\n SellingUOM: \"EA\",\r\n Cost: \"0.1724\",\r\n MfgLocations: \"600 670 \",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.0582\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"0.1802\",\r\n AncillaryParts: \"6xRI43100\",\r\n Image_b64: \"\",\r\n },\r\n {\r\n DT_RowId: \"row_665\",\r\n id: \"665\",\r\n ProductCode: \"PCHR1GR**\",\r\n ProductDescription: \"Ampelite HR1 Greca Polycarb Sheet 760 Cover **\",\r\n ProductIndex: \"PSG\",\r\n GroupingName: \"PolyCarbonate Roofing\",\r\n ProductGroup: \"600\",\r\n SubGroup: \"204100\",\r\n SellingUOM: \"LM\",\r\n Cost: \"11.6\",\r\n MfgLocations: \"\",\r\n Markup: \"$$_POLYCARB_$$\",\r\n MarkupCarport: \"$$_POLYCARB_$$\",\r\n SellingUnitWeight: \"0.9\",\r\n PromptTextCodes: \"SL=1800-7200@300\",\r\n Colours: \"Pearl Ice,Silver Mist\",\r\n LiveCost: \"26.86\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"CLEARFIX\",\\n \"Qty\":\"=((Area.NumInternalPurlins*3)+12)*Qty\"}\\n]}',\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_666\",\r\n id: \"666\",\r\n ProductCode: \"CNBK210865CONGA\",\r\n ProductDescription: \"Cen BK2 10865 Galvanised\",\r\n ProductIndex: \"BK210865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"102021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.73\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.146\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"17.34\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGIAAACtBAMAAAC5NbdcAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMTowNTo0NCArMDkzMDqNMuUAAAAHdElNRQfiAxsKJSiHMUesAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////AAAADAwM9/f3b29vxsbGNTU1jIyMnJyczs7O2tratbW1qamplJSU6+vrvb29ljeKmgAAAAF0Uk5TAEDm2GYAAATDSURBVHja7dnNbxtFFADwKXEjWqDkWc46AnOwlNIb4usP6Eqk8iGXNbtuJAfcRaS9oUS0VSohwJGJ5+CVOHGm/wE5IMStlpoSbsmF7mWlIJC40kOuwHysnZ317Ow8GvWAeIdEyubnN++9nbGzIeT/wEUIWAHw9vK1KyixGPR+e6cJzqfWYiPg8dcfIbz+HZk/tBYser8DC6tVZcIF+LpUZEHgQTnJiaURONZ1SBHTEK6iciQJ3TKTWZHQPizgRBLvwI84kcRRs4YTSUyLW6YXSVLcZVW0p4J1+eNjC+FPBWvZw5t/lovrGZHQHXhQKtaygq2s+QlOsDQ3N5Eiob8s2whKM8S9US4oQJQh23GZiI/qW2oDVt8sEXDjJSfKiuF7xyVi80K6rLSguF/91ig++pLsHYjfBKA0ovz2rz4wCfcN4m5L0RpCy6U8wk1DrwZ1cj/N0fubBcDykN6dbmWNiGE1jKRIf7weuhBCp3iCETiq4NGcnJfpD0GejVLEUdoj9eUU0Ymfy4jpIAzCIxUoFWFWAKlcLhXNnFgRTbFeFTy+Jr53rUUAl8tFUzePrnXlVkKbYx2dI3cyqBe3dOJ9U46+TnyIFgFaGCvX1vEBXryGFfhVdRsROodBjNGijxYeWrhnU0d3CdurLroOVdD0YugUr0q9r4byon9YWSwUviIG8uIPRAptHR1lVbvy4j1ycaOwDr+eFX15kX04WykU13XCIedPCsWaTnwx2Bffn+gr19QxCe151WkYRLN8HgOL+2pNWdXQQvg1rOgovbJZVdtUuT6HUvmOjSjPMWeqw2ZVvqO5SyahPRk6VazwwCAmO2rl6XIY69DvWpMYoysf6+pomyrXnu0eflUm4aF7tacVVWwdRnFGOTqAzeGh5+EDeh6A3lGAnWDbZkepL4Oeh4ff52cr/u3+mEOLS4hV6UX5XfIsBKa7qvCDFcteneao8S9t+xxBsCiEdR1eKnLnrlM888mL+dZ1hGgRVOVDQot3g0uIXav/lFFeeX7mdbRYwp4+Xs3iLFHeB433lWmfU8R5JVZFh5F9DlG5E7asc7R5d3cXyF3TBNVPMnxV/QXyvH13nVS0pDiZFRc1J0N0lZxbkmLfTsSrU/HVrLigO0sGhxNxZ1ZUcjMXYrT8TaQR8u+P+dzzdiHi29tJYR3noDpTBxv6ZOZ3dILF6cLy77XyyvpGdh4VEOEoOXLiSD55SgXP8opkPVZcTogX7x0TJyvIuwCvHox2ZS6deHws74ypIC8ANPiDzJ+4yG7bdFW3SF6wwYNzwB9k0xEjNCNEr4DkVsXiZYCqeBKajFyo01wO7/NwPy/4v6WcA7Ge0RgcqubwAIJZQfYA1uX0xgDTff69+NXbJzrBu/yZfH7KSVR4l2SCdbkxJWKJ2rskG/O8y4I8BGhFFoLXX5MPj38GiKPSVU1aJsg+H4x2D+ZjCxqSsFnW+rntphXkCdTTWQKEVoL8mjYqGYWg/puuSJBHk8GMjiwFeZGNX3R5nDsESHHwHcNPIZteKYPZ1Z67hYTdyzsYQfqsmEeIVbF4C8BN73ZLQe4rJ5mN4PcywD2MIMQVpwtG8J6dHrN2gpDzoUBX7AWLOVemshc8mmjBS8KK/078A2T6ruXKFMlmAAAAAElFTkSuQmCC\",\r\n },\r\n {\r\n DT_RowId: \"row_667\",\r\n id: \"667\",\r\n ProductCode: \"CNBK26565CONGA\",\r\n ProductDescription: \"Cen BK2 6565 Galvanised\",\r\n ProductIndex: \"BK26565G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"102011\",\r\n SellingUOM: \"EA\",\r\n Cost: \"3.50\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.94\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"16.56\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABjBAMAAAAP2sEQAAAALHRFWHRDcmVhdGlvbiBUaW1lAFR1ZSAyNyBNYXIgMjAxOCAyMTowMToyMCArMDkzMAFGvwsAAAAHdElNRQfiAxsKIx4e0XWzAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGPC/xhBQAAADBQTFRF////jIyMMTExqamp9/f3tbW1ampqlJSU5ubmxsbGnJycAAAAzs7ODAwM1tbWvb29uXJnEwAAAAF0Uk5TAEDm2GYAAAPXSURBVHja7dhBaxNBFADgsdZSG1uLBUGTg0FasIkHPbQ0VMjBH1AQvChYeijUFCl4CKwX8eat4Cm4ByVgYBFtNjSleYm1LSbETqu1GDFJRfCoB0Hwogd3Znazs5nNJCvqyTkVst/Me29mdmeKkLfm8/j8f/CHAJD2Zn8f9LPGH9PtQA9E4MkXFZvt82s56IN0JJkrlxNW2zolBbXCkBZXlu3n5eAKnNZS8biS5sGST9L9N+NxA2Q7GiGmByL0eecI21PuoAfORLQ4a0qGAKNOdATXsnaHRs3HNSMJZY2AHYByq5BiMGT2fhNAMau0sRTLu4MBGEmmzGiSp3zXzZCM8tRdwS19LmI9H3/0mgCadEmHqy7Ap0c0K1kW0kkTqMUPYg69oeFI3NEmjo9b86BiYR78jWQbTdFaT9wdyNnBO5A7AP2eFndtSsFlLYVg+JKRLmvNQBcB8C2XkoVkgk/XZhWMd8jO+qI3g10R5MjuMypHfsGZuAywLcoPqp7uoEoZHqRTsqQZWOHBcDMoiCHt8UDIQW8BVJWtmVwHOVTpQoS8O8i4A7WA6CYUwbIYUo4A3QTVZuDyXlrhQ6pKc+CA+rOc8DRCArOy7klzYOAZPw+r7Vdr97JXkPMK1niQ72ADhRMcqDeDtDhxDiBUabcNqHYA3nsFdSkIiqvVA5j+DzoAg3TxhT2CXq9gwCs47DWHQ17Bwb8Jpn8P5DmABbDMH7AWBCCOQF/3RXhbtnOQA/oi3ZiOTXoB6sZHf4CAB0LSr3hAzhEKfS9u6+zMNyWAdQ4YB6yUdaqcCdCkF+lM82vpJQfGUAMkcNkGR8PuISk/bvtTTR/FrwQc4EGJ+yhe6CEjOF7GC1LwFDLNn1060z2tgEJP946TQJSCegvASsWNoN6nOXRJQTKL7RajVerKS4A25jjg0aXR3xooyRhUHpvd74RARyLgjz/aOIxgNmUJjGvvjrB7XP88D8Ipu/taYRKb6eLv+4P0eE5A2G0ExYh+0uw9YYSDosgCvjDrg4FRM5oIpHGje382al0AGiNsA/25RE+VWhIKAWzt2qI+Zd8YSFlJDmroPLtZGB92JemHuUY0eGaQv2I0ACC6BowRtAkI2tGMVZx3Ehv00WVZ2kvWsifM7lVchBtIACyHLaDVLQGEre7xOgSjSARdV1lvtNeXYJfeDwvCpY2WNcDv6bwVzTZUEGoPXrBZxC+gsohaAMfSKJLznIpjhShCrYCP3w+b87Q2q91IAhwj1PEmwHOEZCDM7amNYA2CCMkBONsgagPQsXNDFy+TNYfuPpyVdY/+yb9afgGEyna93rwiOQAAAABJRU5ErkJggg==\",\r\n },\r\n {\r\n DT_RowId: \"row_668\",\r\n id: \"668\",\r\n ProductCode: \"CNBK22108CBSEGA\",\r\n ProductDescription: \"Cen BK22 10865 Brkt With Stop End Galvanised\",\r\n ProductIndex: \"BK2210865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122021\",\r\n SellingUOM: \"EA\",\r\n Cost: \"4.77\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.3\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"16.71\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_669\",\r\n id: \"669\",\r\n ProductCode: \"CNBK22158CBSEGA\",\r\n ProductDescription: \"Cen BK22 15865 Brkt With Stop End Galvanised\",\r\n ProductIndex: \"BK2215865G\",\r\n GroupingName: \"Brackets\",\r\n ProductGroup: \"782\",\r\n SubGroup: \"122031\",\r\n SellingUOM: \"EA\",\r\n Cost: \"5.13\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"0.398\",\r\n PromptTextCodes: \"\",\r\n Colours: \"\",\r\n LiveCost: \"19.09\",\r\n AncillaryParts: \"4xTS1220100B8 4xTS1016100B8\",\r\n Image_b64:\r\n \"data:image/png;base64,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\",\r\n },\r\n {\r\n DT_RowId: \"row_670\",\r\n id: \"670\",\r\n ProductCode: \"CF12GA1502\",\r\n ProductDescription: \"Back Channel to suit Cent 310 Deck\",\r\n ProductIndex: \"CFL1502HG\",\r\n GroupingName: \"Back Channel\",\r\n ProductGroup: \"\",\r\n SubGroup: \"\",\r\n SellingUOM: \"EA\",\r\n Cost: \"31.52\",\r\n MfgLocations: \"\",\r\n Markup: \"1\",\r\n MarkupCarport: \"1\",\r\n SellingUnitWeight: \"1\",\r\n PromptTextCodes: \"PC/G Length=7500 \",\r\n Colours: \"\",\r\n LiveCost: \"\",\r\n AncillaryParts:\r\n '{\"AncillaryParts\":[\\n {\"Code\":\"POWBCR\",\\n \"Length\":7500},\\n {\"Code\":\"BI5599\"},\\n {\"Code\":\"RI43100\",\\n \"Qty\":\"50\"}\\n]}',\r\n Image_b64: \"\",\r\n },\r\n ],\r\n options: [],\r\n files: [],\r\n};\r\n\r\nexport const lastEngineeringResults = {\r\n svg: '\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n