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
- // }
}
}