refactor: update survey submission handling and improve data validation
This commit is contained in:
parent
46e6bc36f8
commit
749dd30ecb
@ -115,21 +115,18 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise<
|
||||
try {
|
||||
const { id } = await params
|
||||
const body = await request.json()
|
||||
|
||||
if (body.targetId) {
|
||||
// @ts-ignore
|
||||
const survey = await prisma.SD_SURVEY_SALES_BASIC_INFO.update({
|
||||
where: { ID: Number(id) },
|
||||
data: {
|
||||
SUBMISSION_STATUS: true,
|
||||
SUBMISSION_DATE: new Date(),
|
||||
SUBMISSION_TARGET_ID: body.targetId,
|
||||
SUBMISSION_TARGET_NM: body.targetNm,
|
||||
UPT_DT: new Date(),
|
||||
},
|
||||
})
|
||||
return NextResponse.json({ message: 'Survey confirmed successfully', data: survey })
|
||||
}
|
||||
// @ts-ignore
|
||||
const survey = await prisma.SD_SURVEY_SALES_BASIC_INFO.update({
|
||||
where: { ID: Number(id) },
|
||||
data: {
|
||||
SUBMISSION_STATUS: true,
|
||||
SUBMISSION_DATE: new Date(),
|
||||
SUBMISSION_TARGET_ID: body.targetId,
|
||||
SUBMISSION_TARGET_NM: body.targetNm,
|
||||
UPT_DT: new Date(),
|
||||
},
|
||||
})
|
||||
return NextResponse.json({ message: 'Survey confirmed successfully', data: survey })
|
||||
} catch (error) {
|
||||
console.error('Error updating survey:', error)
|
||||
return NextResponse.json({ error: 'Failed to update survey' }, { status: 500 })
|
||||
|
||||
@ -10,7 +10,6 @@ import { useSpinnerStore } from '@/store/spinnerStore'
|
||||
export default function SurveySaleDownloadPdf() {
|
||||
const params = useParams()
|
||||
const id = params.id
|
||||
const router = useRouter()
|
||||
|
||||
const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id))
|
||||
const { setIsShow } = useSpinnerStore()
|
||||
@ -50,7 +49,7 @@ export default function SurveySaleDownloadPdf() {
|
||||
|
||||
generatePDF(targetRef, options).then(() => {
|
||||
setIsShow(false)
|
||||
router.push(`/survey-sale/${id}`)
|
||||
alert('PDFの生成が完了しました。 ポップアップウィンドウからダウンロードしてください。')
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -11,8 +11,8 @@ import { useSpinnerStore } from '@/store/spinnerStore'
|
||||
|
||||
interface SubmitFormData {
|
||||
saleBase: string | null
|
||||
targetId: string
|
||||
targetNm: string
|
||||
targetId: string | null
|
||||
targetNm: string | null
|
||||
sender: string
|
||||
receiver: string[] | string
|
||||
reference: string | null
|
||||
@ -38,8 +38,8 @@ export default function SurveySaleSubmitPopup() {
|
||||
|
||||
const [submitData, setSubmitData] = useState<SubmitFormData>({
|
||||
saleBase: null,
|
||||
targetId: '',
|
||||
targetNm: '',
|
||||
targetId: null,
|
||||
targetNm: null,
|
||||
sender: '',
|
||||
receiver: [],
|
||||
reference: null,
|
||||
@ -57,8 +57,8 @@ export default function SurveySaleSubmitPopup() {
|
||||
}
|
||||
setSubmitData({
|
||||
...submitData,
|
||||
targetId: session?.role === 'Builder' ? surveyDetail?.storeId ?? '' : '',
|
||||
targetNm: session?.role === 'Builder' ? surveyDetail?.store ?? '' : '',
|
||||
targetId: session?.role === 'Builder' ? surveyDetail?.storeId ?? null : null,
|
||||
targetNm: session?.role === 'Builder' ? surveyDetail?.store ?? null : null,
|
||||
sender: session?.email ?? '',
|
||||
title: '[HANASYS現地調査] 調査物件が提出. (' + surveyDetail?.srlNo + ')',
|
||||
})
|
||||
@ -67,7 +67,7 @@ export default function SurveySaleSubmitPopup() {
|
||||
const FORM_FIELDS: FormField[] = [
|
||||
{ id: 'sender', name: '発送者', required: true },
|
||||
{ id: 'saleBase', name: '提出地点選択', required: session?.role === 'Admin' },
|
||||
{ id: 'targetNm', name: '提出販売店', required: session?.role === 'Admin_Sub' || session?.role === 'Builder' },
|
||||
{ id: 'targetNm', name: '提出販売店', required: session?.role !== 'Admin' },
|
||||
{ id: 'receiver', name: '受信者', required: true },
|
||||
{ id: 'reference', name: '参考', required: false },
|
||||
{ id: 'title', name: 'タイトル', required: true },
|
||||
@ -77,9 +77,6 @@ export default function SurveySaleSubmitPopup() {
|
||||
const { submitSurvey, isSubmittingSurvey } = useSurvey(Number(routeId))
|
||||
|
||||
const handleInputChange = (field: keyof SubmitFormData, value: string) => {
|
||||
if (field === 'receiver' && session?.role === 'Partner') {
|
||||
setSubmitData((prev) => ({ ...prev, targetNm: value }))
|
||||
}
|
||||
setSubmitData((prev) => ({ ...prev, [field]: value }))
|
||||
}
|
||||
|
||||
@ -87,7 +84,7 @@ export default function SurveySaleSubmitPopup() {
|
||||
const requiredFields = FORM_FIELDS.filter((field) => field.required)
|
||||
|
||||
for (const field of requiredFields) {
|
||||
if (data[field.id]?.length === 0) {
|
||||
if (data[field.id] === '' || data[field.id] === null || data[field.id]?.length === 0) {
|
||||
alert(`${field.name}は必須入力項目です。`)
|
||||
const element = document.getElementById(field.id)
|
||||
if (element) {
|
||||
@ -110,16 +107,17 @@ export default function SurveySaleSubmitPopup() {
|
||||
})
|
||||
.then(() => {
|
||||
if (!isSubmittingSurvey) {
|
||||
submitSurvey({ targetId: submitData.targetId, targetNm: submitData.targetNm })
|
||||
alert('提出が完了しました。')
|
||||
// submitSurvey({ targetId: submitData.targetId, targetNm: submitData.targetNm })
|
||||
popupController.setSurveySaleSubmitPopup(false)
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error sending email:', error)
|
||||
alert('メール送信に失敗しました。')
|
||||
alert('メール送信に失敗しました。 再度送信してください。')
|
||||
})
|
||||
.finally(() => {
|
||||
submitSurvey({ targetId: submitData.targetId, targetNm: submitData.targetNm })
|
||||
setIsShow(false)
|
||||
popupController.setSurveySaleSubmitPopup(false)
|
||||
})
|
||||
@ -139,7 +137,7 @@ export default function SurveySaleSubmitPopup() {
|
||||
if (field.id === 'saleBase' && session?.role !== 'Admin') {
|
||||
return null
|
||||
}
|
||||
if (field.id === 'targetNm' && (session?.role === 'Admin' || session?.role === 'Partner')) {
|
||||
if (field.id === 'targetNm' && session?.role === 'Admin') {
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
@ -29,9 +29,6 @@ export default function ButtonForm(props: {
|
||||
...props.data.basic,
|
||||
detailInfo: props.data.roof,
|
||||
})
|
||||
|
||||
console.log(session)
|
||||
console.log(props.data.basic)
|
||||
// --------------------------------------------------------------
|
||||
// 권한
|
||||
|
||||
@ -190,6 +187,19 @@ export default function ButtonForm(props: {
|
||||
)
|
||||
}
|
||||
|
||||
//TODO: 추가확인 필요 (T01 계정이 어떤 조사매물을 수정/삭제 할 수 있는지)
|
||||
if (mode === 'READ' && session?.role === 'T01' && (!isSubmit || props.data.basic.submissionTargetId !== session.storeId)) {
|
||||
return (
|
||||
<>
|
||||
<div className="sale-form-btn-wrap">
|
||||
<div className="btn-flex-wrap">
|
||||
<ListButton />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
{mode === 'READ' && (
|
||||
|
||||
@ -23,19 +23,23 @@ export default function DataTable() {
|
||||
const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id))
|
||||
|
||||
if (isLoadingSurveyDetail) {
|
||||
return <></>
|
||||
return null
|
||||
}
|
||||
|
||||
const submitStatus = () => {
|
||||
if (session?.role === 'Admin') {
|
||||
return <div>HWJ</div>
|
||||
const { submissionTargetNm, submissionTargetId } = surveyDetail ?? {}
|
||||
|
||||
if (!submissionTargetNm) {
|
||||
return null
|
||||
}
|
||||
if (session?.role === 'Partner') {
|
||||
return <div>{surveyDetail?.submissionTargetNm}</div>
|
||||
|
||||
if (!submissionTargetId) {
|
||||
return <div>{submissionTargetNm}</div>
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
({surveyDetail?.submissionTargetNm} - {surveyDetail?.submissionTargetId})
|
||||
({submissionTargetNm} - {submissionTargetId})
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@ -66,7 +66,7 @@ export function useSurvey(id?: number): {
|
||||
createSurvey: (survey: SurveyRegistRequest) => Promise<number>
|
||||
updateSurvey: ({ survey, isTemporary, storeId }: { survey: SurveyRegistRequest; isTemporary: boolean; storeId?: string }) => void
|
||||
deleteSurvey: () => Promise<boolean>
|
||||
submitSurvey: (params: { saveId?: number; targetId?: string; targetNm?: string; storeId?: string; srlNo?: string }) => void
|
||||
submitSurvey: (params: { targetId?: string | null; targetNm?: string | null }) => void
|
||||
validateSurveyDetail: (surveyDetail: SurveyDetailRequest) => string
|
||||
getZipCode: (zipCode: string) => Promise<ZipCode[] | null>
|
||||
refetchSurveyList: () => void
|
||||
@ -163,14 +163,11 @@ export function useSurvey(id?: number): {
|
||||
})
|
||||
|
||||
const { mutateAsync: submitSurvey, isPending: isSubmittingSurvey } = useMutation({
|
||||
mutationFn: async ({ targetId, targetNm, storeId, srlNo }: { targetId?: string; targetNm?: string; storeId?: string; srlNo?: string }) => {
|
||||
mutationFn: async ({ targetId, targetNm }: { targetId?: string | null; targetNm?: string | null }) => {
|
||||
if (!id) throw new Error('id is required')
|
||||
const resp = await axiosInstance(null).patch<boolean>(`/api/survey-sales/${id}`, {
|
||||
targetId,
|
||||
targetNm,
|
||||
storeId,
|
||||
srlNo,
|
||||
role: session?.role ?? null,
|
||||
})
|
||||
return resp.data
|
||||
},
|
||||
|
||||
@ -44,7 +44,6 @@ const initialState: InitialState = {
|
||||
builderNm: null,
|
||||
isLoggedIn: false,
|
||||
role: null,
|
||||
builderNm: null,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user