|
|
|
@@ -49,7 +49,10 @@ const SubmitIssueForm: React.FC<Props> = ({ |
|
|
|
const [submitting, setSubmitting] = useState(false); |
|
|
|
const [details, setDetails] = useState<LotIssueDetailResponse | null>(null); |
|
|
|
const [submitQty, setSubmitQty] = useState<string>(""); |
|
|
|
|
|
|
|
const bookQty = details?.bookQty ?? 0; |
|
|
|
const submitQtyNum = parseFloat(submitQty); |
|
|
|
const submitQtyValid = !Number.isNaN(submitQtyNum) && submitQtyNum >= 0; |
|
|
|
const remainAvailable = submitQtyValid ? Math.max(0, bookQty - submitQtyNum) : bookQty; |
|
|
|
useEffect(() => { |
|
|
|
if (open && lotId) { |
|
|
|
loadDetails(); |
|
|
|
@@ -121,9 +124,17 @@ const SubmitIssueForm: React.FC<Props> = ({ |
|
|
|
<Typography variant="body2" sx={{ mb: 1 }}> |
|
|
|
<strong>{t("Lot No.")}:</strong> {details.lotNo} |
|
|
|
</Typography> |
|
|
|
<Typography variant="body2" sx={{ mb: 2 }}> |
|
|
|
<Typography variant="body2" sx={{ mb: 1 }}> |
|
|
|
<strong>{t("Location")}:</strong> {details.storeLocation} |
|
|
|
</Typography> |
|
|
|
<Typography variant="body2" sx={{ mb: 1 }}> |
|
|
|
<strong>{t("Book Qty")}:</strong>{" "} |
|
|
|
{details.bookQty} |
|
|
|
</Typography> |
|
|
|
<Typography variant="body2" sx={{ mb: 1 }}> |
|
|
|
<strong>{t("UoM")}:</strong>{" "} |
|
|
|
{details.uomDesc ?? ""} |
|
|
|
</Typography> |
|
|
|
</Box> |
|
|
|
|
|
|
|
<TableContainer component={Paper} sx={{ mb: 2 }}> |
|
|
|
@@ -146,8 +157,8 @@ const SubmitIssueForm: React.FC<Props> = ({ |
|
|
|
<TableCell>{issue.pickerName || "-"}</TableCell> |
|
|
|
<TableCell align="right"> |
|
|
|
{issueType === "miss" |
|
|
|
? issue.missQty?.toFixed(2) || "0" |
|
|
|
: issue.issueQty?.toFixed(2) || "0"} |
|
|
|
? issue.missQty?.toFixed(0) || "0" |
|
|
|
: issue.issueQty?.toFixed(0) || "0"} |
|
|
|
</TableCell> |
|
|
|
<TableCell>{issue.pickOrderCode}</TableCell> |
|
|
|
<TableCell>{issue.doOrderCode || "-"}</TableCell> |
|
|
|
@@ -168,6 +179,26 @@ const SubmitIssueForm: React.FC<Props> = ({ |
|
|
|
inputProps={{ min: 0, step: 0.01 }} |
|
|
|
sx={{ mt: 2 }} |
|
|
|
/> |
|
|
|
<TextField |
|
|
|
fullWidth |
|
|
|
label={t("Remain available Quantity")} |
|
|
|
type="number" |
|
|
|
value={remainAvailable} |
|
|
|
onChange={(e) => { |
|
|
|
const raw = e.target.value; |
|
|
|
if (raw === "") { |
|
|
|
setSubmitQty(""); |
|
|
|
return; |
|
|
|
} |
|
|
|
const remain = parseFloat(raw); |
|
|
|
if (!Number.isNaN(remain) && remain >= 0) { |
|
|
|
const newSubmit = Math.max(0, bookQty - remain); |
|
|
|
setSubmitQty(newSubmit.toFixed(0)); |
|
|
|
} |
|
|
|
}} |
|
|
|
inputProps={{ min: 0, step: 0.01, readOnly: false }} |
|
|
|
sx={{ mt: 2 }} |
|
|
|
/> |
|
|
|
</DialogContent> |
|
|
|
<DialogActions> |
|
|
|
<Button onClick={onClose} disabled={submitting}> |
|
|
|
|