외사첩보망, 외사모니터링 조회모달 결재버튼 오류 수정.

master
강석 최 2023-06-07 18:31:10 +09:00
parent 77bc993246
commit 1ecc311a7c
7 changed files with 236 additions and 194 deletions

View File

@ -136,10 +136,10 @@ public class IntelligenceNetworkController {
} }
@GetMapping("/operationPlanViewModal") @GetMapping("/operationPlanViewModal")
public ModelAndView operationPlanViewModal(@AuthenticationPrincipal UserInfo loginUser, OperationPlan op){ public ModelAndView operationPlanViewModal(@AuthenticationPrincipal UserInfo loginUser, OperationPlan operationPlan){
ModelAndView mav = new ModelAndView("igActivities/intelligenceNetwork/operationPlanViewModal"); ModelAndView mav = new ModelAndView("igActivities/intelligenceNetwork/operationPlanViewModal");
op = intelligenceNetworkService.selectOperationPlan(op.getOpKey()); operationPlan = intelligenceNetworkService.selectOperationPlan(operationPlan.getOpKey());
mav.addObject("op", op); mav.addObject("operationPlan", operationPlan);
mav.addObject("userSeq",loginUser.getUserSeq()); mav.addObject("userSeq",loginUser.getUserSeq());
mav.addObject("viewOrgan",loginUser.getOgCd()); mav.addObject("viewOrgan",loginUser.getOgCd());
//메뉴권한 확인 //메뉴권한 확인

View File

@ -47,93 +47,93 @@ public class IntelligenceNetworkService extends BaseService {
@Transactional @Transactional
public Integer saveOperationPlan(OperationPlan op, List<Integer> deleteFileSeq) { public Integer saveOperationPlan(OperationPlan op, List<Integer> deleteFileSeq) {
Integer opKey = operationPlanRepository.save(op).getOpKey(); Integer opKey = operationPlanRepository.save(op).getOpKey();
if(deleteFileSeq != null && deleteFileSeq.size()>0){ if(deleteFileSeq != null && deleteFileSeq.size()>0){
deleteOperationPlanFile(opKey, deleteFileSeq); deleteOperationPlanFile(opKey, deleteFileSeq);
} }
if(op.getMultipartFileList()!=null){ if(op.getMultipartFileList()!=null){
saveOperationPlanUploadFiles(opKey, op.getMultipartFileList()); saveOperationPlanUploadFiles(opKey, op.getMultipartFileList());
} }
if(op.getOpState().equals("DST002")){ if(op.getOpState().equals("DST002")){
//작성완료일 때 부장 결재 사용자에게 알림 발송. //작성완료일 때 부장 결재 사용자에게 알림 발송.
userAlarmService.sendAlarmToApprvUser(opKey, op.getWrtOrgan(), "APC001", 32, "외사첩보망 견문관리 운영계획에 결재대기 문서가 있습니다."); userAlarmService.sendAlarmToApprvUser(opKey, op.getWrtOrgan(), "APC001", 32, "외사첩보망 견문관리 운영계획에 결재대기 문서가 있습니다.");
userAlarmService.sendAlarmToApprvUser(opKey, op.getWrtOrgan(), "APC002", 32, "외사첩보망 견문관리 운영계획에 결재대기 문서가 있습니다."); userAlarmService.sendAlarmToApprvUser(opKey, op.getWrtOrgan(), "APC002", 32, "외사첩보망 견문관리 운영계획에 결재대기 문서가 있습니다.");
} }
return opKey; return opKey;
} }
private void deleteOperationPlanFile(Integer opKey, List<Integer> deleteFileSeq) { private void deleteOperationPlanFile(Integer opKey, List<Integer> deleteFileSeq) {
List<OperationPlanFile> operationPlanFileList = operationPlanFileRepository.findByOpKey(opKey); List<OperationPlanFile> operationPlanFileList = operationPlanFileRepository.findByOpKey(opKey);
for(OperationPlanFile file: operationPlanFileList){ for(OperationPlanFile file: operationPlanFileList){
if(deleteFileSeq.contains(file.getFileSeq())){ if(deleteFileSeq.contains(file.getFileSeq())){
deleteStoredFile(new File(file.getSavePath(), file.getConvNm())); deleteStoredFile(new File(file.getSavePath(), file.getConvNm()));
operationPlanFileRepository.delete(file); operationPlanFileRepository.delete(file);
} }
} }
} }
private void saveOperationPlanUploadFiles(Integer opKey, List<MultipartFile> multipartFileList){ private void saveOperationPlanUploadFiles(Integer opKey, List<MultipartFile> multipartFileList){
OperationPlanFile lastFileInfo = operationPlanFileRepository.findTopByOpKeyOrderByFileSeqDesc(opKey).orElse(null); OperationPlanFile lastFileInfo = operationPlanFileRepository.findTopByOpKeyOrderByFileSeqDesc(opKey).orElse(null);
int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1); int fileSeq = lastFileInfo==null?1:(lastFileInfo.getFileSeq()+1);
for(MultipartFile file : multipartFileList){ for(MultipartFile file : multipartFileList){
String saveName = UUID.randomUUID().toString(); String saveName = UUID.randomUUID().toString();
String path = locationPath+intelligenceNetworkPath; String path = locationPath+intelligenceNetworkPath;
saveFile(file, new File(path+File.separator+saveName)); saveFile(file, new File(path+File.separator+saveName));
String originalFilename = file.getOriginalFilename(); String originalFilename = file.getOriginalFilename();
int extnIdx = originalFilename.lastIndexOf("."); int extnIdx = originalFilename.lastIndexOf(".");
OperationPlanFile fileInfo = new OperationPlanFile(); OperationPlanFile fileInfo = new OperationPlanFile();
fileInfo.setOpKey(opKey); fileInfo.setOpKey(opKey);
fileInfo.setFileSeq(fileSeq++); fileInfo.setFileSeq(fileSeq++);
fileInfo.setOrigNm(originalFilename.substring(0, extnIdx)); fileInfo.setOrigNm(originalFilename.substring(0, extnIdx));
fileInfo.setFileExtn(originalFilename.substring(extnIdx+1)); fileInfo.setFileExtn(originalFilename.substring(extnIdx+1));
fileInfo.setConvNm(saveName); fileInfo.setConvNm(saveName);
fileInfo.setFileSize(calculationSize(file.getSize())); fileInfo.setFileSize(calculationSize(file.getSize()));
fileInfo.setSavePath(path); fileInfo.setSavePath(path);
operationPlanFileRepository.save(fileInfo); operationPlanFileRepository.save(fileInfo);
} }
} }
public List<OperationPlan> selectOperationPlanList(OperationPlan op) { public List<OperationPlan> selectOperationPlanList(OperationPlan op) {
return intelligenceNetworkMapper.selectOperationPlanList(op); return intelligenceNetworkMapper.selectOperationPlanList(op);
} }
public Integer selectOperationPlanListCnt(OperationPlan op) { public Integer selectOperationPlanListCnt(OperationPlan op) {
return intelligenceNetworkMapper.selectOperationPlanListCnt(op); return intelligenceNetworkMapper.selectOperationPlanListCnt(op);
} }
public OperationPlan selectOperationPlan(Integer opKey) { public OperationPlan selectOperationPlan(Integer opKey) {
OperationPlan savedOperationPlan = operationPlanRepository.findById(opKey).orElse(null); OperationPlan operationPlan = operationPlanRepository.findById(opKey).orElse(null);
if (savedOperationPlan != null) { if (operationPlan != null) {
savedOperationPlan.setFileList(operationPlanFileRepository.findByOpKey(opKey)); operationPlan.setFileList(operationPlanFileRepository.findByOpKey(opKey));
savedOperationPlan.setApprvList(operationPlanApprvRepository.findByOpKey(opKey)); operationPlan.setApprvList(operationPlanApprvRepository.findByOpKey(opKey));
} }
return savedOperationPlan; return operationPlan;
} }
@Transactional @Transactional
public Integer operationPlanStateChange(OperationPlanApprv apprv) { public Integer operationPlanStateChange(OperationPlanApprv apprv) {
OperationPlan saveOperationPlan = operationPlanRepository.findById(apprv.getOpKey()).orElse(null); OperationPlan saveOperationPlan = operationPlanRepository.findById(apprv.getOpKey()).orElse(null);
saveOperationPlan.setOpState(apprv.getState()); saveOperationPlan.setOpState(apprv.getState());
OperationPlanApprv lastApprv = operationPlanApprvRepository.findTopByOpKeyOrderByApprvSeqDesc(apprv.getOpKey()).orElse(null); OperationPlanApprv lastApprv = operationPlanApprvRepository.findTopByOpKeyOrderByApprvSeqDesc(apprv.getOpKey()).orElse(null);
apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1);
operationPlanApprvRepository.save(apprv); operationPlanApprvRepository.save(apprv);
switch (apprv.getState()){ switch (apprv.getState()){
case "DST005": case "DST005":
// 반려시 작성자에게 반려 알림 발송 // 반려시 작성자에게 반려 알림 발송
userAlarmService.sendAlarmToWrtUser(saveOperationPlan.getOpKey(), saveOperationPlan.getWrtUserSeq(), 32,"외사첩보망 견문관리 운영계획에 문서가 반려되었습니다."); userAlarmService.sendAlarmToWrtUser(saveOperationPlan.getOpKey(), saveOperationPlan.getWrtUserSeq(), 32,"외사첩보망 견문관리 운영계획에 문서가 반려되었습니다.");
break; break;
case "DST006": case "DST006":
// 부장승인시 작성자에게 승인 알림 발송 // 부장승인시 작성자에게 승인 알림 발송
userAlarmService.sendAlarmToWrtUser(saveOperationPlan.getOpKey(), saveOperationPlan.getWrtUserSeq(), 32,"외사첩보망 견문관리 운영계획에 문서가 승인되었습니다."); userAlarmService.sendAlarmToWrtUser(saveOperationPlan.getOpKey(), saveOperationPlan.getWrtUserSeq(), 32,"외사첩보망 견문관리 운영계획에 문서가 승인되었습니다.");
break; break;
} }
return apprv.getOpKey(); return apprv.getOpKey();
} }
public OperationPlanFile selectOperationPlanFile(Integer parentKey, Integer fileSeq) { public OperationPlanFile selectOperationPlanFile(Integer parentKey, Integer fileSeq) {
return operationPlanFileRepository.findById(new OperationPlanFileId(parentKey,fileSeq)).orElse(null); return operationPlanFileRepository.findById(new OperationPlanFileId(parentKey,fileSeq)).orElse(null);
} }
@Transactional @Transactional
@ -142,65 +142,65 @@ public class IntelligenceNetworkService extends BaseService {
} }
public IntelligenceAnalyze selectAffairCnt(IntelligenceAnalyze ia) { public IntelligenceAnalyze selectAffairCnt(IntelligenceAnalyze ia) {
return intelligenceNetworkMapper.selectAffairCnt(ia); return intelligenceNetworkMapper.selectAffairCnt(ia);
} }
@Transactional @Transactional
public Integer saveIntelligenceAnalyze(IntelligenceAnalyze ia) { public Integer saveIntelligenceAnalyze(IntelligenceAnalyze ia) {
Integer iaKey = intelligenceAnalyzeRepository.save(ia).getIaKey(); Integer iaKey = intelligenceAnalyzeRepository.save(ia).getIaKey();
IntelligenceAnalyzeToAffair iata = new IntelligenceAnalyzeToAffair(); IntelligenceAnalyzeToAffair iata = new IntelligenceAnalyzeToAffair();
iata.setIaKey(iaKey); iata.setIaKey(iaKey);
for(Integer affairKey : ia.getAffairList()) { for(Integer affairKey : ia.getAffairList()) {
iata.setAffairKey(affairKey); iata.setAffairKey(affairKey);
intelligenceAnalyzeToAffairRepository.save(iata); intelligenceAnalyzeToAffairRepository.save(iata);
} }
if(ia.getIaState().equals("DST002")){ if(ia.getIaState().equals("DST002")){
//작성완료일 때 부장 결재 사용자에게 알림 발송. //작성완료일 때 부장 결재 사용자에게 알림 발송.
userAlarmService.sendAlarmToApprvUser(iaKey, ia.getWrtOrgan(), "APC001", 34, "외사첩보망 견문관리 운영실적에 결재대기 문서가 있습니다."); userAlarmService.sendAlarmToApprvUser(iaKey, ia.getWrtOrgan(), "APC001", 34, "외사첩보망 견문관리 운영실적에 결재대기 문서가 있습니다.");
userAlarmService.sendAlarmToApprvUser(iaKey, ia.getWrtOrgan(), "APC002", 34, "외사첩보망 견문관리 운영실적에 결재대기 문서가 있습니다."); userAlarmService.sendAlarmToApprvUser(iaKey, ia.getWrtOrgan(), "APC002", 34, "외사첩보망 견문관리 운영실적에 결재대기 문서가 있습니다.");
} }
return iaKey; return iaKey;
} }
public List<IntelligenceAnalyze> selectIntelligenceAnalyzeList(IntelligenceAnalyze ia) { public List<IntelligenceAnalyze> selectIntelligenceAnalyzeList(IntelligenceAnalyze ia) {
return intelligenceNetworkMapper.selectIntelligenceAnalyzeList(ia); return intelligenceNetworkMapper.selectIntelligenceAnalyzeList(ia);
} }
public Integer selectIntelligenceAnalyzeListCnt(IntelligenceAnalyze ia) { public Integer selectIntelligenceAnalyzeListCnt(IntelligenceAnalyze ia) {
return intelligenceNetworkMapper.selectIntelligenceAnalyzeListCnt(ia); return intelligenceNetworkMapper.selectIntelligenceAnalyzeListCnt(ia);
} }
public IntelligenceAnalyze selectIntelligenceAnalyze(IntelligenceAnalyze ia) { public IntelligenceAnalyze selectIntelligenceAnalyze(IntelligenceAnalyze ia) {
return intelligenceNetworkMapper.selectIntelligenceAnalyze(ia); return intelligenceNetworkMapper.selectIntelligenceAnalyze(ia);
} }
public List<Integer> selectIntelligenceAnalyzeAffairKey(IntelligenceAnalyze ia) { public List<Integer> selectIntelligenceAnalyzeAffairKey(IntelligenceAnalyze ia) {
return intelligenceNetworkMapper.selectIntelligenceAnalyzeAffairKey(ia); return intelligenceNetworkMapper.selectIntelligenceAnalyzeAffairKey(ia);
} }
public List<IntelligenceAnalyzeApprv> selectIntelligenceAnalyzeApprv(IntelligenceAnalyze ia) { public List<IntelligenceAnalyzeApprv> selectIntelligenceAnalyzeApprv(IntelligenceAnalyze ia) {
return intelligenceAnalyzeApprvRepository.findByIaKey(ia.getIaKey()); return intelligenceAnalyzeApprvRepository.findByIaKey(ia.getIaKey());
} }
@Transactional @Transactional
public Integer intelligenceAnalyzeChange(IntelligenceAnalyzeApprv apprv) { public Integer intelligenceAnalyzeChange(IntelligenceAnalyzeApprv apprv) {
IntelligenceAnalyze saveIntelligenceAnalyze = intelligenceAnalyzeRepository.findById(apprv.getIaKey()).orElse(null); IntelligenceAnalyze saveIntelligenceAnalyze = intelligenceAnalyzeRepository.findById(apprv.getIaKey()).orElse(null);
saveIntelligenceAnalyze.setIaState(apprv.getState()); saveIntelligenceAnalyze.setIaState(apprv.getState());
IntelligenceAnalyzeApprv lastApprv = intelligenceAnalyzeApprvRepository.findTopByIaKeyOrderByApprvSeqDesc(apprv.getIaKey()).orElse(null); IntelligenceAnalyzeApprv lastApprv = intelligenceAnalyzeApprvRepository.findTopByIaKeyOrderByApprvSeqDesc(apprv.getIaKey()).orElse(null);
apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1);
intelligenceAnalyzeApprvRepository.save(apprv); intelligenceAnalyzeApprvRepository.save(apprv);
switch (apprv.getState()){ switch (apprv.getState()){
case "DST005": case "DST005":
// 반려시 작성자에게 반려 알림 발송 // 반려시 작성자에게 반려 알림 발송
userAlarmService.sendAlarmToWrtUser(saveIntelligenceAnalyze.getIaKey(), saveIntelligenceAnalyze.getWrtUserSeq(), 34,"외사첩보망 견문관리 운영실적에 문서가 반려되었습니다."); userAlarmService.sendAlarmToWrtUser(saveIntelligenceAnalyze.getIaKey(), saveIntelligenceAnalyze.getWrtUserSeq(), 34,"외사첩보망 견문관리 운영실적에 문서가 반려되었습니다.");
break; break;
case "DST006": case "DST006":
// 부장승인시 작성자에게 승인 알림 발송 // 부장승인시 작성자에게 승인 알림 발송
userAlarmService.sendAlarmToWrtUser(saveIntelligenceAnalyze.getIaKey(), saveIntelligenceAnalyze.getWrtUserSeq(), 34,"외사첩보망 견문관리 운영실적에 문서가 승인되었습니다."); userAlarmService.sendAlarmToWrtUser(saveIntelligenceAnalyze.getIaKey(), saveIntelligenceAnalyze.getWrtUserSeq(), 34,"외사첩보망 견문관리 운영실적에 문서가 승인되었습니다.");
break; break;
} }
return apprv.getIaKey(); return apprv.getIaKey();
} }
@Transactional @Transactional
@ -210,51 +210,51 @@ public class IntelligenceNetworkService extends BaseService {
@Transactional @Transactional
public Integer saveFireExtensionReport(FireExtensionReport fer) { public Integer saveFireExtensionReport(FireExtensionReport fer) {
Integer ferKey = fireExtensionReportRepository.save(fer).getFerKey(); Integer ferKey = fireExtensionReportRepository.save(fer).getFerKey();
if(fer.getFerState().equals("DST002")){ if(fer.getFerState().equals("DST002")){
//작성완료일 때 부장 결재 사용자에게 알림 발송. //작성완료일 때 부장 결재 사용자에게 알림 발송.
userAlarmService.sendAlarmToApprvUser(ferKey, fer.getWrtOrgan(), "APC001", 35, "외사첩보망 견문관리 외사첩보망 해고(연장)보고에 결재대기 문서가 있습니다."); userAlarmService.sendAlarmToApprvUser(ferKey, fer.getWrtOrgan(), "APC001", 35, "외사첩보망 견문관리 외사첩보망 해고(연장)보고에 결재대기 문서가 있습니다.");
userAlarmService.sendAlarmToApprvUser(ferKey, fer.getWrtOrgan(), "APC002", 35, "외사첩보망 견문관리 외사첩보망 해고(연장)보고에 결재대기 문서가 있습니다."); userAlarmService.sendAlarmToApprvUser(ferKey, fer.getWrtOrgan(), "APC002", 35, "외사첩보망 견문관리 외사첩보망 해고(연장)보고에 결재대기 문서가 있습니다.");
} }
return ferKey; return ferKey;
} }
public List<FireExtensionReport> selectIFireExtensionReportList(FireExtensionReport fer) { public List<FireExtensionReport> selectIFireExtensionReportList(FireExtensionReport fer) {
return intelligenceNetworkMapper.selectIFireExtensionReportList(fer); return intelligenceNetworkMapper.selectIFireExtensionReportList(fer);
} }
public Integer selectIFireExtensionReportListCnt(FireExtensionReport fer) { public Integer selectIFireExtensionReportListCnt(FireExtensionReport fer) {
return intelligenceNetworkMapper.selectIFireExtensionReportListCnt(fer); return intelligenceNetworkMapper.selectIFireExtensionReportListCnt(fer);
} }
public FireExtensionReport selectFireExtensionReportInfo(FireExtensionReport fer) { public FireExtensionReport selectFireExtensionReportInfo(FireExtensionReport fer) {
FireExtensionReport savedFireExtensionReport = fireExtensionReportRepository.findByFerKey(fer.getFerKey()).orElse(null); FireExtensionReport savedFireExtensionReport = fireExtensionReportRepository.findByFerKey(fer.getFerKey()).orElse(null);
if (savedFireExtensionReport != null) { if (savedFireExtensionReport != null) {
savedFireExtensionReport.setOperationPlan(operationPlanRepository.findById(savedFireExtensionReport.getOpKey()).orElse(null)); savedFireExtensionReport.setOperationPlan(operationPlanRepository.findById(savedFireExtensionReport.getOpKey()).orElse(null));
savedFireExtensionReport.setApprvList(fireExtensionReportApprvRepository.findByFerKey(fer.getFerKey())); savedFireExtensionReport.setApprvList(fireExtensionReportApprvRepository.findByFerKey(fer.getFerKey()));
} }
return savedFireExtensionReport; return savedFireExtensionReport;
} }
@Transactional @Transactional
public Integer fireExtensionReportStateChange(FireExtensionReportApprv apprv) { public Integer fireExtensionReportStateChange(FireExtensionReportApprv apprv) {
FireExtensionReport saveFireExtensionReport = fireExtensionReportRepository.findById(apprv.getFerKey()).orElse(null); FireExtensionReport saveFireExtensionReport = fireExtensionReportRepository.findById(apprv.getFerKey()).orElse(null);
saveFireExtensionReport.setFerState(apprv.getState()); saveFireExtensionReport.setFerState(apprv.getState());
FireExtensionReportApprv lastApprv = fireExtensionReportApprvRepository.findTopByFerKeyOrderByApprvSeqDesc(apprv.getFerKey()).orElse(null); FireExtensionReportApprv lastApprv = fireExtensionReportApprvRepository.findTopByFerKeyOrderByApprvSeqDesc(apprv.getFerKey()).orElse(null);
apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1); apprv.setApprvSeq(lastApprv==null?1:lastApprv.getApprvSeq()+1);
fireExtensionReportApprvRepository.save(apprv); fireExtensionReportApprvRepository.save(apprv);
switch (apprv.getState()){ switch (apprv.getState()){
case "DST005": case "DST005":
// 반려시 작성자에게 반려 알림 발송 // 반려시 작성자에게 반려 알림 발송
userAlarmService.sendAlarmToWrtUser(saveFireExtensionReport.getFerKey(), saveFireExtensionReport.getWrtUserSeq(), 35,"외사첩보망 견문관리 외사첩보망 해고(연장)보고에 문서가 반려되었습니다."); userAlarmService.sendAlarmToWrtUser(saveFireExtensionReport.getFerKey(), saveFireExtensionReport.getWrtUserSeq(), 35,"외사첩보망 견문관리 외사첩보망 해고(연장)보고에 문서가 반려되었습니다.");
break; break;
case "DST006": case "DST006":
// 부장승인시 작성자에게 승인 알림 발송 // 부장승인시 작성자에게 승인 알림 발송
userAlarmService.sendAlarmToWrtUser(saveFireExtensionReport.getFerKey(), saveFireExtensionReport.getWrtUserSeq(), 35,"외사첩보망 견문관리 외사첩보망 해고(연장)보고에 문서가 승인되었습니다."); userAlarmService.sendAlarmToWrtUser(saveFireExtensionReport.getFerKey(), saveFireExtensionReport.getWrtUserSeq(), 35,"외사첩보망 견문관리 외사첩보망 해고(연장)보고에 문서가 승인되었습니다.");
break; break;
} }
return apprv.getFerKey(); return apprv.getFerKey();
} }
@Transactional @Transactional

