승급교육 예외처리 개발

This commit is contained in:
grips76 2025-11-18 08:15:56 +00:00
parent 7134e500dc
commit b296fe29c1
4 changed files with 196 additions and 112 deletions

View File

@ -624,17 +624,17 @@ namespace NP.Base.Controllers
/// ### ty 교육신청제한
public JsonResult GetCheckLectIs(string man, string cgcode, string edu, string grade, int cmno, int pcmno, string job1 = "")
{
int result = 0; // 0 이면 수강 가능, 그외 수강 불가
result = CheckUserLect(man, cgcode, edu, grade, cmno, pcmno, SUserInfo.UserNo);
//int result = 0; // 0 이면 수강 가능, 그외 수강 불가
//result = CheckUserLect(man, cgcode, edu, grade, cmno, pcmno, SUserInfo.UserNo);
#region + // 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
//var result = new KeyValuePair<int, string>();
//result = CheckUserLectInfo(cmno, pcmno, SUserInfo.UserNo, man, cgcode, edu, grade, job1);
var result = new KeyValuePair<int, string>();
result = CheckUserLectInfo(cmno, pcmno, SUserInfo.UserNo, man, cgcode, edu, grade, job1);
//return JsonBack(result.Key);
return JsonBack(result.Key);
#endregion
return JsonBack(result);
//return JsonBack(result);
}
@ -872,7 +872,7 @@ namespace NP.Base.Controllers
#region + () 5. -> (35)
// 승급교육(35) 관련 제한 조건 (A, B, C, D 그룹)
if (edu == "35")
if (edu == "35") //교육목적
{
// 제약의 공통 전제조건: 고급(38) 또는 특급(39) 등급인 경우에만 적용
bool isAdvancedGrade = grade == "38" || grade == "39";
@ -880,30 +880,46 @@ namespace NP.Base.Controllers
if (isAdvancedGrade)
{
// A: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
// ((설계시공 또는 건설사업관리) / (역량강화 또는 전문분야))
bool isApplyingForGroupA = (man == "25" || man == "28") && (cgcode == "103" || cgcode == "104");
// ((설계시공 또는 건설사업관리) / (역량강화(103,104) 또는 전문분야(105)))
bool isApplyingForGroupA = (man == "25" || man == "28") && (cgcode == "103" || cgcode == "104" || cgcode == "105");
if (isApplyingForGroupA)
{
bool hasExistingInGroupA = lectEnrolls.Any(l =>
l.TYPEEDU == 35
&& l.TYPEGRADE.ToString() == grade
//설계시공기술인
bool hasExistingInGroupA25 = lectEnrolls.Any(l =>
l.TYPEEDU == 35 //승급교육
&& (l.TYPEGRADE.ToString() == grade)
&& l.TYPEJOB.ToString() == job1
&& (
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
&& (l.CGCODE == "103" || l.CGCODE == "104")
(l.TYPEMAN.ToString() == "25")
&& (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105")
)
);
if (hasExistingInGroupA)
if (hasExistingInGroupA25)
{
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
}
//건설사업관리기술인
bool hasExistingInGroupA28 = lectEnrolls.Any(l =>
l.TYPEEDU == 35 //승급교육
&& (l.TYPEGRADE.ToString() == grade)
&& l.TYPEJOB.ToString() == job1
&& (
(l.TYPEMAN.ToString() == "28")
&& (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105")
)
);
if (hasExistingInGroupA28) {
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
}
}
bool isApplyingForGroupA2 = (man == "25" || man == "28") && (cgcode == "105");
if (isApplyingForGroupA)
if (isApplyingForGroupA2)
{
bool hasExistingInGroupA = lectEnrolls.Any(l =>
bool hasExistingInGroupA2 = lectEnrolls.Any(l =>
l.TYPEEDU == 35
&& l.TYPEGRADE.ToString() == grade
&& l.TYPEJOB.ToString() == job1
@ -913,14 +929,14 @@ namespace NP.Base.Controllers
)
);
if (isApplyingForGroupA2)
if (hasExistingInGroupA2)
{
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
}
}
bool isApplyingForGroupA3 = (man == "25" || man == "28") && (cgcode == "107");
if (isApplyingForGroupA)
if (isApplyingForGroupA3)
{
bool hasExistingInGroupA3 = lectEnrolls.Any(l =>
l.TYPEEDU == 35
@ -932,14 +948,12 @@ namespace NP.Base.Controllers
)
);
if (isApplyingForGroupA2)
if (hasExistingInGroupA3)
{
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
}
}
/*
// B: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
// ((설계시공/특성화) 또는 (건설사업관리/전문분야))
bool isApplyingForGroupB = (man == "25" && cgcode == "107") || (man == "28" && cgcode == "105");
@ -981,7 +995,6 @@ namespace NP.Base.Controllers
return new KeyValuePair<int, string>(-20, "승급교육 제약C");
}
}
*/
// D: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
// ((건설사업관리/건설기술인 전문교육))
@ -1003,7 +1016,6 @@ namespace NP.Base.Controllers
}
}
#endregion
}

View File

@ -876,26 +876,26 @@ namespace NP.FO.Controllers
ViewBag.IsMain = true;
#region + () ViewBag.rslt
var fOCommonController = new Base.Controllers.FOCommonController();
fOCommonController.Dao = new Dao.CommonDao();
ViewBag.rslt = fOCommonController.CheckUserLect(vm.stringval3, vm.stringval21, vm.stringval4, vm.stringval5, int.Parse(vm.stringval17), int.Parse(vm.stringval18), SUserInfo.UserNo);
//var fOCommonController = new Base.Controllers.FOCommonController();
//fOCommonController.Dao = new Dao.CommonDao();
//ViewBag.rslt = fOCommonController.CheckUserLect(vm.stringval3, vm.stringval21, vm.stringval4, vm.stringval5, int.Parse(vm.stringval17), int.Parse(vm.stringval18), SUserInfo.UserNo);
#endregion
#region + 2025-09 ( , )
//var result = new KeyValuePair<int, string>();
//result = CheckUserLectInfo(
// cmno: Convert.ToInt16(vm.stringval17),
// pcmno: Convert.ToInt16(vm.stringval18),
// userno: SUserInfo.UserNo,
// man: vm.stringval3,
// cgcode: vm.stringval21,
// edu: vm.stringval4,
// grade: vm.stringval5,
// job1: vm.stringval6
// );
var result = new KeyValuePair<int, string>();
result = CheckUserLectInfo(
cmno: Convert.ToInt16(vm.stringval17),
pcmno: Convert.ToInt16(vm.stringval18),
userno: SUserInfo.UserNo,
man: vm.stringval3,
cgcode: vm.stringval21,
edu: vm.stringval4,
grade: vm.stringval5,
job1: vm.stringval6
);
//ViewBag.rslt = result.Key;
ViewBag.rslt = result.Key;
#endregion
#region + ComCodes2 ~ 6
@ -1048,6 +1048,30 @@ namespace NP.FO.Controllers
}
}
}
//if (edu == "30")
//{
// // 1) 현재 신청하는 교육이 제한 대상인지 확인
// bool isApplyingForRestrictedFirstEdu =
// (man == "25" || man == "27" || man == "28")
// && (cgcode == "103" || cgcode == "104");
// if (isApplyingForRestrictedFirstEdu)
// {
// // 2) 이미 신청 내역 중에 제한 대상에 해당하는 최초교육이 있는지 확인
// bool hasExistingRestrictedFirstEdu = lectEnrolls.Any(l =>
// l.TYPEEDU == 30
// && (l.TYPEMAN == 25 || l.TYPEMAN == 27 || l.TYPEMAN == 28)
// && (l.CGCODE == "107")
// );
// // 조건을 만족하는 기존 교육이 발견되면, 중복신청 막기 처리
// if (hasExistingRestrictedFirstEdu)
// {
// return new KeyValuePair<int, string>(-10, "최초교육 제약");
// }
// }
//}
#endregion
#region + () 5. -> (35)
@ -1061,7 +1085,7 @@ namespace NP.FO.Controllers
{
// A: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
// ((설계시공 또는 건설사업관리) / (역량강화 또는 전문분야))
bool isApplyingForGroupA = (man == "25" || man == "28") && (cgcode == "103" || cgcode == "104" || cgcode == "105");
bool isApplyingForGroupA = (man == "25" || man == "28") && (cgcode == "103" || cgcode == "104");
if (isApplyingForGroupA)
{
bool hasExistingInGroupA = lectEnrolls.Any(l =>
@ -1070,7 +1094,7 @@ namespace NP.FO.Controllers
&& l.TYPEJOB.ToString() == job1
&& (
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
&& (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105")
&& (l.CGCODE == "103" || l.CGCODE == "104")
)
);
@ -1080,6 +1104,44 @@ namespace NP.FO.Controllers
}
}
bool isApplyingForGroupA2 = (man == "25" || man == "28") && (cgcode == "105");
if (isApplyingForGroupA2)
{
bool hasExistingInGroupA2 = lectEnrolls.Any(l =>
l.TYPEEDU == 35
&& l.TYPEGRADE.ToString() == grade
&& l.TYPEJOB.ToString() == job1
&& (
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
&& (l.CGCODE == "105")
)
);
if (isApplyingForGroupA2)
{
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
}
}
bool isApplyingForGroupA3 = (man == "25" || man == "28") && (cgcode == "107");
if (isApplyingForGroupA3)
{
bool hasExistingInGroupA3 = lectEnrolls.Any(l =>
l.TYPEEDU == 35
&& l.TYPEGRADE.ToString() == grade
&& l.TYPEJOB.ToString() == job1
&& (
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
&& (l.CGCODE == "107")
)
);
if (isApplyingForGroupA3)
{
return new KeyValuePair<int, string>(-20, "승급교육 제약A");
}
}
// B: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
// ((설계시공/특성화) 또는 (건설사업관리/전문분야))
bool isApplyingForGroupB = (man == "25" && cgcode == "107") || (man == "28" && cgcode == "105");
@ -1142,7 +1204,6 @@ namespace NP.FO.Controllers
}
}
#endregion
}
@ -1161,6 +1222,7 @@ namespace NP.FO.Controllers
return result;
}
#endregion

