diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index 86f8b029..093815b8 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -20,6 +20,7 @@ import ProductFeaturesPop from './popup/ProductFeaturesPop' import { v4 as uuidv4 } from 'uuid' export default function Estimate({ params }) { + const fixedKey = 'itemKey' const [itemChangeYn, setItemChangeYn] = useState(false) const { session } = useContext(SessionContext) const [objectNo, setObjectNo] = useState('') //물건번호 @@ -304,8 +305,70 @@ export default function Estimate({ params }) { setSelection(newSelection) } + // 수량 변경 + const onChangeAmount = (value, dispOrder, index) => { + //itemChangeFlg = 1, partAdd = 0 셋팅 + let amount = value + amount = Number(value.replaceAll(',', '')) + if (isNaN(amount)) { + amount = 0 + } else { + amount = amount.toLocaleString() + } + let updateList = [] + let updates = {} + updates.amount = amount + updates.itemChangeFlg = '1' + updates.partAdd = '0' + updates.saleTotPrice = (Number(value.replaceAll(',', '')) * state.itemList[index].salePrice).toLocaleString() + + updateList = state.itemList.map((item) => { + if (item.dispOrder === dispOrder) { + return { ...item, ...updates } + } else { + return item + } + }) + + setState({ + itemList: updateList, + }) + + setItemChangeYn(true) + } + + // 단가 변경 + const onChangeSalePrice = (value, dispOrder, index) => { + //itemChangeFlg, partAdd 받아온 그대로 + let salePrice + salePrice = Number(value.replaceAll(',', '')) + if (isNaN(salePrice)) { + salePrice = 0 + } else { + salePrice = salePrice.toLocaleString() + } + let updateList = [] + let updates = {} + updates.salePrice = salePrice + updates.saleTotPrice = (Number(value.replaceAll(',', '')) * state.itemList[index].amount).toLocaleString() + + updateList = state.itemList.map((item) => { + if (item.dispOrder === dispOrder) { + return { ...item, ...updates } + } else { + return item + } + }) + + setState({ + itemList: updateList, + }) + + setItemChangeYn(true) + } + // 아이템 자동완성 검색시 아이템 변경 - const onChangeDisplayItem = (itemId, dispOrder) => { + const onChangeDisplayItem = (itemId, dispOrder, index) => { const param = { itemId: itemId, } @@ -333,17 +396,37 @@ export default function Estimate({ params }) { updates.specialNoteCd = res.spnAttrCds updates.itemGroup = res.itemGroup updates.delFlg = '0' // 삭제플래그 0 + updates.saleTotPrice = res.salePrice * state.itemList[index].amount + //104671 + let bomList = res.itemBomList updateList = state.itemList.map((item) => { if (item.dispOrder === dispOrder) { return { ...item, ...updates } + } else if (item.paDispOrder === dispOrder) { + return { ...item, delFlg: '1' } } else { return item } }) - setState({ - itemList: updateList, - }) + //paDispOrder + if (bomList) { + bomList.map((bomItem, index) => { + let newItemDispOrder = Math.max(...state.itemList.map((item) => item.dispOrder)) + bomItem.dispOrder = index + 1 + newItemDispOrder + bomItem.delFlg = '0' + bomItem.objectNo = objectNo + bomItem.planNo = planNo + }) + + setState({ + itemList: [...updateList, ...bomList], + }) + } else { + setState({ + itemList: updateList, + }) + } setItemChangeYn(true) }) @@ -358,6 +441,9 @@ export default function Estimate({ params }) { if (row2 === row.dispOrder) { delList.push({ ...row }) } + if (row2 === row.paDispOrder) { + delList.push({ ...row }) + } }) }) @@ -390,14 +476,16 @@ export default function Estimate({ params }) { useEffect(() => { if (itemChangeYn) { - // console.log('아이템에 뭔가 변화가 일어났어', itemChangeYn) - console.log('아이템상태가져오기::::::::::', state.itemList) - } + console.log('아이템 상태 가져오기::::::::::', state.itemList) + // console.log('토탈쪽 셋팅해주기위한 함수::::::', itemList) + //delFlg 0인거 중에.. + setItemChangeYn(false) - //다시 false로 돌리기 여기서할지 가격정보 변경하는거 끝나고할지.. - setItemChangeYn(false) + // settingToalInfo(state.itemList) + } }, [itemChangeYn]) + // const settingToalInfo = (itemList) => {} return (
@@ -588,10 +676,10 @@ export default function Estimate({ params }) { <>
- +
- +
@@ -880,7 +968,7 @@ export default function Estimate({ params }) { type="button" onClick={() => { addItem() - setItemChangeYn(true) + // setItemChangeYn(true) }} > @@ -926,16 +1014,17 @@ export default function Estimate({ params }) { {state?.itemList.length > 0 && - state.itemList.map((item) => { + state.itemList.map((item, index) => { if (item.delFlg === '0') { return ( <> - +
onChangeSelect(item.dispOrder)} checked={selection.has(item.dispOrder) ? true : false} /> @@ -955,13 +1044,13 @@ export default function Estimate({ params }) { options={displayItemList} onChange={(e) => { if (isObjectNotEmpty(e)) { - onChangeDisplayItem(e.itemId, item.dispOrder) + onChangeDisplayItem(e.itemId, item.dispOrder, index) } }} getOptionLabel={(x) => x.itemName} getOptionValue={(x) => x.itemId} - isClearable={true} - isDisabled={false} + isClearable={false} + isDisabled={item?.paDispOrder ? true : false} value={displayItemList.filter(function (option) { return option.itemId === item.itemId })} @@ -997,11 +1086,10 @@ export default function Estimate({ params }) { { - //onChangeDisplayItem참고 - //itemChangeFlg = 1, partAdd = 0 셋팅 - console.log('수량변경::::::::', e.target.value) + onChangeAmount(e.target.value, item.dispOrder, index) }} />
@@ -1013,12 +1101,22 @@ export default function Estimate({ params }) { { - //onChangeDisplayItem참고 - //itemChangeFlg, partAdd 받아온 그대로 - console.log('단가변경:::::::', e.target.value) + onChangeSalePrice(e.target.value, item.dispOrder, index) }} />
@@ -1027,7 +1125,7 @@ export default function Estimate({ params }) {
*/} - {convertNumberToPriceDecimal(item?.saleTotPrice)} + {item?.saleTotPrice} ) diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js index 5c29dcc0..07f50ec8 100644 --- a/src/hooks/floorPlan/estimate/useEstimateController.js +++ b/src/hooks/floorPlan/estimate/useEstimateController.js @@ -82,7 +82,9 @@ export const useEstimateController = (planNo) => { } const addItem = () => { - const newItemDispOrder = Math.max(...state.itemList.map((item) => item.dispOrder)) + 1 + // const newItemDispOrder = (Math.max(...state.itemList.map((item) => item.dispOrder)) / 100 + 1) * 100 + let newItemDispOrder = Math.max(...state.itemList.map((item) => item.dispOrder)) + newItemDispOrder = (Math.floor(newItemDispOrder / 100) + 1) * 100 setState({ itemList: [ ...state.itemList, @@ -96,8 +98,8 @@ export const useEstimateController = (planNo) => { amount: '', //수량 unitPrice: '0', unit: '', //단위 - salePrice: '0', //단가 - saleTotPrice: '0', //금액(부가세별도) + salePrice: '', //단가 + saleTotPrice: '', //금액(부가세별도) itemChangeFlg: '1', //추가시 체인지플래그 1로 partAdd: '1', //NEW 체인지 플래그 delFlg: '0', //삭제 플래그 0 삭제하면 1 @@ -143,18 +145,18 @@ export const useEstimateController = (planNo) => { // console.log('첨부파일:::::', estimateData.fileList) //첨부파일을 첨부안했는데 //아이템 fileUploadFlg가1(첨부파일 필수)이 1개라도 있는데 후일 자료 제출(fileFlg) 체크안했으면(0) alert 저장안돼 - // if (estimateData.fileList.length < 1) { - // if (estimateData.itemList.length > 1) { - // estimateData.itemList.map((row) => { - // if (row.fileUploadFlg === '1') { - // if (estimateData.fileFlg === '0') { - // alert(getMessage('estimate.detail.save.requiredMsg')) - // flag = false - // } - // } - // }) - // } - // } + if (estimateData.fileList.length < 1) { + if (estimateData.itemList.length > 1) { + estimateData.itemList.map((row) => { + if (row.fileUploadFlg === '1') { + if (estimateData.fileFlg === '0') { + alert(getMessage('estimate.detail.save.requiredMsg')) + flag = false + } + } + }) + } + } if (flag) { //1. 첨부파일 저장시작 @@ -184,24 +186,12 @@ export const useEstimateController = (planNo) => { console.log('최종 정보::;', estimateData) console.log('최종 남은 아이템정보:::', estimateData.itemList) //2. 상세데이터 저장 - return + // return await promisePost({ url: `${ESTIMATE_API_ENDPOINT}/save-estimate`, data: estimateData }).then((res) => { if (res) { alert(getMessage('estimate.detail.save.alertMsg')) } }) - - // try { - // const result = await promisePost({ - // url: ESTIMATE_API_ENDPOINT, - // data: estimateData, - // }) - // alert(getMessage('estimate.detail.save.alertMsg')) - // return result - // } catch (error) { - // console.error('Failed to submit estimate:', error) - // throw error - // } } }