View File

@ -132,9 +132,23 @@
</div> </div>
<div class="col-auto"> <div class="col-auto">
<th:block th:if="${fer.wrtOrgan eq viewOrgan}"> <th:block th:if="${fer.wrtOrgan eq viewOrgan}">
<th:block th:if="${(apprvAuth eq 'APC001' or apprvAuth eq 'APC002') and fer.ferState eq 'DST002'}"> <th:block th:if="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004')) and fer.ferState eq 'DST002'}">
<button type="button" class="btn btn-danger apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST003':'DST005'}" th:value="반려">반려</button> <!--계장, 계장대행 결재권한이 있으면서 결재대기상태-->
<button type="button" class="btn btn-success apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST004':'DST006'}" th:value="승인">승인</button> <th:block th:if="${#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')}">
<!--과장, 과장대행 결재권한이 있을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST005">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST006">승인</button>
</th:block>
<th:block th:unless="${#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')}">
<!--과장, 과장대행 결재권한이 없을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST003">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST004">승인</button>
</th:block>
</th:block>
<th:block th:if="${(#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')) and fer.ferState eq 'DST004'}">
<!--계장 권한 없이 과장, 과장대행 결재권한이 있을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST005">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST006">승인</button>
</th:block> </th:block>
</th:block> </th:block>
<th:block th:unless="${fer.ferState eq 'DST004' or fer.ferState eq 'DST006'}"><!--승인 상태일때는 수정 불가 --> <th:block th:unless="${fer.ferState eq 'DST004' or fer.ferState eq 'DST006'}"><!--승인 상태일때는 수정 불가 -->

