From 59e75afce21620d9d91c2fbf804dac3d51d0c4e1 Mon Sep 17 00:00:00 2001 From: Kubosaka Date: Wed, 3 Apr 2024 11:09:06 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=E8=B3=BC=E5=85=A5=E5=A0=B1=E5=91=8A?= =?UTF-8?q?=E7=99=BB=E9=8C=B2=E3=81=AE=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseReportAddModal.tsx | 107 ++++++++++-------- .../PurchaseReportItemNumModal.tsx | 89 ++++----------- 2 files changed, 86 insertions(+), 110 deletions(-) diff --git a/view/next-project/src/components/purchasereports/PurchaseReportAddModal.tsx b/view/next-project/src/components/purchasereports/PurchaseReportAddModal.tsx index 7476e26f..92538c37 100644 --- a/view/next-project/src/components/purchasereports/PurchaseReportAddModal.tsx +++ b/view/next-project/src/components/purchasereports/PurchaseReportAddModal.tsx @@ -4,8 +4,9 @@ import { RiArrowDropRightLine } from 'react-icons/ri'; import { useRecoilState } from 'recoil'; import { userAtom } from '@/store/atoms'; -import { get, post, del } from '@api/api_methods'; -import { put } from '@api/purchaseItem'; +import { get, post } from '@api/api_methods'; +import { post as postItem, put } from '@api/purchaseItem'; +import { post as postOrder } from '@api/purchaseOrder'; import { CloseButton, Input, @@ -26,11 +27,12 @@ interface PurchaseOrderView { } interface ModalProps { - purchaseOrderId: number; + purchaseOrderId?: number; purchaseItemNum: number; isOpen: boolean; setIsOpen: (isOpen: boolean) => void; isOnlyReported: boolean; + purchaseOrder?: PurchaseOrder; } export default function PurchaseReportAddModal(props: ModalProps) { @@ -73,28 +75,11 @@ export default function PurchaseReportAddModal(props: ModalProps) { financeCheck: false, remark: '', buyer: '', - purchaseOrderID: props.purchaseOrderId, + purchaseOrderID: props.purchaseOrderId || 0, }); + // 購入物品のリスト - const [formDataList, setFormDataList] = useState(() => { - const initFormDataList = []; - for (let i = 0; i < props.purchaseItemNum; i++) { - const initFormData: PurchaseItem = { - id: i + 1, - item: '', - price: 0, - quantity: 0, - detail: '', - url: '', - purchaseOrderID: props.purchaseOrderId, - financeCheck: false, - createdAt: '', - updatedAt: '', - }; - initFormDataList.push(initFormData); - } - return initFormDataList; - }); + const [formDataList, setFormDataList] = useState([]); const [purchaseReportId, setPurchaseReportId] = useState(1); // purchase_orderに紐づくpurchase_itemsを取得 @@ -113,7 +98,7 @@ export default function PurchaseReportAddModal(props: ModalProps) { quantity: purchaseOrderViewRes.purchaseItem[i].quantity, detail: purchaseOrderViewRes.purchaseItem[i].detail, url: purchaseOrderViewRes.purchaseItem[i].url, - purchaseOrderID: props.purchaseOrderId, + purchaseOrderID: props.purchaseOrderId || 0, financeCheck: purchaseOrderViewRes.purchaseItem[i].financeCheck, createdAt: purchaseOrderViewRes.purchaseItem[i].createdAt, updatedAt: purchaseOrderViewRes.purchaseItem[i].updatedAt, @@ -124,9 +109,30 @@ export default function PurchaseReportAddModal(props: ModalProps) { } }, [props.purchaseOrderId, setFormDataList]); + // 購入申請から登録の際に実行 + const createNonePurchaseItems = () => { + const initFormDataList = []; + for (let i = 0; i < props.purchaseItemNum; i++) { + const initFormData: PurchaseItem = { + id: i + 1, + item: '', + price: 0, + quantity: 0, + detail: '', + url: '', + purchaseOrderID: 0, + financeCheck: false, + createdAt: '', + updatedAt: '', + }; + initFormDataList.push(initFormData); + } + setFormDataList(initFormDataList); + }; useEffect(() => { if (router.isReady) { - getPurchaseItems(); + // 購入申請を新しく作成したかどうかで判断 + props.purchaseOrder ? createNonePurchaseItems() : getPurchaseItems(); } }, [router, getPurchaseItems]); @@ -175,8 +181,26 @@ export default function PurchaseReportAddModal(props: ModalProps) { purchaseOrderID: Number(purchaseOrderID), ...rest, }; - const postRes = await post(purchaseReportUrl, submitData); - setPurchaseReportId(postRes.id); + if (props.purchaseOrder) { + //購入申請と物品を登録してから報告の登録 + const purchaseOrderUrl = process.env.CSR_API_URI + '/purchaseorders'; + const postRes = await postOrder(purchaseOrderUrl, props.purchaseOrder); + formDataList.map(async (item) => { + const itemData = { ...item, purchaseOrderID: postRes.id || 0 }; + const updatePurchaseItemUrl = process.env.CSR_API_URI + '/purchaseitems'; + await postItem(updatePurchaseItemUrl, itemData); + }); + const submitFormData: PurchaseReport = { + ...submitData, + purchaseOrderID: postRes.id || Number(purchaseOrderID), + }; + const postReportRes = await post(purchaseReportUrl, submitFormData); + setPurchaseReportId(postReportRes.id); + } else { + //報告の登録 + const postReportRes = await post(purchaseReportUrl, submitData); + setPurchaseReportId(postReportRes.id); + } }; // 購入物品を更新 @@ -187,12 +211,6 @@ export default function PurchaseReportAddModal(props: ModalProps) { }); }; - const deletePurchaseOrder = async () => { - const deletePurchaseOrderUrl = - process.env.CSR_API_URI + '/purchaseorders/' + props.purchaseOrderId; - await del(deletePurchaseOrderUrl); - }; - // 購入物品の情報 const content = (data: PurchaseItem) => ( <> @@ -201,8 +219,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
@@ -211,8 +229,8 @@ export default function PurchaseReportAddModal(props: ModalProps) { @@ -221,8 +239,8 @@ export default function PurchaseReportAddModal(props: ModalProps) { @@ -230,8 +248,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
@@ -239,8 +257,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
@@ -255,7 +273,6 @@ export default function PurchaseReportAddModal(props: ModalProps) {
{ - if (props.isOnlyReported) deletePurchaseOrder(); props.setIsOpen(false); }} /> @@ -336,7 +353,7 @@ export default function PurchaseReportAddModal(props: ModalProps) { } isFinanceCheckHandler(formDataList[activeStep - 1].id, true); }} - disabled={formDataList[activeStep - 1].item.trim() === ''} + disabled={formDataList[activeStep - 1]?.item.trim() === ''} >
{activeStep === steps.length diff --git a/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx b/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx index 1a6b504b..f06743da 100644 --- a/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx +++ b/view/next-project/src/components/purchasereports/PurchaseReportItemNumModal.tsx @@ -2,8 +2,6 @@ import React, { useState, useEffect } from 'react'; import { useRecoilState } from 'recoil'; import { userAtom } from '@/store/atoms'; -import * as purchaseItemAPI from '@api/purchaseItem'; -import { post } from '@api/purchaseOrder'; import { CloseButton, Modal, @@ -14,7 +12,7 @@ import { } from '@components/common'; import PurchaseReportAddModal from '@components/purchasereports/PurchaseReportAddModal'; import { useUI } from '@components/ui/context'; -import { PurchaseItem, PurchaseOrder, Expense, YearPeriod } from '@type/common'; +import { PurchaseOrder, Expense, YearPeriod } from '@type/common'; import { get } from '@utils/api/api_methods'; export default function PurchaseReportItemNumModal() { @@ -63,73 +61,34 @@ export default function PurchaseReportItemNumModal() { value: 1, }); // 購入申請ID - const [purchaseOrderId, setPurchaseOrderId] = useState(1); // 購入物品数用のhandler const purchaseItemNumHandler = (input: string) => (e: React.ChangeEvent) => { setPurchaseItemNum({ ...purchaseItemNum, [input]: e.target.value }); }; - // 購入報告は購入申請に紐づいているので、購入申請を追加 - const addPurchaseOrder = async () => { - //年・月・日を取得する - const now = new Date(); - const year = now.getFullYear(); - const month = now.getMonth() + 1; - const day = now.getDate(); - let monthStr = ''; - let dayStr = ''; - if (month < 10) { - monthStr = '0' + String(month); - } else { - monthStr = String(month); - } - if (day < 10) { - dayStr = '0' + String(day); - } else { - dayStr = String(day); - } + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth() + 1; + const day = now.getDate(); + let monthStr = ''; + let dayStr = ''; + if (month < 10) { + monthStr = '0' + String(month); + } else { + monthStr = String(month); + } + if (day < 10) { + dayStr = '0' + String(day); + } else { + dayStr = String(day); + } - const data: PurchaseOrder = { - deadline: String(year) + '-' + monthStr + '-' + dayStr, - userID: user.id, - financeCheck: false, - expenseID: expenseID || 0, - }; - const addPurchaseOrderUrl = process.env.CSR_API_URI + '/purchaseorders'; - const postRes = await post(addPurchaseOrderUrl, data); - const purchaseOrderID = postRes.id; - setPurchaseOrderId(purchaseOrderID); - - // 購入物品数のpurchaseItemのリストを作成 - const updatePurchaseItemList = []; - for (let i = 0; i < Number(purchaseItemNum.value); i++) { - const initialPurchaseItem: PurchaseItem = { - id: i + 1, - item: '', - price: 0, - quantity: 0, - detail: '', - url: '', - purchaseOrderID: purchaseOrderID, - financeCheck: false, - createdAt: '', - updatedAt: '', - }; - updatePurchaseItemList.push(initialPurchaseItem); - } - // 購入報告モーダルではすでにある購入物品を更新する処理なので、先に購入物品を登録しておく - addPurchaseItem(updatePurchaseItemList); - }; - - // 購入報告の追加モーダルではPutをするので、ここではPostして購入物品を追加 - const addPurchaseItem = async (data: PurchaseItem[]) => { - data.map(async (item) => { - const updatePurchaseItemUrl = process.env.CSR_API_URI + '/purchaseitems'; - await purchaseItemAPI.post(updatePurchaseItemUrl, item); - }); - // 購入報告の追加モーダルを開く - onOpen(); + const purchaseOrder: PurchaseOrder = { + deadline: String(year) + '-' + monthStr + '-' + dayStr, + userID: user.id, + financeCheck: false, + expenseID: expenseID || 0, }; return ( @@ -203,7 +162,7 @@ export default function PurchaseReportItemNumModal() { { - addPurchaseOrder(); + onOpen(); }} disabled={!expenses} > @@ -213,11 +172,11 @@ export default function PurchaseReportItemNumModal() { {isOpen && ( )}