| @@ -605,67 +605,69 @@ const ApproverStockTake: React.FC<ApproverStockTakeProps> = ({ | |||||
| )} | )} | ||||
| {hasSecond && ( | {hasSecond && ( | ||||
| <Stack direction="row" spacing={1} alignItems="center"> | |||||
| <Radio | |||||
| size="small" | |||||
| checked={selection === "approver"} | |||||
| onChange={() => setQtySelection({ ...qtySelection, [detail.id]: "approver" })} | |||||
| /> | |||||
| <Typography variant="body2">{t("Approver Input")}:</Typography> | |||||
| <TextField | |||||
| size="small" | |||||
| type="number" | |||||
| value={approverQty[detail.id] || ""} | |||||
| onFocus={() => { | |||||
| setGapCheckOpen((prev) => ({ ...prev, [`${detail.id}:approver`]: false })); | |||||
| if (selection !== "approver") { | |||||
| setQtySelection({ ...qtySelection, [detail.id]: "approver" }); | |||||
| } | |||||
| }} | |||||
| onBlur={() => | |||||
| setGapCheckOpen((prev) => ({ ...prev, [`${detail.id}:approver`]: true })) | |||||
| } | |||||
| onChange={(e) => setApproverQty({ ...approverQty, [detail.id]: e.target.value })} | |||||
| InputProps={{ | |||||
| endAdornment: stockTakeQtyEndAdornment(detail.uomShortDesc), | |||||
| }} | |||||
| sx={{ | |||||
| width: 168, | |||||
| minWidth: 168, | |||||
| '& .MuiInputBase-input': { | |||||
| height: '1.4375em', | |||||
| padding: '4px 8px' | |||||
| } | |||||
| }} | |||||
| placeholder={t("Stock Take Qty") } | |||||
| /> | |||||
| <TextField | |||||
| size="small" | |||||
| type="number" | |||||
| value={approverBadQty[detail.id] || ""} | |||||
| onChange={(e) => setApproverBadQty({ ...approverBadQty, [detail.id]: e.target.value })} | |||||
| sx={{ | |||||
| width: 130, | |||||
| minWidth: 130, | |||||
| '& .MuiInputBase-input': { | |||||
| height: '1.4375em', | |||||
| padding: '4px 8px' | |||||
| <Stack spacing={0.5} alignItems="flex-start"> | |||||
| <Stack direction="row" spacing={1} alignItems="center"> | |||||
| <Radio | |||||
| size="small" | |||||
| checked={selection === "approver"} | |||||
| onChange={() => setQtySelection({ ...qtySelection, [detail.id]: "approver" })} | |||||
| /> | |||||
| <Typography variant="body2">{t("Approver Input")}:</Typography> | |||||
| <TextField | |||||
| size="small" | |||||
| type="number" | |||||
| value={approverQty[detail.id] || ""} | |||||
| onFocus={() => { | |||||
| setGapCheckOpen((prev) => ({ ...prev, [`${detail.id}:approver`]: false })); | |||||
| if (selection !== "approver") { | |||||
| setQtySelection({ ...qtySelection, [detail.id]: "approver" }); | |||||
| } | |||||
| }} | |||||
| onBlur={() => | |||||
| setGapCheckOpen((prev) => ({ ...prev, [`${detail.id}:approver`]: true })) | |||||
| } | } | ||||
| }} | |||||
| placeholder={t("Bad Qty")} | |||||
| disabled={selection !== "approver"} | |||||
| onChange={(e) => setApproverQty({ ...approverQty, [detail.id]: e.target.value })} | |||||
| InputProps={{ | |||||
| endAdornment: stockTakeQtyEndAdornment(detail.uomShortDesc), | |||||
| }} | |||||
| sx={{ | |||||
| width: 168, | |||||
| minWidth: 168, | |||||
| '& .MuiInputBase-input': { | |||||
| height: '1.4375em', | |||||
| padding: '4px 8px' | |||||
| } | |||||
| }} | |||||
| placeholder={t("Stock Take Qty") } | |||||
| /> | |||||
| <TextField | |||||
| size="small" | |||||
| type="number" | |||||
| value={approverBadQty[detail.id] || ""} | |||||
| onChange={(e) => setApproverBadQty({ ...approverBadQty, [detail.id]: e.target.value })} | |||||
| sx={{ | |||||
| width: 130, | |||||
| minWidth: 130, | |||||
| '& .MuiInputBase-input': { | |||||
| height: '1.4375em', | |||||
| padding: '4px 8px' | |||||
| } | |||||
| }} | |||||
| placeholder={t("Bad Qty")} | |||||
| disabled={selection !== "approver"} | |||||
| /> | |||||
| <Typography variant="body2"> | |||||
| = {formatNumber(parseFloat(approverQty[detail.id] || "0") - parseFloat(approverBadQty[detail.id] || "0"))} | |||||
| </Typography> | |||||
| </Stack> | |||||
| <StockTakeQtyGapHint | |||||
| open={!!gapCheckOpen[`${detail.id}:approver`]} | |||||
| entered={approverQty[detail.id] || ""} | |||||
| currentQty={stockTakeHiddenOnHand(detail)} | |||||
| threshold={qtyGapWarnPercent} | |||||
| /> | /> | ||||
| <Typography variant="body2"> | |||||
| = {formatNumber(parseFloat(approverQty[detail.id] || "0") - parseFloat(approverBadQty[detail.id] || "0"))} | |||||
| </Typography> | |||||
| </Stack> | </Stack> | ||||
| <StockTakeQtyGapHint | |||||
| open={!!gapCheckOpen[`${detail.id}:approver`]} | |||||
| entered={approverQty[detail.id] || ""} | |||||
| currentQty={stockTakeHiddenOnHand(detail)} | |||||
| threshold={qtyGapWarnPercent} | |||||
| /> | |||||
| )} | )} | ||||
| {(() => { | {(() => { | ||||