diff --git a/frontend/src/pages/StockPage.tsx b/frontend/src/pages/StockPage.tsx index 76f9352..93e5d9b 100644 --- a/frontend/src/pages/StockPage.tsx +++ b/frontend/src/pages/StockPage.tsx @@ -26,6 +26,7 @@ import { Select, MenuItem, } from '@mui/material'; +import { Add as AddIcon } from '@mui/icons-material'; import { STOCK_ERRORS } from '../constants/errorMessages'; import DatePicker, { registerLocale } from 'react-datepicker'; import { ja } from 'date-fns/locale/ja'; // date-fnsの日本語ロケールをインポート @@ -103,6 +104,26 @@ const StockPage: React.FC = () => { if (isNaN(newStock.price)) return; console.log(newStock) + + // 購入日と消費・賞味期限の整合性チェック + const buy = new Date(newStock.buyDate); + const exp = new Date(newStock.expDate); + // 時間をリセットして純粋な“日付のみ”のタイムスタンプを取得 + const buyDateOnly = new Date(buy); + buyDateOnly.setHours(0, 0, 0, 0); + const expDateOnly = new Date(exp); + expDateOnly.setHours(0, 0, 0, 0); + + console.log("新規作成buy:", buy); + console.log("新規作成exp:", exp); + console.log("新規作成buyDateOnly:", buyDateOnly); + console.log("新規作成expDateOnly:", expDateOnly); + + if (buyDateOnly.getTime() > expDateOnly.getTime()) { + alert("購入日は消費・賞味期限より前の日付を設定してください。"); + return; + } + const today = new Date().toISOString().substring(0, 10); const updatedStock = { ...newStock, lastUpdate: today }; // lastUpdate に today を設定 @@ -183,17 +204,18 @@ const StockPage: React.FC = () => { }; /** - * セルを選択する関数. 再度クリックで選択解除 → 行選択ではなくチェックボックスにしたため不要 + * セルを選択する関数. 再度クリックで選択解除 → 修正 */ // const handleRowClick = (stock: Stock) => { // setSelectedRow(prev => (prev?.stockId === stock.stockId ? null : stock)); // }; - // チェックボックス切り替え - const handleCheckboxChange = (stock: Stock) => { - setSelectedRow(prev => (prev?.stockId === stock.stockId ? null : stock)); + // セルを選択して編集画面 + const handleRowClick = (stock: Stock) => { + setSelectedRow(stock); // 行選択 + setEditStock({ ...stock }); // 編集対象にセット + setIsEditOpen(true); // 編集ダイアログを開く }; - /** 編集ボタンを押したときにダイアログを開く */ // ダイアログを開く際に `selectedRow` の値を `editStock` にセット const handleOpenEdit = () => { @@ -208,10 +230,28 @@ const StockPage: React.FC = () => { const handleApplyChanges = async () => { if (!editStock) return; + // 購入日が消費・賞味期限より未来の場合はエラー表示 + const buy = new Date(editStock.buyDate); + const exp = new Date(editStock.expDate); + // 時間をリセットして純粋な“日付のみ”のタイムスタンプを取得 + const buyDateOnly = new Date(buy); + buyDateOnly.setHours(0, 0, 0, 0); + const expDateOnly = new Date(exp); + expDateOnly.setHours(0, 0, 0, 0); + console.log("編集buy:", buy); + console.log("編集exp:", exp); + console.log("編集buyDateOnly:", buyDateOnly); + console.log("編集expDateOnly:", expDateOnly); + + if (buy > exp) { + alert("購入日は消費・賞味期限より前の日付を設定してください。"); + return; + } + try { if (Number(editStock.amount) === 0) { // 数量が 0 の場合は削除処理へ誘導 - setIsEditOpen(false); // 編集ダイアログを閉じる + // setIsEditOpen(false); // 編集ダイアログを閉じる setSelectedRow(editStock); // 削除対象をセット setIsDeleteOpen(true); // 削除ダイアログを開く return; @@ -292,7 +332,6 @@ const StockPage: React.FC = () => {