View File

@ -197,9 +197,23 @@
</div> </div>
<div class="col-auto"> <div class="col-auto">
<th:block th:if="${ia.wrtOrgan eq viewOrgan}"> <th:block th:if="${ia.wrtOrgan eq viewOrgan}">
<th:block th:if="${(apprvAuth eq 'APC001' or apprvAuth eq 'APC002') and ia.iaState eq 'DST002'}"> <th:block th:if="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004')) and ia.iaState eq 'DST002'}">
<button type="button" class="btn btn-danger apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST003':'DST005'}" th:value="반려">반려</button> <!--계장, 계장대행 결재권한이 있으면서 결재대기상태-->
<button type="button" class="btn btn-success apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST004':'DST006'}" th:value="승인">승인</button> <th:block th:if="${#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')}">
<!--과장, 과장대행 결재권한이 있을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST005">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST006">승인</button>
</th:block>
<th:block th:unless="${#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')}">
<!--과장, 과장대행 결재권한이 없을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST003">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST004">승인</button>
</th:block>
</th:block>
<th:block th:if="${(#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')) and ia.iaState eq 'DST004'}">
<!--계장 권한 없이 과장, 과장대행 결재권한이 있을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST005">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST006">승인</button>
</th:block> </th:block>
</th:block> </th:block>
<th:block th:unless="${ia.iaState eq 'DST004' or ia.iaState eq 'DST006'}"><!--승인 상태일때는 수정 불가 --> <th:block th:unless="${ia.iaState eq 'DST004' or ia.iaState eq 'DST006'}"><!--승인 상태일때는 수정 불가 -->

