diff --git a/app/src/modules/simulation/analysis/ROI/roiData.tsx b/app/src/modules/simulation/analysis/ROI/roiData.tsx index 4d6444d..4c0f17f 100644 --- a/app/src/modules/simulation/analysis/ROI/roiData.tsx +++ b/app/src/modules/simulation/analysis/ROI/roiData.tsx @@ -2,6 +2,7 @@ import React, { useEffect, useState } from 'react' import { useInputValues, useProductionCapacityData, useROISummaryData } from '../../../../store/builder/store'; import { usePlayButtonStore } from '../../../../store/usePlayButtonStore'; import { useProductContext } from '../../products/productContext'; +import { useProductStore } from '../../../../store/simulation/useProductStore'; export default function ROIData() { const { selectedProductStore } = useProductContext(); @@ -10,6 +11,9 @@ export default function ROIData() { const { selectedProduct } = selectedProductStore(); const { isPlaying } = usePlayButtonStore(); const { setRoiSummaryData } = useROISummaryData(); + const { products, getProductById } = useProductStore(); + const [compareProducts, setCompareProducts] = useState([]); + useEffect(() => { if (!isPlaying) { setRoiSummaryData({ @@ -43,47 +47,36 @@ export default function ROIData() { !isNaN(materialCost) && !isNaN(productionPeriod) && !isNaN(salvageValue) && !isNaN(sellingPrice) && !isNaN(shiftLength) && !isNaN(shiftsPerDay) && !isNaN(workingDaysPerYear) && productionCapacityData > 0) { - - - const totalHoursPerYear = shiftLength * shiftsPerDay * workingDaysPerYear; - // Total good units produced per year const annualProductionUnits = productionCapacityData * totalHoursPerYear; - // Revenue for a year const annualRevenue = annualProductionUnits * sellingPrice; - // Costs const totalMaterialCost = annualProductionUnits * materialCost; const totalLaborCost = laborCost * totalHoursPerYear; const totalEnergyCost = electricityCost * totalHoursPerYear; const totalMaintenanceCost = maintenanceCost + fixedCost; - const totalAnnualCost = totalMaterialCost + totalLaborCost + totalEnergyCost + totalMaintenanceCost; - // Annual Profit const annualProfit = annualRevenue - totalAnnualCost; - console.log('annualProfit: ', annualProfit); - + // Net Profit over production period const netProfit = annualProfit * productionPeriod; - // ROI const roiPercentage = ((netProfit + salvageValue - initialInvestment) / initialInvestment) * 100; - // Payback Period const paybackPeriod = initialInvestment / (annualProfit || 1); // Avoid division by 0 - console.log('paybackPeriod: ', paybackPeriod); + - // console.log("--- ROI Breakdown ---"); - // console.log("Annual Production Units:", annualProductionUnits.toFixed(2)); - // console.log("Annual Revenue:", annualRevenue.toFixed(2)); - // console.log("Total Annual Cost:", totalAnnualCost.toFixed(2)); - // console.log("Annual Profit:", annualProfit.toFixed(2)); - // console.log("Net Profit:", netProfit.toFixed(2)); - // console.log("ROI %:", roiPercentage.toFixed(2)); - // console.log("Payback Period (years):", paybackPeriod.toFixed(2)); + // + // + // + // + // + // + // + // setRoiSummaryData({ productName: selectedProduct.productName, @@ -107,13 +100,48 @@ export default function ROIData() { const netProfitForTarget = profitForTargetUnits > 0 ? profitForTargetUnits : 0; const netLossForTarget = profitForTargetUnits < 0 ? -profitForTargetUnits : 0; - // console.log("--- Fixed Product Count (" + productCount + ") ---"); - // console.log("Cost per Unit:", costPerUnit.toFixed(2)); - // console.log("Total Cost for " + productCount + " Units:", costForTargetUnits.toFixed(2)); - // console.log("Revenue for " + productCount + " Units:", revenueForTargetUnits.toFixed(2)); - // console.log("Profit:", netProfitForTarget.toFixed(2)); - // console.log("Loss:", netLossForTarget.toFixed(2)); + // + // + // + // + // + // + const productData = getProductById(selectedProduct.productUuid); + + + setCompareProducts(prev => { + const newData = { + productUuid: productData?.productUuid, + productName: productData?.productName, + costPerUnit: parseFloat(costPerUnit.toFixed(2)), + workingDaysPerYear: parseFloat(workingDaysPerYear.toFixed(2)), + shiftLength: parseFloat(shiftLength.toFixed(2)), + shiftsPerDay: parseFloat(shiftsPerDay.toFixed(2)), + roiPercentage: parseFloat((roiPercentage / 100).toFixed(2)), + paybackPeriod: parseFloat(paybackPeriod.toFixed(2)), + totalCost: parseFloat(totalAnnualCost.toFixed(2)), + revenueGenerated: parseFloat(annualRevenue.toFixed(2)), + netProfit: netProfit > 0 ? parseFloat(netProfit.toFixed(2)) : 0, + netLoss: netProfit < 0 ? parseFloat((-netProfit).toFixed(2)) : 0 + }; + + const existingIndex = prev.findIndex( + item => item.productUuid === productData?.productUuid + ); + + if (existingIndex !== -1) { + // Replace the existing item + const updated = [...prev]; + updated[existingIndex] = newData; + return updated; + } else { + // Add as new item + return [...prev, newData]; + } + }); + console.log('compareProducts: ', compareProducts); + } }, [inputValues, productionCapacityData]); diff --git a/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx b/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx index bb548ba..78bd1a7 100644 --- a/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx +++ b/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx @@ -36,7 +36,7 @@ export default function ThroughPutData() { setMaterialCycleTime(0); setProcessBar([]); setThroughputData(0); - return; + return; } else { let process: any = []; const fetchProductSequenceData = async () => { @@ -190,9 +190,6 @@ export default function ThroughPutData() { useEffect(() => { if (machineActiveTime > 0 && materialCycleTime > 0 && machineCount > 0) { - - - const utilization = machineActiveTime / 3600; // Active time per hour const unitsPerMachinePerHour = 3600 / materialCycleTime; const throughput = unitsPerMachinePerHour * machineCount * utilization;