fix: change SRL_NO save rules

This commit is contained in:
Dayoung 2025-05-26 10:58:25 +09:00
parent b2aefe7ea8
commit 0fbb8025f2
5 changed files with 34 additions and 29 deletions

View File

@ -19,14 +19,16 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
}
}
const getNewSrlNo = async (srlNo: string, storeId: string) => {
const getNewSrlNo = async (srlNo: string, storeId: string, role: string) => {
const srlRole = role === 'T01' || role === 'Admin' ? 'HO' : role === 'Admin_Sub' || role === 'Builder' ? 'HM' : ''
let newSrlNo = srlNo
if (srlNo.startsWith('一時保存')) {
//@ts-ignore
const lastSurvey = await prisma.SD_SURVEY_SALES_BASIC_INFO.findFirst({
where: {
SRL_NO: {
startsWith: storeId,
startsWith: srlRole + storeId,
},
},
orderBy: {
@ -34,7 +36,9 @@ const getNewSrlNo = async (srlNo: string, storeId: string) => {
},
})
const lastNo = lastSurvey ? parseInt(lastSurvey.SRL_NO.slice(-3)) : 0
newSrlNo =
srlRole +
storeId +
new Date().getFullYear().toString().slice(-2) +
(new Date().getMonth() + 1).toString().padStart(2, '0') +
@ -51,7 +55,7 @@ export async function PUT(request: NextRequest, { params }: { params: Promise<{
const { detailInfo, ...basicInfo } = body.survey
// PUT 요청 시 임시저장 여부 확인 후 임시저장 시 기존 SRL_NO 사용, 기본 저장 시 새로운 SRL_NO 생성
const newSrlNo = body.isTemporary ? body.survey.srlNo : await getNewSrlNo(body.survey.srlNo, body.storeId)
const newSrlNo = body.isTemporary ? body.survey.srlNo : await getNewSrlNo(body.survey.srlNo, body.storeId, body.role)
// @ts-ignore
const survey = await prisma.SD_SURVEY_SALES_BASIC_INFO.update({
where: { ID: Number(id) },
@ -113,7 +117,7 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise<
const body = await request.json()
// 제출 시 기존 SRL_NO 확인 후 '임시저장'으로 시작하면 새로운 SRL_NO 생성
const newSrlNo = await getNewSrlNo(body.srlNo, body.storeId)
const newSrlNo = await getNewSrlNo(body.srlNo, body.storeId, body.role)
if (body.targetId) {
// @ts-ignore

View File

@ -227,11 +227,21 @@ export async function POST(request: Request) {
try {
const body = await request.json()
// 임시 저장 시 임시저장 + 000 으로 저장
// 기본 저장 시 판매점ID + yyMMdd + 000 으로 저장
const role =
body.role === 'T01' || body.role === 'Admin'
? 'HO'
: body.role === 'Admin_Sub' || body.role === 'Builder'
? 'HM'
: body.role === 'Partner'
? ''
: null
// 임시 저장 시 임시저장으로 저장
// 기본 저장 시 (HO/HM) + 판매점ID + yyMMdd + 000 으로 저장
const baseSrlNo =
body.survey.srlNo ??
body.storeId +
role +
body.storeId +
new Date().getFullYear().toString().slice(-2) +
(new Date().getMonth() + 1).toString().padStart(2, '0') +
new Date().getDate().toString().padStart(2, '0')
@ -240,7 +250,7 @@ export async function POST(request: Request) {
const lastSurvey = await prisma.SD_SURVEY_SALES_BASIC_INFO.findFirst({
where: {
SRL_NO: {
startsWith: body.storeId,
startsWith: role + body.storeId,
},
},
orderBy: {

View File

@ -29,7 +29,7 @@ export default function ButtonForm(props: {
})
// !!!!!!!!!!
const [tempTargetId, setTempTargetId] = useState('')
const [tempTargetId, setTempTargetId] = useState('TEST')
// --------------------------------------------------------------
// 권한
@ -158,6 +158,7 @@ export default function ButtonForm(props: {
if (routeId) {
window.neoConfirm('削除しますか?', async () => {
await deleteSurvey()
alert('削除されました。')
router.push('/survey-sale')
})
}
@ -269,9 +270,6 @@ function SubmitButton(props: { handleSubmit: () => void; setTempTargetId: (targe
<i className="btn-arr"></i>
</button>
</div>
<div>
<input type="text" placeholder="temp target id" onChange={(e) => setTempTargetId(e.target.value)} />
</div>
</>
)
}

View File

@ -1,11 +1,11 @@
'use client'
import type { Mode, SurveyBasicInfo, SurveyBasicRequest, SurveyDetailRequest } from '@/types/Survey'
import type { Mode, SurveyBasicRequest, SurveyDetailRequest } from '@/types/Survey'
import { useEffect, useState } from 'react'
import ButtonForm from './ButtonForm'
import BasicForm from './BasicForm'
import RoofForm from './RoofForm'
import { useParams, useRouter, useSearchParams } from 'next/navigation'
import { useParams, useSearchParams } from 'next/navigation'
import { useServey } from '@/hooks/useSurvey'
const roofInfoForm: SurveyDetailRequest = {

View File

@ -1,4 +1,4 @@
import type { SurveyBasicInfo, SurveyDetailInfo, SurveyDetailRequest, SurveyDetailCoverRequest, SurveyRegistRequest } from '@/types/Survey'
import type { SurveyBasicInfo, SurveyDetailRequest, SurveyRegistRequest } from '@/types/Survey'
import { useMemo } from 'react'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { useSurveyFilterStore } from '@/store/surveyFilterStore'
@ -63,7 +63,6 @@ export function useServey(id?: number): {
isUpdatingSurvey: boolean
isDeletingSurvey: boolean
createSurvey: (survey: SurveyRegistRequest) => Promise<number>
createSurveyDetail: (params: { surveyId: number; surveyDetail: SurveyDetailCoverRequest }) => void
updateSurvey: ({ survey, isTemporary, storeId }: { survey: SurveyRegistRequest; isTemporary: boolean; storeId?: string }) => void
deleteSurvey: () => Promise<boolean>
submitSurvey: (params: { saveId?: number; targetId?: string; storeId?: string; srlNo?: string }) => void
@ -119,7 +118,11 @@ export function useServey(id?: number): {
const { mutateAsync: createSurvey, isPending: isCreatingSurvey } = useMutation({
mutationFn: async (survey: SurveyRegistRequest) => {
const resp = await axiosInstance(null).post<SurveyBasicInfo>('/api/survey-sales', { survey: survey, storeId: session?.storeId ?? null })
const resp = await axiosInstance(null).post<SurveyBasicInfo>('/api/survey-sales', {
survey: survey,
storeId: session?.storeId ?? null,
role: session?.role ?? null,
})
return resp.data.id ?? 0
},
onSuccess: (data) => {
@ -137,6 +140,7 @@ export function useServey(id?: number): {
survey: survey,
isTemporary: isTemporary,
storeId: storeId,
role: session?.role ?? null,
})
return resp.data
},
@ -158,17 +162,6 @@ export function useServey(id?: number): {
},
})
const { mutateAsync: createSurveyDetail } = useMutation({
mutationFn: async ({ surveyId, surveyDetail }: { surveyId: number; surveyDetail: SurveyDetailCoverRequest }) => {
const resp = await axiosInstance(null).patch<SurveyDetailInfo>(`/api/survey-sales/${surveyId}`, surveyDetail)
return resp.data
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['survey', 'list'] })
queryClient.invalidateQueries({ queryKey: ['survey', id] })
},
})
const { mutateAsync: submitSurvey } = useMutation({
mutationFn: async ({ saveId, targetId, storeId, srlNo }: { saveId?: number; targetId?: string; storeId?: string; srlNo?: string }) => {
const submitId = saveId ?? id
@ -177,6 +170,7 @@ export function useServey(id?: number): {
targetId,
storeId,
srlNo,
role: session?.role ?? null,
})
return resp.data
},
@ -240,7 +234,6 @@ export function useServey(id?: number): {
createSurvey,
updateSurvey,
deleteSurvey,
createSurveyDetail,
submitSurvey,
validateSurveyDetail,
getZipCode,