@seedtactics/insight-client 16.7.2 → 16.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -29
- package/dist/assets/index-BGjv3-QV.js +388 -0
- package/dist/cell-status/current-status.js +4 -1
- package/dist/cell-status/estimated-cycle-times.js +2 -1
- package/dist/cell-status/inspections.js +1 -1
- package/dist/cell-status/loading.js +1 -1
- package/dist/cell-status/material-summary.js +4 -2
- package/dist/cell-status/names.js +1 -1
- package/dist/cell-status/rebookings.js +3 -1
- package/dist/cell-status/scheduled-jobs.js +1 -1
- package/dist/cell-status/sim-production.js +6 -2
- package/dist/cell-status/station-cycles.js +3 -1
- package/dist/cell-status/tool-replacements.js +21 -7
- package/dist/cell-status/tool-usage.js +7 -2
- package/dist/components/App.d.ts +2 -2
- package/dist/components/App.js +13 -5
- package/dist/components/AxisAndGrid.d.ts +6 -6
- package/dist/components/BarcodeScanning.d.ts +2 -2
- package/dist/components/BarcodeScanning.js +8 -2
- package/dist/components/ChartTooltip.d.ts +2 -2
- package/dist/components/ChooseMode.js +6 -1
- package/dist/components/ChooseOperator.d.ts +1 -1
- package/dist/components/ErrorsAndLoading.d.ts +3 -3
- package/dist/components/LoadingIcon.d.ts +1 -1
- package/dist/components/LoadingIcon.js +1 -1
- package/dist/components/LogEntry.d.ts +2 -2
- package/dist/components/LogEntry.js +10 -8
- package/dist/components/ManualSerialEntry.d.ts +2 -2
- package/dist/components/MonthSelect.d.ts +1 -1
- package/dist/components/MonthSelect.js +3 -1
- package/dist/components/Navigation.d.ts +2 -2
- package/dist/components/Navigation.js +1 -1
- package/dist/components/VerboseLogging.d.ts +1 -1
- package/dist/components/analysis/AnalysisSelectToolbar.d.ts +1 -1
- package/dist/components/analysis/BasketCycleCards.d.ts +1 -1
- package/dist/components/analysis/BasketCycleCards.js +1 -1
- package/dist/components/analysis/BufferChart.d.ts +1 -1
- package/dist/components/analysis/BufferChart.js +23 -4
- package/dist/components/analysis/CostPerPiece.d.ts +2 -2
- package/dist/components/analysis/CostPerPiece.js +2 -2
- package/dist/components/analysis/CycleChart.d.ts +1 -1
- package/dist/components/analysis/CycleChart.js +17 -4
- package/dist/components/analysis/DataTable.js +4 -2
- package/dist/components/analysis/EfficiencyPage.d.ts +2 -2
- package/dist/components/analysis/EfficiencyPage.js +1 -1
- package/dist/components/analysis/HeatChart.d.ts +1 -1
- package/dist/components/analysis/HeatChart.js +12 -3
- package/dist/components/analysis/InspectionDataTable.d.ts +1 -1
- package/dist/components/analysis/InspectionDataTable.js +6 -1
- package/dist/components/analysis/InspectionSankey.d.ts +1 -1
- package/dist/components/analysis/InspectionSankey.js +16 -6
- package/dist/components/analysis/PalletCycleCards.d.ts +1 -1
- package/dist/components/analysis/PalletCycleCards.js +5 -3
- package/dist/components/analysis/PartCycleCards.d.ts +2 -2
- package/dist/components/analysis/PartCycleCards.js +16 -6
- package/dist/components/analysis/QualityPage.d.ts +1 -1
- package/dist/components/analysis/ScheduleHistory.d.ts +1 -1
- package/dist/components/analysis/ScheduleHistory.js +1 -1
- package/dist/components/analysis/StationDataTable.d.ts +1 -1
- package/dist/components/analysis/ToolReplacements.d.ts +1 -1
- package/dist/components/analysis/ToolReplacements.js +7 -3
- package/dist/components/operations/AllMaterial.d.ts +1 -1
- package/dist/components/operations/ChartRangeEdit.d.ts +1 -1
- package/dist/components/operations/ChartRangeEdit.js +13 -4
- package/dist/components/operations/CloseoutReport.js +1 -1
- package/dist/components/operations/CompletedParts.js +2 -2
- package/dist/components/operations/CurrentWorkorders.js +2 -2
- package/dist/components/operations/Dashboard.d.ts +2 -2
- package/dist/components/operations/OEEChart.d.ts +4 -4
- package/dist/components/operations/OEEChart.js +7 -2
- package/dist/components/operations/Outliers.d.ts +1 -1
- package/dist/components/operations/Programs.js +9 -4
- package/dist/components/operations/Rebookings.d.ts +1 -1
- package/dist/components/operations/Rebookings.js +3 -1
- package/dist/components/operations/RecentCycleChart.d.ts +1 -1
- package/dist/components/operations/RecentCycleChart.js +2 -2
- package/dist/components/operations/RecentProduction.js +3 -3
- package/dist/components/operations/RecentSchedules.js +3 -1
- package/dist/components/operations/RecentStationCycles.d.ts +1 -1
- package/dist/components/operations/RecentStationCycles.js +1 -1
- package/dist/components/operations/ShiftSettings.d.ts +1 -1
- package/dist/components/operations/SimDayUsage.d.ts +1 -1
- package/dist/components/operations/ToolReport.js +17 -6
- package/dist/components/operations/WorkorderGantt.d.ts +1 -1
- package/dist/components/quality/QualityMaterial.d.ts +2 -2
- package/dist/components/quality/QualityMaterial.js +1 -1
- package/dist/components/quality/QualityPaths.d.ts +1 -1
- package/dist/components/quality/RecentFailedInspections.d.ts +1 -1
- package/dist/components/routes.d.ts +1 -1
- package/dist/components/routes.js +1 -1
- package/dist/components/station-monitor/BulkRawMaterial.d.ts +2 -2
- package/dist/components/station-monitor/BulkRawMaterial.js +11 -5
- package/dist/components/station-monitor/Closeout.js +6 -2
- package/dist/components/station-monitor/Inspection.js +3 -1
- package/dist/components/station-monitor/InvalidateCycle.d.ts +3 -3
- package/dist/components/station-monitor/InvalidateCycle.js +10 -3
- package/dist/components/station-monitor/JobDetails.js +4 -2
- package/dist/components/station-monitor/LoadStation.d.ts +1 -1
- package/dist/components/station-monitor/LoadStation.js +6 -3
- package/dist/components/station-monitor/Material.d.ts +10 -10
- package/dist/components/station-monitor/Material.js +28 -20
- package/dist/components/station-monitor/Material.test.js +1 -1
- package/dist/components/station-monitor/MoveMaterialArrows.d.ts +2 -2
- package/dist/components/station-monitor/PrintedLabel.d.ts +3 -3
- package/dist/components/station-monitor/PrintedLabel.js +9 -4
- package/dist/components/station-monitor/QuarantineButton.d.ts +1 -1
- package/dist/components/station-monitor/QuarantineButton.js +4 -2
- package/dist/components/station-monitor/Queues.d.ts +2 -2
- package/dist/components/station-monitor/Queues.js +6 -4
- package/dist/components/station-monitor/QueuesAddMaterial.d.ts +3 -3
- package/dist/components/station-monitor/QueuesAddMaterial.js +20 -7
- package/dist/components/station-monitor/SelectInspType.d.ts +2 -2
- package/dist/components/station-monitor/SelectWorkorder.d.ts +1 -1
- package/dist/components/station-monitor/StationToolbar.d.ts +1 -1
- package/dist/components/station-monitor/StationToolbar.js +13 -3
- package/dist/components/station-monitor/SystemOverview.d.ts +4 -4
- package/dist/components/station-monitor/SystemOverview.js +36 -16
- package/dist/components/station-monitor/Whiteboard.d.ts +1 -1
- package/dist/data/all-material-bins.js +2 -1
- package/dist/data/cost-per-piece.js +3 -1
- package/dist/data/move-arrows.js +3 -1
- package/dist/data/part-summary.js +1 -1
- package/dist/data/results.cycles.js +13 -4
- package/dist/data/tools-programs.js +3 -2
- package/dist/index.html +1 -1
- package/dist/network/api.d.ts +18 -0
- package/dist/network/api.js +502 -371
- package/dist/util/chart-colors.js +12 -1
- package/docs/client-efficiency.md +226 -263
- package/docs/client-engineering.md +27 -28
- package/docs/client-launch.md +32 -33
- package/docs/client-operations.md +50 -53
- package/docs/client-quality.md +39 -43
- package/docs/client-sales.md +36 -40
- package/docs/client-scanners.md +27 -27
- package/docs/client-station-monitor.md +86 -96
- package/docs/client-tools-programs.md +47 -44
- package/docs/improve-fms.md +73 -78
- package/docs/makino.md +21 -25
- package/docs/material-quarantine.md +50 -64
- package/docs/material-tracking.md +162 -195
- package/docs/mazak.md +78 -91
- package/docs/niigata.md +145 -168
- package/docs/operator-procedures.md +72 -76
- package/docs/part-instructions.md +36 -36
- package/docs/security.md +87 -81
- package/docs/server-config.md +36 -45
- package/docs/server-errors.md +21 -22
- package/package.json +25 -24
- package/dist/assets/index-BwbaiELK.js +0 -364
|
@@ -80,7 +80,12 @@ function BarChart({ width, height, points, setTooltip, }) {
|
|
|
80
80
|
}, onMouseLeave: () => setTooltip(null) })] }, i)))] }) }));
|
|
81
81
|
}
|
|
82
82
|
function OEELegend({ station }) {
|
|
83
|
-
return (_jsxs("div", { style: {
|
|
83
|
+
return (_jsxs("div", { style: {
|
|
84
|
+
marginTop: "1em",
|
|
85
|
+
display: "flex",
|
|
86
|
+
flexWrap: "wrap",
|
|
87
|
+
justifyContent: "space-evenly",
|
|
88
|
+
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [_jsx("div", { style: { width: "14px", height: "14px", backgroundColor: actualOeeColor } }), _jsxs("div", { style: { marginLeft: "1em" }, children: [station, " Actual"] })] }), _jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [_jsx("div", { style: { width: "14px", height: "14px", backgroundColor: plannedOeeColor } }), _jsxs("div", { style: { marginLeft: "1em" }, children: [station, " Planned"] })] })] }));
|
|
84
89
|
}
|
|
85
90
|
function OEETooltip({ tooltip }) {
|
|
86
91
|
return (_jsxs("div", { children: [_jsx("div", { children: tooltip.datum.x }), _jsxs("div", { children: ["Actual Hours: ", tooltip.datum.y?.toFixed(1)] }), _jsxs("div", { children: ["Planned Hours: ", tooltip.datum?.plannedHours?.toFixed(1)] })] }));
|
|
@@ -150,7 +155,7 @@ function dataForTable(series, sortOn) {
|
|
|
150
155
|
.flatMap((e) => e.points)
|
|
151
156
|
.toSortedArray(sortOn);
|
|
152
157
|
}
|
|
153
|
-
export const OEETable = memo(function OEETableF({ points }) {
|
|
158
|
+
export const OEETable = memo(function OEETableF({ points, }) {
|
|
154
159
|
const sort = useColSort(ColumnId.Date, columns);
|
|
155
160
|
return (_jsxs(Table, { children: [_jsx(DataTableHead, { columns: columns, sort: sort, showDetailsCol: false }), _jsx(DataTableBody, { columns: columns, pageData: dataForTable(points, sort.sortOn) })] }));
|
|
156
161
|
});
|
|
@@ -92,7 +92,8 @@ function ProgramRow(props) {
|
|
|
92
92
|
const toolsHaveCnt = props.program.toolUse !== null &&
|
|
93
93
|
props.program.toolUse.tools.length > 0 &&
|
|
94
94
|
LazySeq.of(props.program.toolUse.tools).some((t) => t.cycleUsageCnt > 0);
|
|
95
|
-
return (_jsxs(_Fragment, { children: [_jsxs(ProgramTableRow, { children: [_jsx(TableCell, { children: props.program.toolUse === null ||
|
|
95
|
+
return (_jsxs(_Fragment, { children: [_jsxs(ProgramTableRow, { children: [_jsx(TableCell, { children: props.program.toolUse === null ||
|
|
96
|
+
props.program.toolUse.tools.length === 0 ? undefined : (_jsx(IconButton, { size: "small", onClick: () => setOpen(!open), children: open ? _jsx(KeyboardArrowUpIcon, {}) : _jsx(KeyboardArrowDownIcon, {}) })) }), _jsx(TableCell, { children: programFilename(props.program.programName) }), props.showCellCtrlCol ? (_jsx(TableCell, { children: props.program.cellControllerProgramName })) : undefined, _jsx(TableCell, { children: props.program.partName !== null ? (_jsxs(Box, { sx: {
|
|
96
97
|
display: "flex",
|
|
97
98
|
alignItems: "center",
|
|
98
99
|
}, children: [_jsx(PartIdenticon, { part: props.program.partName, size: 20 }), _jsx("span", { children: props.program.partName })] })) : undefined }), _jsx(TableCell, { children: props.program.comment ?? "" }), props.showRevCol ? (_jsx(TableCell, { children: props.program.revision === null ? "" : props.program.revision.toFixed() })) : undefined, _jsx(TableCell, { align: "right", children: props.program.statisticalCycleTime === null
|
|
@@ -101,11 +102,12 @@ function ProgramRow(props) {
|
|
|
101
102
|
? ""
|
|
102
103
|
: props.program.statisticalCycleTime.MAD_aboveMinutes.toFixed(2) }), _jsx(TableCell, { align: "right", children: props.program.statisticalCycleTime === null
|
|
103
104
|
? ""
|
|
104
|
-
: props.program.statisticalCycleTime.MAD_belowMinutes.toFixed(2) }), _jsx(TableCell, { align: "right", children: props.program.plannedMins === null ? "" : numFormat.format(props.program.plannedMins) }), _jsxs(TableCell, { children: [_jsx(Tooltip, { title: "Load Program Content", children: _jsx(IconButton, { size: "small", onClick: () => setProgramToShowContent(props.program), children: _jsx(CodeIcon, {}) }) }), props.program.revision !== null ? (_jsx(Tooltip, { title: "Revision History", children: _jsx(IconButton, { size: "small", onClick: () => setProgramToShowHistory(props.program), children: _jsx(HistoryIcon, {}) }) })) : undefined] })] }), _jsx(TableRow, { children: _jsx(TableCell, { sx: { pb: "0", pt: "0" }, colSpan: numCols, children: _jsx(Collapse, { in: open, timeout: "auto", unmountOnExit: true, children: _jsx(Box, { sx: { mr: "1em", ml: "3em" }, children: props.program.toolUse === null ||
|
|
105
|
+
: props.program.statisticalCycleTime.MAD_belowMinutes.toFixed(2) }), _jsx(TableCell, { align: "right", children: props.program.plannedMins === null ? "" : numFormat.format(props.program.plannedMins) }), _jsxs(TableCell, { children: [_jsx(Tooltip, { title: "Load Program Content", children: _jsx(IconButton, { size: "small", onClick: () => setProgramToShowContent(props.program), children: _jsx(CodeIcon, {}) }) }), props.program.revision !== null ? (_jsx(Tooltip, { title: "Revision History", children: _jsx(IconButton, { size: "small", onClick: () => setProgramToShowHistory(props.program), children: _jsx(HistoryIcon, {}) }) })) : undefined] })] }), _jsx(TableRow, { children: _jsx(TableCell, { sx: { pb: "0", pt: "0" }, colSpan: numCols, children: _jsx(Collapse, { in: open, timeout: "auto", unmountOnExit: true, children: _jsx(Box, { sx: { mr: "1em", ml: "3em" }, children: props.program.toolUse === null ||
|
|
106
|
+
props.program.toolUse.tools.length === 0 ? undefined : (_jsxs(Table, { size: "small", sx: {
|
|
105
107
|
width: "auto",
|
|
106
108
|
ml: "10em",
|
|
107
109
|
mr: "1em",
|
|
108
|
-
}, children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: "Tool" }), toolsHaveTime ? _jsx(TableCell, { align: "right", children: "Estimated Usage (min)" }) : undefined, toolsHaveCnt ? (_jsx(TableCell, { align: "right", children: "Estimated Usage (count)" })) : undefined] }) }), _jsx(TableBody, { children: LazySeq.of(props.program.toolUse.tools).map((t, idx) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: t.toolName }), toolsHaveTime ? (_jsx(TableCell, { align: "right", children: t.cycleUsageMinutes === 0 ? "" : t.cycleUsageMinutes.toFixed(1) })) : undefined, toolsHaveCnt ? (_jsx(TableCell, { align: "right", children: t.cycleUsageCnt === 0 ? "" : t.cycleUsageCnt.toFixed(1) })) : undefined] }, idx))) })] })) }) }) }) })] }));
|
|
110
|
+
}, children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: "Tool" }), toolsHaveTime ? (_jsx(TableCell, { align: "right", children: "Estimated Usage (min)" })) : undefined, toolsHaveCnt ? (_jsx(TableCell, { align: "right", children: "Estimated Usage (count)" })) : undefined] }) }), _jsx(TableBody, { children: LazySeq.of(props.program.toolUse.tools).map((t, idx) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: t.toolName }), toolsHaveTime ? (_jsx(TableCell, { align: "right", children: t.cycleUsageMinutes === 0 ? "" : t.cycleUsageMinutes.toFixed(1) })) : undefined, toolsHaveCnt ? (_jsx(TableCell, { align: "right", children: t.cycleUsageCnt === 0 ? "" : t.cycleUsageCnt.toFixed(1) })) : undefined] }, idx))) })] })) }) }) }) })] }));
|
|
109
111
|
}
|
|
110
112
|
export function ProgramSummaryTable() {
|
|
111
113
|
const report = useAtomValue(currentProgramReport);
|
|
@@ -317,7 +319,10 @@ export function ProgramHistoryDialog() {
|
|
|
317
319
|
if (page < lastLoadedPage.page) {
|
|
318
320
|
setPage(page + 1);
|
|
319
321
|
}
|
|
320
|
-
else if (lastLoadedPage.hasMore &&
|
|
322
|
+
else if (lastLoadedPage.hasMore &&
|
|
323
|
+
program !== null &&
|
|
324
|
+
revisions !== null &&
|
|
325
|
+
revisions.length > 0) {
|
|
321
326
|
setLoading(true);
|
|
322
327
|
setError(null);
|
|
323
328
|
const rev = revisions[revisions.length - 1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function RebookingsPage(): import("react
|
|
1
|
+
export declare function RebookingsPage(): import("react").JSX.Element;
|
|
@@ -200,7 +200,9 @@ const NewRebookingDialog = memo(function NewRebookingDialog() {
|
|
|
200
200
|
alignItems: "center",
|
|
201
201
|
}, children: [_jsx(PartIdenticon, { part: option, size: 25 }), option] }) })), filterOptions: (options, params) => {
|
|
202
202
|
const filtered = options.filter((o) => o.toLowerCase().includes(params.inputValue.toLowerCase()));
|
|
203
|
-
return filtered.length === 0 && params.inputValue !== ""
|
|
203
|
+
return filtered.length === 0 && params.inputValue !== ""
|
|
204
|
+
? [params.inputValue]
|
|
205
|
+
: filtered;
|
|
204
206
|
} }), _jsx(TextField, { label: "Quantity", type: "number", value: rebooking.qty && !isNaN(rebooking.qty) ? rebooking.qty : "", onChange: (e) => setRebooking((r) => ({ ...r, qty: parseInt(e.target.value) })) }), _jsx(TextField, { label: "Priority (optional)", type: "number", value: rebooking.priority && !isNaN(rebooking.priority) ? rebooking.priority : "", onChange: (e) => setRebooking((r) => ({ ...r, priority: parseInt(e.target.value) })) }), _jsx(TextField, { label: "Workorder (optional)", value: rebooking.workorder ?? "", onChange: (e) => setRebooking((r) => ({ ...r, workorder: e.target.value })) }), _jsx(TextField, { label: "Notes (optional)", multiline: true, minRows: 2, value: rebooking.notes ?? "", onChange: (e) => setRebooking((r) => ({ ...r, notes: e.target.value })) })] }) }), _jsxs(DialogActions, { children: [_jsxs(Button, { color: "secondary", onClick: create, disabled: !allowCreate || creating, children: [creating ? _jsx(CircularProgress, { size: 24 }) : undefined, "Create"] }), _jsx(Button, { onClick: close, children: "Cancel" })] })] }), _jsx(Tooltip, { title: "Add Rebooking", children: _jsx(Fab, { onClick: () => setOpen(true), sx: { position: "fixed", bottom: "24px", right: "24px" }, color: "primary", children: _jsx(Add, {}) }) })] }));
|
|
205
207
|
});
|
|
206
208
|
const FilterDialog = memo(function UnschFilterDialog() {
|
|
@@ -31,7 +31,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
31
31
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
32
32
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
33
33
|
*/
|
|
34
|
-
import { useMemo, useCallback, useState, useRef, useEffect } from "react";
|
|
34
|
+
import { useMemo, useCallback, useState, useRef, useEffect, } from "react";
|
|
35
35
|
import { last30StationCycles } from "../../cell-status/station-cycles.js";
|
|
36
36
|
import { last30EstimatedCycleTimes } from "../../cell-status/estimated-cycle-times.js";
|
|
37
37
|
import { recentCycles } from "../../data/results.cycles.js";
|
|
@@ -205,7 +205,7 @@ function SimSeries({ sim, xScale, yScale, actualPlannedScale, hideTooltipRef, })
|
|
|
205
205
|
function RecentTooltip({ tooltip }) {
|
|
206
206
|
return (_jsx(Stack, { children: tooltip.data.kind === "actual" ? (_jsxs(_Fragment, { children: [tooltip.data.cycle.outlier ? (_jsxs("div", { children: ["Outlier Cycle for ", tooltip.data.cycle.station] })) : (_jsx("div", { children: tooltip.data.cycle.station })), _jsxs("div", { children: ["Start: ", tooltip.data.cycle.startTime.toLocaleString()] }), _jsxs("div", { children: ["End: ", tooltip.data.cycle.endOccupied.toLocaleString()] }), tooltip.data.cycle.endActive !== undefined ? (_jsxs("div", { children: ["Active Minutes:", " ", differenceInMinutes(tooltip.data.cycle.endActive, tooltip.data.cycle.startTime)] })) : undefined, _jsxs("div", { children: ["Occupied Minutes:", " ", differenceInMinutes(tooltip.data.cycle.endOccupied, tooltip.data.cycle.startTime)] }), tooltip.data.cycle.parts.map((p, idx) => (_jsxs("div", { children: ["Part: ", p.part, " ", p.oper] }, idx)))] })) : tooltip.data.kind === "sim" ? (_jsxs(_Fragment, { children: [_jsxs("div", { children: ["Simulation of ", tooltip.data.cycle.station] }), tooltip.data.cycle.parts.map((p, idx) => (_jsxs("div", { children: ["Part: ", p] }, idx))), _jsxs("div", { children: ["Predicted Start: ", tooltip.data.cycle.start.toLocaleString()] }), _jsxs("div", { children: ["Predicted End: ", tooltip.data.cycle.end.toLocaleString()] }), tooltip.data.cycle.plannedDown ? _jsx("div", { children: "Planned Downtime" }) : undefined] })) : (_jsxs(_Fragment, { children: [tooltip.data.cycle.isOutlier ? (_jsxs("div", { children: ["Current Outlier Cycle for ", tooltip.data.cycle.station] })) : (_jsxs("div", { children: ["Current ", tooltip.data.cycle.station] })), _jsxs("div", { children: ["Start: ", tooltip.data.cycle.start.toLocaleString()] }), _jsxs("div", { children: ["Expected End: ", tooltip.data.cycle.expectedEnd.toLocaleString()] }), tooltip.data.cycle.expectedEnd < tooltip.data.now ? (_jsxs("div", { children: ["Cycle Exceeding Expected By", " ", differenceInMinutes(tooltip.data.now, tooltip.data.cycle.expectedEnd), " Minutes"] })) : (_jsxs("div", { children: ["Expected Remaining Minutes:", " ", differenceInMinutes(tooltip.data.cycle.expectedEnd, tooltip.data.now)] })), _jsxs("div", { children: ["Occupied Minutes: ", differenceInMinutes(tooltip.data.now, tooltip.data.cycle.start)] }), tooltip.data.cycle.parts.map((p, idx) => (_jsxs("div", { children: ["Part: ", p.part, " ", p.oper] }, idx)))] })) }));
|
|
207
207
|
}
|
|
208
|
-
function NowLine({ now, xScale, yScale }) {
|
|
208
|
+
function NowLine({ now, xScale, yScale, }) {
|
|
209
209
|
const x = xScale(now);
|
|
210
210
|
const fontSize = 11;
|
|
211
211
|
return (_jsxs("g", { children: [_jsx("line", { x1: x, x2: x, y1: yScale.range()[0], y2: yScale.range()[1] + 8, stroke: "black" }), _jsx("text", { x: x, y: yScale.range()[1] + 8 + fontSize, textAnchor: "middle", fontSize: fontSize, children: "Now" })] }));
|
|
@@ -36,10 +36,10 @@ import { addDays, startOfToday } from "date-fns";
|
|
|
36
36
|
import { useMemo, memo, useState } from "react";
|
|
37
37
|
import { copyTableToClipboard, DataTableBody, DataTableHead, useColSort, } from "../analysis/DataTable.js";
|
|
38
38
|
import { ShiftStart, useShifts } from "./ShiftSettings.js";
|
|
39
|
-
import { SkipPrevious as SkipPrevIcon, SkipNext as SkipNextIcon, ImportExport } from "@mui/icons-material";
|
|
39
|
+
import { SkipPrevious as SkipPrevIcon, SkipNext as SkipNextIcon, ImportExport, } from "@mui/icons-material";
|
|
40
40
|
import { LazySeq, OrderedMap } from "@seedtactics/immutable-collections";
|
|
41
41
|
import { last30SimProduction } from "../../cell-status/sim-production.js";
|
|
42
|
-
import { isLaborCycle, last30StationCycles } from "../../cell-status/station-cycles.js";
|
|
42
|
+
import { isLaborCycle, last30StationCycles, } from "../../cell-status/station-cycles.js";
|
|
43
43
|
import { PartIdenticon } from "../station-monitor/Material.js";
|
|
44
44
|
import { useSetTitle } from "../routes.js";
|
|
45
45
|
import { useAtomValue } from "jotai";
|
|
@@ -91,7 +91,7 @@ function useRows(day) {
|
|
|
91
91
|
.mapValues((p) => ({
|
|
92
92
|
planned: p,
|
|
93
93
|
}))
|
|
94
|
-
.adjust(completedByDay, (plan, comp) =>
|
|
94
|
+
.adjust(completedByDay, (plan, comp) => plan ? { ...plan, completed: comp } : { completed: comp })
|
|
95
95
|
.toAscLazySeq()
|
|
96
96
|
.map(([partName, { planned: plannedCounts, completed: completedCounts }]) => ({
|
|
97
97
|
part: partName,
|
|
@@ -128,7 +128,9 @@ function sortJobs(jobs, sortBy, order, showArchived) {
|
|
|
128
128
|
sortCol = (j) => j.remainingQty;
|
|
129
129
|
break;
|
|
130
130
|
}
|
|
131
|
-
const toShow = showArchived
|
|
131
|
+
const toShow = showArchived
|
|
132
|
+
? LazySeq.of(jobs)
|
|
133
|
+
: LazySeq.of(jobs).filter((j) => j.inProcJob !== null);
|
|
132
134
|
return toShow.toSortedArray(order === "asc" ? { asc: sortCol } : { desc: sortCol });
|
|
133
135
|
}
|
|
134
136
|
function SortColHeader(props) {
|
|
@@ -52,7 +52,7 @@ import { useSetTitle } from "../routes.js";
|
|
|
52
52
|
import { atom, useAtom, useAtomValue, useSetAtom } from "jotai";
|
|
53
53
|
import { fmsInformation } from "../../network/server-settings.js";
|
|
54
54
|
function hasLoadCycleOperations(point) {
|
|
55
|
-
return "operations" in point && (point.operations === undefined || Array.isArray(point.operations));
|
|
55
|
+
return ("operations" in point && (point.operations === undefined || Array.isArray(point.operations)));
|
|
56
56
|
}
|
|
57
57
|
const lulShowGraphAtom = atom(true);
|
|
58
58
|
const machineShowGraphAtom = atom(true);
|
|
@@ -3,4 +3,4 @@ export type ShiftStartAndEnd = {
|
|
|
3
3
|
readonly end: Date;
|
|
4
4
|
};
|
|
5
5
|
export declare function useShifts(day: Date): ReadonlyArray<ShiftStartAndEnd>;
|
|
6
|
-
export declare function ShiftStart(): import("react
|
|
6
|
+
export declare function ShiftStart(): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function SimDayUsagePage(): import("react
|
|
1
|
+
export declare function SimDayUsagePage(): import("react").JSX.Element;
|
|
@@ -72,7 +72,9 @@ const ToolTableRow = styled(TableRow, { shouldForwardProp: (prop) => prop.toStri
|
|
|
72
72
|
},
|
|
73
73
|
backgroundColor: $highlightedRow ? "#BDBDBD" : $noticeRow ? "#E0E0E0" : undefined,
|
|
74
74
|
}));
|
|
75
|
-
const MachineDetailTableRow = styled(TableRow, {
|
|
75
|
+
const MachineDetailTableRow = styled(TableRow, {
|
|
76
|
+
shouldForwardProp: (prop) => prop.toString()[0] !== "$",
|
|
77
|
+
})(({ $borderBottom }) => ({
|
|
76
78
|
...($borderBottom && {
|
|
77
79
|
"&:not(:last-child)": {
|
|
78
80
|
borderBottom: "2px solid black",
|
|
@@ -133,7 +135,8 @@ function ToolSummaryHeader() {
|
|
|
133
135
|
const cntsWereEstimated = useAtomValue(toolReportEstimatedToolCounts);
|
|
134
136
|
return (_jsxs(ToolTableRow, { children: [_jsx(TableCell, {}), _jsx(TableCell, { children: "Tool" }), _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Expected use for all currently scheduled parts." +
|
|
135
137
|
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Scheduled Use" }) }) }), _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Remaining use summed over all machines which have a scheduled part." +
|
|
136
|
-
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Total Remaining Use" }) }) }), _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Machine with the least remaining use." +
|
|
138
|
+
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Total Remaining Use" }) }) }), _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Machine with the least remaining use." +
|
|
139
|
+
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Smallest Remaining Use" }) }) }), _jsx(TableCell, {})] }));
|
|
137
140
|
}
|
|
138
141
|
function ToolSummaryRow({ tool }) {
|
|
139
142
|
const [open, setOpen] = useState(false);
|
|
@@ -144,11 +147,17 @@ function ToolSummaryRow({ tool }) {
|
|
|
144
147
|
const totalRemainCnt = machinesWithSomePart.sumBy((m) => m.remainingCnt ?? 0);
|
|
145
148
|
const minRemainMin = machinesWithSomePart
|
|
146
149
|
.groupBy((m) => m.machineName)
|
|
147
|
-
.map(([mach, tools]) => ({
|
|
150
|
+
.map(([mach, tools]) => ({
|
|
151
|
+
mach,
|
|
152
|
+
remainMin: LazySeq.of(tools).sumBy((m) => m.remainingMinutes ?? 0),
|
|
153
|
+
}))
|
|
148
154
|
.minBy(({ remainMin }) => remainMin);
|
|
149
155
|
const minRemainCnt = machinesWithSomePart
|
|
150
156
|
.groupBy((m) => m.machineName)
|
|
151
|
-
.map(([mach, tools]) => ({
|
|
157
|
+
.map(([mach, tools]) => ({
|
|
158
|
+
mach,
|
|
159
|
+
remainCnt: LazySeq.of(tools).sumBy((m) => m.remainingCnt ?? 0),
|
|
160
|
+
}))
|
|
152
161
|
.minBy(({ remainCnt }) => remainCnt);
|
|
153
162
|
const numCols = 6;
|
|
154
163
|
return (_jsxs(_Fragment, { children: [_jsxs(ToolTableRow, { "$noBorderBottom": true, "$highlightedRow": schUseMin > totalRemainMin || schUseCnt > totalRemainCnt, "$noticeRow": schUseMin <= totalRemainMin &&
|
|
@@ -166,7 +175,9 @@ function ToolMachineHeader({ machine }) {
|
|
|
166
175
|
const cntsWereEstimated = useAtomValue(toolReportEstimatedToolCounts);
|
|
167
176
|
const showSerial = useAtomValue(toolReportHasSerial);
|
|
168
177
|
return (_jsxs(ToolTableRow, { children: [_jsx(TableCell, {}), _jsxs(TableCell, { children: ["Tool In ", machine] }), _jsx(TableCell, { align: "right", children: "Pocket" }), showSerial ? _jsx(TableCell, { children: "Serial" }) : undefined, _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Expected use for all currently scheduled parts." +
|
|
169
|
-
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Scheduled Use" }) }) }), _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Current recorded usage of this tool." +
|
|
178
|
+
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Scheduled Use" }) }) }), _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Current recorded usage of this tool." +
|
|
179
|
+
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Current Use" }) }) }), _jsxs(TableCell, { align: "right", children: [_jsx(Tooltip, { title: "Current configured lifetime of this tool." +
|
|
180
|
+
(cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Lifetime" }) }), " "] }), _jsx(TableCell, { align: "right", children: _jsx(Tooltip, { title: "Lifetime minus current use." + (cntsWereEstimated ? " Counts are estimates." : ""), children: _jsx("span", { children: "Remaining Use" }) }) }), _jsx(TableCell, {})] }));
|
|
170
181
|
}
|
|
171
182
|
function ToolMachineRow({ report, pocket }) {
|
|
172
183
|
const [open, setOpen] = useState(false);
|
|
@@ -188,7 +199,7 @@ export function ToolSummaryTable() {
|
|
|
188
199
|
if (tools === null) {
|
|
189
200
|
return _jsx("div", {});
|
|
190
201
|
}
|
|
191
|
-
return (_jsxs(Table, { stickyHeader: true, children: [_jsx(TableHead, { children: machineFilter === null ? _jsx(ToolSummaryHeader, {}) : _jsx(ToolMachineHeader, { machine: machineFilter }) }), _jsx(TableBody, { children: tools.map((tool) => machineFilter === null ? (_jsx(ToolSummaryRow, { tool: tool }, tool.toolName)) : (_jsx(Fragment, { children: tool.machines
|
|
202
|
+
return (_jsxs(Table, { stickyHeader: true, children: [_jsx(TableHead, { children: machineFilter === null ? (_jsx(ToolSummaryHeader, {})) : (_jsx(ToolMachineHeader, { machine: machineFilter })) }), _jsx(TableBody, { children: tools.map((tool) => machineFilter === null ? (_jsx(ToolSummaryRow, { tool: tool }, tool.toolName)) : (_jsx(Fragment, { children: tool.machines
|
|
192
203
|
.filter((m) => m.machineName === machineFilter)
|
|
193
204
|
.map((m) => (_jsx(ToolMachineRow, { report: tool, pocket: m }, m.pocket))) }, tool.toolName))) })] }));
|
|
194
205
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function WorkorderGantt(): import("react
|
|
1
|
+
export declare function WorkorderGantt(): import("react").JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function PartLookupStepper(): import("react
|
|
2
|
-
export declare function QualityMaterialPage(): import("react
|
|
1
|
+
export declare function PartLookupStepper(): import("react").JSX.Element;
|
|
2
|
+
export declare function QualityMaterialPage(): import("react").JSX.Element;
|
|
@@ -34,7 +34,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
34
34
|
import { useState } from "react";
|
|
35
35
|
import { CircularProgress, Stack, TextField, Button, Stepper, Step, StepLabel, Typography, } from "@mui/material";
|
|
36
36
|
import * as matDetails from "../../cell-status/material-details.js";
|
|
37
|
-
import { MaterialDetailTitle, MaterialDetailContent, MaterialLoading } from "../station-monitor/Material.js";
|
|
37
|
+
import { MaterialDetailTitle, MaterialDetailContent, MaterialLoading, } from "../station-monitor/Material.js";
|
|
38
38
|
import { buildPathString, extractPath } from "../../data/results.inspection.js";
|
|
39
39
|
import { startOfToday, addDays, startOfDay, endOfDay } from "date-fns";
|
|
40
40
|
import { ApiException, LogType } from "../../network/api.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const QualityPaths: import("react").MemoExoticComponent<() => import("react
|
|
1
|
+
export declare const QualityPaths: import("react").MemoExoticComponent<() => import("react").JSX.Element>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function RecentFailedInspectionsTable(): import("react
|
|
1
|
+
export declare function RecentFailedInspectionsTable(): import("react").JSX.Element;
|
|
@@ -163,7 +163,7 @@ export declare const isDemoAtom: import("jotai").PrimitiveAtom<boolean> & {
|
|
|
163
163
|
init: boolean;
|
|
164
164
|
};
|
|
165
165
|
export declare const currentRoute: import("jotai").WritableAtom<RouteState, [to: RouteState], void>;
|
|
166
|
-
export declare function AppLink({ to, children }: {
|
|
166
|
+
export declare function AppLink({ to, children, }: {
|
|
167
167
|
to: RouteState;
|
|
168
168
|
children: React.ReactNode;
|
|
169
169
|
}): React.ReactElement;
|
|
@@ -202,7 +202,7 @@ export const currentRoute = atom((get) => get(currentRouteLocation), (get, set,
|
|
|
202
202
|
history.pushState(null, "", routeToUrl(to));
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
|
-
export function AppLink({ to, children }) {
|
|
205
|
+
export function AppLink({ to, children, }) {
|
|
206
206
|
const setRoute = useSetAtom(currentRoute);
|
|
207
207
|
return createElement(Link, {
|
|
208
208
|
href: routeToUrl(to),
|
|
@@ -2,10 +2,10 @@ import * as api from "../../network/api.js";
|
|
|
2
2
|
export declare const bulkAddCastingToQueue: import("jotai").PrimitiveAtom<string | null> & {
|
|
3
3
|
init: string | null;
|
|
4
4
|
};
|
|
5
|
-
export declare const BulkAddCastingWithoutSerialDialog: import("react").MemoExoticComponent<() => import("react
|
|
5
|
+
export declare const BulkAddCastingWithoutSerialDialog: import("react").MemoExoticComponent<() => import("react").JSX.Element>;
|
|
6
6
|
export interface MultiMaterialDialogProps {
|
|
7
7
|
readonly material: ReadonlyArray<Readonly<api.IInProcessMaterial>> | null;
|
|
8
8
|
readonly closeDialog: () => void;
|
|
9
9
|
readonly operator: string | null;
|
|
10
10
|
}
|
|
11
|
-
export declare const MultiMaterialDialog: import("react").MemoExoticComponent<(props: MultiMaterialDialogProps) => import("react
|
|
11
|
+
export declare const MultiMaterialDialog: import("react").MemoExoticComponent<(props: MultiMaterialDialogProps) => import("react").JSX.Element>;
|
|
@@ -59,7 +59,9 @@ function WaitingForMaterialDialog() {
|
|
|
59
59
|
onAfterPrint: () => setWaiting(null),
|
|
60
60
|
ignoreGlobalStyles: true,
|
|
61
61
|
});
|
|
62
|
-
let materialToPrint = waiting
|
|
62
|
+
let materialToPrint = waiting
|
|
63
|
+
? st.material.filter((m) => waiting.materialIds.has(m.materialID))
|
|
64
|
+
: null;
|
|
63
65
|
if (materialToPrint?.length !== waiting?.materialIds.size) {
|
|
64
66
|
materialToPrint = null;
|
|
65
67
|
}
|
|
@@ -142,7 +144,9 @@ export const BulkAddCastingWithoutSerialDialog = memo(function BulkAddCastingWit
|
|
|
142
144
|
onNewMaterial: (mats) => {
|
|
143
145
|
setWaitingToPrint({
|
|
144
146
|
selectedCasting: selectedCasting,
|
|
145
|
-
operator: fmsInfo.requireOperatorNamePromptWhenAddingMaterial
|
|
147
|
+
operator: fmsInfo.requireOperatorNamePromptWhenAddingMaterial
|
|
148
|
+
? enteredOperator
|
|
149
|
+
: operator,
|
|
146
150
|
materialIds: new Set(mats.map((m) => m.materialID)),
|
|
147
151
|
});
|
|
148
152
|
close();
|
|
@@ -168,11 +172,11 @@ export const BulkAddCastingWithoutSerialDialog = memo(function BulkAddCastingWit
|
|
|
168
172
|
enteredQty === null ||
|
|
169
173
|
isNaN(enteredQty) ||
|
|
170
174
|
(fmsInfo.requireOperatorNamePromptWhenAddingMaterial &&
|
|
171
|
-
(enteredOperator === null || enteredOperator === "")), onClick: addAndPrint, children: [adding ? _jsx(CircularProgress, { size: 10 }) : undefined, "Add ", enteredQty !== null && !isNaN(enteredQty) ? enteredQty.toString() + " " : "", "to ", queue] })) : (_jsxs(Button, { color: "primary", disabled: selectedCasting === null ||
|
|
175
|
+
(enteredOperator === null || enteredOperator === "")), onClick: addAndPrint, children: [adding ? _jsx(CircularProgress, { size: 10 }) : undefined, "Add ", enteredQty !== null && !isNaN(enteredQty) ? enteredQty.toString() + " " : "", "to", " ", queue] })) : (_jsxs(Button, { color: "primary", disabled: selectedCasting === null ||
|
|
172
176
|
enteredQty === null ||
|
|
173
177
|
isNaN(enteredQty) ||
|
|
174
178
|
(fmsInfo.requireOperatorNamePromptWhenAddingMaterial &&
|
|
175
|
-
(enteredOperator === null || enteredOperator === "")), onClick: add, children: ["Add ", enteredQty !== null && !isNaN(enteredQty) ? enteredQty.toString() + " " : "", "to ", queue] })), _jsx(Button, { color: "primary", disabled: adding && printOnAdd, onClick: close, children: "Cancel" })] })] }), _jsx(WaitingForMaterialDialog, {})] }));
|
|
179
|
+
(enteredOperator === null || enteredOperator === "")), onClick: add, children: ["Add ", enteredQty !== null && !isNaN(enteredQty) ? enteredQty.toString() + " " : "", "to", " ", queue] })), _jsx(Button, { color: "primary", disabled: adding && printOnAdd, onClick: close, children: "Cancel" })] })] }), _jsx(WaitingForMaterialDialog, {})] }));
|
|
176
180
|
});
|
|
177
181
|
export const MultiMaterialDialog = memo(function MultiMaterialDialog(props) {
|
|
178
182
|
const fmsInfo = useAtomValue(fmsInformation);
|
|
@@ -242,7 +246,9 @@ export const MultiMaterialDialog = memo(function MultiMaterialDialog(props) {
|
|
|
242
246
|
}
|
|
243
247
|
const mat1 = props.material?.[0];
|
|
244
248
|
return (_jsxs(Dialog, { open: props.material !== null, onClose: close, maxWidth: "md", children: [_jsx(DialogTitle, { children: mat1 && props.material && props.material.length > 0 ? (_jsx(MaterialDetailTitle, { partName: mat1.partName, subtitle: props.material.length.toString() +
|
|
245
|
-
(mat1.jobUnique && mat1.jobUnique !== ""
|
|
249
|
+
(mat1.jobUnique && mat1.jobUnique !== ""
|
|
250
|
+
? " assigned to " + mat1.jobUnique
|
|
251
|
+
: " unassigned") })) : ("Material") }), _jsxs(DialogContent, { children: [loading ? (_jsx(CircularProgress, { color: "secondary" })) : (_jsx(LogEntries, { entries: events, copyToClipboard: true })), showRemove && props.material ? (_jsx("div", { style: { marginTop: "1em" }, children: _jsx(TextField, { type: "number", variant: "outlined", fullWidth: true, label: "Quantity to Remove", slotProps: { htmlInput: { min: "1", max: props.material.length.toString() } }, value: isNaN(removeCnt) ? "" : removeCnt, onChange: (e) => setRemoveCnt(parseInt(e.target.value)) }) })) : undefined] }), _jsxs(DialogActions, { children: [props.material && props.material.length > 0 && fmsInfo.usingLabelPrinterForSerials ? (fmsInfo.useClientPrinterForLabels ? (_jsx(PrintOnClientButton, { mat: props.material || [], materialName: rawMatName, operator: lastOperator })) : (_jsx(Button, { color: "primary", disabled: printingLabel, onClick: () => props.material && props.material.length > 0
|
|
246
252
|
? printLabel({
|
|
247
253
|
materialId: props.material[0].materialID,
|
|
248
254
|
proc: 0,
|
|
@@ -127,7 +127,9 @@ export function Closeout({ forceSingleColumn }) {
|
|
|
127
127
|
const uncompleted = [];
|
|
128
128
|
const closed = [];
|
|
129
129
|
for (const m of matSummary.matsById.values()) {
|
|
130
|
-
if (m.completed_last_proc_machining === true &&
|
|
130
|
+
if (m.completed_last_proc_machining === true &&
|
|
131
|
+
m.last_unload_time &&
|
|
132
|
+
m.last_unload_time >= cutoff) {
|
|
131
133
|
if (m.closeout_completed === undefined) {
|
|
132
134
|
uncompleted.push(m);
|
|
133
135
|
}
|
|
@@ -151,7 +153,9 @@ export function Closeout({ forceSingleColumn }) {
|
|
|
151
153
|
minHeight: forceSingleColumn ? undefined : { md: "calc(100vh - 64px)" },
|
|
152
154
|
width: forceSingleColumn ? "100%" : { md: "50vw" },
|
|
153
155
|
borderRight: forceSingleColumn ? undefined : { md: "1px solid black" },
|
|
154
|
-
borderBottom: forceSingleColumn
|
|
156
|
+
borderBottom: forceSingleColumn
|
|
157
|
+
? "1px solid black"
|
|
158
|
+
: { sm: "1px solid black", md: "none" },
|
|
155
159
|
}, children: [_jsx(Typography, { variant: "h4", children: "Recently Completed" }), _jsx(Box, { sx: {
|
|
156
160
|
display: "flex",
|
|
157
161
|
justifyContent: "flex-start",
|
|
@@ -100,7 +100,9 @@ export function Inspection({ focusInspectionType, forceSingleColumn }) {
|
|
|
100
100
|
minHeight: forceSingleColumn ? undefined : { md: "calc(100vh - 64px)" },
|
|
101
101
|
width: forceSingleColumn ? "100%" : { md: "50vw" },
|
|
102
102
|
borderRight: forceSingleColumn ? undefined : { md: "1px solid black" },
|
|
103
|
-
borderBottom: forceSingleColumn
|
|
103
|
+
borderBottom: forceSingleColumn
|
|
104
|
+
? "1px solid black"
|
|
105
|
+
: { sm: "1px solid black", md: "none" },
|
|
104
106
|
}, children: [_jsx(Typography, { variant: "h4", children: "Parts to Inspect" }), _jsx(Box, { sx: {
|
|
105
107
|
display: "flex",
|
|
106
108
|
justifyContent: "flex-start",
|
|
@@ -10,12 +10,12 @@ export type InvalidateCycleProps = {
|
|
|
10
10
|
readonly st: InvalidateCycleState | null;
|
|
11
11
|
readonly setState: (s: InvalidateCycleState | null) => void;
|
|
12
12
|
};
|
|
13
|
-
export declare function InvalidateCycleDialogContent(props: InvalidateCycleProps): import("react
|
|
13
|
+
export declare function InvalidateCycleDialogContent(props: InvalidateCycleProps): import("react").JSX.Element;
|
|
14
14
|
export declare function InvalidateCycleDialogButton(props: InvalidateCycleProps & {
|
|
15
15
|
readonly onClose: () => void;
|
|
16
16
|
readonly ignoreOperator?: boolean;
|
|
17
17
|
readonly loadStation?: boolean;
|
|
18
|
-
}): import("react
|
|
18
|
+
}): import("react").JSX.Element | null;
|
|
19
19
|
interface SwapMaterial {
|
|
20
20
|
readonly selectedMatToSwap: Readonly<IInProcessMaterial> | null;
|
|
21
21
|
readonly updating: boolean;
|
|
@@ -29,5 +29,5 @@ export declare function SwapMaterialDialogContent(props: SwapMaterialProps): Rea
|
|
|
29
29
|
export declare function SwapMaterialButtons(props: SwapMaterialProps & {
|
|
30
30
|
readonly onClose: () => void;
|
|
31
31
|
readonly ignoreOperator?: boolean;
|
|
32
|
-
}): import("react
|
|
32
|
+
}): import("react").JSX.Element | null;
|
|
33
33
|
export {};
|
|
@@ -91,7 +91,9 @@ function InvalidateSelect(props) {
|
|
|
91
91
|
.map((p) => (_jsxs(MenuItem, { value: "proc" + p.toString(), children: ["Invalidate Process ", p] }, p)))
|
|
92
92
|
.toRArray()
|
|
93
93
|
: [],
|
|
94
|
-
hasProc && hasChangeMat
|
|
94
|
+
hasProc && hasChangeMat
|
|
95
|
+
? [_jsx(ListSubheader, { children: "Change Material Type" }, "matheader")]
|
|
96
|
+
: [],
|
|
95
97
|
hasChangeMat
|
|
96
98
|
? [
|
|
97
99
|
...castings.map((c) => (_jsxs(MenuItem, { value: "rawMat" + c, children: ["Invalidate Everything And Change to ", c] }, "rawMat" + c))),
|
|
@@ -165,7 +167,9 @@ export function InvalidateCycleDialogButton(props) {
|
|
|
165
167
|
}
|
|
166
168
|
}
|
|
167
169
|
return (_jsxs(_Fragment, { children: [props.st === null ? (_jsx(Button, { color: "primary", onClick: showInvalidate, children: "Invalidate Cycle" })) : undefined, props.st !== null ? (_jsx(Button, { color: "primary", onClick: invalidateCycle, disabled: props.st.updating ||
|
|
168
|
-
(props.st.process === null &&
|
|
170
|
+
(props.st.process === null &&
|
|
171
|
+
props.st.changeRawMat === null &&
|
|
172
|
+
props.st.changeJobUnique === null), children: props.st.process !== null
|
|
169
173
|
? "Invalidate Process " + props.st.process.toString()
|
|
170
174
|
: props.st.changeJobUnique !== null
|
|
171
175
|
? "Invalidate And Change To Job " + props.st.changeJobUnique
|
|
@@ -243,7 +247,10 @@ export function SwapMaterialButtons(props) {
|
|
|
243
247
|
return null;
|
|
244
248
|
}
|
|
245
249
|
function swapMats() {
|
|
246
|
-
if (curMat &&
|
|
250
|
+
if (curMat &&
|
|
251
|
+
props.st &&
|
|
252
|
+
props.st.selectedMatToSwap &&
|
|
253
|
+
curMat.location.type === LocType.OnPallet) {
|
|
247
254
|
props.setState({ selectedMatToSwap: props.st.selectedMatToSwap, updating: true });
|
|
248
255
|
JobsBackend.swapMaterialOnPallet(curMat.materialID, operator, {
|
|
249
256
|
pallet: curMat.location.palletNum ?? 0,
|
|
@@ -43,7 +43,7 @@ import { durationToMinutes } from "../../util/parseISODuration.js";
|
|
|
43
43
|
import { materialDialogOpen } from "../../cell-status/material-details.js";
|
|
44
44
|
import { currentStatus } from "../../cell-status/current-status.js";
|
|
45
45
|
import { selectedAnalysisPeriod } from "../../network/load-specific-month.js";
|
|
46
|
-
import { last30MaterialSummary, specificMonthMaterialSummary } from "../../cell-status/material-summary.js";
|
|
46
|
+
import { last30MaterialSummary, specificMonthMaterialSummary, } from "../../cell-status/material-summary.js";
|
|
47
47
|
import { LazySeq, HashSet } from "@seedtactics/immutable-collections";
|
|
48
48
|
import { basketDisplayName, loadStationDisplayName } from "../../cell-status/station-cycles.js";
|
|
49
49
|
import { MoreHoriz } from "@mui/icons-material";
|
|
@@ -70,7 +70,9 @@ function JobDisplay(props) {
|
|
|
70
70
|
const displayLoadStations = (stations) => stations.map((station) => loadStationDisplayName(station, fmsInfo.loadStationNames)).join(", ");
|
|
71
71
|
return (_jsx("div", { children: _jsxs("dl", { children: [_jsx("dt", { children: "Job ID" }), _jsx("dd", { children: props.job.unique }), _jsx("dt", { children: "Time" }), _jsxs("dd", { children: [displayDate(props.job.routeStartUTC), " to ", displayDate(props.job.routeEndUTC)] }), props.job.cycles ? (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Quantity" }), _jsx("dd", { children: props.job.cycles })] })) : undefined, props.job.comment !== undefined && props.job.comment !== "" ? (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Comment" }), _jsx("dd", { children: props.job.comment })] })) : undefined, props.job.assignedWorkorders && props.job.assignedWorkorders.length > 0 ? (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Workorders" }), _jsx("dd", { children: props.job.assignedWorkorders.join(", ") })] })) : undefined, props.job.procsAndPaths.map((proc, procIdx) => (_jsx(Fragment, { children: proc.paths.map((path, pathIdx) => (_jsxs(Fragment, { children: [_jsxs("dt", { children: ["Process ", procIdx + 1, proc.paths.length > 1 ? ", Path " + (pathIdx + 1).toString() : undefined] }), _jsxs("dd", { children: [_jsx(JobCompleted, { job: props.job, procIdx: procIdx, pathIdx: pathIdx }), _jsxs("div", { children: ["Estimated Start: ", displayDate(path.simulatedStartingUTC)] }), _jsxs("div", { children: ["Pallets: ", (path.palletNums ?? []).map((p) => p.toString()).join(",")] }), path.fixture ? (_jsxs("div", { children: ["Fixture: ", path.fixture, " ", path.face !== undefined ? ", Face: " + path.face.toString() : undefined] })) : undefined, path.inputQueue ? _jsxs("div", { children: ["Input Queue: ", path.inputQueue] }) : undefined, path.casting ? _jsxs("div", { children: ["Raw Material: ", path.casting] }) : undefined, proc.basketLoadStations &&
|
|
72
72
|
proc.basketLoadStations.length > 0 &&
|
|
73
|
-
proc.expectedBasketLoadTime ? (_jsxs("div", { children: ["Basket Load Stations: ", displayLoadStations(proc.basketLoadStations), " |", " ", durationToMinutes(proc.expectedBasketLoadTime).toFixed(1), " mins", path.partsPerPallet > 1 ? " per piece" : ""] })) : undefined, _jsxs("div", { children: ["Load Stations: ", displayLoadStations(path.load), " |", " ", durationToMinutes(path.expectedLoadTime).toFixed(1), " mins", path.partsPerPallet > 1 ? " per piece" : ""] }), path.stops.map((stop, stopIdx) => (_jsx(Fragment, { children: _jsxs("div", { children: [stop.stationGroup, ": ", (stop.stationNums ?? []).join(","), " | Program:
|
|
73
|
+
proc.expectedBasketLoadTime ? (_jsxs("div", { children: ["Basket Load Stations: ", displayLoadStations(proc.basketLoadStations), " |", " ", durationToMinutes(proc.expectedBasketLoadTime).toFixed(1), " mins", path.partsPerPallet > 1 ? " per piece" : ""] })) : undefined, _jsxs("div", { children: ["Load Stations: ", displayLoadStations(path.load), " |", " ", durationToMinutes(path.expectedLoadTime).toFixed(1), " mins", path.partsPerPallet > 1 ? " per piece" : ""] }), path.stops.map((stop, stopIdx) => (_jsx(Fragment, { children: _jsxs("div", { children: [stop.stationGroup, ": ", (stop.stationNums ?? []).join(","), " | Program:", " ", stop.program, stop.programRevision
|
|
74
|
+
? " rev" + stop.programRevision.toString()
|
|
75
|
+
: undefined, " ", "|", " ", (durationToMinutes(stop.expectedCycleTime) / path.partsPerPallet).toFixed(1), " ", "mins", path.partsPerPallet > 1 ? " per piece" : ""] }) }, stopIdx))), _jsxs("div", { children: ["Unload Stations: ", displayLoadStations(path.unload), " |", " ", durationToMinutes(path.expectedUnloadTime).toFixed(1), " mins", path.partsPerPallet > 1 ? " per piece" : ""] }), proc.basketUnloadStations &&
|
|
74
76
|
proc.basketUnloadStations.length > 0 &&
|
|
75
77
|
proc.expectedBasketUnloadTime ? (_jsxs("div", { children: ["Basket Unload Stations: ", displayLoadStations(proc.basketUnloadStations), " |", " ", durationToMinutes(proc.expectedBasketUnloadTime).toFixed(1), " mins", path.partsPerPallet > 1 ? " per piece" : ""] })) : undefined, path.outputQueue ? _jsxs("div", { children: ["Output Queue: ", path.outputQueue] }) : undefined, path.inspections && path.inspections.length > 0 ? (_jsxs("div", { children: ["Inspections: ", path.inspections.map((i) => i.inspectionType).join(",")] })) : undefined] })] }, pathIdx))) }, procIdx)))] }) }));
|
|
76
78
|
}
|
|
@@ -5,6 +5,6 @@ interface LoadStationProps {
|
|
|
5
5
|
readonly completed: boolean;
|
|
6
6
|
readonly whiteBackground?: boolean;
|
|
7
7
|
}
|
|
8
|
-
export declare function LoadStation(props: LoadStationProps): import("react
|
|
8
|
+
export declare function LoadStation(props: LoadStationProps): import("react").JSX.Element;
|
|
9
9
|
declare function LoadStationCheckWidth(props: LoadStationProps): ReactNode;
|
|
10
10
|
export default LoadStationCheckWidth;
|
|
@@ -171,7 +171,8 @@ function selectLoadStationAndQueueProps(loadNum, queues, curSt, hideNonLoading)
|
|
|
171
171
|
for (const m of curSt.material) {
|
|
172
172
|
if (pal) {
|
|
173
173
|
// if loading onto pallet, set elapsed load time, ensure face exists, and set free loading
|
|
174
|
-
if (m.action.type === api.ActionType.Loading &&
|
|
174
|
+
if (m.action.type === api.ActionType.Loading &&
|
|
175
|
+
m.action.loadOntoPalletNum === pal.palletNum) {
|
|
175
176
|
if (m.action.elapsedLoadUnloadTime) {
|
|
176
177
|
elapsedLoadingTime = m.action.elapsedLoadUnloadTime;
|
|
177
178
|
}
|
|
@@ -204,7 +205,8 @@ function selectLoadStationAndQueueProps(loadNum, queues, curSt, hideNonLoading)
|
|
|
204
205
|
if (isLoadingToDisplayedTarget(m, pal, activeBasket) && m.action.elapsedLoadUnloadTime) {
|
|
205
206
|
elapsedLoadingTime = m.action.elapsedLoadUnloadTime;
|
|
206
207
|
}
|
|
207
|
-
if (m.location.type === api.LocType.InBasket &&
|
|
208
|
+
if (m.location.type === api.LocType.InBasket &&
|
|
209
|
+
m.location.basketId === activeBasket.basketId) {
|
|
208
210
|
if ((m.action.type === api.ActionType.UnloadToCompletedMaterial ||
|
|
209
211
|
m.action.type === api.ActionType.UnloadToInProcess) &&
|
|
210
212
|
m.action.elapsedLoadUnloadTime) {
|
|
@@ -501,7 +503,8 @@ function InstructionButton({ pallet }) {
|
|
|
501
503
|
if (material === null)
|
|
502
504
|
return null;
|
|
503
505
|
let type;
|
|
504
|
-
if (material.action.type === api.ActionType.Loading &&
|
|
506
|
+
if (material.action.type === api.ActionType.Loading &&
|
|
507
|
+
material.action.loadOntoPalletNum === pallet) {
|
|
505
508
|
type = "load";
|
|
506
509
|
}
|
|
507
510
|
else if ((material.action.type === api.ActionType.UnloadToInProcess ||
|
|
@@ -5,7 +5,7 @@ export declare class PartIdenticon extends PureComponent<{
|
|
|
5
5
|
part: string;
|
|
6
6
|
size?: number;
|
|
7
7
|
}> {
|
|
8
|
-
render(): import("react
|
|
8
|
+
render(): import("react").JSX.Element;
|
|
9
9
|
}
|
|
10
10
|
export type MatCardFontSize = "normal" | "large" | "x-large";
|
|
11
11
|
export declare function MaterialAction({ mat, displayActionForSinglePallet, fsize, }: {
|
|
@@ -13,7 +13,7 @@ export declare function MaterialAction({ mat, displayActionForSinglePallet, fsiz
|
|
|
13
13
|
displayActionForSinglePallet?: number;
|
|
14
14
|
fsize?: MatCardFontSize;
|
|
15
15
|
}): ReactNode | null;
|
|
16
|
-
export declare function WorkorderFromBarcode(): import("react
|
|
16
|
+
export declare function WorkorderFromBarcode(): import("react").JSX.Element | null;
|
|
17
17
|
export interface MaterialSummaryProps {
|
|
18
18
|
readonly mat: Readonly<MaterialSummaryAndCompletedData>;
|
|
19
19
|
readonly inProcMat?: Readonly<api.IInProcessMaterial>;
|
|
@@ -43,12 +43,12 @@ export type ShakeProp = {
|
|
|
43
43
|
};
|
|
44
44
|
export declare const InProcMaterial: import("react").MemoExoticComponent<(props: InProcMaterialProps & ShakeProp & {
|
|
45
45
|
readonly showHandle?: boolean;
|
|
46
|
-
}) => import("react
|
|
46
|
+
}) => import("react").JSX.Element>;
|
|
47
47
|
export type SortableMatData = {
|
|
48
48
|
readonly mat: Readonly<api.IInProcessMaterial>;
|
|
49
49
|
};
|
|
50
|
-
export declare const SortableInProcMaterial: import("react").MemoExoticComponent<(props: InProcMaterialProps & ShakeProp) => import("react
|
|
51
|
-
export declare function DragOverlayInProcMaterial(props: InProcMaterialProps): import("react
|
|
50
|
+
export declare const SortableInProcMaterial: import("react").MemoExoticComponent<(props: InProcMaterialProps & ShakeProp) => import("react").JSX.Element>;
|
|
51
|
+
export declare function DragOverlayInProcMaterial(props: InProcMaterialProps): import("react").JSX.Element;
|
|
52
52
|
export interface MultiMaterialProps {
|
|
53
53
|
readonly partOrCasting: string;
|
|
54
54
|
readonly fsize?: MatCardFontSize;
|
|
@@ -56,17 +56,17 @@ export interface MultiMaterialProps {
|
|
|
56
56
|
readonly material: ReadonlyArray<Readonly<api.IInProcessMaterial>>;
|
|
57
57
|
onOpen: () => void;
|
|
58
58
|
}
|
|
59
|
-
export declare const MultiMaterial: import("react").MemoExoticComponent<(props: MultiMaterialProps) => import("react
|
|
59
|
+
export declare const MultiMaterial: import("react").MemoExoticComponent<(props: MultiMaterialProps) => import("react").JSX.Element>;
|
|
60
60
|
export declare const MaterialDetailTitle: import("react").MemoExoticComponent<({ partName, serial, subtitle, notes, }: {
|
|
61
61
|
partName: string;
|
|
62
62
|
serial?: string | null;
|
|
63
63
|
subtitle?: string;
|
|
64
64
|
notes?: boolean;
|
|
65
|
-
}) => import("react
|
|
65
|
+
}) => import("react").JSX.Element>;
|
|
66
66
|
export declare const MaterialDetailContent: import("react").MemoExoticComponent<({ highlightProcsGreaterOrEqualTo, }: {
|
|
67
67
|
highlightProcsGreaterOrEqualTo?: number;
|
|
68
|
-
}) => import("react
|
|
69
|
-
export declare function MaterialLoading(): import("react
|
|
68
|
+
}) => import("react").JSX.Element | null>;
|
|
69
|
+
export declare function MaterialLoading(): import("react").JSX.Element | null;
|
|
70
70
|
export interface MaterialDialogProps {
|
|
71
71
|
buttons?: ReactNode;
|
|
72
72
|
onClose?: () => void;
|
|
@@ -74,4 +74,4 @@ export interface MaterialDialogProps {
|
|
|
74
74
|
extraDialogElements?: ReactNode;
|
|
75
75
|
highlightProcsGreaterOrEqualTo?: number;
|
|
76
76
|
}
|
|
77
|
-
export declare const MaterialDialog: import("react").MemoExoticComponent<(props: MaterialDialogProps) => import("react
|
|
77
|
+
export declare const MaterialDialog: import("react").MemoExoticComponent<(props: MaterialDialogProps) => import("react").JSX.Element>;
|