diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx
index 442c597b..4d816f4b 100644
--- a/src/components/estimate/Estimate.jsx
+++ b/src/components/estimate/Estimate.jsx
@@ -15,7 +15,7 @@ import { useCommonCode } from '@/hooks/common/useCommonCode'
import { useEstimateController } from '@/hooks/floorPlan/estimate/useEstimateController'
import { SessionContext } from '@/app/SessionProvider'
import Select, { components } from 'react-select'
-// import EstimateItemTable from './EstimateItemTable'
+import { convertNumberToPriceDecimal } from '@/util/common-utils'
export default function Estimate({ params }) {
const { session } = useContext(SessionContext)
@@ -36,6 +36,8 @@ export default function Estimate({ params }) {
const [storePriceList, setStorePriceList] = useState([]) //가격표시 option
+ const [tempPriceCd, setTempPriceCd] = useState('')
+
const [startDate, setStartDate] = useState(new Date())
const singleDatePickerProps = {
startDate,
@@ -47,7 +49,7 @@ export default function Estimate({ params }) {
//견적서 상세데이터
const { state, setState } = useEstimateController(params.pid)
- const [itemList, setItemList] = useState([])
+ const [itemList, setItemList] = useState([]) //기존 아이템 리스트
//견적특이사항 List
const [specialNoteList, setSpecialNoteList] = useState([])
@@ -151,9 +153,13 @@ export default function Estimate({ params }) {
objectNo: objectNo,
no: no,
}
+
await promisePost({ url: 'api/file/fileDelete', data: delParams }).then((res) => {
if (res.status === 204) {
setOriginFiles(originFiles.filter((file) => file.objectNo === objectNo && file.no !== no))
+ setState({
+ fileList: originFiles.filter((file) => file.objectNo === objectNo && file.no !== no),
+ })
}
})
}
@@ -165,13 +171,14 @@ export default function Estimate({ params }) {
}
}, [state?.itemList])
- //가격표시 option 세팅
+ //가격표시 option 최초세팅
useEffect(() => {
const param = {
saleStoreId: session.storeId,
sapSalesStoreCd: session.custCd,
docTpCd: state?.estimateType,
}
+
const apiUrl = `/api/estimate/price/store-price-list?${queryStringFormatter(param)}`
get({ url: apiUrl }).then((res) => {
if (isNotEmptyArray(res?.data)) {
@@ -180,21 +187,58 @@ export default function Estimate({ params }) {
})
}, [state?.estimateType])
+ useEffect(() => {
+ if (state.priceCd) {
+ setTempPriceCd(state.priceCd)
+ }
+ }, [state?.priceCd])
+
+ //가격표시 option 변경시
+ useEffect(() => {
+ if (tempPriceCd !== '') {
+ const param = {
+ saleStoreId: session.storeId,
+ sapSalesStoreCd: session.custCd,
+ docTpCd: tempPriceCd,
+ }
+
+ const apiUrl = `/api/estimate/price/store-price-list?${queryStringFormatter(param)}`
+ get({ url: apiUrl }).then((res) => {
+ if (isNotEmptyArray(res?.data)) {
+ setStorePriceList(res.data)
+ }
+ })
+ }
+ }, [tempPriceCd])
+
//Pricing 버튼
const handlePricing = async (priceCd) => {
const param = {
saleStoreId: session.storeId,
sapSalesStoreCd: session.custCd,
docTpCd: state.estimateType,
- priceCd: priceCd,
- itemIdList: [], //아이템
+ priceCd: session.storeLvl === '1' ? tempPriceCd : priceCd,
+ itemIdList: state.itemList, //아이템 최초정보로 호출
}
- console.log('param::', param)
- return
+ // console.log('프라이싱파람::', param)
await promisePost({ url: '/api/estimate/price/item-price-list', data: param }).then((res) => {
- console.log('프라이싱결과::::::', res)
- //아이템쪽 다 새로고침............SUCK!!!
+ if (res) {
+ if (res.status === 200) {
+ const data = res.data
+ if (data.result.code === 200) {
+ if (isNotEmptyArray(data.data2)) {
+ //아이템쪽 다 새로고침............
+ //성공후..
+ //기존itemList랑 프라이싱결과랑 비교해서 단가만 업뎃 서로 갯수가 안맞을 수 있음 없는 itemId면 unitPrice 0으로
+ //itemId로 비교해서 단가정보만 업데이트
+ setState({
+ priceCd: session.storeLvl === '1' ? tempPriceCd : priceCd,
+ })
+ }
+ }
+ }
+ }
})
}
@@ -249,7 +293,7 @@ export default function Estimate({ params }) {
{/* 1차 판매점명 */}
| {getMessage('estimate.detail.saleStoreId')} |
- |
+ {state?.firstSaleStoreName} |
{/* 견적일 */}
{getMessage('estimate.detail.estimateDate')} *
@@ -263,7 +307,7 @@ export default function Estimate({ params }) {
|
{/* 2차 판매점명 */}
| {getMessage('estimate.detail.otherSaleStoreId')} |
- |
+ {state?.agencySaleStoreName} |
{/* 담당자 */}
{getMessage('estimate.detail.receiveUser')} *
@@ -622,7 +666,7 @@ export default function Estimate({ params }) {
|
- {getMessage('estimate.detail.itemTableHeader.col1')} |
- {getMessage('estimate.detail.itemTableHeader.col2')} |
- {getMessage('estimate.detail.itemTableHeader.col3')} |
- {getMessage('estimate.detail.itemTableHeader.col4')} |
- {getMessage('estimate.detail.itemTableHeader.col5')} |
- {getMessage('estimate.detail.itemTableHeader.col6')} |
- {getMessage('estimate.detail.itemTableHeader.col7')} |
+ {getMessage('estimate.detail.itemTableHeader.dispOrder')} |
+ {getMessage('estimate.detail.itemTableHeader.itemId')} |
+ {getMessage('estimate.detail.itemTableHeader.itemNo')} |
+ {getMessage('estimate.detail.itemTableHeader.amount')} |
+ {getMessage('estimate.detail.itemTableHeader.unit')} |
+ {getMessage('estimate.detail.itemTableHeader.salePrice')} |
+ {getMessage('estimate.detail.itemTableHeader.saleTotPrice')} |
-
+ {itemList.length > 0 &&
+ itemList.map((item, index) => {
+ return (
+
+ |
+
+
+
+
+ |
+ {item?.dispOrder * 100} |
+
+
+
+
+
+ {item?.itemChangeFlg === '1' && (
+
+
+
+ )}
+
+ |
+
+
+ {item?.itemNo}
+
+ {item?.fileUploadFlg === '1' && }
+ {item?.specialNoteCd && (
+
+ )}
+
+
+ |
+
+
+
+
+ |
+ {item.unit} |
+
+
+
+
+
+ {/*
+ OPEN아이콘 처리
+ */}
+
+ |
+ {convertNumberToPriceDecimal(item?.saleTotPrice)} |
+
+ )
+ })}
+ {/*
@@ -716,7 +819,7 @@ export default function Estimate({ params }) {
100 |
- {/* */}
+
@@ -748,7 +851,7 @@ export default function Estimate({ params }) {
|
5,561,000 |
- |
+ */}
diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js
index 5a0c49e1..df3e4450 100644
--- a/src/hooks/floorPlan/estimate/useEstimateController.js
+++ b/src/hooks/floorPlan/estimate/useEstimateController.js
@@ -22,29 +22,10 @@ const defaultEstimateData = {
estimateType: 'YJOD', //주문분류
remarks: '', //비고
estimateOption: '', //견적특이사항
- //아이템에 필요없는거 빼기
- itemList: [
- // {
- // amount: '',
- // fileUploadFlg: '',
- // itemChangeFlg: '',
- // itemGroup: '',
- // itemId: '', //키값??
- // itemName: '',
- // itemNo: '',
- // moduleFlg: '',
- // objectNo: '',
- // pkgMaterialFlg: '',
- // planNo: '',
- // pnowW: '',
- // salePrice: '',
- // saleTotPrice: '',
- // specification: '',
- // unit: '',
- // },
- ],
+ itemList: [],
fileList: [],
fileFlg: '0', //후일 자료 제출 (체크 1 노체크 0)
+ priceCd: '',
}
// Helper functions
@@ -100,17 +81,17 @@ export const useEstimateController = (planNo) => {
itemList: [
...state.itemList,
{
+ dispOrder: '1',
itemId: newItemId,
amount: '',
- fileUploadFlg: '',
- itemChangeFlg: '',
+ fileUploadFlg: '0',
+ itemChangeFlg: '0',
+ pkgMaterialFlg: '0',
+ specialNoteCd: '',
itemGroup: '',
itemName: '',
itemNo: '',
moduleFlg: '',
- objectNo: '',
- pkgMaterialFlg: '',
- planNo: '',
pnowW: '',
salePrice: '',
saleTotPrice: '',
@@ -130,6 +111,7 @@ export const useEstimateController = (planNo) => {
//0. 필수체크
let flag = true
console.log('::담긴 estimateData:::', estimateData)
+
//아이템 fileUploadFlg가1(첨부파일 필수)이 1개라도 있는데 후일 자료 제출(fileFlg) 체크안했으면(0) alert 저장안돼
if (estimateData.itemList.length > 1) {
estimateData.itemList.map((row) => {
@@ -149,29 +131,31 @@ export const useEstimateController = (planNo) => {
formData.append('planNo', estimateData.planNo)
formData.append('category', '10')
formData.append('userId', estimateData.userId)
- for (const value of formData.values()) {
- console.log('formData::', value)
- }
+ // for (const value of formData.values()) {
+ // console.log('formData::', value)
+ // }
- await promisePost({ url: '/api/file/fileUpload', data: formData }).then((res) => {
- console.log('파일저장결과::::::::::', res)
- })
+ await post({ url: '/api/file/fileUpload', data: formData })
//2. 상세데이터 저장
-
- console.log('상세저장시작!!')
return
- 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
- }
+ 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
+ // }
}
}
diff --git a/src/locales/ja.json b/src/locales/ja.json
index 15f2473b..3e79412e 100644
--- a/src/locales/ja.json
+++ b/src/locales/ja.json
@@ -849,13 +849,13 @@
"estimate.detail.showPrice.description4": "クリックして製品の特異性を確認する",
"estimate.detail.showPrice.btn2": "製品を追加",
"estimate.detail.showPrice.btn3": "製品削除",
- "estimate.detail.itemTableHeader.col1": "アイテム",
- "estimate.detail.itemTableHeader.col2": "品番",
- "estimate.detail.itemTableHeader.col3": "型板",
- "estimate.detail.itemTableHeader.col4": "数量",
- "estimate.detail.itemTableHeader.col5": "単位",
- "estimate.detail.itemTableHeader.col6": "単価",
- "estimate.detail.itemTableHeader.col7": "金額 (税別別)",
+ "estimate.detail.itemTableHeader.dispOrder": "アイテム",
+ "estimate.detail.itemTableHeader.itemId": "品番",
+ "estimate.detail.itemTableHeader.itemNo": "型板",
+ "estimate.detail.itemTableHeader.amount": "数量",
+ "estimate.detail.itemTableHeader.unit": "単位",
+ "estimate.detail.itemTableHeader.salePrice": "単価",
+ "estimate.detail.itemTableHeader.saleTotPrice": "金額 (税別別)",
"estimate.detail.docPopup.title": "ドキュメントダウンロードオプションの設定",
"estimate.detail.docPopup.explane": "ダウンロードする文書のオプションを選択したら、 [文書のダウンロード]ボタンをクリックします.",
"estimate.detail.docPopup.schUnitPriceFlg": "ダウンロードファイル",
diff --git a/src/locales/ko.json b/src/locales/ko.json
index d52334bf..a2ef69b3 100644
--- a/src/locales/ko.json
+++ b/src/locales/ko.json
@@ -855,13 +855,13 @@
"estimate.detail.showPrice.description4": "클릭하여 제품 특이사항 확인",
"estimate.detail.showPrice.btn2": "제품추가",
"estimate.detail.showPrice.btn3": "제품삭제",
- "estimate.detail.itemTableHeader.col1": "Item",
- "estimate.detail.itemTableHeader.col2": "품번",
- "estimate.detail.itemTableHeader.col3": "형명",
- "estimate.detail.itemTableHeader.col4": "수량",
- "estimate.detail.itemTableHeader.col5": "단위",
- "estimate.detail.itemTableHeader.col6": "단가",
- "estimate.detail.itemTableHeader.col7": "금액(부가세별도)",
+ "estimate.detail.itemTableHeader.dispOrder": "Item",
+ "estimate.detail.itemTableHeader.itemId": "품번",
+ "estimate.detail.itemTableHeader.itemNo": "형명",
+ "estimate.detail.itemTableHeader.amount": "수량",
+ "estimate.detail.itemTableHeader.unit": "단위",
+ "estimate.detail.itemTableHeader.salePrice": "단가",
+ "estimate.detail.itemTableHeader.saleTotPrice": "금액(부가세별도)",
"estimate.detail.docPopup.title": "문서다운로드 옵션설정",
"estimate.detail.docPopup.explane": "다운로드할 문서 옵션을 선택한 후 문서 다운로드 버튼을 클릭합니다.",
"estimate.detail.docPopup.schUnitPriceFlg": "다운로드 파일",