승급교육 예외처리 개발

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

View File

@ -876,26 +876,26 @@ namespace NP.FO.Controllers
ViewBag.IsMain = true; ViewBag.IsMain = true;
#region + () ViewBag.rslt #region + () ViewBag.rslt
var fOCommonController = new Base.Controllers.FOCommonController(); //var fOCommonController = new Base.Controllers.FOCommonController();
fOCommonController.Dao = new Dao.CommonDao(); //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); //ViewBag.rslt = fOCommonController.CheckUserLect(vm.stringval3, vm.stringval21, vm.stringval4, vm.stringval5, int.Parse(vm.stringval17), int.Parse(vm.stringval18), SUserInfo.UserNo);
#endregion #endregion
#region + 2025-09 ( , ) #region + 2025-09 ( , )
//var result = new KeyValuePair<int, string>(); var result = new KeyValuePair<int, string>();
//result = CheckUserLectInfo( result = CheckUserLectInfo(
// cmno: Convert.ToInt16(vm.stringval17), cmno: Convert.ToInt16(vm.stringval17),
// pcmno: Convert.ToInt16(vm.stringval18), pcmno: Convert.ToInt16(vm.stringval18),
// userno: SUserInfo.UserNo, userno: SUserInfo.UserNo,
// man: vm.stringval3, man: vm.stringval3,
// cgcode: vm.stringval21, cgcode: vm.stringval21,
// edu: vm.stringval4, edu: vm.stringval4,
// grade: vm.stringval5, grade: vm.stringval5,
// job1: vm.stringval6 job1: vm.stringval6
// ); );
//ViewBag.rslt = result.Key; ViewBag.rslt = result.Key;
#endregion #endregion
#region + ComCodes2 ~ 6 #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 #endregion
#region + () 5. -> (35) #region + () 5. -> (35)
@ -1061,7 +1085,7 @@ namespace NP.FO.Controllers
{ {
// A: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능 // 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) if (isApplyingForGroupA)
{ {
bool hasExistingInGroupA = lectEnrolls.Any(l => bool hasExistingInGroupA = lectEnrolls.Any(l =>
@ -1070,7 +1094,7 @@ namespace NP.FO.Controllers
&& l.TYPEJOB.ToString() == job1 && l.TYPEJOB.ToString() == job1
&& ( && (
(l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28") (l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
&& (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105") && (l.CGCODE == "103" || l.CGCODE == "104")
) )
); );
@ -1080,24 +1104,62 @@ 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개만 신청 가능 // B: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
// ((설계시공/특성화) 또는 (건설사업관리/전문분야)) // ((설계시공/특성화) 또는 (건설사업관리/전문분야))
bool isApplyingForGroupB = (man == "25" && cgcode == "107") || (man == "28" && cgcode == "105"); bool isApplyingForGroupB = (man == "25" && cgcode == "107") || (man == "28" && cgcode == "105");
if (isApplyingForGroupB) if (isApplyingForGroupB)
{ {
bool hasExistingInGroupB = lectEnrolls.Any(l => bool hasExistingInGroupB = lectEnrolls.Any(l =>
l.TYPEEDU == 35 l.TYPEEDU == 35
&& l.TYPEGRADE.ToString() == grade && l.TYPEGRADE.ToString() == grade
&& l.TYPEJOB.ToString() == job1 && l.TYPEJOB.ToString() == job1
&& ( && (
(l.TYPEMAN.ToString() == "25" && l.CGCODE == "107") (l.TYPEMAN.ToString() == "25" && l.CGCODE == "107")
|| (l.TYPEMAN.ToString() == "28" && l.CGCODE == "105") || (l.TYPEMAN.ToString() == "28" && l.CGCODE == "105")
) )
); );
if (hasExistingInGroupB) if (hasExistingInGroupB)
{ {
return new KeyValuePair<int, string>(-20, "승급교육 제약B"); return new KeyValuePair<int, string>(-20, "승급교육 제약B");
} }
} }
@ -1107,11 +1169,11 @@ namespace NP.FO.Controllers
if (isApplyingForGroupC) if (isApplyingForGroupC)
{ {
bool hasExistingInGroupC = lectEnrolls.Any(l => bool hasExistingInGroupC = lectEnrolls.Any(l =>
l.TYPEEDU == 35 l.TYPEEDU == 35
&& l.TYPEGRADE.ToString() == grade && l.TYPEGRADE.ToString() == grade
&& l.TYPEJOB.ToString() == job1 && l.TYPEJOB.ToString() == job1
&& ( && (
(l.TYPEMAN.ToString() == "25" && l.CGCODE == "107") (l.TYPEMAN.ToString() == "25" && l.CGCODE == "107")
|| (l.TYPEMAN.ToString() == "28" && (l.CGCODE == "103" || l.CGCODE == "104")) || (l.TYPEMAN.ToString() == "28" && (l.CGCODE == "103" || l.CGCODE == "104"))
) )
); );
@ -1121,7 +1183,7 @@ namespace NP.FO.Controllers
return new KeyValuePair<int, string>(-20, "승급교육 제약C"); return new KeyValuePair<int, string>(-20, "승급교육 제약C");
} }
} }
// D: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능 // D: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
// ((건설사업관리/건설기술인 전문교육)) // ((건설사업관리/건설기술인 전문교육))
bool isApplyingForGroupD = man == "28" && cgcode == "102"; bool isApplyingForGroupD = man == "28" && cgcode == "102";
@ -1142,7 +1204,6 @@ namespace NP.FO.Controllers
} }
} }
#endregion #endregion
} }
@ -1160,7 +1221,8 @@ namespace NP.FO.Controllers
} }
return result; return result;
} }
#endregion #endregion

View File

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

View File

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