diff --git a/FO/Controllers/CourseController.cs b/FO/Controllers/CourseController.cs
index 566938f..f924d7a 100644
--- a/FO/Controllers/CourseController.cs
+++ b/FO/Controllers/CourseController.cs
@@ -1,16 +1,12 @@
-using System;
+using NP.Base.Controllers;
+using NP.Model;
+using NP.Model.ENUM;
+using System;
+using System.Collections;
using System.Collections.Generic;
using System.Linq;
-using System.Web;
using System.Web.Mvc;
-
-using NP.Model;
-using NP.Base;
-using System.Collections;
-
using XPayClientNet;
-using NP.Model.ENUM;
-using System.Xml.Linq;
namespace NP.FO.Controllers
{
@@ -295,10 +291,7 @@ namespace NP.FO.Controllers
{
return Redirect("/Course/Offs");
}
- //else if (Response.IsRequestBeingRedirected)
- //{
- // return RedirectToAction("OffDetail", new { cmno = vm.cmno });
- //}
+
vm.viewname3 = vm.viewname3 ?? "";
vm.previewname = vm.previewname ?? "/Course/Offs";
vm.CM = Dao.Get("cm.cms.forbuy", new System.Collections.Hashtable() { { "cmno", vm.cmno }, { "userno", SUserInfo.UserNo }, { "contents", vm.Contents } }).First();
@@ -421,82 +414,6 @@ namespace NP.FO.Controllers
d.isbig = isbig ? 1 : 0;
}
}
- //if (iscm && !string.IsNullOrEmpty(vm.CM.tasteurl))
- //{
- // var d = vm.CM;
- // //Thumbnail 확인
- // if (!System.IO.File.Exists(Server.MapPath(vm.Thumbnails + "/" + d.cmno + ".jpg")))
- // {
- // if (!System.IO.Directory.Exists(Server.MapPath(vm.Files + vm.Thumbnails)))
- // {
- // System.IO.Directory.CreateDirectory(Server.MapPath(vm.Files + vm.Thumbnails + "/"));
- // }
- // String thumbargs = "-i " + Server.MapPath(vm.Contents + d.tasteurl) + " -vframes 1 -ss 00:00:07 -s 150x150 " + Server.MapPath(vm.Thumbnails + "/" + d.cmno + ".jpg");
- // System.Diagnostics.Process thumbproc = new System.Diagnostics.Process();
- // thumbproc = new System.Diagnostics.Process();
- // thumbproc.StartInfo.FileName = GetConfig("thumbnailexe");
- // thumbproc.StartInfo.Arguments = thumbargs;
- // thumbproc.StartInfo.UseShellExecute = false;
- // thumbproc.StartInfo.CreateNoWindow = false;
- // thumbproc.StartInfo.RedirectStandardOutput = false;
- // try
- // {
- // thumbproc.Start();
- // d.tasteurl = vm.Thumbnails + "/" + d.cmno + ".jpg";
- // }
- // catch (Exception ex)
- // {
- // SetError("ffmpeg: " + ex.Message);
- // d.tasteurl = isbig ? "/img/online/fair_sample01.jpg" : "/img/main/main_edu_thumb01.jpg";
- // }
- // thumbproc.WaitForExit();
- // thumbproc.Close();
- // //_repository.CreateUniqueFullPath(_path);
- // }
- // else
- // {
- // d.tasteurl = vm.Thumbnails + "/" + d.cmno + ".jpg";
- // }
- //}
- //else if (!iscm)
- //{
- // foreach (var d in vm.CMs.Where(w => !string.IsNullOrEmpty(w.tasteurl)))
- // {
- // //Thumbnail 확인
- // if (!System.IO.File.Exists(Server.MapPath(vm.Thumbnails + "/" + d.cmno + ".jpg")))
- // {
- // if (!System.IO.Directory.Exists(Server.MapPath(vm.Files + vm.Thumbnails)))
- // {
- // System.IO.Directory.CreateDirectory(Server.MapPath(vm.Files + vm.Thumbnails + "/"));
- // }
- // String thumbargs = "-i " + Server.MapPath(vm.Contents + d.tasteurl) + " -vframes 1 -ss 00:00:07 -s 150x150 " + Server.MapPath(vm.Thumbnails + "/" + d.cmno + ".jpg");
- // System.Diagnostics.Process thumbproc = new System.Diagnostics.Process();
- // thumbproc = new System.Diagnostics.Process();
- // thumbproc.StartInfo.FileName = GetConfig("thumbnailexe");
- // thumbproc.StartInfo.Arguments = thumbargs;
- // thumbproc.StartInfo.UseShellExecute = false;
- // thumbproc.StartInfo.CreateNoWindow = false;
- // thumbproc.StartInfo.RedirectStandardOutput = false;
- // try
- // {
- // thumbproc.Start();
- // d.tasteurl = vm.Thumbnails + "/" + d.cmno + ".jpg";
- // }
- // catch (Exception ex)
- // {
- // SetError("ffmpeg: " + ex.Message);
- // d.tasteurl = "/img/main/main_edu_thumb01.jpg";
- // }
- // thumbproc.WaitForExit();
- // thumbproc.Close();
- // //_repository.CreateUniqueFullPath(_path);
- // }
- // else
- // {
- // d.tasteurl = vm.Thumbnails + "/" + d.cmno + ".jpg";
- // }
- // }
- //}
}
@@ -772,32 +689,48 @@ namespace NP.FO.Controllers
return PayReturn(vm);
}
+ #region 스마트검색 / 스마트검색 결과
+ // 로그인을 하지 않았읋 때 스마트검색에서 교육신청을 하면 스마트검색 결과 페이지가 나온다
+ // 로그인을 한 상태에서 스마트검색에서 교육신청을 하면 스마트검색 결과 페이지는 나오지 않는다.
+
+
+ ///
+ /// 스마트검색
+ ///
+ ///
+ ///
public ActionResult SmartSearch(VMCourse vm)
{
- // 2024.08.07 로그인제한 해제
- //if (SUserInfo.UserNo == 0) {
- // return RedirectToAction(nameof(HomeController.Index), "Home");
- //}
+ /*
+ stringval : 0: 건설기술진흥법교육 (현재 고정됨)
+ stringval2 : SKILL (1: 교육장, 2:온라인) - cshape
+ stringval3 : 기술인분류 (SELECT * FROM comcode WHERE cgroup = 'typeman' AND isuse = 1)
+ stringval4 : 교육목적 (SELECT * FROM comcode WHERE cgroup = 'typeedu' AND isuse = 1)
+ stringval5 : 등급 (SELECT * FROM comcode WHERE cgroup = 'typegrade' AND isuse = 1 )
+ stringval6 : 직무분야 (SELECT * FROM comcode WHERE cgroup = 'typejob' AND isuse = 1)
+ stringval7 : 전문분야 (SELECT *
+ FROM comcode
+ WHERE isuse = 1
+ AND cgroup IN ('typejob40','typejob41','typejob42','typejob43','typejob44','typejob45','typejob46','typejob47','typejob48','typejob49'))
+ */
+
+ var p = new Hashtable();
+
+ // 교육장소
vm.ComCodes = GetComCodes("studyplace");
- vm.CMsEtc = Dao.Get("cm.cgetc", new System.Collections.Hashtable() { { "cgcode", "2" } });//cgcode = 기타교육 // 기타교육 cgcode 바뀌면 파라미터도 변경해야함
- vm.CM = Dao.Get("cm.cms", new System.Collections.Hashtable()).First();
+
+ // 아스팔트포장전문교육
+ p.Clear();
+ p.Add("cgcode", "2");
+ vm.CMsEtc = Dao.Get("cm.cgetc", p);
+
+ p.Clear();
+ vm.CM = Dao.Get("cm.cms", p).First();
+
var hsData = SetHash(vm);
+
if (vm.stringval == "0" || string.IsNullOrEmpty(vm.stringval)) //건설기술진흥법교육
{
- //hsData.Add("ismaster", 1);
- //hsData.Add("cshape", vm.stringval2);
- //hsData.Add("typeman", vm.stringval3);
- //hsData.Add("typeedu", vm.stringval4);
- //hsData.Add("typegrade", vm.stringval5);
- //hsData.Add("typejob", vm.stringval6);
- //hsData.Add("typejobitem", vm.stringval7);
-
- ////vm.CMs = Dao.Get("cm.cms", new System.Collections.Hashtable() { { "ismaster", "1" }, { "cshape", vm.stringval2 }, { "typeman", vm.stringval3 }, { "typeedu", vm.stringval4 }, { "typegrade", vm.stringval5 }, { "typejob", vm.stringval6 }, { "typejobitem", vm.stringval7 } }).Where(w=>w.isuse == 1).ToList();
- //vm.CMs = Dao.Get("cm.cms", hsData).Where(w => w.isuse == 1).ToList();
-
- // 20220726 공개+현재수강신청가능한 강좌목록 구하기
- //20220726 소스 정리
- //hsData = SetHash(vm);
hsData.Add("cshape", vm.stringval2);
hsData.Add("typeman", vm.stringval3);
hsData.Add("typeedu", vm.stringval4);
@@ -806,17 +739,19 @@ namespace NP.FO.Controllers
hsData.Add("typejobitem", vm.stringval7);
hsData.Add("isuse", 1);
hsData.Add("orderby", " a.pcmno, a.cname");
+
vm.CMs = Dao.Get("cm.subcms", hsData).ToList();
}
else if (vm.stringval == "1") //기타교육
{
- vm.CMs = Dao.Get("cm.cms", new System.Collections.Hashtable() { { "ismaster", "1" }, { "cshape", vm.stringval2 }, { "cgno", vm.stringval3 }, { "isuse", 1 } }).ToList();
- }
+ p.Clear();
+ p.Add("ismaster", "1");
+ p.Add("cshape", vm.stringval2);
+ p.Add("cgno", vm.stringval3);
+ p.Add("isuse", 1);
- //hsData.Clear();
- //hsData = SetHash(vm);
- ////hsData.Add("month", (vm.scdMonth == null) ? DateTime.Now.Month : vm.scdMonth);
- //vm.CMInningscds = Dao.Get("cm.cminningscds.applyedu", hsData).Where(w => w.studyplace != null).ToList();
+ vm.CMs = Dao.Get("cm.cms", p).ToList();
+ }
vm.ComCodes2 = GetComCodes("typeman");
vm.ComCodes3 = GetComCodes("typeedu");
@@ -825,14 +760,19 @@ namespace NP.FO.Controllers
vm.ComCodes6 = GetComCodes("typejobitem");
bool getComCheck = true;
- var typeman = vm.ComCodes2.Where(w => w.ccode == (!string.IsNullOrEmpty(vm.stringval3) ? int.Parse(vm.stringval3) : 0)).FirstOrDefault();
- var typemanName = typeman != null ? typeman.cname : string.Empty;
- var typeedu = vm.ComCodes3.Where(w => w.ccode == (!string.IsNullOrEmpty(vm.stringval4) ? int.Parse(vm.stringval4) : 0)).FirstOrDefault();
- var typeeduName = typeedu != null ? typeedu.cname : string.Empty;
+
+ // 기술인분류
+ ComCode typeman = vm.ComCodes2.Where(w => w.ccode == (!string.IsNullOrEmpty(vm.stringval3) ? int.Parse(vm.stringval3) : 0)).FirstOrDefault();
+ string typemanName = typeman != null ? typeman.cname : string.Empty;
+
+ // 교육목적
+ ComCode typeedu = vm.ComCodes3.Where(w => w.ccode == (!string.IsNullOrEmpty(vm.stringval4) ? int.Parse(vm.stringval4) : 0)).FirstOrDefault();
+ string typeeduName = typeedu != null ? typeedu.cname : string.Empty;
if (typemanName.Contains("설계시공기술인"))
{
vm.ComCodes3 = vm.ComCodes3.Where(x => x.cname != "안전관리계속교육(16시간)").ToList();
+
if (typeeduName.Contains("승급교육"))
{
vm.ComCodes4 = vm.ComCodes4.Where(x => x.cname != "초급").ToList();
@@ -841,7 +781,8 @@ namespace NP.FO.Controllers
{
vm.ComCodes4 = vm.ComCodes4.Where(x => x.cname == "특급").ToList();
}
- vm.ComCodes5 = vm.ComCodes5.Where(x => x.cname != "품질관리").ToList();
+
+ vm.ComCodes5 = vm.ComCodes5.Where(x => x.cname != "품질관리").ToList();
}
else if (typemanName.Contains("건설사업관리기술인"))
{
@@ -849,15 +790,18 @@ namespace NP.FO.Controllers
{
vm.ComCodes4 = vm.ComCodes4.Where(x => x.cname != "초급").ToList();
}
+
vm.ComCodes5 = vm.ComCodes5.Where(x => x.cname != "품질관리").ToList();
}
else if (typemanName.Contains("품질관리기술인"))
{
vm.ComCodes3 = vm.ComCodes3.Where(x => x.cname != "안전관리계속교육(16시간)").ToList();
+
if (typeeduName.Contains("승급교육"))
{
vm.ComCodes4 = vm.ComCodes4.Where(x => x.cname != "초급").ToList();
}
+
vm.ComCodes5 = vm.ComCodes5.Where(x => x.cname == "품질관리").ToList();
}
else if (typemanName.Contains("발주청기술인"))
@@ -869,8 +813,9 @@ namespace NP.FO.Controllers
{
vm.ComCodes3 = vm.ComCodes3.Where(x => x.ccode == 0).ToList();
vm.ComCodes4 = vm.ComCodes4.Where(x => x.ccode == 0).ToList();
- vm.ComCodes5 = vm.ComCodes5.Where(x => x.ccode == 0).ToList();
+ vm.ComCodes5 = vm.ComCodes5.Where(x => x.ccode == 0).ToList();
vm.ComCodes6 = vm.ComCodes6.Where(x => x.ccode == 0).ToList();
+
getComCheck = false;
}
@@ -882,12 +827,17 @@ namespace NP.FO.Controllers
return View(vm);
}
- public ActionResult SmartSearchResult(VMCourse vm)
+ ///
+ /// 스마트검색 결과
+ ///
+ ///
+ ///
+ public ActionResult SmartSearchResult(VMCourse vm)
{
+ #region + 개발 시 참고사항인듯 하다
/*
* https://www.ynicte.com/Course/SmartSearchResult?stringval=&stringval2=2&stringval3=25&stringval4=29&stringval5=36&stringval6=40&stringval7=58&stringval17=859&stringval18=33&stringval19=50085&stringval20=14795&stringval21=101
- *
- *
+
string rslt = "";
rslt += "stringval=" + vm.stringval;
rslt += " stringval2=" + vm.stringval2;
@@ -905,48 +855,302 @@ namespace NP.FO.Controllers
rslt += " userno=" + SUserInfo.UserNo;
*/
+ #endregion
+
+ var p = new Hashtable();
ViewBag.IsMain = true;
- Base.Controllers.FOCommonController fOCommonController = new Base.Controllers.FOCommonController();
- fOCommonController.Dao = new Dao.CommonDao();
+ #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);
- //vm.ComCodes = GetComCodes("studyplace");
+ #endregion
+
+ #region + 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
+ //var result = new KeyValuePair();
+ //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;
+ #endregion
+
+ #region + ComCodes2 ~ 6 까지 설정
vm.ComCodes2 = GetComCodes("typeman");
vm.ComCodes3 = GetComCodes("typeedu");
vm.ComCodes4 = GetComCodes("typegrade");
vm.ComCodes5 = GetComCodes("typejob");
vm.ComCodes6 = GetComCodes("typejob40,typejob41,typejob42,typejob43,typejob44,typejob45,typejob46,typejob47,typejob48,typejob49,typejob57");
- vm.CM = Dao.Get("cm.cms", new System.Collections.Hashtable() { { "cmno", vm.stringval17 } }).FirstOrDefault();
+ #endregion
- Hashtable hsData = new Hashtable();
- hsData.Add("cmno", vm.stringval17);
- vm.CMInningscds= Dao.Get("cm.cminningscds.applyedu" , hsData);
- vm.SelectCMInningscd = vm.CMInningscds.Where(c => c.cmisno == long.Parse(vm.stringval20) && c.cmino == long.Parse(vm.stringval19)).First();
- vm.intval = Dao.Get("lect.count.user4", new Hashtable { { "userno", SUserInfo.UserNo }, { "pcmno", long.Parse(vm.stringval18) } }).FirstOrDefault();
- vm.intval2 = Dao.Get("cm.lectcheckuser", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo }, { "cmno", vm.stringval17 } }).First();
+ #region + Get: "cm.cms
+ p.Clear();
+ p.Add("cmno", vm.stringval17);
+ vm.CM = Dao.Get("cm.cms", p).FirstOrDefault();
+ #endregion
+
+ #region + Get: cm.cminningscds.applyedu
+ p.Clear();
+ p.Add("cmno", vm.stringval17);
+ vm.CMInningscds = Dao.Get("cm.cminningscds.applyedu", p);
+ #endregion
+
+ vm.SelectCMInningscd = vm.CMInningscds
+ .Where(c => c.cmisno == long.Parse(vm.stringval20) && c.cmino == long.Parse(vm.stringval19))
+ .First();
+
+ #region + Get: lect.count.user4
+ p.Clear();
+ p.Add("userno", SUserInfo.UserNo);
+ p.Add("pcmno", long.Parse(vm.stringval18));
+ vm.intval = Dao.Get("lect.count.user4", p).FirstOrDefault();
+ #endregion
+
+ #region + Get: cm.lectcheckuser
+ p.Clear();
+ p.Add("userno", SUserInfo.UserNo);
+ p.Add("cmno", vm.stringval17);
+ vm.intval2 = Dao.Get("cm.lectcheckuser", p).First();
+ #endregion
- /*
- *
- * applyClassEdu(" + d.cmno + ", " + d.pcmno + ", " + d.cmino + ", " + d.cmisno + ");" });
- *
- */
return View(vm);
}
- //private string GetComCode6CodeList(IList comCodes)
- //{
- // string result = "";
+ #region ++ 2025-09 (스마트검색 개발 건 미사용으로 주석처리, 필요시 복원)
- // foreach(var item in comCodes)
- // {
- // result += (result == "" ? "" : ",") + "typejob" + item.ccode;
- // }
+ // 본문에 주석이 너무많아 주석처리는 아니고 그냥 미사용 (메서드 이름이 다름)
+ // FO > CourseController.CheckUserLect, FOCommonController.CheckUserLect 동일한 코드 (Dao문제로 2개구현, 공통이나, 서비스로 뺴야한다)
- // return result;
- //}
+ ///
+ /// 수강 제약조건 확인 (FOCommonController.CheckUserLect 와 동일, 함께 수정해야함 => Dao문제로 2개구현)
+ ///
+ /// 강좌키
+ /// 연계강좌키
+ /// 회원번호
+ /// 기술인분류
+ ///
+ /// 교육목적
+ /// 등급
+ /// Code (0:수강가능, -2,동일한과정 재신청 제약, -10:최초교육제약, -20:승급교육제약, -100:에러) , Message
+ public KeyValuePair CheckUserLectInfo(int cmno, int pcmno, long userno, string man, string cgcode, string edu, string grade, string job1 = "")
+ {
+ var result = new KeyValuePair(0, "수강신청 가능");
+
+ #region + DB에서 코드 값 찾기
+ /*****************************************************************************************************
+ * a) 기술인분류 SELECT * FROM comcode WHERE cgroup = 'typeman' AND isUse = 1
+ * b) 과정분류 SELECT * FROM cg WHERE isUse = 1
+ * c) 교육목적 SELECT * FROM comcode WHERE cgroup = 'typeedu' AND isUse = 1
+ * d) 등급 SELECT * FROM comcode WHERE cgroup = 'typegrade' AND isUse = 1
+ * e) 직무분야 SELECT * FROM comcode WHERE cgroup = 'typejob' AND isUse = 1
+ * f) 직무분야 전체 SELECT * FROM comcode WHERE cgroup LIKE 'typejob%' AND isUse = 1
+ *******************************************************************************************************/
+ #endregion
+
+ // result (0:수강가능, 이 외 수강불가)
+
+ try
+ {
+
+ #region + (탈출) 1. 건설사업관리기술인 관련 제한 조건 (lectEnrolls 참조하지 않음, Request 값만...)
+ // 조건: 건설사업관리기술인(28) + 초급/중급(36,37) + 역량강화(103,104) 은 신청불가
+ if (edu == "31")
+ {
+ bool isRestrictedContinueEdu =
+ man == "28"
+ && (grade == "36" || grade == "37")
+ && (cgcode == "103" || cgcode == "104");
+
+ if (isRestrictedContinueEdu)
+ {
+ return new KeyValuePair(-30, "계속교육 제약");
+ }
+ }
+ #endregion
+
+ #region + Get: lect.enroll.get (lectEnrolls = 회원 수강신청 내역)
+ var p = new Hashtable();
+ p.Add("uno", userno);
+
+ IList lectEnrolls = Dao.Get("lect.enroll.get", p);
+ #endregion
+
+ // 회원의 이전 수강신청내역이 있다면
+ if (lectEnrolls != null && lectEnrolls.Any())
+ {
+
+ #region + (탈출) 2. 동일한 과정은 1개만 수강 가능 (cm.cmno)
+ if (lectEnrolls.Any(l => l.cmno == cmno))
+ {
+ // -2는 동일 과정 중복
+ return new KeyValuePair(-2, "동일강좌 중복제약");
+ }
+ #endregion
+
+ #region + (탈출) 3. 교육목적 -> 기본교육(29) 관련 제한 조건
+ if (edu == "29")
+ {
+ // 기존 신청 내역 중 기본교육(29)이 있는지 확인 (기본교육은 1개만 신청가능)
+ bool hasExistingBasicEdu = lectEnrolls.Any(l => l.TYPEEDU == 29);
+ if (hasExistingBasicEdu)
+ {
+ return new KeyValuePair(-30, "기본교육 제약");
+ }
+ }
+ #endregion
+
+ #region + (탈출) 4. 교육목적 -> 최초교육(30) 관련 제한 조건
+ // - 최초교육(30)의 기술인분류(25,27,28)가 과정분류 역량강화(103,104)인 최초교육은 1개만 신청 가능.
+ 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 == "103" || l.CGCODE == "104")
+ );
+
+ // 조건을 만족하는 기존 교육이 발견되면, 중복신청 막기 처리
+ if (hasExistingRestrictedFirstEdu)
+ {
+ return new KeyValuePair(-10, "최초교육 제약");
+ }
+ }
+ }
+ #endregion
+
+ #region + (탈출) 5. 교육목적 -> 승급교육(35) 관련 제한 조건
+ // 승급교육(35) 관련 제한 조건 (A, B, C, D 그룹)
+ if (edu == "35")
+ {
+ // 제약의 공통 전제조건: 고급(38) 또는 특급(39) 등급인 경우에만 적용
+ bool isAdvancedGrade = grade == "38" || grade == "39";
+
+ if (isAdvancedGrade)
+ {
+ // A: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
+ // ((설계시공 또는 건설사업관리) / (역량강화 또는 전문분야))
+ 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
+ && l.TYPEJOB.ToString() == job1
+ && (
+ (l.TYPEMAN.ToString() == "25" || l.TYPEMAN.ToString() == "28")
+ && (l.CGCODE == "103" || l.CGCODE == "104" || l.CGCODE == "105")
+ )
+ );
+
+ if (hasExistingInGroupA)
+ {
+ return new KeyValuePair(-20, "승급교육 제약A");
+ }
+ }
+
+ // B: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
+ // ((설계시공/특성화) 또는 (건설사업관리/전문분야))
+ bool isApplyingForGroupB = (man == "25" && cgcode == "107") || (man == "28" && cgcode == "105");
+ if (isApplyingForGroupB)
+ {
+ bool hasExistingInGroupB = lectEnrolls.Any(l =>
+ l.TYPEEDU == 35
+ && l.TYPEGRADE.ToString() == grade
+ && l.TYPEJOB.ToString() == job1
+ && (
+ (l.TYPEMAN.ToString() == "25" && l.CGCODE == "107")
+ || (l.TYPEMAN.ToString() == "28" && l.CGCODE == "105")
+ )
+ );
+
+ if (hasExistingInGroupB)
+ {
+ return new KeyValuePair(-20, "승급교육 제약B");
+ }
+ }
+
+ // C: 등급, 동일 직무분야 내에서 1개만 신청 가능
+ // ((설계시공/특성화) 또는 (건설사업관리/역량강화))
+ bool isApplyingForGroupC = (man == "25" && cgcode == "107") || (man == "28" && (cgcode == "103" || cgcode == "104"));
+ if (isApplyingForGroupC)
+ {
+ bool hasExistingInGroupC = lectEnrolls.Any(l =>
+ l.TYPEEDU == 35
+ && l.TYPEGRADE.ToString() == grade
+ && l.TYPEJOB.ToString() == job1
+ && (
+ (l.TYPEMAN.ToString() == "25" && l.CGCODE == "107")
+ || (l.TYPEMAN.ToString() == "28" && (l.CGCODE == "103" || l.CGCODE == "104"))
+ )
+ );
+
+ if (hasExistingInGroupC)
+ {
+ return new KeyValuePair(-20, "승급교육 제약C");
+ }
+ }
+
+ // D: 동일 등급, 동일 직무분야 내에서 1개만 신청 가능
+ // ((건설사업관리/건설기술인 전문교육))
+ bool isApplyingForGroupD = man == "28" && cgcode == "102";
+ if (isApplyingForGroupD)
+ {
+ bool hasExistingInGroupD = lectEnrolls.Any(l =>
+ l.TYPEEDU == 35
+ && l.TYPEGRADE.ToString() == grade
+ && l.TYPEJOB.ToString() == job1
+ && (l.TYPEMAN.ToString() == "28" && l.CGCODE == "102")
+ );
+
+ if (hasExistingInGroupD)
+ {
+ return new KeyValuePair(-20, "승급교육 제약D");
+ }
+ }
+ }
+ }
+
+
+ #endregion
+
+ }
+ else
+ {
+ // 이전에 수강 신청한 내역이 아무것도 없기에 제약조건을 걸 필요가 없음.
+ result = new KeyValuePair(0, "이전에 아무것도 수강신청한 내역이 없음");
+ }
+
+ }
+ catch (Exception ex)
+ {
+ SetError($"CheckUserLectInfo: {ex.Message}");
+ result = new KeyValuePair(-100, ex.Message);
+ }
+
+ return result;
+ }
+ #endregion
+
+
+ #endregion
[NP.Base.Auth.CFilter]
public ActionResult ApplyEdu(VMCourse vm)
@@ -970,20 +1174,7 @@ namespace NP.FO.Controllers
vm.Assign = Dao.Get("cm.assign.applyedu", new Hashtable() { { "userno", SUserInfo.UserNo } }).FirstOrDefault();
if (vm.Assign != null)
{
- vm.Assign.mname = null;
- //if (!string.IsNullOrEmpty(vm.Assign.MphoneFormat) && vm.Assign.MphoneFormat.IndexOf("-") >= 0)
- //{
- //string[] mphoneArr = vm.Assign.MphoneFormat.Split('-');
- //vm.Assign.mphone1 = mphoneArr.Length > 0 ? mphoneArr[0] : string.Empty;
- //vm.Assign.mphone2 = mphoneArr.Length > 1 ? mphoneArr[1] : string.Empty;
- //vm.Assign.mphone3 = mphoneArr.Length > 2 ? mphoneArr[2] : string.Empty;
- //}
- //if (!string.IsNullOrEmpty(vm.Assign.taxemail) && vm.Assign.taxemail.IndexOf("@") >= 0)
- //{
- //string[] taxemailArr = vm.Assign.taxemail.Split('@');
- //vm.Assign.taxemail1 = taxemailArr.Length > 0 ? taxemailArr[0] : string.Empty;
- //vm.Assign.taxemail2 = taxemailArr.Length > 1 ? taxemailArr[1] : string.Empty;
- //}
+ vm.Assign.mname = null;
vm.FileList = new List() { };
if (vm.Assign.fgnobno != null)
{
@@ -1209,6 +1400,13 @@ namespace NP.FO.Controllers
return View(vm);
}
+
+
+ ///
+ /// 교육신청확인
+ ///
+ ///
+ ///
[NP.Base.Auth.CFilter]
public ActionResult ApplyAgree(VMCourse vm)
{
@@ -1273,6 +1471,7 @@ namespace NP.FO.Controllers
return View(vm);
}
+
public ActionResult ApplyComplete(VMPay vm)
{
if (vm.payno < 1)
diff --git a/FO/Views/Course/ApplyAgree.cshtml b/FO/Views/Course/ApplyAgree.cshtml
index 7680aec..dde522d 100644
--- a/FO/Views/Course/ApplyAgree.cshtml
+++ b/FO/Views/Course/ApplyAgree.cshtml
@@ -59,11 +59,6 @@
}
strEduInfo += string.Format("교육비 : {0}원 ", Model.CM.infee.ToString("#,0"));
-
-
- //Model.SelectCMInningscd.eend2 교육종료일
- //strEduInfo = string.Format("교육기간 {0} | 교육종료일 {1} | {2}시간과정 | {3}과정 교육비 : {4}원 ",
- // Model.SelectCMInningscd.scdInfoSummary, Model.SelectCMInningscd.eend2, Model.CM.studytime, (Model.CM.isrefund == 1 ? "환급" : "비환급"), Model.CM.infee.ToString("#,0"));
}
}
@@ -168,22 +163,17 @@
@if (Model.CM.cshape == 1)
- {
- @* if (Model.CM.cshape != 1)
- {*@
- @* 교육수료조건
+ {
+ if (Model.CM != null && Model.CM.isrefund == 1)
+ { // 환급과정일때만 환급 주의사항 보임
+ 환급과정 신청 시 환급대상자 필수확인사항
- 1. 총점 70점 이상 득점 : 시험평가(80점) + 출결점수(20점) =100점
- 2. 총 35시간 교육 중 28시간 이상 이수
-
*@
- @*}*@
- 환급과정 신청 시 환급대상자 필수확인사항
-
- - 입교 전 출결관리를 위해 어플 설치 및 로그인(고용노동부 HRD-NET 및 출결관리 어플), 위탁계약서(회사 직인 필수) 지참
- - 교육비 입금 시 신용카드는 반드시 법인카드로만 결제, 무통장 입금은 입금자명을 회사상호+교육생 형식으로 작성
- 예) 현대건설 이지은인 경우 → 현대이지은 으로 작성
- ※ 출결관리 어플 설치 방법은 홈페이지 자료실에 있는 설치가이드를 참고 부탁드립니다.
-
+ - 입교 전 출결관리를 위해 어플 설치 및 로그인(고용노동부 HRD-NET 및 출결관리 어플), 위탁계약서(회사 직인 필수) 지참
+ - 교육비 입금 시 신용카드는 반드시 법인카드로만 결제, 무통장 입금은 입금자명을 회사상호+교육생 형식으로 작성
+ 예) 현대건설 이지은인 경우 → 현대이지은 으로 작성
+ ※ 출결관리 어플 설치 방법은 홈페이지 자료실에 있는 설치가이드를 참고 부탁드립니다.
+
+ }
교육시행 여부 관련 안내
@@ -213,10 +203,7 @@
3. 시험평가 60점 이상 득점
4. 집체교육7시간 참석
- ※ 위 4가지 조건 모두 만족하셔야 수료가 가능합니다.
- @*※ 하루 최대 학습 시간은 10차시 입니다.
- ※ 현재 코로나로 인하여 기존 (동영상강의 시청 28시간 + 현장집체7시간 참석) 에서 한시적으로 (동영상강의 시청 35시간)으로 진행합니다. *@
- @*※ 국토부 장관이 인정하는 사유로 집체교육을 실시 하지 못할 시 에는 동영상강의로 대체되며 7시간을 100% 이수하셔야 수료가 가능합니다. *@
+ ※ 위 4가지 조건 모두 만족하셔야 수료가 가능합니다.
@@ -246,7 +233,7 @@
교육비 환불 조건 안내
교육신청일로부터 9일이내로 해당 과정의 전체 학습진도율이 10% 미만일때 환불가능합니다.
-
+
주의사항
diff --git a/FO/Views/Course/ApplyAgree_old.cshtml b/FO/Views/Course/ApplyAgree_old.cshtml
deleted file mode 100644
index 584de9f..0000000
--- a/FO/Views/Course/ApplyAgree_old.cshtml
+++ /dev/null
@@ -1,228 +0,0 @@
-@model NP.Model.VMCourse
-@{
- var isallday = Model.CM.retimeymd == "2099-12-31" ? true : false;
-}
-
-
diff --git a/FO/Views/Course/ApplyPay.cshtml b/FO/Views/Course/ApplyPay.cshtml
index 55216c7..d1f0156 100644
--- a/FO/Views/Course/ApplyPay.cshtml
+++ b/FO/Views/Course/ApplyPay.cshtml
@@ -64,9 +64,7 @@
Model.SelectCMInningscd.scdInfoSummary, Model.SelectCMInningscd.eend2, Model.CM.studytime, (Model.CM.isrefund == 1 ? "환급" : "비환급"), Model.CM.infee.ToString("#,0"));
}
else
- {
- //Model.SelectCMInningscd.eend2 교육종료일
-
+ {
strEduInfo += string.Format("교육기간 {0} |", Model.SelectCMInningscd.scdInfoSummary);
strEduInfo += string.Format(" 교육종료일 {0} | ", Model.SelectCMInningscd.eend2);
strEduInfo += string.Format("{0}시간과정 |", Model.CM.studytime);
@@ -77,10 +75,7 @@
strEduInfo += string.Format("집체교육 참석일 : {0} ", Model.SelectCMInningscd.estart.ToString("yyyy년 MM월 dd일"));
}
- strEduInfo += string.Format("교육비 : {0}원 ", Model.CM.infee.ToString("#,0"));
-
- //strEduInfo = string.Format("교육기간 {0} | 교육종료일 {1} | {2}시간과정 | {3}과정 교육비 : {4}원 ",
- // Model.SelectCMInningscd.scdInfoSummary, Model.SelectCMInningscd.eend2, Model.CM.studytime, (Model.CM.isrefund == 1 ? "환급" : "비환급"), Model.CM.infee.ToString("#,0"));
+ strEduInfo += string.Format("교육비 : {0}원 ", Model.CM.infee.ToString("#,0"));
}
}
@@ -111,143 +106,144 @@
@if (Model.PPLog.cshape != 2)
{
- 환급과정 신청 시 환급대상자의 입금방법(중요)
+ if (Model.CM != null && Model.CM.isrefund == 1)
+ { // 환급과정일때만 환급 주의사항 보임
+ 환급과정 신청 시 환급대상자의 입금방법(중요)
+
+ ■ 카드결제 시
+ - 반드시 소속 회사의 법인카드로 결제 해 주세요. (개인카드 결제 시 환급불가)
+ - 법인카드결제 후 결제한 법인카드 앞면을 복사하여 입교 시 지참해 주세요.
+ ※ 결제 한 법인카드가 법인명의 라는 것을 증빙하기 위하여 노동부에서 요청하는 서류 이며 회사 명이 잘 보이도록 앞면 만 복사하시면 됩니다.
+
+
+ ■ 무통장입금 시
+ - 계좌이체로 입금하실 경우 반드시 법인계좌에서 이체가 되어야 합니다. (타 계좌에서 이체 시 환급불가)
+ - 입금자명은 반드시 소속회사 + 교육생이름 으로 기재해주세요.(소속회사명이 없는 경우 환급불가)
+ - 입교 시 이체확인증 을 지참해 주세요.
+ ※ 이체확인증은 입금자명이 법인이라는 것을 노동부에 증빙하기 위하여 필요한 서류입니다.
+ 예) 현대건설 이지은 인 경우 -> 현대건설이지은
+
+
+
+ ■ 환급과정 신청 시 환급대상자는 계산서 의무 발행 이므로 현금영수증 발행이 불가 합니다.
+
+
+
+ }
+ }
+
+ 결제 시 주의사항
- ■ 카드결제 시
- - 반드시 소속 회사의 법인카드로 결제 해 주세요. (개인카드 결제 시 환급불가)
- - 법인카드결제 후 결제한 법인카드 앞면을 복사하여 입교 시 지참해 주세요.
- ※ 결제 한 법인카드가 법인명의 라는 것을 증빙하기 위하여 노동부에서 요청하는 서류 이며 회사 명이 잘 보이도록 앞면 만 복사하시면 됩니다.
+
+ - 개인카드 결제 시 법인으로 증빙서류 발급이 되지 않습니다.
+ - 계산서 발급을 원하시는 경우 반드시 업체로 신청해주세요.
+ - 카드결제의 경우 계산서 발급이 불가능하며 카드 영수증이 발행 됩니다.
+ - 교육신청이 완료된 이후 에는 결제방식 변경이 불가능 하므로 다시 한번 확인해 주세요.
+
-
- ■ 무통장입금 시
- - 계좌이체로 입금하실 경우 반드시 법인계좌에서 이체가 되어야 합니다. (타 계좌에서 이체 시 환급불가)
- - 입금자명은 반드시 소속회사 + 교육생이름 으로 기재해주세요.(소속회사명이 없는 경우 환급불가)
- - 입교 시 이체확인증 을 지참해 주세요.
- ※ 이체확인증은 입금자명이 법인이라는 것을 노동부에 증빙하기 위하여 필요한 서류입니다.
- 예) 현대건설 이지은 인 경우 -> 현대건설이지은
-
-
- ■ 환급과정 신청 시 환급대상자는 계산서 의무 발행 이므로 현금영수증 발행이 불가 합니다.
-
-
- }
- 결제 시 주의사항
-
- @*- 개인카드 결제 시 법인으로 증빙서류 발급이 되지 않습니다.
- - 계산서 발급을 원하시는 경우 반드시 업체로 신청해주세요 .
- - 카드결제의 경우 계산서 발급이 불가능하며 카드 영수증이 발행 됩니다.
- - 교육신청이 완료된 이후 에는 결제방식 변경이 불가능 하므로 다시 한번 확인해 주세요. *@
- - 개인카드 결제 시 법인으로 증빙서류 발급이 되지 않습니다.
- - 계산서 발급을 원하시는 경우 반드시 업체로 신청해주세요.
- - 카드결제의 경우 계산서 발급이 불가능하며 카드 영수증이 발행 됩니다.
- - 교육신청이 완료된 이후 에는 결제방식 변경이 불가능 하므로 다시 한번 확인해 주세요.
-
-
-
- 결제방법(신용카드 선택 시 계산서 발급불가)
-
-
- @if (Model.CM.cshape == 1)
- {
- // 교육장
- if (Model.PPLog.isrebate == 1)
+
결제방법(신용카드 선택 시 계산서 발급불가)
+
+
+ @if (Model.CM.cshape == 1)
{
-
계산서 발행
+ // 교육장
+ if (Model.PPLog.isrebate == 1)
+ {
+
계산서 발행
+ }
+ else
+ {
+
현금영수증 / 계산서 발행여부
+ }
+
+
}
else
{
-
현금영수증 / 계산서 발행여부
- }
-
-
- }
+ else
+ {
+
현금영수증 / 계산서 발행여부
+ }
+
+
+ }
-
+
-
- @Html.HiddenFor(m => m.payno)
- @Html.HiddenFor(m => m.exno)
- @Html.Hidden("pplno", Model.PPLog.pplno)
-
-
-
+
+ @Html.HiddenFor(m => m.payno)
+ @Html.HiddenFor(m => m.exno)
+ @Html.Hidden("pplno", Model.PPLog.pplno)
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@section scriptsHeader{
- @Html.Partial("./Partial/ScriptDate")
- }
-
diff --git a/FO/Views/Course/ApplyPay_221227.cshtml b/FO/Views/Course/ApplyPay_221227.cshtml
deleted file mode 100644
index ceda34b..0000000
--- a/FO/Views/Course/ApplyPay_221227.cshtml
+++ /dev/null
@@ -1,333 +0,0 @@
-@model NP.Model.VMCourse
-@{
- var isallday = Model.CM.retimeymd == "2099-12-31" ? true : false;
-}
-
-
-
- @section scriptsHeader{
-
- @Html.Partial("./Partial/ScriptDate")
- }
-