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

View File

@ -227,11 +227,21 @@ export async function POST(request: Request) {
try { try {
const body = await request.json() const body = await request.json()
// 임시 저장 시 임시저장 + 000 으로 저장 const role =
// 기본 저장 시 판매점ID + yyMMdd + 000 으로 저장 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 = const baseSrlNo =
body.survey.srlNo ?? body.survey.srlNo ??
body.storeId + role +
body.storeId +
new Date().getFullYear().toString().slice(-2) + new Date().getFullYear().toString().slice(-2) +
(new Date().getMonth() + 1).toString().padStart(2, '0') + (new Date().getMonth() + 1).toString().padStart(2, '0') +
new Date().getDate().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({ const lastSurvey = await prisma.SD_SURVEY_SALES_BASIC_INFO.findFirst({
where: { where: {
SRL_NO: { SRL_NO: {
startsWith: body.storeId, startsWith: role + body.storeId,
}, },
}, },
orderBy: { 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) { if (routeId) {
window.neoConfirm('削除しますか?', async () => { window.neoConfirm('削除しますか?', async () => {
await deleteSurvey() await deleteSurvey()
alert('削除されました。')
router.push('/survey-sale') router.push('/survey-sale')
}) })
} }
@ -269,9 +270,6 @@ function SubmitButton(props: { handleSubmit: () => void; setTempTargetId: (targe
<i className="btn-arr"></i> <i className="btn-arr"></i>
</button> </button>
</div> </div>
<div>
<input type="text" placeholder="temp target id" onChange={(e) => setTempTargetId(e.target.value)} />
</div>
</> </>
) )
} }

View File

@ -1,11 +1,11 @@
'use client' '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 { useEffect, useState } from 'react'
import ButtonForm from './ButtonForm' import ButtonForm from './ButtonForm'
import BasicForm from './BasicForm' import BasicForm from './BasicForm'
import RoofForm from './RoofForm' import RoofForm from './RoofForm'
import { useParams, useRouter, useSearchParams } from 'next/navigation' import { useParams, useSearchParams } from 'next/navigation'
import { useServey } from '@/hooks/useSurvey' import { useServey } from '@/hooks/useSurvey'
const roofInfoForm: SurveyDetailRequest = { 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 { useMemo } from 'react'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { useSurveyFilterStore } from '@/store/surveyFilterStore' import { useSurveyFilterStore } from '@/store/surveyFilterStore'
@ -63,7 +63,6 @@ export function useServey(id?: number): {
isUpdatingSurvey: boolean isUpdatingSurvey: boolean
isDeletingSurvey: boolean isDeletingSurvey: boolean
createSurvey: (survey: SurveyRegistRequest) => Promise<number> createSurvey: (survey: SurveyRegistRequest) => Promise<number>
createSurveyDetail: (params: { surveyId: number; surveyDetail: SurveyDetailCoverRequest }) => void
updateSurvey: ({ survey, isTemporary, storeId }: { survey: SurveyRegistRequest; isTemporary: boolean; storeId?: string }) => void updateSurvey: ({ survey, isTemporary, storeId }: { survey: SurveyRegistRequest; isTemporary: boolean; storeId?: string }) => void
deleteSurvey: () => Promise<boolean> deleteSurvey: () => Promise<boolean>
submitSurvey: (params: { saveId?: number; targetId?: string; storeId?: string; srlNo?: string }) => void 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({ const { mutateAsync: createSurvey, isPending: isCreatingSurvey } = useMutation({
mutationFn: async (survey: SurveyRegistRequest) => { 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 return resp.data.id ?? 0
}, },
onSuccess: (data) => { onSuccess: (data) => {
@ -137,6 +140,7 @@ export function useServey(id?: number): {
survey: survey, survey: survey,
isTemporary: isTemporary, isTemporary: isTemporary,
storeId: storeId, storeId: storeId,
role: session?.role ?? null,
}) })
return resp.data 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({ const { mutateAsync: submitSurvey } = useMutation({
mutationFn: async ({ saveId, targetId, storeId, srlNo }: { saveId?: number; targetId?: string; storeId?: string; srlNo?: string }) => { mutationFn: async ({ saveId, targetId, storeId, srlNo }: { saveId?: number; targetId?: string; storeId?: string; srlNo?: string }) => {
const submitId = saveId ?? id const submitId = saveId ?? id
@ -177,6 +170,7 @@ export function useServey(id?: number): {
targetId, targetId,
storeId, storeId,
srlNo, srlNo,
role: session?.role ?? null,
}) })
return resp.data return resp.data
}, },
@ -240,7 +234,6 @@ export function useServey(id?: number): {
createSurvey, createSurvey,
updateSurvey, updateSurvey,
deleteSurvey, deleteSurvey,
createSurveyDetail,
submitSurvey, submitSurvey,
validateSurveyDetail, validateSurveyDetail,
getZipCode, getZipCode,