View File

@ -10,80 +10,80 @@
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link active" id="boardTab" data-bs-toggle="tab" data-bs-target="#boardTabPanel" type="button" role="tab" aria-controls="boardTabPanel" aria-selected="true">본문</button> <button class="nav-link active" id="boardTab" data-bs-toggle="tab" data-bs-target="#boardTabPanel" type="button" role="tab" aria-controls="boardTabPanel" aria-selected="true">본문</button>
</li> </li>
<li class="nav-item" role="presentation" th:if="${#lists.size(op.fileList)>0}"> <li class="nav-item" role="presentation" th:if="${#lists.size(operationPlan.fileList)>0}">
<button class="nav-link" id="fileTab" data-bs-toggle="tab" data-bs-target="#fileTabPanel" type="button" role="tab" aria-controls="fileTabPanel" aria-selected="false" th:text="${#strings.concat('첨부파일(', #lists.size(op.fileList), ')')}"></button> <button class="nav-link" id="fileTab" data-bs-toggle="tab" data-bs-target="#fileTabPanel" type="button" role="tab" aria-controls="fileTabPanel" aria-selected="false" th:text="${#strings.concat('첨부파일(', #lists.size(operationPlan.fileList), ')')}"></button>
</li> </li>
</ul> </ul>
<div class="tab-content bg-white border border-top-0 p-2"> <div class="tab-content bg-white border border-top-0 p-2">
<div class="tab-pane fade p-2 show active" id="boardTabPanel" role="tabpanel" tabindex="0"> <div class="tab-pane fade p-2 show active" id="boardTabPanel" role="tabpanel" tabindex="0">
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">운용시작일</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">운용시작일</label>
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${op.opSdate}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opSdate}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">작성자</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">작성자</label>
<th:block th:each="commonCode:${session.commonCode.get('JT')}"> <th:block th:each="commonCode:${session.commonCode.get('JT')}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:if="${commonCode.itemCd eq op.wrtUserGrd}" th:text="|${commonCode.itemValue} ${op.wrtUserNm}|"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:if="${commonCode.itemCd eq operationPlan.wrtUserGrd}" th:text="|${commonCode.itemValue} ${operationPlan.wrtUserNm}|"></label>
</th:block> </th:block>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">작성일</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">작성일</label>
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${#temporals.format(op.wrtDt, 'yyyy-MM-dd HH:mm')}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:text="${#temporals.format(operationPlan.wrtDt, 'yyyy-MM-dd HH:mm')}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">상태</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">상태</label>
<th:block th:each="commonCode:${session.commonCode.get('DST')}"> <th:block th:each="commonCode:${session.commonCode.get('DST')}">
<label class="col-sm-2 col-form-label col-form-label-sm text-start" th:if="${commonCode.itemCd eq op.opState}" th:text="${commonCode.itemValue}"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-start" th:if="${commonCode.itemCd eq operationPlan.opState}" th:text="${commonCode.itemValue}"></label>
</th:block> </th:block>
</div> </div>
<hr> <hr>
<div class="row mb-1"><h6 class="">■ 정보협력자 구성</h6></div> <div class="row mb-1"><h6 class="">■ 정보협력자 구성</h6></div>
<div class="row text-center"> <div class="row text-center">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">성명:</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">성명:</label>
<label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${op.opName}"></label> <label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opName}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">생년월일:</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">생년월일:</label>
<label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${op.opBirth}"></label> <label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opBirth}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">근무처(소속):</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">근무처(소속):</label>
<label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${op.opPosition}"></label> <label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opPosition}"></label>
</div> </div>
<div class="row text-center"> <div class="row text-center">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">직업(직위):</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">직업(직위):</label>
<label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${op.opJob}"></label> <label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opJob}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">경력:</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">경력:</label>
<label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${op.opCareer}"></label> <label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opCareer}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">연락처:</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">연락처:</label>
<label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${op.opPhone}"></label> <label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opPhone}"></label>
</div> </div>
<div class="row"> <div class="row">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">주소:</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">주소:</label>
<label class="col-sm-7 col-form-label col-form-label-sm text-start" th:text="${op.opAddress}"></label> <label class="col-sm-7 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opAddress}"></label>
<label class="col-sm-1 col-form-label col-form-label-sm text-center">등급:</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">등급:</label>
<label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${op.opRank}"></label> <label class="col-sm-3 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opRank}"></label>
</div> </div>
<div class="row"> <div class="row">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">기타 참고:</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">기타 참고:</label>
<label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${op.opEtc}"></label> <label class="col-sm-11 col-form-label col-form-label-sm text-start" th:text="${operationPlan.opEtc}"></label>
</div> </div>
<hr> <hr>
<div class="row"> <div class="row">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">대상목표<br><br>위지</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">대상목표<br><br>위지</label>
<div class="col-sm-11 form-control-sm" id="contentDiv"> <div class="col-sm-11 form-control-sm" id="contentDiv">
<div th:utext="${#strings.replace(op.targetLocation, lineSeparator, '<br>')}"></div> <div th:utext="${#strings.replace(operationPlan.targetLocation, lineSeparator, '<br>')}"></div>
</div> </div>
</div> </div>
<hr> <hr>
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">취약성 분석</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">취약성 분석</label>
<div class="col-sm-11 form-control-sm" id="contentDiv"> <div class="col-sm-11 form-control-sm" id="contentDiv">
<div th:utext="${#strings.replace(op.vulnerabilityAnalyze, lineSeparator, '<br>')}"></div> <div th:utext="${#strings.replace(operationPlan.vulnerabilityAnalyze, lineSeparator, '<br>')}"></div>
</div> </div>
</div> </div>
<hr> <hr>
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">적격성 분석</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">적격성 분석</label>
<div class="col-sm-11 form-control-sm" id="contentDiv"> <div class="col-sm-11 form-control-sm" id="contentDiv">
<div th:utext="${#strings.replace(op.eligibilityAnalyze, lineSeparator, '<br>')}"></div> <div th:utext="${#strings.replace(operationPlan.eligibilityAnalyze, lineSeparator, '<br>')}"></div>
</div> </div>
</div> </div>
<hr> <hr>
<div class="row mb-1"> <div class="row mb-1">
<label class="col-sm-1 col-form-label col-form-label-sm text-center">중점 수집사항</label> <label class="col-sm-1 col-form-label col-form-label-sm text-center">중점 수집사항</label>
<div class="col-sm-11 form-control-sm" id="contentDiv"> <div class="col-sm-11 form-control-sm" id="contentDiv">
<div th:utext="${#strings.replace(op.focusCollection, lineSeparator, '<br>')}"></div> <div th:utext="${#strings.replace(operationPlan.focusCollection, lineSeparator, '<br>')}"></div>
</div> </div>
</div> </div>
</div> </div>
@ -96,13 +96,13 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<th:block th:if="${#lists.isEmpty(op.fileList)}"> <th:block th:if="${#lists.isEmpty(operationPlan.fileList)}">
<tr> <tr>
<td colspan="2">파일이 없습니다.</td> <td colspan="2">파일이 없습니다.</td>
</tr> </tr>
</th:block> </th:block>
<th:block th:unless="${#lists.isEmpty(op.fileList)}"> <th:block th:unless="${#lists.isEmpty(operationPlan.fileList)}">
<th:block th:each="file:${op.fileList}"> <th:block th:each="file:${operationPlan.fileList}">
<tr class="fileInfoTr"> <tr class="fileInfoTr">
<td><a href="#" class="fileDownLink" data-board="operationPlan" <td><a href="#" class="fileDownLink" data-board="operationPlan"
th:data-parentkey="${file.opKey}" th:data-fileseq="${file.fileSeq}" th:text="|${file.origNm}.${file.fileExtn}|"></a></td> th:data-parentkey="${file.opKey}" th:data-fileseq="${file.fileSeq}" th:text="|${file.origNm}.${file.fileExtn}|"></a></td>
@ -114,9 +114,9 @@
</table> </table>
</div> </div>
<div class="row"> <div class="row">
<div class="col-12" th:unless="${#lists.isEmpty(op.apprvList)}"> <div class="col-12" th:unless="${#lists.isEmpty(operationPlan.apprvList)}">
<hr> <hr>
<th:block th:each="apprv:${op.apprvList}"> <th:block th:each="apprv:${operationPlan.apprvList}">
<div class="row"> <div class="row">
<th:block th:each="commonCode:${session.commonCode.get('DST')}"> <th:block th:each="commonCode:${session.commonCode.get('DST')}">
<label class="col-sm-2 col-form-label col-form-label-sm text-center" th:if="${commonCode.itemCd eq apprv.state}" th:text="|결재결과: ${commonCode.itemValue}|"></label> <label class="col-sm-2 col-form-label col-form-label-sm text-center" th:if="${commonCode.itemCd eq apprv.state}" th:text="|결재결과: ${commonCode.itemValue}|"></label>
@ -137,7 +137,7 @@
<form action="#" method="post" id="apprvForm"> <form action="#" method="post" id="apprvForm">
<div class="row"> <div class="row">
<div class="col-10"> <div class="col-10">
<input type="hidden" name="opKey" th:value="${op.opKey}"> <input type="hidden" name="opKey" th:value="${operationPlan.opKey}">
<input type="hidden" name="state" id="viewModalApprvValue"> <input type="hidden" name="state" id="viewModalApprvValue">
</div> </div>
</div> </div>
@ -146,22 +146,36 @@
</div> </div>
<div class="modal-footer justify-content-between bg-light"> <div class="modal-footer justify-content-between bg-light">
<div class="col-auto"> <div class="col-auto">
<th:block th:unless="${op.opState eq 'DST004' or op.opState eq 'DST006'}"> <th:block th:unless="${operationPlan.opState eq 'DST004' or operationPlan.opState eq 'DST006'}">
<th:block th:if="${userSeq eq op.wrtUserSeq or accessAuth eq 'ACC003'}"> <th:block th:if="${userSeq eq operationPlan.wrtUserSeq or accessAuth eq 'ACC003'}">
<button type="button" class="btn btn-danger" th:data-opkey="${op.opKey}" id="deleteBtn">삭제</button> <button type="button" class="btn btn-danger" th:data-opkey="${operationPlan.opKey}" id="deleteBtn">삭제</button>
</th:block> </th:block>
</th:block> </th:block>
</div> </div>
<div class="col-auto"> <div class="col-auto">
<th:block th:if="${op.wrtOrgan eq viewOrgan}"> <th:block th:if="${operationPlan.wrtOrgan eq viewOrgan}">
<th:block th:if="${(apprvAuth eq 'APC001' or apprvAuth eq 'APC002') and op.opState eq 'DST002'}"> <th:block th:if="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004')) and operationPlan.opState eq 'DST002'}">
<button type="button" class="btn btn-danger apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST003':'DST005'}" th:value="반려">반려</button> <!--계장, 계장대행 결재권한이 있으면서 결재대기상태-->
<button type="button" class="btn btn-success apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST004':'DST006'}" th:value="승인">승인</button> <th:block th:if="${#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')}">
<!--과장, 과장대행 결재권한이 있을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST005">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST006">승인</button>
</th:block>
<th:block th:unless="${#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')}">
<!--과장, 과장대행 결재권한이 없을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST003">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST004">승인</button>
</th:block>
</th:block>
<th:block th:if="${(#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')) and operationPlan.opState eq 'DST004'}">
<!--계장 권한 없이 과장, 과장대행 결재권한이 있을경우-->
<button type="button" class="btn btn-danger apprvBtn" data-planstate="DST005">반려</button>
<button type="button" class="btn btn-success apprvBtn" data-planstate="DST006">승인</button>
</th:block> </th:block>
</th:block> </th:block>
<th:block th:unless="${op.opState eq 'DST004' or op.opState eq 'DST006'}"><!--승인 상태일때는 수정 불가 --> <th:block th:unless="${operationPlan.opState eq 'DST004' or operationPlan.opState eq 'DST006'}"><!--승인 상태일때는 수정 불가 -->
<th:block th:if="${userSeq eq op.wrtUserSeq or accessAuth eq 'ACC003'}"><!--작성자일 경우 수정 허용--><!--관리자일 경우 수정 허용--> <th:block th:if="${userSeq eq operationPlan.wrtUserSeq or accessAuth eq 'ACC003'}"><!--작성자일 경우 수정 허용--><!--관리자일 경우 수정 허용-->
<button type="button" class="btn btn-warning" th:data-opkey="${op.opKey}" id="editBtn">수정</button> <button type="button" class="btn btn-warning" th:data-opkey="${operationPlan.opKey}" id="editBtn">수정</button>
</th:block> </th:block>
</th:block> </th:block>
</div> </div>

