업무일지 프로젝트 선택 시 이전 기록 기반 기본값 자동 설정 기능 추가
- MachineBridge에 Jobreport_GetLastByProject API 추가 (pidx 또는 projectName 기반 마지막 업무일지 조회) - WebSocket 서버에 JOBREPORT_GET_LAST_BY_PROJECT 핸들러 추가 - communication.ts에 getLastJobReportByProject 메서드 추가 - JobreportEditModal에서 프로젝트 선택 시 자동으로 이전 기록의 요청부서, 패키지, 업무형태, 공정, 상태 값을 기본값으로 설정 - 윈폼(fJobReport_Add.cs)의 동일한 로직을 웹앱에 구현
This commit is contained in:
@@ -75,6 +75,8 @@ export function JobreportEditModal({
|
||||
const [processList, setProcessList] = useState<CommonCode[]>([]);
|
||||
const [statusList, setStatusList] = useState<CommonCode[]>([]);
|
||||
const [loadingCodes, setLoadingCodes] = useState(false);
|
||||
// 프로젝트 변경 추적 (이전 기록 불러오기 여부 판단)
|
||||
const [previousProjectIdx, setPreviousProjectIdx] = useState<number | null>(null);
|
||||
|
||||
// ESC 키로 닫기
|
||||
useEffect(() => {
|
||||
@@ -515,12 +517,70 @@ export function JobreportEditModal({
|
||||
<ProjectSearchDialog
|
||||
isOpen={showProjectSearch}
|
||||
onClose={() => setShowProjectSearch(false)}
|
||||
onSelect={(project) => {
|
||||
onFormChange({
|
||||
...formData,
|
||||
projectName: project.name,
|
||||
pidx: project.idx > 0 ? project.idx : -1,
|
||||
});
|
||||
onSelect={async (project) => {
|
||||
// 프로젝트가 변경된 경우에만 이전 기록 불러오기
|
||||
if (previousProjectIdx !== project.idx) {
|
||||
try {
|
||||
// 해당 프로젝트의 마지막 업무일지 조회
|
||||
const lastReport = await comms.getLastJobReportByProject(project.idx, project.name);
|
||||
if (lastReport.Success && lastReport.Data) {
|
||||
// 이전 기록의 값들을 기본값으로 설정
|
||||
const updatedFormData = {
|
||||
...formData,
|
||||
projectName: project.name,
|
||||
pidx: project.idx > 0 ? project.idx : -1
|
||||
};
|
||||
|
||||
// 이전 기록에서 값 가져오기 (null이 아닌 경우에만)
|
||||
if (lastReport.Data.requestpart) {
|
||||
updatedFormData.requestpart = lastReport.Data.requestpart;
|
||||
}
|
||||
if (lastReport.Data.package) {
|
||||
updatedFormData.package = lastReport.Data.package;
|
||||
}
|
||||
if (lastReport.Data.type) {
|
||||
updatedFormData.type = lastReport.Data.type;
|
||||
}
|
||||
if (lastReport.Data.jobgrp) {
|
||||
updatedFormData.jobgrp = lastReport.Data.jobgrp;
|
||||
}
|
||||
if (lastReport.Data.process) {
|
||||
updatedFormData.process = lastReport.Data.process;
|
||||
}
|
||||
if (lastReport.Data.status) {
|
||||
updatedFormData.status = lastReport.Data.status;
|
||||
}
|
||||
|
||||
onFormChange(updatedFormData);
|
||||
setPreviousProjectIdx(project.idx);
|
||||
} else {
|
||||
// 이전 기록이 없어도 프로젝트는 설정
|
||||
onFormChange({
|
||||
...formData,
|
||||
projectName: project.name,
|
||||
pidx: project.idx > 0 ? project.idx : -1
|
||||
});
|
||||
setPreviousProjectIdx(project.idx);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('이전 기록 불러오기 오류:', error);
|
||||
// 오류가 나도 프로젝트는 설정
|
||||
onFormChange({
|
||||
...formData,
|
||||
projectName: project.name,
|
||||
pidx: project.idx > 0 ? project.idx : -1
|
||||
});
|
||||
setPreviousProjectIdx(project.idx);
|
||||
}
|
||||
} else {
|
||||
// 동일한 프로젝트면 그냥 설정만
|
||||
onFormChange({
|
||||
...formData,
|
||||
projectName: project.name,
|
||||
pidx: project.idx > 0 ? project.idx : -1
|
||||
});
|
||||
}
|
||||
setShowProjectSearch(false);
|
||||
}}
|
||||
initialSearchKey={formData.projectName}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user