CodeNewbie Community 🌱

shigero-neko
shigero-neko

Posted on

HELP TO CREATE A DYNAMIC SCRIPT WITH FORMULAS

I have this code where it currently runs on Static or hard-coded, in order for me to finish a module of the system that I am working on I need this to be in dynamic form but I am not sure how to do it and I have a deadline by next week. i hope someone can help, please reply or message me :)

this is my code in static

<script>
        // Data for the items and their values
        const items = {
            aluminum:  7010.56,
            amorphous_ribbon:  26192.94,
            copper:  18483.72,
            silicon_steel: 0,
            silicon_steel_amdt_core_wrap:  417.78,
            dielectric_fluid_high_fire_point_f: 0,
            dielectric_fluid_high_fire_point_m: 0,
            dielectric_fluid_mineral:  10248.30,
            bushing:  3120.60,
            painted_tank:  9994.53,
            accessories:  1353.61 ,
            bus_bar:  0,
            core_coil_frame: 976.95,
            coil_support:  158.18,
            corrugated_fin:  0,
            epoxy:  335.50 ,
            gasket:  0,
            lv_terminal:23.48,
            nameplate:  40.18,
            paper_insulation:    2346.25,
            pole_line_hardware: 0,
            sticker:  82.32 
        };



        function calculateValues() {
            const modelNumber = document.getElementById("model_no").value;
            const customValueField = document.getElementById("custom_value");
            const bomValueField = document.getElementById("bom_value");
            const otherMaterialField = document.getElementById("other_materials_input");
            const otherMaterialsField = document.getElementById("other_materials_col");
            const hardwareInput = document.getElementById("hardware_input");
            const hardwareField = document.getElementById("hardware_col");
            const totalInput = document.getElementById("total_input");
            const totalField = document.getElementById("total_col");
            const directLaborInput = document.getElementById("direct_labor_input");
            const directLaborCol = document.getElementById("direct_labor_col");
            const overheadInput = document.getElementById("overhead_input");
            const overheadField = document.getElementById("overhead_col");
            const targetCostInput = document.getElementById("target_cost");
            const targetCostField = document.getElementById("target_cost_col");
            const allowanceInput = document.getElementById("allowance_input");
            const allowanceField = document.getElementById("allowance_col");
            const standardCostInput = document.getElementById("standard_cost");
            const standardCostField = document.getElementById("standard_cost_col");
            const markupInput = document.getElementById("markup");
            const markupField = document.getElementById("mark_up");
            const tpWithoutVatInput = document.getElementById("tp_without");
            const tpWithoutVatField = document.getElementById("tpwithout");
            const tpWithVatInput = document.getElementById("tp_with");
            const tpWithVatField = document.getElementById("tpwith");
            const gpmInput = document.getElementById("gpm");
            const gpmField = document.getElementById("g_pm");

            if (modelNumber === "NC533") {
                // Calculate the "Custom Value" based on the formula
                const customValue = items.aluminum + items.amorphous_ribbon +
                    items.copper + items.silicon_steel + items.silicon_steel_amdt_core_wrap +
                    items.dielectric_fluid_high_fire_point_f + items.dielectric_fluid_high_fire_point_m +
                    items.dielectric_fluid_mineral + items.bushing + items.painted_tank;


                // Limit the result to two decimal places
                const customValueRounded = customValue.toFixed(2);

                customValueField.value = customValueRounded;
                bomValueField.textContent = customValueRounded;



                 // Calculate the "Other Materials" based on the specified formula
                const otherMaterials = items.accessories + items.bus_bar + items.core_coil_frame +
                    items.coil_support + items.corrugated_fin + items.epoxy + items.gasket +
                    items.lv_terminal + items.nameplate + items.paper_insulation +
                    items.pole_line_hardware + items.sticker;

                // Limit the result to two decimal places
                const otherMaterialsRounded = otherMaterials.toFixed(2);

                // otherMaterialsField.textContent = otherMaterialsRounded;
                otherMaterialsField.textContent = otherMaterialsRounded;
                otherMaterialField.value = otherMaterialsRounded;


                 // Calculate "Hardware" based on the formula "totalDirectMaterials + totalOtherMaterials * 1%"
                const hardware = (customValue + otherMaterials) * 0.01;

                // // Limit the result to two decimal places
                const hardwareRounded = Math.round(hardware * 100) / 100;

                hardwareField.value = hardwareRounded.toFixed(2); // Display in the input with 2 decimal places
                hardwareField.textContent = hardwareRounded;


                //CALCULATE WHERE THE VALUE OF HARDWARE IS ZERO

                document.getElementById("hardware_input").value = 0;


                // Calculate the "TOTAL" based on the formula "total of direct material + total other material + hardware"
                const total = customValue + otherMaterials;

                // Limit the result to two decimal places
                const totalRounded = total.toFixed(2);

                totalInput.value = totalRounded;
                totalField.textContent = totalRounded;


                 // Define the array of values for direct labor
                const directLaborValues = [
                216.47, 20.10, 18.07, 0.00, 17.23, 17.39, 240.28, 37.94, 7.90, 0.00, 14.12, 
                47.92, 78.22, 113.61, 61.56, 66.17, 205.82, 152.09, 306.83, 161.08, 208.92, 423.70, 258.92, 80.86
                ];

                // Calculate the total direct labor
                const totalDirectLabor = directLaborValues.reduce((acc, value) => acc + value, 0);

                // Limit the result to two decimal places
                const totalDirectLaborRounded = totalDirectLabor.toFixed(2);

                // Set the value in the "Direct Labor" input field and the displayed field
               directLaborInput.value = totalDirectLaborRounded;
                directLaborCol.textContent = totalDirectLaborRounded;


                // Specific values for the overhead cost
                const overheadCosts = [2668.66, 4875.40, 1596.15, 1346.61, 832.25];



                // Calculate the "Overhead Cost" as the sum of the provided values
                const overheadCost = overheadCosts.reduce((acc, value) => acc + value, 0);

                // Limit the result to two decimal places
                const overheadCostRounded = overheadCost.toFixed(2);

                // Set the value in the "Overhead Cost" input field and displayed field
                overheadInput.value = overheadCostRounded;
                overheadField.textContent = overheadCostRounded;



               // Calculate the "Target Cost" based on the formula "customValue + totalDirectLabor + overheadCost"
                const targetCost = total + totalDirectLabor + overheadCost;

                 // Limit the result to two decimal places
                const targetCostRounded = targetCost.toFixed(2);

                targetCostInput.value = targetCostRounded;
                targetCostField.textContent = targetCostRounded;


                 //Allowance
                const allowanceValue = 10;
                allowanceInput.value = allowanceValue + '%'; // Add '%' symbol to indicate it's a percentage
                allowanceField.textContent = allowanceValue + '%'; // Update the displayed value




                 // Calculate the "Standard Cost" based on the formula "Target Cost + 10% of Total Material Cost"
                const standardCost = targetCost + (0.1 * total);


                //limit the result to two decimal places
                const standardCostRounded = standardCost.toFixed(2);

                standardCostInput.value = standardCostRounded;
                standardCostField.textContent = standardCostRounded;


                 //MarkUp
                const markupValue = 36.5;
                markupInput.value = markupValue + '%'; // Add '%' symbol to indicate it's a percentage
                markupField.textContent = markupValue + '%'; // Update the displayed value

            // Convert markupValue from percentage to decimal
            const markupDecimal = markupValue / 100;

            // Calculate "TP Without VAT" based on the formula "standardCost * (1 + markupDecimal)"
            const tpWithoutVat = standardCost * (1 + markupDecimal);

            // Limit the result to two decimal places
             const tpWithoutVatRounded = Math.round(tpWithoutVat * 100) / 100;

            tpWithoutVatInput.value = tpWithoutVatRounded.toFixed(2); // Display in the input with 2 decimal places
            tpWithoutVatField.textContent = tpWithoutVat.toFixed(2); // Update the displayed value


            // Assuming tpWithoutVat is calculated in the previous steps
            const vatPercentage = 12; // VAT

            // Convert vatPercentage from percentage to decimal
            const vatDecimal = vatPercentage / 100;

            // Calculate "TP With VAT" based on the formula "tpWithoutVat * (1 + vatDecimal)"
            const tpWithVat = tpWithoutVat * (1 + vatDecimal);

            // Limit the result to two decimal places
            const tpWithVatRounded = Math.round(tpWithVat * 100) / 100;

            tpWithVatInput.value = tpWithVatRounded.toFixed(2); // Display in the input with 2 decimal places
             tpWithVatField.textContent = tpWithVat.toFixed(2); // Update the displayed value



            // Calculate the "Gross Profit Margin" based on the formula "(tpWithoutVat - standardCost) / tpWithoutVat"
            const tpWithoutVat2 = parseFloat(tpWithoutVatInput.value);
            const standardCost2 = parseFloat(standardCostInput.value);
            const gpm = (tpWithoutVat - standardCost) / tpWithoutVat;

            // Update the "Gross Profit Margin" fields
            gpmInput.value = (gpm * 100).toFixed(2) + '%'; // Format to two decimal places and add a percentage sign
            gpmField.textContent = (gpm * 100).toFixed(2) + '%'; // Update the displayed value with percentage






            } else {
                // Reset all fields if the model number is not found
                customValueField.textContent = '0';
                bomValueField.textContent = '0';
                otherMaterialsInput.value = '';
                otherMaterialsField.textContent = '0';
                hardwareInput.value = '';
                hardwareField.textContent = '0';
                totalInput.value = '';
                totalField.textContent = '0';
                directLaborInput.value = '';
                directLaborField.textContent = '0';
                overheadInput.value = '';
                overheadField.textContent = '0';
                targetCostInput.value = '';
                targetCostField.textContent = '0';
                allowanceInput.value = '';
                allowanceField.textContent = '0%';
                markupInput.value = '';
                markupField.textContent = '';
                standardCostInput.value = '';
                standardCostField.textContent = '';
                tpWithoutVatInput.value = '';
                tpWithoutVatField.textContent = '';
                gpmInput.value = '';
                gpmField.textContent = '';

                }
        }

    </script>

Enter fullscreen mode Exit fullscreen mode

Top comments (0)