Skip to content

Commit

Permalink
Merge pull request #723 from NUTFes/fix/kubosaka/purchase_reports_fix…
Browse files Browse the repository at this point in the history
…_bug

[feat]購入報告登録のバグ修正
  • Loading branch information
Kubosaka authored Apr 3, 2024
2 parents 9b41d48 + 59e75af commit 0c701bb
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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) {
Expand Down Expand Up @@ -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<PurchaseItem[]>(() => {
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<PurchaseItem[]>([]);
const [purchaseReportId, setPurchaseReportId] = useState<number>(1);

// purchase_orderに紐づくpurchase_itemsを取得
Expand All @@ -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,
Expand All @@ -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]);

Expand Down Expand Up @@ -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);
}
};

// 購入物品を更新
Expand All @@ -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) => (
<>
Expand All @@ -201,8 +219,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
<div className='col-span-4 w-full'>
<Input
className='w-full'
id={String(data.id)}
value={data.item}
id={String(data?.id)}
value={data?.item}
onChange={formDataListHandler('item')}
/>
</div>
Expand All @@ -211,8 +229,8 @@ export default function PurchaseReportAddModal(props: ModalProps) {
<Input
type='number'
className='w-full'
id={String(data.id)}
value={data.price}
id={String(data?.id)}
value={data?.price}
onChange={formDataListHandler('price')}
/>
</div>
Expand All @@ -221,26 +239,26 @@ export default function PurchaseReportAddModal(props: ModalProps) {
<Input
type='number'
className='w-full'
id={String(data.id)}
value={data.quantity}
id={String(data?.id)}
value={data?.quantity}
onChange={formDataListHandler('quantity')}
/>
</div>
<p className='text-black-600'>詳細</p>
<div className='col-span-4 w-full'>
<Input
className='w-full'
id={String(data.id)}
value={data.detail}
id={String(data?.id)}
value={data?.detail}
onChange={formDataListHandler('detail')}
/>
</div>
<p className='text-black-600'>URL</p>
<div className='col-span-4 w-full'>
<Input
className='w-full'
id={String(data.id)}
value={data.url}
id={String(data?.id)}
value={data?.url}
onChange={formDataListHandler('url')}
/>
</div>
Expand All @@ -255,7 +273,6 @@ export default function PurchaseReportAddModal(props: ModalProps) {
<div className='ml-auto w-fit'>
<CloseButton
onClick={() => {
if (props.isOnlyReported) deletePurchaseOrder();
props.setIsOpen(false);
}}
/>
Expand Down Expand Up @@ -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() === ''}
>
<div className='flex'>
{activeStep === steps.length
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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() {
Expand Down Expand Up @@ -63,73 +61,34 @@ export default function PurchaseReportItemNumModal() {
value: 1,
});
// 購入申請ID
const [purchaseOrderId, setPurchaseOrderId] = useState(1);

// 購入物品数用のhandler
const purchaseItemNumHandler = (input: string) => (e: React.ChangeEvent<HTMLSelectElement>) => {
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 (
Expand Down Expand Up @@ -203,7 +162,7 @@ export default function PurchaseReportItemNumModal() {
</OutlinePrimaryButton>
<PrimaryButton
onClick={() => {
addPurchaseOrder();
onOpen();
}}
disabled={!expenses}
>
Expand All @@ -213,11 +172,11 @@ export default function PurchaseReportItemNumModal() {
</Modal>
{isOpen && (
<PurchaseReportAddModal
purchaseOrderId={purchaseOrderId}
purchaseItemNum={purchaseItemNum.value}
isOpen={isOpen}
setIsOpen={setIsOpen}
isOnlyReported={true}
purchaseOrder={purchaseOrder}
/>
)}
</>
Expand Down

0 comments on commit 0c701bb

Please sign in to comment.