View File

@ -699,10 +699,11 @@
var uno = ('@ViewBag.SSUserNo' != '') ? parseInt(@ViewBag.SSUserNo) : 0;
if (uno > 0) {
$("#cmino").val(cmino);
$("#cmisno").val(cmisno);
checkLectCompleteEdu(cmno, "@Model.stringval3", "@Model.stringval4", "@Model.stringval5", "@Model.stringval6", $("#pcmno_" + pcmno + "_cgcode").val(), pcmno, "chkLect");
checkLectCompleteEdu(cmno, "@Model.stringval3", "@Model.stringval4", "@Model.stringval5", "@Model.stringval6", $("#pcmno_" + pcmno + "_cgcode").val(), pcmno, "chkLectNew");
}
else {
@ -743,6 +744,16 @@
_cgcode = cgcode;
_grade = grade;
//capp("/focommon/GetCheckLectIs",
// {
// cmno: cmno,
// man: man,
// edu: edu,
// grade: grade,
// job1: job,
// cgcode: cgcode,
// pcmno: pcmno
// }, "chkLect"); // 1
capp("/focommon/GetCheckLectIs",
{
cmno: cmno,
@ -752,7 +763,7 @@
job1: job,
cgcode: cgcode,
pcmno: pcmno
}, "chkLect"); // 1
}, "chkLectNew"); // 1
}
//20220729 개발전
@ -773,46 +784,46 @@
}
//
//function chkLectNew() {
// if (capResult.code == 1000) {
// var resultCode = capResult.obj;
function chkLectNew() {
if (capResult.code == 1000) {
var resultCode = capResult.obj;
// if (resultCode == 0) {
// checkLectIsComplete(_cmno);
// }
// else {
// switch (resultCode) {
// case -2:
// msg("<span style='font-size: 15pt;'>이미 동일한 내용의 교육을 신청,수강 또는 수료한 과정입니다.</span>");
// break;
// case -10:
// case -20:
// case -30:
// msg(`
// <span style='text-align: center;margin: 0 auto;display: inline-block;font-size: 15pt;line-height: 22pt;'>
// 이 교육은 아래의 사유 중 하나에 해당되어 신청되지 않는 교육입니다.<br><br>
// <p class='hello' style=' color: red; text-align:left; font-size:13pt;'>
// &nbsp; &nbsp; - &nbsp; &nbsp;선택한 교육목적으로 인정되지 않는 경우<br>
// &nbsp; &nbsp; - &nbsp; &nbsp;이미 신청 또는 수료한 교육과 함께 수료하면 인정이 되지 않는 경우
// </p><br>
// 따라서 현재 화면에 나와있는 다른 교육으로 신청하여 주시기 바랍니다.<br><br>
// <span style='display: block; margin - left: calc(50 % - 77px);'>
// 문의 : 1544 - 7660
// </span>
// </span>
// `);
// break;
// case -100:
// msg("<span style='font-size: 15pt;'>잠시 후 다시 시도해주세요.</span>");
// break;
// default:
// break;
// }
// }
if (resultCode == 0) {
checkLectIsComplete(_cmno);
}
else {
switch (resultCode) {
case -2:
msg("<span style='font-size: 15pt;'>이미 동일한 내용의 교육을 신청,수강 또는 수료한 과정입니다.</span>");
break;
case -10:
case -20:
case -30:
msg(`
<span style='text-align: center;margin: 0 auto;display: inline-block;font-size: 15pt;line-height: 22pt;'>
이 교육은 아래의 사유 중 하나에 해당되어 신청되지 않는 교육입니다.<br><br>
<p class='hello' style=' color: red; text-align:left; font-size:13pt;'>
&nbsp; &nbsp; - &nbsp; &nbsp;선택한 교육목적으로 인정되지 않는 경우<br>
&nbsp; &nbsp; - &nbsp; &nbsp;이미 신청 또는 수료한 교육과 함께 수료하면 인정이 되지 않는 경우
</p><br>
따라서 현재 화면에 나와있는 다른 교육으로 신청하여 주시기 바랍니다.<br><br>
<span style='display: block; margin - left: calc(50 % - 77px);'>
문의 : 1544 - 7660
</span>
</span>
`);
break;
case -100:
msg("<span style='font-size: 15pt;'>잠시 후 다시 시도해주세요.</span>");
break;
default:
break;
}
}
// }
}
//}
}

View File

@ -564,8 +564,8 @@
</form>
}
@* // 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
<div class="edu-popup-container">
<div class="edu-popup-container">
<div id="edu-modal-overlay"></div>
<div id="edu-layer-popup">
<header class="edu-popup-header">
@ -602,7 +602,7 @@
<button id="edu-cancel-btn" onclick="closeEducationPopup();">취소</button>
</footer>
</div>
</div>*@
</div>
<textarea style="display: none;" id="texthide01">@ViewBag.POPUPS</textarea>
@ -693,20 +693,19 @@
}
@* // 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
// 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
// 건설사업관리(계속교육) 신청 시 주의사항
if ($("#stringval3").val() == "28"
&& $("#stringval4").val() == "31"
&& ($("#stringval5").val() == "38" || $("#stringval5").val() == "39")
) {
showEducationPopup();
}
else {
} else {
$("#indexForm").attr("action", "/Course/SmartSearch").submit();
}
*@
$("#indexForm").attr("action", "/Course/SmartSearch").submit();
//$("#indexForm").attr("action", "/Course/SmartSearch").submit();
});