diff --git a/.env b/.env index 847fa0b..6856392 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ NODE_ENV=development APP_PORT=3000 -NEXT_PUBLIC_API_URL_BACKEND_ONE=http://pc-3:8000/api/v1 \ No newline at end of file +NEXT_PUBLIC_API_URL_BACKEND_ONE=http://ventry.sytes.net:8000/api/v1 \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 2bf6375..d30b5fa 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,7 +5,9 @@ - + + + @@ -167,7 +169,8 @@ - + + diff --git a/src/components/managements/histories/transaction/transaction_update_modal.tsx b/src/components/managements/histories/transaction/transaction_update_modal.tsx index efa8d88..cb92298 100644 --- a/src/components/managements/histories/transaction/transaction_update_modal.tsx +++ b/src/components/managements/histories/transaction/transaction_update_modal.tsx @@ -16,6 +16,7 @@ import confirmationModalSlice from "@/slices/confirmation_modal_slice"; type FormikInitialValues = { transactionTimestamp: string + transactionTotalSellPrice: number currentTransactionItemMaps: TransactionItemMap[] newTransactionItemMaps: TransactionItemMap[] } @@ -87,15 +88,13 @@ export default function TransactionUpdateModalComponent() { const handleSubmitUpdate = (values: FormikInitialValues) => { const newTransactionItemMaps: TransactionItemMap[] = values.newTransactionItemMaps const currentTransactionItemMaps: TransactionItemMap[] = values.currentTransactionItemMaps - const allTransactionItemMaps: TransactionItemMap[] = [...currentTransactionItemMaps, ...newTransactionItemMaps] - const totalSellPrice: number = allTransactionItemMaps!.reduce((total, tim) => total + tim.sellPrice!, 0) transactionService .patchOneById({ id: currentTransaction!.id, body: { accountId: currentTransaction!.accountId, - sellPrice: totalSellPrice, + sellPrice: values.transactionTotalSellPrice, timestamp: new Date(values.transactionTimestamp).toISOString() } }).then((response) => { @@ -179,18 +178,41 @@ export default function TransactionUpdateModalComponent() { })) } - const getNewTransactionItemMapQuantity = (value: Item, props: FormikProps): string => { + const getNewTransactionItemMapQuantity = (props: FormikProps, value: Item): string => { const newTransactionItemMaps: TransactionItemMap[] = props.values.newTransactionItemMaps const index: number = newTransactionItemMaps.findIndex((tim) => tim.itemId === value.id) return `newTransactionItemMaps[${index}].quantity` } - const getNewTransactionItemMapSellPrice = (value: Item, props: FormikProps): string => { + const getNewTransactionItemMapSellPrice = (props: FormikProps, value: Item): string => { const newTransactionItemMaps: TransactionItemMap[] = props.values.newTransactionItemMaps const index: number = newTransactionItemMaps.findIndex((tim) => tim.itemId === value.id) return `newTransactionItemMaps[${index}].sellPrice` } + const handleChangeCurrentTransactionItemMapSellPrice = (event: any, props: FormikProps, index: number, value: TransactionItemMap) => { + if (event.target.value < 0) { + dispatch(messageModalSlice.actions.configure({ + type: "failed", + content: "Quantity must be greater than or equal to 0.", + isShow: true + })) + return + } + + const sellPrice: number = event.target.value * items!.find(item => item.id === value.itemId)!.unitSellPrice + props.handleChange(event) + props.setFieldValue( + `currentTransactionItemMaps[${index}].sellPrice`, + sellPrice + ) + props.values.currentTransactionItemMaps[index].sellPrice = sellPrice + props.setFieldValue( + "transactionTotalSellPrice", + [...props.values.newTransactionItemMaps, ...props.values.currentTransactionItemMaps].reduce((total, tim) => total + tim.sellPrice!, 0) + ) + } + const handleChangeNewTransactionItemMapQuantity = (event: any, props: FormikProps, value: Item) => { if (event.target.value < 0) { dispatch(messageModalSlice.actions.configure({ @@ -201,27 +223,40 @@ export default function TransactionUpdateModalComponent() { return } + const newTransactionItemMaps: TransactionItemMap[] = props.values.newTransactionItemMaps.map((tim) => { + if (tim.itemId === value.id) { + return { + ...tim, + quantity: event.target.value, + sellPrice: value.unitSellPrice * event.target.value + }; + } else { + return tim; + } + } + ) props.handleChange(event) props.setFieldValue( "newTransactionItemMaps", - props.values.newTransactionItemMaps.map((tim) => { - if (tim.itemId === value.id) { - return { - ...tim, - quantity: event.target.value, - sellPrice: value.unitSellPrice * event.target.value - } - } else { - return tim - } - } - ) + newTransactionItemMaps + ) + props.setFieldValue( + "transactionTotalSellPrice", + [...newTransactionItemMaps, ...props.values.currentTransactionItemMaps].reduce((total, tim) => total + tim.sellPrice!, 0) ) } + const getTransactionTotalSellPrice = (props: FormikProps): number => { + const totalSellPriceCurrentTransactionItemMaps: number = props.values.currentTransactionItemMaps.reduce((total, tim) => total + tim.sellPrice!, 0) + const totalSellPriceNewCurrentTransactionItemMaps: number = props.values.newTransactionItemMaps.reduce((total, tim) => total + tim.sellPrice!, 0) + return totalSellPriceCurrentTransactionItemMaps + totalSellPriceNewCurrentTransactionItemMaps + } + + const formikInitialValues: FormikInitialValues = { transactionTimestamp: moment(new Date(currentTransaction!.timestamp)).format("YYYY-MM-DDTHH:mm"), - currentTransactionItemMaps: currentTransactionItemMaps!, + transactionTotalSellPrice: currentTransactionItemMaps!.reduce((total, tim) => total + tim.sellPrice!, 0), + currentTransactionItemMaps: currentTransactionItemMaps, newTransactionItemMaps: items!.map((item) => { return { id: undefined, @@ -258,12 +293,21 @@ export default function TransactionUpdateModalComponent() { (props) => ( + Timestamp + + Total Sell Price + + @@ -290,13 +334,7 @@ export default function TransactionUpdateModalComponent() { type="number" name={`currentTransactionItemMaps[${index}].quantity`} className="form-control" - onChange={(event: any) => { - props.handleChange(event) - props.setFieldValue( - `currentTransactionItemMaps[${index}].sellPrice`, - event.target.value * items!.find(item => item.id === value.itemId)!.unitSellPrice - ) - }} + onChange={(event: any) => handleChangeCurrentTransactionItemMapSellPrice(event, props, index, value)} /> @@ -334,7 +372,7 @@ export default function TransactionUpdateModalComponent() { - {items!.map((value, index) => { + {items!.filter(item => !props.values.currentTransactionItemMaps!.map(tim => tim.itemId).includes(item.id)).map((value, index) => { return ( {value.id} @@ -344,7 +382,7 @@ export default function TransactionUpdateModalComponent() { handleChangeNewTransactionItemMapQuantity(event, props, value)} /> @@ -352,7 +390,7 @@ export default function TransactionUpdateModalComponent() {