View File

@ -124,8 +124,8 @@
</div> </div>
</div> </div>
<th:block th:if="${md.wrtOrgan eq viewOrgan}"> <th:block th:if="${md.wrtOrgan eq viewOrgan}">
<th:block th:if="${(apprvAuth eq 'APC003' or apprvAuth eq 'APC004') and md.mdState eq 'DST002' <th:block th:if="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004')) and md.mdState eq 'DST002'
or (apprvAuth eq 'APC001' or apprvAuth eq 'APC002') and md.mdState eq 'DST004'}"> or (#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')) and md.mdState eq 'DST004'}">
<div class="col-12"> <div class="col-12">
<form action="#" method="post" id="apprvForm"> <form action="#" method="post" id="apprvForm">
<div class="row"> <div class="row">
@ -136,10 +136,10 @@
<input type="text" class="d-none" id="submitPrevention"> <input type="text" class="d-none" id="submitPrevention">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<input type="button" class="btn btn-sm btn-success apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST004':'DST006'}" value="승인"> <input type="button" class="btn btn-sm btn-success apprvBtn" th:data-planstate="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004'))?'DST004':'DST006'}" value="승인">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<input type="button" class="btn btn-sm btn-danger apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST003':'DST005'}" value="반려"> <input type="button" class="btn btn-sm btn-danger apprvBtn" th:data-planstate="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004'))?'DST003':'DST005'}" value="반려">
</div> </div>
</div> </div>
</form> </form>

View File

@ -249,8 +249,8 @@
</div> </div>
</div> </div>
<th:block th:if="${mr.wrtOrgan eq viewOrgan}"> <th:block th:if="${mr.wrtOrgan eq viewOrgan}">
<th:block th:if="${(apprvAuth eq 'APC003' or apprvAuth eq 'APC004') and mr.mrState eq 'DST002' <th:block th:if="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004')) and mr.mrState eq 'DST002'
or (apprvAuth eq 'APC001' or apprvAuth eq 'APC002') and mr.mrState eq 'DST004'}"> or (#strings.contains(apprvAuth, 'APC001') or #strings.contains(apprvAuth, 'APC002')) and mr.mrState eq 'DST004'}">
<div class="col-12"> <div class="col-12">
<form action="#" method="post" id="apprvForm"> <form action="#" method="post" id="apprvForm">
<hr> <hr>
@ -262,10 +262,10 @@
<input type="text" class="d-none" id="submitPrevention"> <input type="text" class="d-none" id="submitPrevention">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<input type="button" class="btn btn-sm btn-success apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST004':'DST006'}" value="승인"> <input type="button" class="btn btn-sm btn-success apprvBtn" th:data-planstate="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004'))?'DST004':'DST006'}" value="승인">
</div> </div>
<div class="col-auto"> <div class="col-auto">
<input type="button" class="btn btn-sm btn-danger apprvBtn" th:data-planstate="${apprvAuth eq 'APC004'||apprvAuth eq 'APC003'?'DST003':'DST005'}" value="반려"> <input type="button" class="btn btn-sm btn-danger apprvBtn" th:data-planstate="${(#strings.contains(apprvAuth, 'APC003') or #strings.contains(apprvAuth, 'APC004'))?'DST003':'DST005'}" value="반려">
</div> </div>
</div> </div>
</form> </form>