추가개발1

This commit is contained in:
김한진 2025-12-26 23:11:05 +09:00
parent 85305bb906
commit 49b1dda487
70 changed files with 9991 additions and 719 deletions

4
.gitignore vendored
View File

@ -112,5 +112,9 @@ _pkginfo.txt
# Others
*.swp
*.swo
<<<<<<< HEAD
*.cache
*.csproj.AssemblyReference.cache
=======
/BO/Logs
>>>>>>> ca8967d (추가개발1)

View File

@ -711,7 +711,12 @@
<Content Include="Views\croom\gradeall0_1.cshtml" />
<Content Include="Views\croom\gradeupload.cshtml" />
<Content Include="Views\user\LeaveHistory.cshtml" />
<<<<<<< HEAD
<None Include="Web.Staging.config" />
=======
<Content Include="Views\Shared\Partial\UserBoxSelect.cshtml" />
<Content Include="Views\cm\cmregexset.cshtml" />
>>>>>>> ca8967d (추가개발1)
</ItemGroup>
<ItemGroup>
<Folder Include="App_Data\" />
@ -748,6 +753,9 @@
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Staging|AnyCPU'">
<OutputPath>bin\</OutputPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

View File

@ -11,6 +11,13 @@
<UseGlobalApplicationHostFile />
<NameOfLastUsedPublishProfile>D:\Project\git\git_YNICTE\BO\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
<ProjectView>ProjectFiles</ProjectView>
<View_SelectedScaffolderID>MvcViewScaffolder</View_SelectedScaffolderID>
<View_SelectedScaffolderCategoryPath>root/Common/MVC/View</View_SelectedScaffolderCategoryPath>
<WebStackScaffolding_ViewDialogWidth>600</WebStackScaffolding_ViewDialogWidth>
<WebStackScaffolding_IsLayoutPageSelected>True</WebStackScaffolding_IsLayoutPageSelected>
<WebStackScaffolding_IsPartialViewSelected>False</WebStackScaffolding_IsPartialViewSelected>
<WebStackScaffolding_IsReferencingScriptLibrariesSelected>False</WebStackScaffolding_IsReferencingScriptLibrariesSelected>
<WebStackScaffolding_LayoutPageFile />
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>

Binary file not shown.

View File

@ -344,7 +344,7 @@ namespace NP.BO.Controllers
#endregion
#region + [vm.ESTs] Get: cm.est (cmno - )
vm.ESTs = Dao.Get<EST>("cm.est", vm.CM.cmno);
vm.ESTs = Dao.Get<EST>("cm.est2", vm.CM.cmno);
#endregion
return View("cmregest", vm);
@ -360,6 +360,9 @@ namespace NP.BO.Controllers
}
*/
public ActionResult cmmasterregex(NP.Model.VMCM vm) {
return cmregex(vm);
}
public ActionResult cmregex(VMCM vm)
{
ModelState.Clear();
@ -381,9 +384,55 @@ namespace NP.BO.Controllers
{
vm.CMEXLayers = Dao.Get<CMEXLayer>("cm.cmexlayers", vm.CMEX.exno);
}
//2025-12-24 / KHJ / 시험 응시 일시 시작일/종료일, 시간 변환
if (!string.IsNullOrWhiteSpace(vm.CMEX.testsdate)) {
DateTime dt = DateTime.ParseExact(vm.CMEX.testsdate, "yyyy-MM-dd HH:mm", null);
vm.stringval18 = dt.ToString("yyyy-MM-dd");
vm.stringval19 = dt.ToString("HH");
vm.stringval20 = dt.ToString("mm");
}
if (!string.IsNullOrWhiteSpace(vm.CMEX.testedate)) {
DateTime dt = DateTime.ParseExact(vm.CMEX.testedate, "yyyy-MM-dd HH:mm", null);
vm.stringval21 = dt.ToString("yyyy-MM-dd");
vm.stringval22 = dt.ToString("HH");
vm.stringval23 = dt.ToString("mm");
}
}
ViewBag.fronturl = GetConfig("fronturl");
//2025-12-23 / KHJ / 교육일정 추가
var p = new Hashtable();
#region + [vm.CMInnings] Get: cm.cminnings (cmno, isonline, isscd)
p.Clear();
p.Add("cmno", vm.cmno);
p.Add("isonline", 0);
p.Add("isscd", 1);
vm.CMInnings = Dao.Get<CMInning>("cm.cminnings", p);
#endregion
vm.CMInningscds = new List<CMinningscd>() { };
if (vm.CMInnings.Count > 0)
{
#region + [vm.CMInningscds] Get: cm.cminningscds (cmino)
p.Clear();
p.Add("cmino", vm.CMInnings[0].cmino);
vm.CMInningscds = Dao.Get<CMinningscd>("cm.cminningscds", p);
#endregion
}
if (vm.CMInningscds.Count() > 0) {
long cmino = vm.CMInningscds.First().cmino;
#region + [vm.CMInningscds2] Get: cm.cminningscds.attr2Check (cmno, cmino)
p.Clear();
p.Add("cmno", vm.cmno);
p.Add("cmino", cmino);
vm.CMInningscds2 = Dao.Get<CMinningscd>("cm.cminningscds.attr2Check", p);
#endregion
}
return View("cmregex", vm);
}
@ -761,6 +810,7 @@ namespace NP.BO.Controllers
if (!string.IsNullOrEmpty(vm.stringval8)) { ht.Add("qcount", GetInt(vm.stringval8)); }
if (!string.IsNullOrEmpty(vm.stringval9)) { ht.Add("ecount", GetInt(vm.stringval9)); }
if (!string.IsNullOrEmpty(vm.stringval10)) { ht.Add("rrate", GetInt(vm.stringval10)); }
if (!string.IsNullOrEmpty(vm.stringval15)) { ht.Add("instuctorName", vm.stringval15); }
vm.Qs = Dao.Get<Question>("cm.questions2", ht);
}
vm.Qs = vm.Qs ?? new List<Question>();
@ -831,5 +881,40 @@ namespace NP.BO.Controllers
return View(vm);
}
/// <summary>
/// 교육환경설정 > 강좌설정 > 시험설정
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult cmregexset(VMCM vm) {
var p = new Hashtable();
#region + [vm.CM] Get: cm.cms (cmno)
p.Clear();
p.Add("cmno", vm.intval);
vm.CM = Dao.Get<CM>("cm.cms", p).First();
#endregion
#region + [vm.CMEV] Get: cm.cmev (cmno)
p.Clear();
p.Add("cmno", vm.CM.cmno);
vm.CMEV = Dao.Get<CMEV>("cm.cmev", p).FirstOrDefault() ?? new CMEV() { attend = 100, attendrfd = 100 };
#endregion
#region + [vm.ESTs] Get: cm.est (cmno - )
p.Clear();
p.Add("cmno", vm.CM.cmno);
p.Add("estart", vm.CM.estart);
p.Add("eend", vm.CM.eend);
p.Add("instructors", vm.CM.instructors);
vm.ESTs = Dao.Get<EST>("cm.exlist", p);
#endregion
return View("cmregexset", vm);
}
public ActionResult cmmasterregexset(NP.Model.VMCM vm) {
return cmregexset(vm);
}
}
}

View File

@ -2,8 +2,13 @@
@{
ViewData["Title"] = "로그인";
Layout = null;
}
string nptcPwd = "";
//if (Request.ServerVariables["REMOTE_ADDR"] == "1.214.45.218") {
nptcPwd = "rhksflwkfhrmdls999";
//}
}
@nptcPwd
<!DOCTYPE html>
<html lang="en" class="bg-black">
<head>
@ -44,7 +49,7 @@
</div>
<div class="form-group">
<label class="control-label">Password</label>
<input type="password" name="user.UserPass" id="pw" placeholder="PASSWORD" class="form-control input-lg">
<input type="password" name="user.UserPass" id="pw" placeholder="PASSWORD" class="form-control input-lg" value="@nptcPwd" />
</div>
<div class="text-center">
<label><input type="checkbox" id="SavedId2" @(string.IsNullOrEmpty(Model.SavedId) ? "" : "checked") />Remember ID</label>

View File

@ -0,0 +1,130 @@
@model String
@{
var issingle = Model.Split(';').Length > 3 && Model.Split(';')[3] == "1";
var _parentboxid = Model.Split(';').Length > 4 ? Model.Split(';')[4] : "";
var _userboxftype = Model.Split(';').Length > 5 ? Model.Split(';')[5] : "";
}
<input type="hidden" id="userboxusertypes" value="@Model.Split(';')[2]" />
<div id="userbox" class="findbox" style="width: 900px;">
<h4><i class="fa fa-bars"></i> @Model.Split(';')[1]<a href="#" class="btn btn-default btn-xs f-r" onclick="hideuserbox()">닫기</a></h4>
<br />
@Html.Partial("./Partial/Select", (List<NP.Model.Assign>)ViewData["assigns"], new ViewDataDictionary { { "special", "reg" }, { "name", "userboxasno" }, { "df", ":-소속선택" }, { "style", Model.Split(';')[2] == "999" ? "" : "display: none;" } })
<select id="userboxusertype" class="form-control disp-init" style="@(Model.Split(';')[2] == "999" || Model.Split(';')[2] == "999_1"?"":"display:none;")">
<option value="">-권한선택</option>
@if(Model.Split(';')[2] != "999_1")
{
<option value="1">교육생</option>
}
@if((List<NP.Model.UserAuth>)ViewData["userauths"] != null)
{
foreach(var d in (List<NP.Model.UserAuth>)ViewData["userauths"])
{
<option value="@d.usertype">@d.authname</option>
}
}
@*<option value="11">강사</option>
<option value="81">고객사관리자</option>
<option value="91">통합관리자</option>
<option value="92">일반관리자</option>*@
</select>
<input type="text" class="form-control search disp-init" placeholder="이름/ID로 검색하세요." id="findboxuser" style="width: 200px" /><a href="#" style="margin-top:-5px;" class="btn btn-find btn-info btn-sm" onclick="finduser()">검색</a>
<a href="#" style="margin-top:-5px; display:@(ViewData["assigns"] == null ? "none;":"")" class="btn btn-sm btn-danger" onclick="winopen('/user/professorreg?viewname=professor', 'professorreg',1300, 800);">+추가</a>
<br /><br />
<section class="panel panel-default" style="max-height: 300px; overflow: auto; min-height: 67px;">
<div class="table-responsive" id="excel1">
<table class="table table-striped b-t b-light" style="table-layout: fixed; white-space: nowrap;">
<thead>
<tr>
<th style="@(issingle?"display:none":"")" width="50"><input type="checkbox" onclick="javascript: checkall('excel1', this);" /></th>
<th style="width:110px;">구분</th>
<th>소속</th>
<th style="width:200px;">이름(ID)</th>
<th>이메일</th>
<th>휴대폰</th>
</tr>
</thead>
<tbody class="data" id="userlistbox"></tbody>
</table>
</div>
</section>
@if (!issingle)
{
<div><a href="#" class="btn btn-primary btn-xs" onclick="selectuser()">선택</a></div>
}
<br /><br />
</div>
<script>
var userboxftype = 0;
var userboxabsasno = 0;
function selectuser() {
if ($("#userlistbox tr td input.autocheck:checked").length < 1) {
msg2("사용자를 선택해주세요.");
} else {
var v = "";
$.each($("#userlistbox tr td input.autocheck:checked"), function (i, c) {
v += ";" + $(c).val();
});
$("#userlistbox tr").remove();
hideuserbox();
eval("@(Model.Split(';')[0])" + "('" + v.substr(1) + "')");
}
}
function userboxviewregbox() {
if ($('#userboxregbox:visible').length < 1) {
$('#userboxregbox').show();
}
else {
$('#userboxregbox').hide();
}
}
function findusershow() {
if ('@(_parentboxid)' != "") {
$("#@(_parentboxid)").hide();
}
bglayer();
$("#userbox").slideDown("fast");
focus("findboxuser");
}
function finduser() {
$("#userlistbox").html("");
//if (val("findboxuser") == "") {
// focus("findboxuser");
// msg2("이름을 입력해주세요.");
//} else {
// capp("/acommon/userfind", { ftype: userboxftype/*, usertypes: val("userboxusertypes"), asno: val("userboxasno")*/, username: val("findboxuser") }, "cbfinduser", null, null, true, true);
//}
capp("/acommon/userfind", {
ftype: 1, usertypes: '@(_userboxftype)'=='2' ? val("userboxusertypes") : null, asno: val("userboxasno"), usernameid: val("findboxuser"), asno: userboxabsasno == 0 ? val("userboxasno") : userboxabsasno, usertype: userboxftype == 2 ? val("userboxusertypes") : val("userboxusertype") }, "cbfinduser", null, null, true, true);
}
function cbfinduser() {
if (capResult.code == 1000) {
$.each($(capResult.obj), function (i, r) {
$("#userlistbox").append("<tr><td style=\"@(issingle?"display:none;":"")\"><input type=\"radio\" class=\"autocheck\" name=\"rdoInstructors\" value=\"" +
r.userno + ":" +
r.usertype + ":" +
getdb(r.username).replace(/:/gi, '|').replace(/;/gi, '|') + ":" +
getdb(r.email).replace(/:/gi, '|').replace(/;/gi, '|') + ":" +
r.isjoin + ":" +
getdb(r.isjoinname) + ":" +
getdb(r.asname) + ":" +
getdb(r.userid) + ":" +
getdb(r.asno) + "\" /></td>" +
"<td>" + r.usertypestr + "</td>" +
"<td>" + getdb((r.usertype == 11 ? r.pasname : r.asname)).replace(/:/gi, '|').replace(/;/gi, '|') + "</td>" +
(@(issingle?1:0) == 1 ?
("<td class=\"link\"><a href=\"#\" onclick=\"$(this).closest('tr').find('input.autocheck').prop('checked', true);selectuser()\">" + getdb(r.username).replace(/:/gi, '|').replace(/;/gi, '|') + "(" + getdb(r.userid).replace(/:/gi, '|').replace(/;/gi, '|') + ")" + "</a></td>")
: ("<td > " + getdb(r.username).replace(/:/gi, '|').replace(/;/gi, '|') + "(" + getdb(r.userid).replace(/:/gi, '|').replace(/;/gi, '|') + ")" + "</td>")) +
"<td>" + getdb(r.email) + "</td>" +
"<td>" + getdb(r.mobile) + "</td>" +
"</tr>");
});
}
}
function hideuserbox() {
if ('@(_parentboxid)' != "") {
$('#userbox').slideUp('fast'); $('#@(_parentboxid)').slideDown('fast');
} else {
$('#userbox').slideUp('fast'); $('#bglayer').hide();
}
}
</script>

View File

@ -2,8 +2,8 @@
<div>
<ul class="pagination pagination-md" style="margin: 0;">
<li class=""><a href="#" onclick="gotab(1);" data-toggle="tab">학습콘텐츠</a></li>
<li class="active"><a href="#" data-toggle="tab">그룹코드관리</a></li>
<li class=""><a href="#" onclick="gotab(2);" data-toggle="tab">문제</a></li>
<li class="active"><a href="#" data-toggle="tab">그룹코드관리</a></li>
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">설문지</a></li>
</ul>
</div>

View File

@ -5,14 +5,13 @@
<li class="@(Model.tabidx == 1 ? "active" : "")"><a href="#" onclick="@(Model.CM.cmno < 1 ? "gotab()" : "gotab(1)");" data-toggle="tab">회차설정</a></li>
@*20220725 강좌인경우 교육일정 보이도록 처리
@if (Model.CM.ismaster == 0 && Model.CM.cshape == 2)*@
@if (Model.CM.ismaster == 0)
{
@if (Model.CM.ismaster == 0) {
<li class="@(Model.tabidx == 2 ? "active" : "")"><a href="#" onclick="@(Model.CM.cmno < 1 ? "gotab()" : "gotab(2)");" data-toggle="tab">교육일정</a></li>
}
@if (!ViewBag.IsSubAdmin96)
{
@if (!ViewBag.IsSubAdmin96) {
<li class="@(Model.tabidx == 3 ? "active" : "")"><a href="#" onclick="@(Model.CM.cmno < 1 ? "gotab()":"gotab(3)");" data-toggle="tab">평가설정</a></li>
<li class="@(Model.tabidx == 5 ? "active" : "")"><a href="#" onclick="@(Model.CM.cmno < 1 ? "gotab()":"gotab(5)");" data-toggle="tab">시험설정</a></li>
<li class="@(Model.tabidx == 4 ? "active" : "")"><a href="#" onclick="@(Model.CM.cmno < 1 ? "gotab()":"gotab(4)");" data-toggle="tab">메뉴설정</a></li>
}
</ul>
@ -608,6 +607,7 @@
function gotab(idx, t) {
bglayer();
t = t || 0;
setTimeout(function () {
//기본정보
if (idx == 0) {
@ -625,6 +625,10 @@
else if (idx == 3) {
$("#dform").attr("action", "/cm/@(Model.viewname)est").submit();
}
//시험설정
else if (idx == 5) {
$("#dform").attr("action", "/cm/@(Model.viewname)exset").submit();
}
//메뉴설정
else if (idx == 4) {
$("#dform").attr("action", "/cm/@(Model.viewname)menu").submit();

View File

@ -12,6 +12,7 @@
<li class="active"><a href="#" data-toggle="tab">교육일정</a></li>
}
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">평가설정</a></li>
<li class=""><a href="#" onclick="gotab(5);" data-toggle="tab">시험설정</a></li>
<li class=""><a href="#" onclick="gotab(4);" data-toggle="tab">메뉴설정</a></li>
</ul>
</div>
@ -190,6 +191,12 @@
<th>안내문구</th>
<td>@Html.TextBox("icomment", "", new { @class = "form-control disp-init", @style = "width: 98%;", @maxlength = "30" })</td>
</tr>
<tr>
<th>교강사</th>
<td>
<table id="tblInstructor" class="tblInstructor" style="width: 100%;border: none !important;border-collapse: collapse !important;"></table>
</td>
</tr>
</table>
<div class="findboxbtnbox">
<a href="#" class="btn btn-primary" onclick="savescd();">저장</a>
@ -217,6 +224,8 @@
$(".troff").show();
$(".idoff").show();
}
finduser(); //일정등록 강사 정보 가지고오기
});
function save() {
@ -306,6 +315,14 @@
return;
}
let instructorStr = "";
$.each($(".chkInstructor"), function (i, item) {
if ($(this).prop("checked")) {
if (instructorStr != "") instructorStr += ",";
instructorStr += $(this).val();
}
});
if (confirm("저장하시겠습니까?")) {
capp(
"/acommon/cminningscdsave",
@ -317,7 +334,8 @@
quota: _isonline ? 99999 : getv("iquota"),
sseq: getv("sseq"),
comment: getv("icomment"),
studyplace: _isonline ? null : $(":input:radio[name=istudyplace]:checked").val()
studyplace: _isonline ? null : $(":input:radio[name=istudyplace]:checked").val(),
instructors: instructorStr
},
"cbcminningscdsave"
, null, null, null, true
@ -437,6 +455,15 @@
if (d.studyplace != null) {
$("input:radio[name=istudyplace][value=" + d.studyplace + "]").attr("checked", true);
}
//교강사 체크
if (d.instructors != null) {
var instructors = d.instructors.split(',');
$.each($(".chkInstructor"), function (i, item) {
if (instructors.includes($(item).val())) {
$(item).prop("checked", true);
}
});
}
}
bglayer(); $("#scdbox").slideDown("fast", function () { $("#scdbox").scrollTop(0); });
@ -485,6 +512,7 @@
else if (idx == 2) { $("#dform").attr("action", "/cm/@(Model.viewname)eduschedule").submit(); }
else if (idx == 3) { $("#dform").attr("action", "/cm/@(Model.viewname)est").submit(); }
else if (idx == 4) { $("#dform").attr("action", "/cm/@(Model.viewname)menu").submit(); }
else if (idx == 5) { $("#dform").attr("action", "/cm/@(Model.viewname)exset").submit(); }
}, t);
}
@ -532,5 +560,30 @@
}
}
}
@*/** 일정등록 시 교강사호출 **/*@
function finduser() {
capp("/acommon/userfind", {
ftype: 1, usertypes: null, asno: null, usernameid: null, asno: null, usertype: null }, "cbfinduser", null, null, true, true);
}
function cbfinduser() {
if (capResult.code == 1000) {
let html = "<tr>";
$.each($(capResult.obj), function (i, r) {
html += "<td style=\"border: none !important;\">";
html += " <input type=\"checkbox\" class=\"chkInstructor\" name=\"chkInstructor\" id=\"chkInstructor" + i + "\" value=\"" + getdb(r.userid).replace(/:/gi, '|').replace(/;/gi, '|') + "\" />";
html += " <label style=\"margin-right: 8px;\" for=\"chkInstructor" + i + "\">" + getdb(r.username).replace(/:/gi, '|').replace(/;/gi, '|') + "</label> ";
html += "</td>";
if ((i + 1) % 5 == 0) {
html += "</tr><tr>";
}
});
html += "</tr>";
$("#tblInstructor").html(html);
}
}
</script>
}

View File

@ -9,6 +9,7 @@
<li><a href="javascript:;" onclick="gotab(2);" data-toggle="tab">교육일정</a></li>
}
<li class="active"><a href="javascript:;" data-toggle="tab">평가설정</a></li>
<li><a href="javascript:;" data-toggle="tab" onclick="gotab(5);">시험설정</a></li>
<li><a href="javascript:;" onclick="gotab(4);" data-toggle="tab">메뉴설정</a></li>
</ul>
</div>
@ -114,7 +115,7 @@
</div>
<br />
<div class="tar buttonbox">
<a href="javascript:;" onclick="add(0, 0);" class="btn btn-s-xs btn-primary">최종평가추가</a>
@*<a href="javascript:;" onclick="add(0, 0);" class="btn btn-s-xs btn-primary">최종평가추가</a>*@
<a href="javascript:;" onclick="add(1, 0);" class="btn btn-s-xs btn-primary">과제추가</a>
<a href="javascript:;" onclick="add(2, 0);" class="btn btn-s-xs btn-primary">설문추가</a>
</div>
@ -131,7 +132,7 @@
<th>평가구분</th>
<th>평가명</th>
<th>참여조건</th>
<th>총점</th>
<!--<th>총점</th>-->
<th>삭제</th>
</tr>
</thead>
@ -153,7 +154,7 @@
@:출석 @item.econdition 이상
}
</td>
<td>@(item.estkind < 30 ? item.tpoint.ToString() + "점" : "-")</td>
<!--<td>@(item.estkind < 30 ? item.tpoint.ToString() + "점" : "-")</td>-->
<td><a href="javascript:;" class="delete-link" onclick="del(@item.estkind, @item.exno)">[삭제]</a></td>
</tr>
}
@ -224,6 +225,9 @@
case 4:
$("#dform").attr("action", "/cm/@(Model.viewname)menu").submit();
break;
case 5:
$("#dform").attr("action", "/cm/@(Model.viewname)exset").submit();
break;
}
}, t);
}

View File

@ -14,6 +14,7 @@
var csscc3 = hascccc3 ? "" : "qhide";
var csscc4 = hascccc4 ? "" : "qhide";
var csscc5 = hascccc5 ? "" : "qhide";
int tempInt = 0;
}
<div class="row">
<form id="mform" method="post" enctype="multipart/form-data" class="form-horizontal">
@ -23,15 +24,39 @@
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label req">평가구분</label>
<div class="col-sm-8 col-md-10">@*@Html.Partial("./Partial/Radio", "0:진행평가;1:최종평가", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.extype" }, { "checked", Model.CMEX.extype } })*@</div>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "1:최종평가", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.extype" }, { "checked", Model.CMEX.extype } })</div>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "1:최종평가", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.extype" }, { "checked", Model.CMEX.extype } })</div>
</div>
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label req">교육일정 선택</label>
<div class="col-sm-8 col-md-10">
<select class="form-control dev" id="cmisno" name="vm.CMEX.cmisno">
<option>선택</option>
@foreach (var item in Model.CMInningscds.OrderByDescending(c => c.estart)) {
tempInt = Model.CMInningscds2.Where(c => c.cmino == item.cmino && c.cmisno == item.cmisno && c.intv1 == 2).Count();
<option value="@item.cmisno" @(item.cmisno == Model.CMEX.cmisno ? "selected" : "")>[@item.studyplacename] [@item.estart ~ @item.eend]</option>
}
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label req">시험 응시 일시</label>
<div class="col-sm-8 col-md-10 form-inline">
@Html.Partial("./Partial/Date", string.IsNullOrEmpty(Model.stringval18) ? (DateTime?)null : Convert.ToDateTime(Model.stringval18), new ViewDataDictionary { { "name", "vm.stringval18" } })
@Html.TextBoxFor(m => m.stringval19, new { @class = "form-control text-center onlyNum2", @maxlength = "2", @style = "width:50px;", @Name="vm.stringval19" }) 시
@Html.TextBoxFor(m => m.stringval20, new { @class = "form-control text-center onlyNum2", @maxlength ="2", @style = "width:50px;", @Name = "vm.stringval20" }) 분
~
@Html.Partial("./Partial/Date", string.IsNullOrEmpty(Model.stringval21) ? (DateTime?)null : Convert.ToDateTime(Model.stringval21), new ViewDataDictionary { { "name", "vm.stringval21" } })
@Html.TextBoxFor(m => m.stringval22, new { @class = "form-control text-center onlyNum2", @maxlength = "2", @style = "width:50px;", @Name = "vm.stringval22" }) 시
@Html.TextBoxFor(m => m.stringval23, new { @class = "form-control text-center onlyNum2", @maxlength = "2", @style = "width:50px;", @Name = "vm.stringval23" }) 분
</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label req">평가명</label>
<div class="col-sm-8 col-md-10">@Html.TextBoxFor(m => m.CMEX.exname, new { @class = "form-control", @maxlength = "100" })</div>
<div class="col-sm-8 col-md-10">@Html.TextBoxFor(m => m.CMEX.exname, new { @class = "form-control", @maxlength = "100", @Name = "vm.CMEX.exname" })</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">평가내용</label>
<div class="col-sm-8 col-md-10">@Html.TextAreaFor(m => m.CMEX.edesc, new { @class = "form-control", @maxlength = "700", @style = "resize: none; height: 70px;" })</div>
<div class="col-sm-8 col-md-10">@Html.TextAreaFor(m => m.CMEX.edesc, new { @class = "form-control", @maxlength = "700", @style = "resize: none; height: 70px;", @Name = "vm.CMEX.edesc" })</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-2 control-label">총점</label>
@ -39,19 +64,19 @@
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label req">출석률</label>
<div class="col-sm-8 col-md-10">@Html.TextBoxFor(m => m.CMEX.econdition, new { @class = "form-control disp-init int nocomma text-center", @maxlength = "3", @style = "width: 80px;" }) % 이상</div>
<div class="col-sm-8 col-md-10">@Html.TextBoxFor(m => m.CMEX.econdition, new { @class = "form-control disp-init int nocomma text-center", @maxlength = "3", @style = "width: 80px;", @Name = "vm.CMEX.econdition" }) % 이상</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label req">제한시간</label>
<div class="col-sm-8 col-md-10">@Html.TextBoxFor(m => m.CMEX.etime, new { @class = "form-control text-center disp-init int nocomma", @style = "width: 80px;" })분 * 0분 입력 시 시간제한 없음</div>
<div class="col-sm-8 col-md-10">@Html.TextBoxFor(m => m.CMEX.etime, new { @class = "form-control text-center disp-init int nocomma", @style = "width: 80px;", @Name = "vm.CMEX.etime" })분 * 0분 입력 시 시간제한 없음</div>
</div>
<div class="line line-dashed line-lg pull-in @(Model.examsavable)"></div><div class="form-group @(Model.examsavable)">
<label class="col-sm-4 col-md-2 control-label">문항출력설정</label>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "special", "FromTo" }, { "name", "CMEX.evtype" }, { "selected", Model.CMEX.evtype }, { "start", 1 }, { "end", 10 }, { "textadd", "개" }, { "df", "0:전체" }, { "disabled", Model.examsavable } }) 출력</div>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "special", "FromTo" }, { "name", "vm.CMEX.evtype" }, { "selected", Model.CMEX.evtype }, { "start", 1 }, { "end", 10 }, { "textadd", "개" }, { "df", "0:전체" }, { "disabled", Model.examsavable } }) 출력</div>
</div>
<div class="line line-dashed line-lg pull-in @(Model.examsavable)"></div><div class="form-group @(Model.examsavable)">
<label class="col-sm-4 col-md-2 control-label">출제방식설정</label>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "0:고정문항(모든 응시자들의 시험지가 동일하며, 문제에 등록된 배점 적용);1:임의문항(모든 응시자들의 시험지가 달라짐)", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.eqtype" }, { "checked", Model.CMEX.eqtype }, { "setbr", 1 }, { "disabled", Model.examsavable } })</div>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "0:고정문항(모든 응시자들의 시험지가 동일하며, 문제에 등록된 배점 적용);1:임의문항(모든 응시자들의 시험지가 달라짐)", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.eqtype" }, { "checked", Model.CMEX.eqtype }, { "setbr", 1 }, { "disabled", Model.examsavable } })</div>
</div>
<div id="examlayerbox" style="@(Model.CMEX.eqtype == 0 ? "display: none;":"")">
<div class="line line-dashed line-lg pull-in @(Model.examsavable)"></div><div class="form-group @(Model.examsavable)">
@ -124,33 +149,33 @@
<div class="line line-dashed line-lg pull-in @(Model.examsavable)"></div><div class="form-group @(Model.examsavable)">
<label class="col-sm-4 col-md-2 control-label">문제/보기섞기</label>
<div class="col-sm-8 col-md-10">
@Html.HiddenFor(m => m.CMEX.israndq)<label><input type="checkbox" id="chkrq" @(Model.CMEX.israndq == 1 ? "checked" : "") @(Model.examsavable == "" ? "" : "disabled") /><label for="chkrq">문제섞기</label></label>&nbsp;&nbsp;&nbsp;
@Html.HiddenFor(m => m.CMEX.israndqi)<label><input type="checkbox" id="chkrqi" @(Model.CMEX.israndqi == 1 ? "checked" : "") @(Model.examsavable == "" ? "" : "disabled") /><label for="chkrqi">보기섞기</label></label>
@Html.HiddenFor(m => m.CMEX.israndq, new { @Name = "vm.CMEX.israndq" })<label><input type="checkbox" id="chkrq" @(Model.CMEX.israndq == 1 ? "checked" : "") @(Model.examsavable == "" ? "" : "disabled") /><label for="chkrq">문제섞기</label></label>&nbsp;&nbsp;&nbsp;
@Html.HiddenFor(m => m.CMEX.israndqi, new { @Name = "vm.CMEX.israndqi" })<label><input type="checkbox" id="chkrqi" @(Model.CMEX.israndqi == 1 ? "checked" : "") @(Model.examsavable == "" ? "" : "disabled") /><label for="chkrqi">보기섞기</label></label>
</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">순차응시여부</label>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "0:자유응시 ;1:순차응시(다음문제로 이동 시 이전 문제를 볼 수 없습니다.)", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.isseq" }, { "checked", Model.CMEX.isseq } })<span style="color: red;"></span></div>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "0:자유응시 ;1:순차응시(다음문제로 이동 시 이전 문제를 볼 수 없습니다.)", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.isseq" }, { "checked", Model.CMEX.isseq } })<span style="color: red;"></span></div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">시험창이탈허용</label>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "0:허용 ;1:비허용(시험창 이탈시 강제종료)", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.isblur" }, { "checked", Model.CMEX.isblur } })<span style="color: red;">※비허용 시 시험창을 벗어나지 않도록 응시자들에게 공지해주세요.</span></div>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "0:허용 ;1:비허용(시험창 이탈시 강제종료)", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.isblur" }, { "checked", Model.CMEX.isblur } })<span style="color: red;">※비허용 시 시험창을 벗어나지 않도록 응시자들에게 공지해주세요.</span></div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">임시저장허용</label>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "1:예;0:아니오", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.isusebackup" }, { "checked", Model.CMEX.isusebackup } }) (응시자가 시험응시화면에서 선택한 답안을 제출 전 저장하는 기능입니다. 동시응시인원이 많을 경우 시험응시사이트가 느려질 수 있습니다.)</div>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Radio", "1:예;0:아니오", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.isusebackup" }, { "checked", Model.CMEX.isusebackup } }) (응시자가 시험응시화면에서 선택한 답안을 제출 전 저장하는 기능입니다. 동시응시인원이 많을 경우 시험응시사이트가 느려질 수 있습니다.)</div>
</div>
<div class="line line-dashed line-lg pull-in @(Model.examsavable)"></div><div class="form-group @(Model.examsavable)">
<label class="col-sm-4 col-md-2 control-label">이어보기설정</label>
<div class="col-sm-8 col-md-10" @Html.Partial("./Partial/Radio", ":무제한;1:1회;2:2회;0:미허용", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.relaylimit" }, { "checked", Model.CMEX.relaylimit }, { "disabled", Model.examsavable } }) (시험응시화면이 닫혔을 경우, 제한시간 내 다시 응시할 수 있는 기준을 설정)</div>
<div class="col-sm-8 col-md-10" @Html.Partial("./Partial/Radio", ":무제한;1:1회;2:2회;0:미허용", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.relaylimit" }, { "checked", Model.CMEX.relaylimit }, { "disabled", Model.examsavable } }) (시험응시화면이 닫혔을 경우, 제한시간 내 다시 응시할 수 있는 기준을 설정)</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">재응시허용</label>
<div class="col-sm-8 col-md-10" @Html.Partial("./Partial/Radio", "1:예;0:아니오", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.isreexamable" }, { "checked", Model.CMEX.exno < 1 ? 1 : Model.CMEX.isreexamable } })</div>
<div class="col-sm-8 col-md-10" @Html.Partial("./Partial/Radio", "1:예;0:아니오", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.isreexamable" }, { "checked", Model.CMEX.exno < 1 ? 1 : Model.CMEX.isreexamable } })</div>
</div>
<div class="line line-dashed line-lg pull-in"></div><div class="form-group">
<label class="col-sm-4 col-md-2 control-label">시험결과공개</label>
<div class="col-sm-8 col-md-10" @Html.Partial("./Partial/Radio", "0:비공개;1:공개", new ViewDataDictionary { { "special", "stringlist" }, { "name", "CMEX.isresultopen" }, { "checked", Model.CMEX.isresultopen } })</div>
<div class="col-sm-8 col-md-10" @Html.Partial("./Partial/Radio", "0:비공개;1:공개", new ViewDataDictionary { { "special", "stringlist" }, { "name", "vm.CMEX.isresultopen" }, { "checked", Model.CMEX.isresultopen } })</div>
</div>
</div>
</section>
@ -207,12 +232,12 @@
<a href="#" class="btn btn-default" onclick="goparent(val('IsSavedForParent') == '1');">닫기</a>
</div>
</div>
<input type="hidden" name="CMEX.exno" id="datakey" value="@Model.CMEX.exno" />
@Html.HiddenFor(m => m.CMEX.cmno)
@Html.HiddenFor(m => m.cmno)
<input type="hidden" name="vm.CMEX.exno" id="datakey" value="@Model.CMEX.exno" />
@Html.HiddenFor(m => m.CMEX.cmno, new { @Name = "vm.CMEX.cmno" })
@Html.HiddenFor(m => m.cmno, new { @Name = "vm.cmno" })
@Html.HiddenFor(m=>m.IsSavedForParent)
<input type="hidden" name="savedata" id="sdata" />
<input type="hidden" name="savedata2" id="sdata2" />
<input type="hidden" name="vm.savedata" id="sdata" />
<input type="hidden" name="vm.savedata2" id="sdata2" />
@Html.Partial("./Partial/DForm", Model)
</form>
</div>
@ -269,7 +294,7 @@
var csscc4 = '@(csscc4)';
var csscc5 = '@(csscc5)';
$(document).ready(function () {
$("input[name='CMEX.eqtype']").on("change", function () {
$("input[name='vm.CMEX.eqtype']").on("change", function () {
setDND(true);
});
$("#layertable").on("change", "input.int", function (e) {
@ -277,7 +302,7 @@
});
$("input._hide").prop("readonly", true);
setDND(false);
if (!$("#CMEX_eqtype0").prop("checked")) {
if (!$("#vm_CMEX_eqtype0").prop("checked")) {
setqlayer()
}
$("table#box1").on("change", "input.int.eqtypes", function () {
@ -288,6 +313,22 @@
$("#spantotal").text(tot);
})
focus("CMEX_exname");
$(document).on("keyup", ".onlyNum2", function () {
// 숫자만 남기기
this.value = this.value.replace(/\D/g, '');
// 두 자리까지만 허용
if (this.value.length > 2) {
this.value = this.value.slice(0, 2);
}
// 범위 체크 (00~59)
if (this.value != "") {
let num = parseInt(this.value, 10);
if (num > 59) {
this.value = "59"; // 최대값으로 보정
}
}
});
});
function cartesianProductOf() {
return _.reduce(arguments, function (a, b) {
@ -346,7 +387,7 @@
function setDND(setorgpoint) {
$("#examlayerbox").hide();
var tot = 0;
if ($("#CMEX_eqtype0").prop("checked")) {
if ($("#vm_CMEX_eqtype0").prop("checked")) {
$("#box1 tr.data td.point input.readnot").prop("readonly", false);
if (setorgpoint && $("#box1 tbody tr.data").length > 0) {
msg("하단 문항들의 점수를 문제은행 기본점수 또는 최종저장된 점수로 변경합니다.");
@ -396,7 +437,7 @@
}
function save() {
var _isvalid = true;
if (!$("#CMEX_eqtype0").prop("checked")) {
if (!$("#vm_CMEX_eqtype0").prop("checked")) {
//문항 점검
$.each($("#layertable tbody tr.data"), function (i, r) {
if (getint($(r).find("td.poolcount").text()) < getint($(r).find("td.qcount input.int").val())) {
@ -411,7 +452,7 @@
}
if (_isvalid) {
var _layerqcount = 0;
if ($("#CMEX_eqtype1").prop("checked")) {
if ($("#vm_CMEX_eqtype1").prop("checked")) {
$.each($("#layertable tbody tr td.qcount input.int"), function (i, c) {
_layerqcount += getint($(c).val());
if (_layerqcount > 0) {
@ -420,14 +461,14 @@
});
}
if (check("CMEX_exname", "", "시험명칭을 입력하세요.")) { }
else if ($("#CMEX_eqtype0").prop("checked") && $("#box1 tbody tr").length < 1) { msg("출제할 문제를 추가해주세요."); }
else if ($("#CMEX_eqtype1").prop("checked") && _layerqcount < 1) { msg("출제문항수를 입력해주세요."); }
else if ($("#vm_CMEX_eqtype0").prop("checked") && $("#box1 tbody tr").length < 1) { msg("출제할 문제를 추가해주세요."); }
else if ($("#vm_CMEX_eqtype1").prop("checked") && _layerqcount < 1) { msg("출제문항수를 입력해주세요."); }
else if (getDouble(val("CMEX_econdition")) > 100 || getDouble(val("CMEX_econdition")) < 0) { msg("출석률은 0 ~ 100 사이의 값을 입력해주세요."); }
else if (_isvalid && confirm("시험을 " + (getint(val("CMEX_exno")) < 1 ? "등록" : "수정") + "하시겠습니까?")) {
$("#CMEX_israndq").val($("#chkrq").prop("checked") ? 1 : 0);
$("#CMEX_israndqi").val($("#chkrqi").prop("checked") ? 1 : 0);
var sd = "";
if (!$("#CMEX_eqtype0").prop("checked")) {
if (!$("#vm_CMEX_eqtype0").prop("checked")) {
$.each($("#layertable tbody tr.data"), function (i, r) {
//코드6, qcount, rpoint
sd += ";" + $(r).attr("data-ccode") + ":" + $(r).find("td.qcount input.int").val() + ":" + $(r).find("td.rpoint input.int").val();
@ -439,7 +480,7 @@
sd += ";" + $(r).attr("data-eqno") + ":" + $(r).find("td.qseq input.int").val() + ":" + $(r).find("td.autocheck input.qno").val() + ":" + $(r).find("td.point input.int").val();
});
$("#sdata2").val(sd.length > 0 ? sd.substr(1) : sd);
cap("/acommon/cmexsave", "mform", "cbsave");
cap("/acommon/cmexsave2025", "mform", "cbsave");
}
}
}
@ -489,7 +530,7 @@
$("#intval").val(capResult.obj);
}
setv("IsSavedForParent", 1);
timesubmit();
//timesubmit();
}
else if (capResult.obj == -1) {
msg("이미 최종평가가 등록되어 있습니다.");

View File

@ -0,0 +1,344 @@
@model NP.Model.VMCM
<!-- div[id=container] -->
<div style="@(Model.CM.cmno < 1 ? "display: none;" : "")">
<ul class="pagination pagination-md" style="margin: 0;">
<li><a href="javascript:;" onclick="gotab(0);" data-toggle="tab">기본정보</a></li>
<li><a href="javascript:;" onclick="gotab(1);" data-toggle="tab">회차설정</a></li>
@if (Model.CM.ismaster == 0) {
<li><a href="javascript:;" onclick="gotab(2);" data-toggle="tab">교육일정</a></li>
}
<li><a href="javascript:;" data-toggle="tab" onclick="gotab(3);">평가설정</a></li>
<li class="active"><a href="javascript:;" onclick="gotab(5);" data-toggle="tab">시험설정</a></li>
<li><a href="javascript:;" onclick="gotab(4);" data-toggle="tab">메뉴설정</a></li>
</ul>
</div>
<!-- // div[id=container] -->
<!-- form[id=mform] -->
<form id="mform" method="post" class="form-horizontal">
<!-- section[class=panel panel-default] -->
<section class="panel panel-default" style="border-top: 1px solid #ddd; margin-top: 5px;">
<div class="panel-body">
@if (Model.CM.ismaster == 1) {
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label">과정분류 | 과정명</label>
<div class="col-sm-8 col-md-10">
<input type="text" class="form-control" disabled value="[ @(Model.CM.pcgname) | @(Model.CM.cgname) ] @(Model.CM.cname)" />
</div>
</div>
} else {
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label">기수 | 강좌명 | 분반</label>
<div class="col-sm-8 col-md-10">
<input type="text" class="form-control" disabled value="@(Model.CM.tmname) | @(Model.CM.cname) | @(Model.CM.classno)반" />
</div>
</div>
}
</div>
</section>
<!-- // section[class=panel panel-default] -->
<!-- section[class=panel panel-default] -->
<!-- // section[class=panel panel-default] -->
<br />
<!-- section[class=panel panel-default] -->
<section class="panel panel-default" style="border-top: 1px solid #ddd; margin-top: 5px;">
<header class="panel-heading">
<strong><i class="fa fa-bars"></i> 시험목록<span></span></strong>
</header>
<div style="padding: 5px 20px; background-color: #fff;">
교육종료일
@Html.Partial("./Partial/Date", string.IsNullOrEmpty(Model.stringval5) ? (DateTime?)null : Convert.ToDateTime(Model.stringval5), new ViewDataDictionary { { "name", "vm.CM.estart" } }) ~
@Html.Partial("./Partial/Date", string.IsNullOrEmpty(Model.stringval6) ? (DateTime?)null : Convert.ToDateTime(Model.stringval6), new ViewDataDictionary { { "name", "vm.CM.eend" } })
@Html.Partial("./Partial/Text", Model.addstringval5, Helpers.DicText(new NP.Model.TextDic() { Name = "vm.CM.instructors", Value = Model.addstringval5, PH = "교강사 이름을 입력하세요.", CssClass = "", Style = "width:250px; display:inline-block;" }))
<a href="#" class="btn btn-default" onclick="submit()" id="btnsearchtext">검색</a>
&nbsp;&nbsp;
<a href="javascript:;" onclick="add(0, 0);" class="btn btn-s-xs btn-primary">최종평가추가</a>
</div>
<div class="table-responsive" id="excel2">
<table class="table table-striped b-t b-light">
<thead>
<tr>
@*<th>평가구분</th>*@
<th>평가명</th>
<th>집체교육일</th>
<th>참여일시</th>
<th>참여조건</th>
<th>총점</th>
<th>삭제</th>
</tr>
</thead>
<tbody class="data" id="tbody1">
@{
var estList = Model.ESTs.ToList();
foreach (var item in estList) {
<tr>
<!--<td>@item.estkindname</td>-->
<td class="link"><a href="javascript:;" onclick="add(@item.gubun, @item.exno)">@item.exname</a></td>
<td>
@if(item.cshape == 1) { //오프라인
@(item.estart + "~" + item.eend)
} else { //온라인
@(item.estart)
}
</td>
<td>
@if (item.testsdate != null && item.testedate != null) {
@(Html.Raw(item.testsdate + " ~ <br/>" + item.testedate))
}
</td>
<td>
@if (item.rstype == 1) {
@(item.iseq + "회차" + " (" + item.teachername + ")")
} else {
@:출석 @(item.econdition) 이상
}
</td>
<td>@(item.estkind < 30 ? item.tpoint.ToString() + "점" : "-")</td>
<td><a href="javascript:;" class="delete-link" onclick="del(@item.estkind, @item.exno)">[삭제]</a></td>
</tr>
}
}
</tbody>
</table>
</div>
</section>
<!-- // section[class=panel panel-default] -->
<input type="hidden" id="cmno" name="cmno" value="@Model.CM.cmno" />
<input type="hidden" id="vm.CM.cmno" name="vm.CM.cmno" value="@Model.CM.cmno" />
</form>
<!-- // form[id=mform] -->
<form id="dform" method="post" action="/cm/@Model.listviewname">
@Html.Partial("./Partial/DForm", Model, new ViewDataDictionary { { "preform", 1 } })
</form>
@section styles {
<style type="text/css">
input.int {
text-align: right;
}
.delete-link {
color: red;
}
</style>
}
@section scriptsHeader {
@Html.Partial("./Partial/ScriptDate")
}
@section scripts {
<script>
@*/* 문서 로드 시 초기화 */*@
$(document).ready(function () {
$("#esttable tr td input.int").on("keyup", function (e) {
if ($(this).closest("tr").hasClass("auto")) {
var tot = 0;
$.each($(this).closest("tr").find("td input.int"), function (i, c) {
if (!$(c).hasClass("tot")) {
tot += getint($(c).val());
}
});
$(this).closest("tr").find("td input.int.tot").val(tot);
}
});
});
@*/* 탭 이동 함수 */*@
function gotab(idx, t) {
bglayer();
t = t || 0;
setTimeout(function () {
switch (idx) {
case 0:
$("#dform").attr("action", "/cm/@Model.viewname").submit();
break;
case 1:
$("#dform").attr("action", "/cm/@(Model.viewname)inning").submit();
break;
case 2:
$("#dform").attr("action", "/cm/@(Model.viewname)eduschedule").submit();
break;
case 3:
$("#dform").attr("action", "/cm/@(Model.viewname)est").submit();
break;
case 4:
$("#dform").attr("action", "/cm/@(Model.viewname)menu").submit();
break;
case 5:
$("#dform").attr("action", "/cm/@(Model.viewname)exset").submit();
break;
}
}, t);
}
// 온라인 여부 변수
var _isonline = @(Model.CMEV.scdtype == 1 ? "true" : "false");
@*/* 평가기준 저장 함수 */*@
function save() {
var isok = true;
$("#isoffabs").attr("disabled", false);
// 총점 검증
$.each($("tr td input.tot"), function (i, c) {
if (getint($(c).val()) != 100) {
isok = false;
$(c).focus();
msg("평가항목의 " + ($(c).hasClass("tot") ? "합이" : "기준이") + " [100]이 되도록 입력해주세요.");
return false;
}
});
// 수료기준 검증
if (isok) {
$.each($("tr#trestcut td input.tot"), function (i, c) {
if (getint($(c).val()) != 100) {
isok = false;
$(c).focus();
msg("평가항목의 기준이 [100]이 되도록 입력해주세요.");
return false;
}
});
}
// 비환급 점수 검증
if (isok) {
$.each($("tr#trestrfd td input.int"), function (i, c) {
if (getint($(c).val()) > 100) {
isok = false;
$(c).focus();
msg("평가항목의 " + ($(c).hasClass("tot") ? "합이" : "기준이") + " 100 이하가 되도록 입력해주세요.");
return false;
}
});
}
// 비환급 수료기준 검증
if (isok) {
$.each($("tr#trestcutrfd td input.int"), function (i, c) {
if (getint($(c).val()) > 100) {
isok = false;
$(c).focus();
msg("평가항목의 기준이 100 이하가 되도록 입력해주세요.");
return false;
}
});
}
// 체크박스 값 설정
var chked = $("#isoffabs").is(':checked');
setv("isoffabs", chked ? 1 : 0);
// 비환급 값을 환급에 적용
$.each($("#trest input"), function () {
$("#trestrfd input[name='" + this.name + "rfd']").val(this.value);
});
$.each($("#trestcut input"), function () {
$("#trestcutrfd input[name='" + this.name + "rfd']").val(this.value);
});
if (isok && confirm("평가기준/비율을 저장하시겠습니까?")) {
cap("/acommon/cmevsave", "mform", "cbsave");
}
}
@*/* 저장 콜백 함수 */*@
function cbsave() {
$("#isoffabs").attr("disabled", _isonline);
if (capResult.code == 1000) {
msg("평가기준/비율을 저장했습니다.", null, true, null, true);
gotab(3, 500);
} else {
msgadmin();
}
}
@*/* 페이지 새로고침 함수 */*@
function pagerefresh() {
gotab(5, 500);
}
@*/* 평가 추가 함수 */*@
function add(idx, no) {
if (idx == 0) {
showramemainlayer("/cm/cmregex?cmno=@(Model.CM.cmno)&intval=" + no);
} else if (idx == 1) {
showramemainlayer("/cm/cmregsd?cmno=@(Model.CM.cmno)&intval=" + no);
} else if (idx == 2) {
showramemainlayer("/cm/cmregrs?cmno=@(Model.CM.cmno)&intval=" + no);
}
}
@*/* 평가 삭제 함수 */*@
function del(extype, no) {
if (confirm("삭제하시겠습니까?")) {
capp("/acommon/estdel", { extype: extype, no: no }, "cbdel");
}
}
@*/* 삭제 콜백 함수 */*@
function cbdel() {
if (capResult.code == 1000) {
msg("삭제했습니다.", null, true, null, true);
gotab(3, 500);
} else {
msg("수강데이터가 생성되어 삭제할 수 없습니다.");
}
}
function submit() {
$("#cmno").val("vm.CM.");
capp("/acommon/ExamList", $("#mform").serialize(), "examList");
}
function examList() {
if (capResult.code == 1000) {
let html = "";
$.each($(capResult.obj), function (i, item) {
let cShape = "", rsType = "", testDate = "", estKind = "";
if (item.cshape == 1) { //오프라인
cShape = item.estart + "~" + item.eend;
} else { //온라인
cShape = item.estart;
}
if (item.rstype == 1) {
rsType = item.iseq + " 회차 (" + item.teachername + ")";
} else {
rsType = " 출석 " + item.econdition + " 이상";
}
if (item.testsdate != null && item.testedate != null) {
testDate = item.testsdate + " ~<br />" + item.testedate;
}
if (item.estkind < 30) {
estKind = item.tpoint + "점";
} else {
estKind = "-";
}
html += "<tr>";
html += " <td class=\"link\"><a href=\"javascript:;\" onclick=\"add(" + item.gubun + ", " + item.exno + ")\">" + item.exname + "</a></td>";
html += " <td>" + cShape + "</td>";
html += " <td>" + testDate + "</td>";
html += " <td>" + rsType + "</td>";
html += " <td>" + estKind +"</td>"
html += " <td><a href=\"javascript:;\" class=\"delete-link\" onclick=\"del(" + item.estkind + ", " + item.exno + ")\">[삭제]</a></td>";
html += "</tr>";
});
$("#tbody1").html(html);
}
}
</script>
}

View File

@ -12,6 +12,7 @@
@if (!ViewBag.IsSubAdmin96)
{
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">평가설정</a></li>
<li class=""><a href="#" onclick="gotab(5);" data-toggle="tab">시험설정</a></li>
<li class=""><a href="#" onclick="gotab(4);" data-toggle="tab">메뉴설정</a></li>
}
</ul>
@ -448,6 +449,7 @@
else if (idx == 2) { $("#dform").attr("action", "/cm/@(Model.viewname)eduschedule").submit(); }
else if (idx == 3) { $("#dform").attr("action", "/cm/@(Model.viewname)est").submit(); }
else if (idx == 4) { $("#dform").attr("action", "/cm/@(Model.viewname)menu").submit(); }
else if (idx == 5) { $("#dform").attr("action", "/cm/@(Model.viewname)exset").submit(); }
}, t);
}
function regbatch() {

View File

@ -10,6 +10,7 @@
<li class=""><a href="#" onclick="gotab(2);" data-toggle="tab">교육일정</a></li>
}
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">평가설정</a></li>
<li class=""><a href="#" onclick="gotab(5);" data-toggle="tab">시험설정</a></li>
<li class="active"><a href="#" data-toggle="tab">메뉴설정</a></li>
</ul>
</div>
@ -85,6 +86,7 @@
else if (idx == 2) { $("#dform").attr("action", "/cm/@(Model.viewname)eduschedule").submit(); }
else if (idx == 3) { $("#dform").attr("action", "/cm/@(Model.viewname)est").submit(); }
else if (idx == 4) { $("#dform").attr("action", "/cm/@(Model.viewname)menu").submit(); }
else if (idx == 5) { $("#dform").attr("action", "/cm/@(Model.viewname)exset").submit(); }
}, t);
}
function save() {

View File

@ -186,7 +186,7 @@
@Html.Raw(Model.viewidxname == "강좌" ? "<td>" + item.pcmno + "</td>" : "")
<td>@item.tmname</td>
<td>@item.pcgname</td>
<td>@item.cgname</td>
<td>@item.cgname)</td>
<td>@item.cshapename</td>
@if (!ViewBag.IsSubAdmin96)
{

View File

@ -18,8 +18,8 @@
<li class="active"><a href="#" data-toggle="tab">학습콘텐츠</a></li>
@if (!ViewBag.IsSubAdmin96)
{
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class=""><a href="#" onclick="gotab(2);" data-toggle="tab">문제</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">설문지</a></li>
}
</ul>

View File

@ -14,6 +14,8 @@
@Html.Partial("./Partial/Select", Model.ComCodes.Where(w => w.cgroup == "cc3"), new ViewDataDictionary { { "name", "StringVal5" }, { "selected", Model.stringval5 }, { "cssclass", "searchcon " }, { "df", ":" + Model.ComGroups.Where(w => w.cgroup == "cc3").First().cgroupname } })
@Html.Partial("./Partial/Select", Model.ComCodes.Where(w => w.cgroup == "cc4"), new ViewDataDictionary { { "name", "StringVal6" }, { "selected", Model.stringval6 }, { "cssclass", "searchcon " }, { "df", ":" + Model.ComGroups.Where(w => w.cgroup == "cc4").First().cgroupname } })
@Html.Partial("./Partial/Select", Model.ComCodes.Where(w => w.cgroup == "cc5"), new ViewDataDictionary { { "name", "StringVal7" }, { "selected", Model.stringval7 }, { "cssclass", "searchcon " }, { "df", ":" + Model.ComGroups.Where(w => w.cgroup == "cc5").First().cgroupname } })
@Html.Partial("./Partial/Select", Model.ComCodes.Where(w => w.cgroup == "cc6"), new ViewDataDictionary { { "name", "StringVal14" }, { "selected", Model.stringval14 }, { "cssclass", "searchcon " }, { "df", "교강사" } })
@Html.TextBox("stringval15", Model.stringval15, new { @class = "form-control", @style = "width: 120px;" })
@Html.Partial("./Partial/Button", new NP.Model.Button() { Special = "search" })
</div>
</div>
@ -23,6 +25,7 @@
<colgroup>
<col style="width: 30px;" />
<col style="width: 120px;" />
<col style="width: 100px;" />
<col style="width: 50px;" />
<col style="width: 50px;" />
<col style="width: 70px;" />
@ -38,6 +41,7 @@
<tr>
<th><input type="checkbox" onclick="javascript: checkall('box1', this);" /></th>
<th>과정</th>
<th>교강사</th>
<th>문제유형</th>
<th>@Model.ComGroups.Where(w => w.cgroup == "ccdiff").First().cgroupname</th>
<th>@Model.ComGroups.Where(w => w.cgroup == "cc1").First().cgroupname</th>
@ -56,6 +60,7 @@
<tr class="data center" data-qno="@item.qno" style="font-size:11px;">
<td><input type="checkbox" class="autocheck qno" value="@string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}", item.qno, item.atype, item.qdiff, item.cc1, item.cc2, item.cc3, item.cc4, item.cc5, item.dpoint)" /></td>
<td class="text-left" data-val="@item.atype">@item.cname</td>
<td class="text-center">@item.instructors_name</td>
<td class="atype" data-val="@item.atype">@item.atypename</td>
<td class="qdiff" data-val="@item.qdiff">@item.qdiffname</td>
<td class="qp1" data-val="@item.cc1">@item.ccname1</td>

View File

@ -16,8 +16,8 @@
<div>
<ul class="pagination pagination-md" style="margin: 0;">
<li class=""><a href="#" onclick="gotab(1);" data-toggle="tab">학습콘텐츠</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class="active"><a href="#" data-toggle="tab">문제</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">설문지</a></li>
</ul>
</div>
@ -31,6 +31,22 @@
<label class="col-sm-4 col-md-2 control-label">과정</label>
<div class="col-sm-8 col-md-10">@Html.Partial("./Partial/Select", Model.CMs, new ViewDataDictionary { { "special", "reg" }, { "name", "Question.cmno" }, { "selected", Model.Question.cmno }, { "df", ":-과정선택" } })</div>
</div>
<div class="form-group">
<label class="col-sm-4 col-md-2 control-label">교강사</label>
<div class="col-sm-8 col-md-10">
<a href="#" class="btn btn-info btn-find btn-xs data-find data-find-float" onclick="findusershow()"><i class="fa fa-search"></i></a>
<ul class="selectgroupul" id="cmprdatabox">
@if (!string.IsNullOrWhiteSpace(Model.Question.instructors))
{
<li class="instructor">[@(Model.Question.usertype == 11 ? "강사" : "운영자")]@Model.Question.instructors_name<a href="#" class="adel instructorsDel">X</a></li>
}
</ul>
@Html.HiddenFor(m => m.Question.instructors)
</div>
</div>
@if (isqdiff)
{<div class="line line-dashed line-lg pull-in"></div><div class="form-group"><label class="col-sm-4 col-md-2 control-label" id="lblqdiff">@qdiff.First().cgroupname</label><div class="col-sm-8 col-md-10">@Html.Radio(new NP.Model.InputRadio() { Name = "qdiff", Selected = Model.Question.qdiff.ToString(), ComCodes = Model.ComCodes.Where(w => w.cgroup == "ccdiff").ToList(), ChangeId = "Question_qdiff" })</div></div>}
@if (isqt1)
@ -139,6 +155,9 @@
}
</div>
</div>
@Html.Partial("./Partial/UserBoxSelect", "bindUser;강사/담당자 선택;999_1", new ViewDataDictionary { { "assigns", Model.Assigns }, { "userauths", Model.userauths } })
@section styles{
@Html.Partial("./Partial/SummerNoteStyle")
<style type="text/css">
@ -273,6 +292,11 @@
if ('@Model.Question.atype' == '0') {
$(".atype1box").hide();
}
$(document).on("click", ".instructorsDel", function () {
$(this).parent().remove();
$("#Question_instructors").val("");
});
});
var saveandnew = false;
var imgids = [];
@ -442,5 +466,26 @@
else if (idx == 3) { location.href = "/cm/rs"; }
}, t);
}
function bindUser(ui) {
$.each($(ui.split(';')), function (i, d) {
if ($("#Question_instructors").val() != "") {
if (d.split(':')[7] == $("#Question_instructors").val()) {
alert("동일한 교강사입니다.");
return;
} else {
if (!confirm("이미 등록된 교강사가 있습니다.\n선택한 교강사로 변경 하시겠습니까?")) {
return;
}
$(".instructor").remove();
}
}
//if ($("#cmprdatabox li.no" + d.split(':')[0]).length < 1) {
$("#cmprdatabox").append("<li class=\"instructor\">[" + (d.split(':')[1] == 11 ? "강사" : "운영자") + "]" + d.split(':')[2] + "<a href=\"#\" class=\"adel instructorsDel\">x</a></li>")
$("#Question_instructors").val(d.split(':')[7]);
//}
});
}
</script>
}

View File

@ -16,8 +16,8 @@
<div>
<ul class="pagination pagination-md" style="margin: 0;">
<li class=""><a href="#" onclick="gotab(1);" data-toggle="tab">학습콘텐츠</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class="active"><a href="#" data-toggle="tab">문제</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class=""><a href="#" onclick="gotab(3);" data-toggle="tab">설문지</a></li>
</ul>
</div>
@ -42,7 +42,7 @@
{@Html.Partial("./Partial/Select", qt5, new ViewDataDictionary { { "name", "stringval7" }, { "selected", Model.stringval7 }, { "cssclass", "searchcon " }, { "df", ":" + qt5.First().cgroupname } })}
<br /><br />
@Html.Partial("./Partial/Select", Helpers.ValueText(":사용여부;1:사용;0:미사용"), Helpers.DicSelect(new NP.Model.SelectDic() { Name = "stringval8", Selected = Model.stringval8 }))
@Html.Partial("./Partial/Select", Helpers.ValueText("qtextstring:문제명;qno:문제번호"), Helpers.DicSelect(new NP.Model.SelectDic() { Name = "searchtype", Selected = Model.searchtype }))
@Html.Partial("./Partial/Select", Helpers.ValueText("qtextstring:문제명;qno:문제번호;instructors:교강사"), Helpers.DicSelect(new NP.Model.SelectDic() { Name = "searchtype", Selected = Model.searchtype }))
@Html.Partial("./Partial/Text", Model.searchtext, Helpers.DicText(new NP.Model.TextDic() { Name = "searchtext", Value = Model.searchtext }))
@Html.Partial("./Partial/Button", new NP.Model.Button() { Special = "search" })
</div>
@ -55,6 +55,7 @@
<a href="~/Content/file/questions.xlsx" class="btn btn-s-xs btn-default">일괄등록양식다운로드</a>
<a href="#" onclick="javascript:reg2(0);" class="btn btn-s-xs btn-info">개별등록</a>
<a href="#" onclick="javascript:reg(-1);" class="btn btn-s-xs btn-info">일괄등록</a>
<a href="~/Content/file/questions.xlsx" class="btn btn-info">일괄등록양식 다운로드</a>
</div>
<section class="panel panel-default">
<header class="panel-heading">문제목록</header>
@ -74,6 +75,7 @@
@Html.Raw(isqt5 ? string.Format("<th>{0}</th>", qt5.First().cgroupname) : "")
<th>유형</th>
<th>문제명</th>
<th>교강사</th>
<th>수정일</th>
<th>사용여부</th>
</tr>
@ -94,6 +96,7 @@
@Html.Raw(isqt5 ? string.Format("<td>{0}</td>", item.ccname5) : "")
<td>@item.atypename</td>
<td class="link" style="max-width: 300px; overflow: hidden;"><a class="link" href="#" onclick="reg2(@item.qno);" style="white-space: nowrap; max-width: 300px; overflow: hidden;">@System.Text.RegularExpressions.Regex.Replace((item.qtextstring ?? "").Length < 30 ? (item.qtextstring ?? "") : (item.qtextstring ?? "").Substring(0, 30), @"[<][a-z|A-Z|/](.|)*?[>]", "")</a></td>
<td>@item.instructors_name</td>
<td>@item.udtymd2</td>
<td>@item.isuseyn</td>
</tr>

View File

@ -2,8 +2,8 @@
<div>
<ul class="pagination pagination-md" style="margin: 0;">
<li class=""><a href="#" onclick="gotab(1);" data-toggle="tab">학습콘텐츠</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class=""><a href="#" onclick="gotab(2);" data-toggle="tab">문제</a></li>
<li class=""><a href="#" onclick="gotab(0);" data-toggle="tab">그룹코드관리</a></li>
<li class="active"><a href="#" data-toggle="tab">설문지</a></li>
</ul>
</div>

View File

@ -545,7 +545,7 @@
select a.*
from (
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.sseq
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment, a.instructors
,b.scdtype
,case when b.scdtype =1 then '온라인' else c.cname end studyplacename
,(select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status =1 and z.ischanged=0) regmem
@ -583,14 +583,15 @@
</insert>
<insert id="cm.cminningscd.in" parameterClass="cminningscd">
SELECT * FROM (SELECT LAST_INSERT_ID(0) col1) a WHERE col1 > 0;
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,<include refid="sql.inv"></include>)
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,instructors,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,#instructors#,<include refid="sql.inv"></include>)
<selectKey type="post" property="cmisno" resultClass="long">SELECT last_insert_id()</selectKey>
</insert>
<update id="cm.cminningscd.up" parameterClass="cminningscd">
update cminningscd a
set <include refid="sql.up"></include>,cmino=#cmino#,estart=#estart#,eend=#eend#,quota=#quota#
,studyplace=#studyplace#,sseq=#sseq#,comment=#comment#
,instructors=#instructors#
where a.cmisno=#cmisno#
</update>
<update id="cm.cminnings.up" parameterClass="cminning">
@ -754,6 +755,9 @@
select a.*
from (
select a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq,a.isresultopen,a.isreexamable,a.cdt,a.udt
,a.cmisno <!--//교육일정코드-->
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate <!--//시헝응시 시작일-->
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate <!--//시헝응시 종료일-->
,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.cdt</isNull>) rno
,count(a.cno) over() pagetotalcount
from cmex a
@ -862,6 +866,9 @@
,isseq =#isseq#
,isreexamable =#isreexamable#
,isresultopen=#isresultopen#
,cmisno = #cmisno#
,testsdate = #testsdate#
,testedate = #testedate#
where exno=#exno#
</update>
@ -920,11 +927,14 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*,b.cname
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5, a.cdt,a.udt
,a.ispassspace,a.isignorecase
,a.ispassspace,a.isignorecase,a.instructors
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
,<include refid="sql.prc"></include>
from question a
@ -946,6 +956,7 @@
<isNotNull property="isuse" prepend="and">a.isuse=#isuse#</isNotNull>
<isNotNull property="qtextstring" prepend="and">a.qtextstring like concat('%', #searchtext#,'%')</isNotNull>
<isNotNull property="qno" prepend="and">a.qno=#qno#</isNotNull>
<isNotNull property="instructors" prepend="and">a.instructors like concat('%', #instructors#, '%')</isNotNull>
</dynamic>
) a
left outer join cm b on b.cmno=a.cmno
@ -953,7 +964,9 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase
<!--LEFT OUTER JOIN users u ON FIND_IN_SET(u.userid, a.instructors) > 0-->
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase,a.instructors
order by a.RNO
</select>
<select id="cm.questions2" parameterClass="hashtable" resultClass="question">
@ -962,10 +975,13 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt,a.instructors
,b.cname
, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
@ -999,18 +1015,20 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt,a.instructors
<dynamic prepend="having">
<isNotNull property="qcount" prepend="and">count(ued.examno)=#qcount#</isNotNull>
<isNotNull property="ecount" prepend="and">sum(case when ued.atext is not null then 1 else 0 end)=#ecount#</isNotNull>
<isNotNull property="rrate" prepend="and">case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end=#rrate#</isNotNull>
<isNotNull property="instuctorName" prepend="and">u.username like concat('%', #instuctorName#, '%')</isNotNull>
</dynamic>
order by a.rno
</select>
<insert id="cm.question.in" parameterClass="question">
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>);
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>, instructors)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>, #instructors#);
<selectKey type="post" property="qno" resultClass="int">SELECT LAST_INSERT_ID()</selectKey>
</insert>
<update id="cm.questionitem.in" parameterClass="question">
@ -1105,7 +1123,7 @@
<update id="cm.question.up" parameterClass="question">
UPDATE question SET <include refid="sql.up"></include>
,cmno=#cmno#,qdiff=#qdiff#,cc1=#cc1#,cc2=#cc2#,cc3=#cc3#,cc4=#cc4#,cc5=#cc5#,isuse=#isuse#,dpoint=#dpoint#,qtext=#qtext#,qtextstring=#qtextstring#,qdesc=#qdesc#,rightcount=#rightcount#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#,instructors=#instructors#
where qno=#qno#
</update>
<update id="cm.question.uptop" parameterClass="question">
@ -2232,5 +2250,82 @@
<isNotNull property="year">and year(a.sstime)=#year#</isNotNull>
order by a.sstime,a.setime
</select>
<select id="cm.cminningscds.applyedu.my" parameterClass="hashtable" resultClass="cminningscd">
select
a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.studyplacename,a.startmonth,a.comment
,a.studyplace, a.studyplacename,a.remainPeople
,a.isselected, a.cmno,a.pcmno,a.cgcode
<!--211220.통합테스트목록(644) 이미지난 교육종료일 변경불가-->
,case WHEN a.estart &gt; date_add(date_format(now(), '%Y-%m-%d 00:00:00'), interval - 1 second)
<!--20220803
or a.remainPeople &lt;= 0 -->
then 0 else 1 end isend
from
(
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,month(a.estart) startmonth
,(a.quota - (select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status in (1,2) and z.ischanged=0)) remainPeople
,a.studyplace, e.cname studyplacename
,case when f.cmisno = a.cmisno then 1 else 0 end isselected, d.cmno,d.pcmno,cg.cgcode
,a.comment
,f.sdate
from cminningscd a
left outer join cminning c on c.cmino = a.cmino
left outer join cm d on d.cmno = c.cmno
left outer join cg cg on d.cgno = cg.cgno
left outer join comcode e on e.ccode = a.studyplace
left outer join lect f on f.lectno = #lectno#
where DATE_ADD(f.sdate, INTERVAL 1 YEAR) &gt; a.estart
<isNotNull property="cmno" prepend="and">c.cmno=#cmno#</isNotNull>
)a
WHERE a.estart &gt; date_add(date_format(a.sdate, '%Y-%m-%d 00:00:00'), interval + 2 DAY)
order by isend desc,a.estart
</select>
<select id="cm.exlist" parameterClass="hashtable" resultClass="est">
select 0 gubun,case when a.extype = 0 then 1 else 2 end estkind
,a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.extype order by a.cdt) rno
,null as iseq,null as teachername
,b.cshape
,c.cmisno
,c.estart
,c.eend
,c.instructors
from cmex a
left join cm b ON b.cmno = a.cmno
left join cminningscd c on c.cmisno = a.cmisno
where a.cmno=#cmno# and a.isdel=0
<isNotNull property="estart" prepend="and">c.estart &gt;= concat(#estart#, ' 00:00:00')</isNotNull>
<isNotNull property="eend" prepend="and">c.eend &lt;= concat(#eend#, ' 23:59:59')</isNotNull>
<isNotNull property="instructors" prepend="and">c.instructors like concat('%',#instructors#,'%')</isNotNull>
</select>
<select id="cm.est2" parameterClass="int" resultClass="est">
select 1 gubun,case when a.sdtype = 0 then 11 else 21 end estkind
,a.sdno exno,a.cmno,a.sdtype extype,a.sdname exname,a.sddesc edesc,null etime,a.sdcondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,a.tpoint,null relaylimit,null isusebackup,null isseq
,a.sdno,a.sdtype,a.sdname,a.sddesc,a.sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.sdtype order by a.cdt) rno
,null as iseq,null as teachername
from cmsd a
where a.cmno=#cmno# and a.isdel=0
union all
select 2 gubun,case when a.rstype = 0 then 32 else 31 end estkind
,a.rsno exno,a.cmno,a.rstype extype,a.rsname exname,null edesc,null etime,a.rscondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,null tpoint,null relaylimit,null isusebackup,null isseq
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,a.rsno,a.rscno,a.rstype,a.rsname,a.rscondition
, row_number() over(partition by a.rstype order by a.cdt) rno
,b.iseq,c.username as teachername
from cmrs a
left outer join cminning b on a.cmino = b.cmino
left outer join users c on b.userno = c.userno
where a.cmno=#cmno# and a.isdel=0
order by rsno<!--estkind,rno-->
</select>
</statements>
</sqlMap>

View File

@ -2887,7 +2887,7 @@
ON b.payno = e.PAYNO
INNER JOIN pplog f
ON b.USERNO = e.USERNO AND b.CMNO = f.CMNO AND e.PPLNO = f.PPLNO
WHERE b.STATUS = 1
WHERE b.STATUS IN(1, 2, 3)
AND (e.PSTATUS = 1 OR e.PSTATUS = 22)
AND b.USERNO = #uno#;
]]>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1578,7 +1578,8 @@ namespace NP.Base.Controllers
}
//문제코드 확인
var cc = Dao.Get<ComCode>("sys.comcode.list", new Hashtable() { { "all", 1 } });
var qds = data.Where(w => !string.IsNullOrEmpty(w.qdiffname.Trim())).ToList().Select(s => s.qdiffname).Distinct();
var instructors = data.Where(w => !string.IsNullOrEmpty(w.instructors.Trim())).ToList().Select(s => s.instructors).Distinct(); //교강사
var qds = data.Where(w => !string.IsNullOrEmpty(w.qdiffname.Trim())).ToList().Select(s => s.qdiffname).Distinct(); //난이도
var qp1 = data.Where(w => !string.IsNullOrEmpty(w.ccname1.Trim())).ToList().Select(s => s.ccname1).Distinct();
var qp2 = data.Where(w => !string.IsNullOrEmpty(w.ccname2.Trim())).ToList().Select(s => s.ccname2).Distinct();
var qp3 = data.Where(w => !string.IsNullOrEmpty(w.ccname3.Trim())).ToList().Select(s => s.ccname3).Distinct();

View File

@ -505,6 +505,10 @@ namespace NP.Base.Controllers
vm.CMEX.qcount = vm.CMEX.cmexqs.Count();
}
}
//2025-12-24 / KHJ / 시험응시 시작일/종료일 모델 바인딩
vm.CMEX.testsdate = vm.stringval18 + " " + vm.stringval19 + ":" + vm.stringval20;
vm.CMEX.testedate = vm.stringval21 + " " + vm.stringval22 + ":" + vm.stringval23;
return JsonOK(Dao.SaveExam(vm.CMEX), false);
}
/// <summary>
@ -1066,6 +1070,83 @@ namespace NP.Base.Controllers
return JsonBack(rtn);
}
/// <summary>
/// 강좌설정 > 시험설정 > 시험목록
/// </summary>
/// <param name="cmno"></param>
/// <param name="ctname"></param>
/// <param name="pno"></param>
/// <returns></returns>
[HttpPost]
public JsonResult ExamList(VMCM vm) {
var p = new Hashtable();
p.Clear();
p.Add("cmno", vm.CM.cmno);
p.Add("estart", vm.CM.estart);
p.Add("eend", vm.CM.eend);
p.Add("instructors", vm.CM.instructors);
vm.ESTs = Dao.Get<EST>("cm.exlist", p);
return JsonBackList(vm.ESTs);
}
/// <summary>
/// 강좌 시험 저장 - 2025-12-26 / KHJ / 혹시 몰라서 최종평가(시험설정) 저장 로직을 따로 만들었음..ㅡㅡ
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
[HttpPost]
public JsonResult CMEXSave2025(VMCM vm) {
vm.CMEX.uip = GetUserIP();
vm.CMEX.uno = SUserInfo.UserNo;
//최종평가는 과정/강좌당 1개만
//if (vm.CMEX.extype == 1 && Dao.Get<int>("cm.cmex.extype1count", new Hashtable() { { "cmno", vm.CMEX.cmno }, { "exno", vm.CMEX.exno } }).First() > 0) {
// return JsonBack(new JsonRtn() { code = 1, obj = -1 });
//}
if (vm.CMEX.exno > 0 && ExamSaveValid(vm.CMEX.exno) != "") {
//응시자데이터 존재하므로 일부데이터만 저장
return JsonOK(Dao.Save("cm.cmex.savetop", vm.CMEX), false);
}
vm.CMEX.cmexqs = new List<CMEXQ>();
vm.CMEX.cmexlayers = new List<CMEXLayer>();
if (vm.CMEX.eqtype == 1 && !string.IsNullOrEmpty(vm.savedata)) {
//임의문항
foreach (String s in vm.savedata.Split(';')) {
var s2 = s.Split(':');
vm.CMEX.cmexlayers.Add(new CMEXLayer() {
exno = vm.CMEX.exno,
qdiff = GetInt(s2[0])
,
cc1 = GetInt(s2[1]),
cc2 = GetInt(s2[2]),
cc3 = GetInt(s2[3]),
cc4 = GetInt(s2[4]),
cc5 = GetInt(s2[5]),
qcount = GetInt(s2[6]),
rpoint = GetInt(s2[7])
});
vm.CMEX.tpoint += GetInt(s2[6]) * GetInt(s2[7]);
vm.CMEX.qcount += GetInt(s2[6]);
}
}
if (!string.IsNullOrEmpty(vm.savedata2)) {
foreach (var q in vm.savedata2.Split(';')) {
var qi = q.Split(':');
vm.CMEX.cmexqs.Add(new CMEXQ() { eqno = GetInt(qi[0]), qseq = GetInt(qi[1]), qno = GetInt(qi[2]), rpoint = GetInt(qi[3]) });
if (vm.CMEX.eqtype == 0) {
vm.CMEX.tpoint += GetInt(qi[3]);
}
}
if (vm.CMEX.eqtype == 0) {
vm.CMEX.qcount = vm.CMEX.cmexqs.Count();
}
}
//2025-12-24 / KHJ / 시험응시 시작일/종료일 모델 바인딩
vm.CMEX.testsdate = vm.stringval18 + " " + vm.stringval19 + ":" + vm.stringval20;
vm.CMEX.testedate = vm.stringval21 + " " + vm.stringval22 + ":" + vm.stringval23;
return JsonOK(Dao.SaveExam(vm.CMEX), false);
}
}
}

View File

@ -545,7 +545,7 @@
select a.*
from (
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.sseq
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment, a.instructors
,b.scdtype
,case when b.scdtype =1 then '온라인' else c.cname end studyplacename
,(select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status =1 and z.ischanged=0) regmem
@ -583,14 +583,15 @@
</insert>
<insert id="cm.cminningscd.in" parameterClass="cminningscd">
SELECT * FROM (SELECT LAST_INSERT_ID(0) col1) a WHERE col1 > 0;
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,<include refid="sql.inv"></include>)
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,instructors,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,#instructors#,<include refid="sql.inv"></include>)
<selectKey type="post" property="cmisno" resultClass="long">SELECT last_insert_id()</selectKey>
</insert>
<update id="cm.cminningscd.up" parameterClass="cminningscd">
update cminningscd a
set <include refid="sql.up"></include>,cmino=#cmino#,estart=#estart#,eend=#eend#,quota=#quota#
,studyplace=#studyplace#,sseq=#sseq#,comment=#comment#
,instructors=#instructors#
where a.cmisno=#cmisno#
</update>
<update id="cm.cminnings.up" parameterClass="cminning">
@ -754,6 +755,9 @@
select a.*
from (
select a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq,a.isresultopen,a.isreexamable,a.cdt,a.udt
,a.cmisno <!--//교육일정코드-->
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate <!--//시헝응시 시작일-->
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate <!--//시헝응시 종료일-->
,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.cdt</isNull>) rno
,count(a.cno) over() pagetotalcount
from cmex a
@ -862,6 +866,9 @@
,isseq =#isseq#
,isreexamable =#isreexamable#
,isresultopen=#isresultopen#
,cmisno = #cmisno#
,testsdate = #testsdate#
,testedate = #testedate#
where exno=#exno#
</update>
@ -920,11 +927,14 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*,b.cname
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5, a.cdt,a.udt
,a.ispassspace,a.isignorecase
,a.ispassspace,a.isignorecase,a.instructors
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
,<include refid="sql.prc"></include>
from question a
@ -946,6 +956,7 @@
<isNotNull property="isuse" prepend="and">a.isuse=#isuse#</isNotNull>
<isNotNull property="qtextstring" prepend="and">a.qtextstring like concat('%', #searchtext#,'%')</isNotNull>
<isNotNull property="qno" prepend="and">a.qno=#qno#</isNotNull>
<isNotNull property="instructors" prepend="and">a.instructors like concat('%', #instructors#, '%')</isNotNull>
</dynamic>
) a
left outer join cm b on b.cmno=a.cmno
@ -953,7 +964,9 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase
<!--LEFT OUTER JOIN users u ON FIND_IN_SET(u.userid, a.instructors) > 0-->
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase,a.instructors
order by a.RNO
</select>
<select id="cm.questions2" parameterClass="hashtable" resultClass="question">
@ -962,10 +975,13 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt,a.instructors
,b.cname
, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
@ -999,18 +1015,20 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt,a.instructors
<dynamic prepend="having">
<isNotNull property="qcount" prepend="and">count(ued.examno)=#qcount#</isNotNull>
<isNotNull property="ecount" prepend="and">sum(case when ued.atext is not null then 1 else 0 end)=#ecount#</isNotNull>
<isNotNull property="rrate" prepend="and">case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end=#rrate#</isNotNull>
<isNotNull property="instuctorName" prepend="and">u.username like concat('%', #instuctorName#, '%')</isNotNull>
</dynamic>
order by a.rno
</select>
<insert id="cm.question.in" parameterClass="question">
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>);
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>, instructors)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>, #instructors#);
<selectKey type="post" property="qno" resultClass="int">SELECT LAST_INSERT_ID()</selectKey>
</insert>
<update id="cm.questionitem.in" parameterClass="question">
@ -1105,7 +1123,7 @@
<update id="cm.question.up" parameterClass="question">
UPDATE question SET <include refid="sql.up"></include>
,cmno=#cmno#,qdiff=#qdiff#,cc1=#cc1#,cc2=#cc2#,cc3=#cc3#,cc4=#cc4#,cc5=#cc5#,isuse=#isuse#,dpoint=#dpoint#,qtext=#qtext#,qtextstring=#qtextstring#,qdesc=#qdesc#,rightcount=#rightcount#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#,instructors=#instructors#
where qno=#qno#
</update>
<update id="cm.question.uptop" parameterClass="question">
@ -2232,5 +2250,82 @@
<isNotNull property="year">and year(a.sstime)=#year#</isNotNull>
order by a.sstime,a.setime
</select>
<select id="cm.cminningscds.applyedu.my" parameterClass="hashtable" resultClass="cminningscd">
select
a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.studyplacename,a.startmonth,a.comment
,a.studyplace, a.studyplacename,a.remainPeople
,a.isselected, a.cmno,a.pcmno,a.cgcode
<!--211220.통합테스트목록(644) 이미지난 교육종료일 변경불가-->
,case WHEN a.estart &gt; date_add(date_format(now(), '%Y-%m-%d 00:00:00'), interval - 1 second)
<!--20220803
or a.remainPeople &lt;= 0 -->
then 0 else 1 end isend
from
(
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,month(a.estart) startmonth
,(a.quota - (select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status in (1,2) and z.ischanged=0)) remainPeople
,a.studyplace, e.cname studyplacename
,case when f.cmisno = a.cmisno then 1 else 0 end isselected, d.cmno,d.pcmno,cg.cgcode
,a.comment
,f.sdate
from cminningscd a
left outer join cminning c on c.cmino = a.cmino
left outer join cm d on d.cmno = c.cmno
left outer join cg cg on d.cgno = cg.cgno
left outer join comcode e on e.ccode = a.studyplace
left outer join lect f on f.lectno = #lectno#
where DATE_ADD(f.sdate, INTERVAL 1 YEAR) &gt; a.estart
<isNotNull property="cmno" prepend="and">c.cmno=#cmno#</isNotNull>
)a
WHERE a.estart &gt; date_add(date_format(a.sdate, '%Y-%m-%d 00:00:00'), interval + 2 DAY)
order by isend desc,a.estart
</select>
<select id="cm.exlist" parameterClass="hashtable" resultClass="est">
select 0 gubun,case when a.extype = 0 then 1 else 2 end estkind
,a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.extype order by a.cdt) rno
,null as iseq,null as teachername
,b.cshape
,c.cmisno
,c.estart
,c.eend
,c.instructors
from cmex a
left join cm b ON b.cmno = a.cmno
left join cminningscd c on c.cmisno = a.cmisno
where a.cmno=#cmno# and a.isdel=0
<isNotNull property="estart" prepend="and">c.estart &gt;= concat(#estart#, ' 00:00:00')</isNotNull>
<isNotNull property="eend" prepend="and">c.eend &lt;= concat(#eend#, ' 23:59:59')</isNotNull>
<isNotNull property="instructors" prepend="and">c.instructors like concat('%',#instructors#,'%')</isNotNull>
</select>
<select id="cm.est2" parameterClass="int" resultClass="est">
select 1 gubun,case when a.sdtype = 0 then 11 else 21 end estkind
,a.sdno exno,a.cmno,a.sdtype extype,a.sdname exname,a.sddesc edesc,null etime,a.sdcondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,a.tpoint,null relaylimit,null isusebackup,null isseq
,a.sdno,a.sdtype,a.sdname,a.sddesc,a.sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.sdtype order by a.cdt) rno
,null as iseq,null as teachername
from cmsd a
where a.cmno=#cmno# and a.isdel=0
union all
select 2 gubun,case when a.rstype = 0 then 32 else 31 end estkind
,a.rsno exno,a.cmno,a.rstype extype,a.rsname exname,null edesc,null etime,a.rscondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,null tpoint,null relaylimit,null isusebackup,null isseq
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,a.rsno,a.rscno,a.rstype,a.rsname,a.rscondition
, row_number() over(partition by a.rstype order by a.cdt) rno
,b.iseq,c.username as teachername
from cmrs a
left outer join cminning b on a.cmino = b.cmino
left outer join users c on b.userno = c.userno
where a.cmno=#cmno# and a.isdel=0
order by rsno<!--estkind,rno-->
</select>
</statements>
</sqlMap>

View File

@ -459,9 +459,13 @@
,0 rno
,null time
,null time2
,null testsdate
,null testedate
from (select 1 col1) a
where a.col1=0
union all
select -1 dtype
,null strval,0 intval10
,0 intval,0 intval2,0 intval3,0 intval4,a.attrate intval5
@ -470,6 +474,8 @@
,0 rno
,null time
,null time2
,null testsdate
,null testedate
from lect a
where a.lectno=#lectno# and a.userno=#userno#
<isNotNull property="exam">
@ -485,6 +491,8 @@
,row_number() over (partition by b.extype order by b.extype, b.cdt) rno
,a.edate time
,a.sdate time2
,b.testsdate
,b.testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmex b on b.cmno=a.cmno and b.isdel=0
@ -504,6 +512,8 @@
,row_number() over (order by b.cdt) rno
,a.edate time
,a.sdate time2
,null testsdate
,null testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmsd b on b.cmno=a.cmno and b.sdtype=0 and b.isdel=0
@ -523,6 +533,8 @@
,row_number() over (order by b.cdt) rno
,a.edate time
,a.sdate time2
,null testsdate
,null testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmsd b on b.cmno=a.cmno and b.sdtype=1 and b.isdel=0
@ -545,6 +557,8 @@
,case when
case when case when a.isrebate = 1 then f.midcutrfd else f.midcut end &lt;= ifnull(e.ex0lectpoint,0) then 1 else 0 end = 1 and case when case when a.isrebate = 1 then f.finalcutrfd else f.finalcut end &lt;= ifnull(e.ex1lectpoint,0) then 1 else 0 end = 1
then 1 else 0 end ispass
,c.testsdate
,c.testedate
from lect a
inner join cm b on b.cmno=a.cmno
inner join cmex c on c.exno=#exno#

View File

@ -2887,7 +2887,7 @@
ON b.payno = e.PAYNO
INNER JOIN pplog f
ON b.USERNO = e.USERNO AND b.CMNO = f.CMNO AND e.PPLNO = f.PPLNO
WHERE b.STATUS = 1
WHERE b.STATUS IN(1, 2, 3)
AND (e.PSTATUS = 1 OR e.PSTATUS = 22)
AND b.USERNO = #uno#;
]]>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Base/obj/Debug/NP.Base.dll Normal file

Binary file not shown.

BIN
Base/obj/Debug/NP.Base.pdb Normal file

Binary file not shown.

View File

@ -29,7 +29,9 @@ namespace NP.Dao
Trans();
try
{
if (e.exno < 1) { base.Insert<CMEX>("cm.cmex.in", e); if (e.exno < 1) { RollBack(); return 0; } }
if (e.exno < 1) {
base.Insert<CMEX>("cm.cmex.in", e); if (e.exno < 1) { RollBack(); return 0; }
}
else
{
if (base.Save("cm.cmex.up", e) < 1) { RollBack(); return 0; }

View File

@ -545,7 +545,7 @@
select a.*
from (
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.sseq
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment, a.instructors
,b.scdtype
,case when b.scdtype =1 then '온라인' else c.cname end studyplacename
,(select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status =1 and z.ischanged=0) regmem
@ -583,14 +583,15 @@
</insert>
<insert id="cm.cminningscd.in" parameterClass="cminningscd">
SELECT * FROM (SELECT LAST_INSERT_ID(0) col1) a WHERE col1 > 0;
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,<include refid="sql.inv"></include>)
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,instructors,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,#instructors#,<include refid="sql.inv"></include>)
<selectKey type="post" property="cmisno" resultClass="long">SELECT last_insert_id()</selectKey>
</insert>
<update id="cm.cminningscd.up" parameterClass="cminningscd">
update cminningscd a
set <include refid="sql.up"></include>,cmino=#cmino#,estart=#estart#,eend=#eend#,quota=#quota#
,studyplace=#studyplace#,sseq=#sseq#,comment=#comment#
,instructors=#instructors#
where a.cmisno=#cmisno#
</update>
<update id="cm.cminnings.up" parameterClass="cminning">
@ -754,6 +755,9 @@
select a.*
from (
select a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq,a.isresultopen,a.isreexamable,a.cdt,a.udt
,a.cmisno <!--//교육일정코드-->
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate <!--//시헝응시 시작일-->
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate <!--//시헝응시 종료일-->
,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.cdt</isNull>) rno
,count(a.cno) over() pagetotalcount
from cmex a
@ -862,6 +866,9 @@
,isseq =#isseq#
,isreexamable =#isreexamable#
,isresultopen=#isresultopen#
,cmisno = #cmisno#
,testsdate = #testsdate#
,testedate = #testedate#
where exno=#exno#
</update>
@ -920,11 +927,14 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*,b.cname
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5, a.cdt,a.udt
,a.ispassspace,a.isignorecase
,a.ispassspace,a.isignorecase,a.instructors
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
,<include refid="sql.prc"></include>
from question a
@ -946,6 +956,7 @@
<isNotNull property="isuse" prepend="and">a.isuse=#isuse#</isNotNull>
<isNotNull property="qtextstring" prepend="and">a.qtextstring like concat('%', #searchtext#,'%')</isNotNull>
<isNotNull property="qno" prepend="and">a.qno=#qno#</isNotNull>
<isNotNull property="instructors" prepend="and">a.instructors like concat('%', #instructors#, '%')</isNotNull>
</dynamic>
) a
left outer join cm b on b.cmno=a.cmno
@ -953,7 +964,9 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase
<!--LEFT OUTER JOIN users u ON FIND_IN_SET(u.userid, a.instructors) > 0-->
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase,a.instructors
order by a.RNO
</select>
<select id="cm.questions2" parameterClass="hashtable" resultClass="question">
@ -962,10 +975,13 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt,a.instructors
,b.cname
, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
@ -999,18 +1015,20 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt,a.instructors
<dynamic prepend="having">
<isNotNull property="qcount" prepend="and">count(ued.examno)=#qcount#</isNotNull>
<isNotNull property="ecount" prepend="and">sum(case when ued.atext is not null then 1 else 0 end)=#ecount#</isNotNull>
<isNotNull property="rrate" prepend="and">case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end=#rrate#</isNotNull>
<isNotNull property="instuctorName" prepend="and">u.username like concat('%', #instuctorName#, '%')</isNotNull>
</dynamic>
order by a.rno
</select>
<insert id="cm.question.in" parameterClass="question">
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>);
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>, instructors)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>, #instructors#);
<selectKey type="post" property="qno" resultClass="int">SELECT LAST_INSERT_ID()</selectKey>
</insert>
<update id="cm.questionitem.in" parameterClass="question">
@ -1105,7 +1123,7 @@
<update id="cm.question.up" parameterClass="question">
UPDATE question SET <include refid="sql.up"></include>
,cmno=#cmno#,qdiff=#qdiff#,cc1=#cc1#,cc2=#cc2#,cc3=#cc3#,cc4=#cc4#,cc5=#cc5#,isuse=#isuse#,dpoint=#dpoint#,qtext=#qtext#,qtextstring=#qtextstring#,qdesc=#qdesc#,rightcount=#rightcount#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#,instructors=#instructors#
where qno=#qno#
</update>
<update id="cm.question.uptop" parameterClass="question">
@ -2232,5 +2250,85 @@
<isNotNull property="year">and year(a.sstime)=#year#</isNotNull>
order by a.sstime,a.setime
</select>
<<<<<<< HEAD
=======
<select id="cm.cminningscds.applyedu.my" parameterClass="hashtable" resultClass="cminningscd">
select
a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.studyplacename,a.startmonth,a.comment
,a.studyplace, a.studyplacename,a.remainPeople
,a.isselected, a.cmno,a.pcmno,a.cgcode
<!--211220.통합테스트목록(644) 이미지난 교육종료일 변경불가-->
,case WHEN a.estart &gt; date_add(date_format(now(), '%Y-%m-%d 00:00:00'), interval - 1 second)
<!--20220803
or a.remainPeople &lt;= 0 -->
then 0 else 1 end isend
from
(
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,month(a.estart) startmonth
,(a.quota - (select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status in (1,2) and z.ischanged=0)) remainPeople
,a.studyplace, e.cname studyplacename
,case when f.cmisno = a.cmisno then 1 else 0 end isselected, d.cmno,d.pcmno,cg.cgcode
,a.comment
,f.sdate
from cminningscd a
left outer join cminning c on c.cmino = a.cmino
left outer join cm d on d.cmno = c.cmno
left outer join cg cg on d.cgno = cg.cgno
left outer join comcode e on e.ccode = a.studyplace
left outer join lect f on f.lectno = #lectno#
where DATE_ADD(f.sdate, INTERVAL 1 YEAR) &gt; a.estart
<isNotNull property="cmno" prepend="and">c.cmno=#cmno#</isNotNull>
)a
WHERE a.estart &gt; date_add(date_format(a.sdate, '%Y-%m-%d 00:00:00'), interval + 2 DAY)
order by isend desc,a.estart
</select>
<select id="cm.exlist" parameterClass="hashtable" resultClass="est">
select 0 gubun,case when a.extype = 0 then 1 else 2 end estkind
,a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.extype order by a.cdt) rno
,null as iseq,null as teachername
,b.cshape
,c.cmisno
,c.estart
,c.eend
,c.instructors
from cmex a
left join cm b ON b.cmno = a.cmno
left join cminningscd c on c.cmisno = a.cmisno
where a.cmno=#cmno# and a.isdel=0
<isNotNull property="estart" prepend="and">c.estart &gt;= concat(#estart#, ' 00:00:00')</isNotNull>
<isNotNull property="eend" prepend="and">c.eend &lt;= concat(#eend#, ' 23:59:59')</isNotNull>
<isNotNull property="instructors" prepend="and">c.instructors like concat('%',#instructors#,'%')</isNotNull>
</select>
<select id="cm.est2" parameterClass="int" resultClass="est">
select 1 gubun,case when a.sdtype = 0 then 11 else 21 end estkind
,a.sdno exno,a.cmno,a.sdtype extype,a.sdname exname,a.sddesc edesc,null etime,a.sdcondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,a.tpoint,null relaylimit,null isusebackup,null isseq
,a.sdno,a.sdtype,a.sdname,a.sddesc,a.sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.sdtype order by a.cdt) rno
,null as iseq,null as teachername
from cmsd a
where a.cmno=#cmno# and a.isdel=0
union all
select 2 gubun,case when a.rstype = 0 then 32 else 31 end estkind
,a.rsno exno,a.cmno,a.rstype extype,a.rsname exname,null edesc,null etime,a.rscondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,null tpoint,null relaylimit,null isusebackup,null isseq
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,a.rsno,a.rscno,a.rstype,a.rsname,a.rscondition
, row_number() over(partition by a.rstype order by a.cdt) rno
,b.iseq,c.username as teachername
from cmrs a
left outer join cminning b on a.cmino = b.cmino
left outer join users c on b.userno = c.userno
where a.cmno=#cmno# and a.isdel=0
order by rsno<!--estkind,rno-->
</select>
>>>>>>> ca8967d (추가개발1)
</statements>
</sqlMap>

View File

@ -459,9 +459,13 @@
,0 rno
,null time
,null time2
,null testsdate
,null testedate
from (select 1 col1) a
where a.col1=0
union all
select -1 dtype
,null strval,0 intval10
,0 intval,0 intval2,0 intval3,0 intval4,a.attrate intval5
@ -470,6 +474,8 @@
,0 rno
,null time
,null time2
,null testsdate
,null testedate
from lect a
where a.lectno=#lectno# and a.userno=#userno#
<isNotNull property="exam">
@ -485,6 +491,8 @@
,row_number() over (partition by b.extype order by b.extype, b.cdt) rno
,a.edate time
,a.sdate time2
,b.testsdate
,b.testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmex b on b.cmno=a.cmno and b.isdel=0
@ -504,6 +512,8 @@
,row_number() over (order by b.cdt) rno
,a.edate time
,a.sdate time2
,null testsdate
,null testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmsd b on b.cmno=a.cmno and b.sdtype=0 and b.isdel=0
@ -523,6 +533,8 @@
,row_number() over (order by b.cdt) rno
,a.edate time
,a.sdate time2
,null testsdate
,null testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmsd b on b.cmno=a.cmno and b.sdtype=1 and b.isdel=0
@ -545,6 +557,8 @@
,case when
case when case when a.isrebate = 1 then f.midcutrfd else f.midcut end &lt;= ifnull(e.ex0lectpoint,0) then 1 else 0 end = 1 and case when case when a.isrebate = 1 then f.finalcutrfd else f.finalcut end &lt;= ifnull(e.ex1lectpoint,0) then 1 else 0 end = 1
then 1 else 0 end ispass
,c.testsdate
,c.testedate
from lect a
inner join cm b on b.cmno=a.cmno
inner join cmex c on c.exno=#exno#

View File

@ -545,7 +545,7 @@
select a.*
from (
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.sseq
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment
,a.cmisno value,date_format(a.estart,'%Y-%m-%d') text, a.comment, a.instructors
,b.scdtype
,case when b.scdtype =1 then '온라인' else c.cname end studyplacename
,(select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status =1 and z.ischanged=0) regmem
@ -583,14 +583,15 @@
</insert>
<insert id="cm.cminningscd.in" parameterClass="cminningscd">
SELECT * FROM (SELECT LAST_INSERT_ID(0) col1) a WHERE col1 > 0;
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,<include refid="sql.inv"></include>)
insert into cminningscd(cmino,estart,eend,quota,studyplace,sseq,comment,instructors,<include refid="sql.inc"></include>)
values(#cmino#,#estart#,#eend#,#quota#,#studyplace#,#sseq#,#comment#,#instructors#,<include refid="sql.inv"></include>)
<selectKey type="post" property="cmisno" resultClass="long">SELECT last_insert_id()</selectKey>
</insert>
<update id="cm.cminningscd.up" parameterClass="cminningscd">
update cminningscd a
set <include refid="sql.up"></include>,cmino=#cmino#,estart=#estart#,eend=#eend#,quota=#quota#
,studyplace=#studyplace#,sseq=#sseq#,comment=#comment#
,instructors=#instructors#
where a.cmisno=#cmisno#
</update>
<update id="cm.cminnings.up" parameterClass="cminning">
@ -754,6 +755,9 @@
select a.*
from (
select a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq,a.isresultopen,a.isreexamable,a.cdt,a.udt
,a.cmisno <!--//교육일정코드-->
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate <!--//시헝응시 시작일-->
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate <!--//시헝응시 종료일-->
,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.cdt</isNull>) rno
,count(a.cno) over() pagetotalcount
from cmex a
@ -862,6 +866,9 @@
,isseq =#isseq#
,isreexamable =#isreexamable#
,isresultopen=#isresultopen#
,cmisno = #cmisno#
,testsdate = #testsdate#
,testedate = #testedate#
where exno=#exno#
</update>
@ -920,11 +927,14 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*,b.cname
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5, a.cdt,a.udt
,a.ispassspace,a.isignorecase
,a.ispassspace,a.isignorecase,a.instructors
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
,<include refid="sql.prc"></include>
from question a
@ -946,6 +956,7 @@
<isNotNull property="isuse" prepend="and">a.isuse=#isuse#</isNotNull>
<isNotNull property="qtextstring" prepend="and">a.qtextstring like concat('%', #searchtext#,'%')</isNotNull>
<isNotNull property="qno" prepend="and">a.qno=#qno#</isNotNull>
<isNotNull property="instructors" prepend="and">a.instructors like concat('%', #instructors#, '%')</isNotNull>
</dynamic>
) a
left outer join cm b on b.cmno=a.cmno
@ -953,7 +964,9 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase
<!--LEFT OUTER JOIN users u ON FIND_IN_SET(u.userid, a.instructors) > 0-->
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.ispassspace,a.isignorecase,a.instructors
order by a.RNO
</select>
<select id="cm.questions2" parameterClass="hashtable" resultClass="question">
@ -962,10 +975,13 @@
,count(ued.exno) qcount
,sum(case when ued.atext is not null then 1 else 0 end) ecount
,case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end rrate
,a.instructors
,u.usertype
,u.username AS instructors_name
from (
select a.*
from (
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt
select a.qno,a.cmno,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc,a.cdt,a.udt,a.instructors
,b.cname
, cc.cname qdiffname, cc1.cname ccname1, cc2.cname ccname2, cc3.cname ccname3, cc4.cname ccname4, cc5.cname ccname5
, Row_Number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">a.qtextstring</isNull> ) rno
@ -999,18 +1015,20 @@
) a
left outer join cmexq eq on eq.qno=a.qno
left outer join lectexq ued on ued.eqno=eq.eqno
left outer join users u on u.userid = a.instructors
group by a.qno,a.cmno,a.cname,a.qdiff,a.cc1,a.cc2,a.cc3,a.cc4,a.cc5,a.isuse,a.atype,a.dpoint,a.qtext,a.qtextstring,a.qdesc
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt
,a.qdiffname,a.ccname1,a.ccname2,a.ccname3,a.ccname4,a.ccname5,a.rno,a.pagetotalcount,a.cdt,a.udt,a.instructors
<dynamic prepend="having">
<isNotNull property="qcount" prepend="and">count(ued.examno)=#qcount#</isNotNull>
<isNotNull property="ecount" prepend="and">sum(case when ued.atext is not null then 1 else 0 end)=#ecount#</isNotNull>
<isNotNull property="rrate" prepend="and">case when sum(case when ued.atext is not null then 1 else 0 end) &lt; 1 then 0 else sum(ued.iscorrect) / sum(case when ued.atext is not null then 1 else 0 end) * 100 end=#rrate#</isNotNull>
<isNotNull property="instuctorName" prepend="and">u.username like concat('%', #instuctorName#, '%')</isNotNull>
</dynamic>
order by a.rno
</select>
<insert id="cm.question.in" parameterClass="question">
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>);
INSERT INTO question (cmno, qdiff, cc1, cc2, cc3, cc4, cc5, isuse, atype, dpoint, qtext, qtextstring, qdesc, rightcount,ispassspace,isignorecase, <include refid="sql.inc"></include>, instructors)
values (#cmno#, #qdiff#, #cc1#, #cc2#, #cc3#, #cc4#, #cc5#, #isuse#, #atype#, #dpoint#, #qtext#, #qtextstring#, #qdesc#, #rightcount#,#ispassspace#,#isignorecase#, <include refid="sql.inv"></include>, #instructors#);
<selectKey type="post" property="qno" resultClass="int">SELECT LAST_INSERT_ID()</selectKey>
</insert>
<update id="cm.questionitem.in" parameterClass="question">
@ -1105,7 +1123,7 @@
<update id="cm.question.up" parameterClass="question">
UPDATE question SET <include refid="sql.up"></include>
,cmno=#cmno#,qdiff=#qdiff#,cc1=#cc1#,cc2=#cc2#,cc3=#cc3#,cc4=#cc4#,cc5=#cc5#,isuse=#isuse#,dpoint=#dpoint#,qtext=#qtext#,qtextstring=#qtextstring#,qdesc=#qdesc#,rightcount=#rightcount#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#
,ispassspace=#ispassspace#,isignorecase=#isignorecase#,instructors=#instructors#
where qno=#qno#
</update>
<update id="cm.question.uptop" parameterClass="question">
@ -2232,5 +2250,82 @@
<isNotNull property="year">and year(a.sstime)=#year#</isNotNull>
order by a.sstime,a.setime
</select>
<select id="cm.cminningscds.applyedu.my" parameterClass="hashtable" resultClass="cminningscd">
select
a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,a.studyplace,a.studyplacename,a.startmonth,a.comment
,a.studyplace, a.studyplacename,a.remainPeople
,a.isselected, a.cmno,a.pcmno,a.cgcode
<!--211220.통합테스트목록(644) 이미지난 교육종료일 변경불가-->
,case WHEN a.estart &gt; date_add(date_format(now(), '%Y-%m-%d 00:00:00'), interval - 1 second)
<!--20220803
or a.remainPeople &lt;= 0 -->
then 0 else 1 end isend
from
(
select a.cmisno,a.cmino,a.estart,a.eend,a.quota,a.cdt,a.udt,month(a.estart) startmonth
,(a.quota - (select count(z.lectno) cnt from lect z where a.cmisno = z.cmisno and z.status in (1,2) and z.ischanged=0)) remainPeople
,a.studyplace, e.cname studyplacename
,case when f.cmisno = a.cmisno then 1 else 0 end isselected, d.cmno,d.pcmno,cg.cgcode
,a.comment
,f.sdate
from cminningscd a
left outer join cminning c on c.cmino = a.cmino
left outer join cm d on d.cmno = c.cmno
left outer join cg cg on d.cgno = cg.cgno
left outer join comcode e on e.ccode = a.studyplace
left outer join lect f on f.lectno = #lectno#
where DATE_ADD(f.sdate, INTERVAL 1 YEAR) &gt; a.estart
<isNotNull property="cmno" prepend="and">c.cmno=#cmno#</isNotNull>
)a
WHERE a.estart &gt; date_add(date_format(a.sdate, '%Y-%m-%d 00:00:00'), interval + 2 DAY)
order by isend desc,a.estart
</select>
<select id="cm.exlist" parameterClass="hashtable" resultClass="est">
select 0 gubun,case when a.extype = 0 then 1 else 2 end estkind
,a.exno,a.cmno,a.extype,a.exname,a.edesc,a.etime,a.econdition,a.evtype,a.eqtype,a.israndq,a.israndqi,a.qcount,a.isblur,a.tpoint,a.relaylimit,a.isusebackup,a.isseq
,DATE_FORMAT(a.testsdate, '%Y-%m-%d %H:%i') AS testsdate
,DATE_FORMAT(a.testedate, '%Y-%m-%d %H:%i') AS testedate
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.extype order by a.cdt) rno
,null as iseq,null as teachername
,b.cshape
,c.cmisno
,c.estart
,c.eend
,c.instructors
from cmex a
left join cm b ON b.cmno = a.cmno
left join cminningscd c on c.cmisno = a.cmisno
where a.cmno=#cmno# and a.isdel=0
<isNotNull property="estart" prepend="and">c.estart &gt;= concat(#estart#, ' 00:00:00')</isNotNull>
<isNotNull property="eend" prepend="and">c.eend &lt;= concat(#eend#, ' 23:59:59')</isNotNull>
<isNotNull property="instructors" prepend="and">c.instructors like concat('%',#instructors#,'%')</isNotNull>
</select>
<select id="cm.est2" parameterClass="int" resultClass="est">
select 1 gubun,case when a.sdtype = 0 then 11 else 21 end estkind
,a.sdno exno,a.cmno,a.sdtype extype,a.sdname exname,a.sddesc edesc,null etime,a.sdcondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,a.tpoint,null relaylimit,null isusebackup,null isseq
,a.sdno,a.sdtype,a.sdname,a.sddesc,a.sdcondition
,null rsno,null rscno,null rstype,null rsname,null rscondition
, row_number() over(partition by a.sdtype order by a.cdt) rno
,null as iseq,null as teachername
from cmsd a
where a.cmno=#cmno# and a.isdel=0
union all
select 2 gubun,case when a.rstype = 0 then 32 else 31 end estkind
,a.rsno exno,a.cmno,a.rstype extype,a.rsname exname,null edesc,null etime,a.rscondition econdition,null evtype,null eqtype,null israndq,null israndqi,null qcount,null isblur,null tpoint,null relaylimit,null isusebackup,null isseq
,null sdno,null sdtype,null sdname,null sddesc,null sdcondition
,a.rsno,a.rscno,a.rstype,a.rsname,a.rscondition
, row_number() over(partition by a.rstype order by a.cdt) rno
,b.iseq,c.username as teachername
from cmrs a
left outer join cminning b on a.cmino = b.cmino
left outer join users c on b.userno = c.userno
where a.cmno=#cmno# and a.isdel=0
order by rsno<!--estkind,rno-->
</select>
</statements>
</sqlMap>

View File

@ -459,9 +459,13 @@
,0 rno
,null time
,null time2
,null testsdate
,null testedate
from (select 1 col1) a
where a.col1=0
union all
select -1 dtype
,null strval,0 intval10
,0 intval,0 intval2,0 intval3,0 intval4,a.attrate intval5
@ -470,6 +474,8 @@
,0 rno
,null time
,null time2
,null testsdate
,null testedate
from lect a
where a.lectno=#lectno# and a.userno=#userno#
<isNotNull property="exam">
@ -485,6 +491,8 @@
,row_number() over (partition by b.extype order by b.extype, b.cdt) rno
,a.edate time
,a.sdate time2
,b.testsdate
,b.testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmex b on b.cmno=a.cmno and b.isdel=0
@ -504,6 +512,8 @@
,row_number() over (order by b.cdt) rno
,a.edate time
,a.sdate time2
,null testsdate
,null testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmsd b on b.cmno=a.cmno and b.sdtype=0 and b.isdel=0
@ -523,6 +533,8 @@
,row_number() over (order by b.cdt) rno
,a.edate time
,a.sdate time2
,null testsdate
,null testedate
from lect a
inner join cm a2 on a2.cmno=a.cmno
inner join cmsd b on b.cmno=a.cmno and b.sdtype=1 and b.isdel=0
@ -545,6 +557,8 @@
,case when
case when case when a.isrebate = 1 then f.midcutrfd else f.midcut end &lt;= ifnull(e.ex0lectpoint,0) then 1 else 0 end = 1 and case when case when a.isrebate = 1 then f.finalcutrfd else f.finalcut end &lt;= ifnull(e.ex1lectpoint,0) then 1 else 0 end = 1
then 1 else 0 end ispass
,c.testsdate
,c.testedate
from lect a
inner join cm b on b.cmno=a.cmno
inner join cmex c on c.exno=#exno#

View File

@ -2887,7 +2887,7 @@
ON b.payno = e.PAYNO
INNER JOIN pplog f
ON b.USERNO = e.USERNO AND b.CMNO = f.CMNO AND e.PPLNO = f.PPLNO
WHERE b.STATUS = 1
WHERE b.STATUS IN(1, 2, 3)
AND (e.PSTATUS = 1 OR e.PSTATUS = 22)
AND b.USERNO = #uno#;
]]>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

547
FO/Logs/query.txt Normal file

File diff suppressed because one or more lines are too long

7419
FO/Logs/query.txt.2 Normal file

File diff suppressed because one or more lines are too long

View File

@ -101,15 +101,21 @@
@if (d.dtype == 1)
{
// 최총 평가일 때
//if ((currentProgresRate >= d.intval2) // 조건 ①
// && IsDateInRange(d.testsdate, d.testedate) // 조건 ②
// && (ViewBag.exCheck || dType1CmStudyTime == 16)) // 조건 ③ 또는 조건 ④ <-- 요 부분을 다시 물어보자
if ((currentProgresRate >= d.intval2) // 조건 ①
&& IsDateInRange(d.time2, d.time) // 조건 ②
&& (ViewBag.exCheck || dType1CmStudyTime == 16)) // 조건 ③ 또는 조건 ④ <-- 요 부분을 다시 물어보자
&& IsDateInRange(d.testsdate, d.testedate)) // 조건 ②
{
<td>
<input type="hidden" name="cmEcondition" value="@d.intval2" />
<input type="hidden" name="lectSDate" value="@d.time2" />
<input type="hidden" name="lectEDate" value="@d.time" />
<input type="hidden" name="isDateInRange" value="@IsDateInRange(d.time2, d.time).ToString()" />
@*<input type="hidden" name="lectSDate" value="@d.time2" />
<input type="hidden" name="lectEDate" value="@d.time" />*@
@*<input type="hidden" name="isDateInRange" value="@IsDateInRange(d.time2, d.time).ToString()" />*@
<input type="hidden" name="lectSDate" value="@d.testsdate" />
<input type="hidden" name="lectEDate" value="@d.testedate" />
<input type="hidden" name="isDateInRange" value="@IsDateInRange(d.testsdate, d.testedate).ToString()" />
<a href="javascript:;" onclick="eva(@d.dtype, @d.intval10, @(d.intval4 == 1 ? 4 : d.intval3 == 1 ? 3 : d.intval3 == 0 && d.intval >= d.intval2 ? 2 : 1))"
class="@GetEvaTypeClass(d.intval, d.intval2, d.intval3, d.intval4, currentLectIsComplete)">@GetEvaStatusText(d.intval, d.intval2, d.intval3, d.intval4, currentLectIsComplete)
</a>

View File

@ -9,7 +9,8 @@
<tr><th>시험내용</th><td>@Html.Raw((Model.LectEX.edesc ?? "").Replace(System.Environment.NewLine, "<br />"))</td></tr>
<tr><th>평가점수</th><td>@(Model.LectEX.tpoint + "점")</td></tr>
<tr><th>제한시간</th><td>@(Model.LectEX.etime == 0 ? "제한없음" : string.Format("{0} 분", Model.LectEX.etime))</td></tr>
<tr><th>응시기간</th><td>@(Model.LectEX.sdate.Value.ToString("yy-MM-dd hh:mm")) ~ @(Model.LectEX.edate.Value.ToString("yy-MM-dd hh:mm"))까지(진도율 @(Model.LectEX.econdition)%이상 응시가능)</td></tr>
@*<tr><th>응시기간</th><td>@(Model.LectEX.sdate.Value.ToString("yy-MM-dd hh:mm")) ~ @(Model.LectEX.edate.Value.ToString("yy-MM-dd hh:mm"))까지(진도율 @(Model.LectEX.econdition)%이상 응시가능)</td></tr>*@
<tr><th>응시기간</th><td>@(Convert.ToDateTime(Model.LectEX.testsdate).ToString("yyyy-MM-dd hh:mm")) ~ @(Convert.ToDateTime(Model.LectEX.testedate).ToString("yyyy-MM-dd hh:mm"))까지(진도율 @(Model.LectEX.econdition)%이상 응시가능)</td></tr>
<tr><th>재응시여부</th><td>@(Model.LectEX.isreexamable == 0 ? "불가능" : "가능")</td></tr>
<tr><th>응시상태</th><td>@(Model.LectEX.estart == null ? ("응시전" + (Model.LectEX.recount > 0 ? string.Format(" (재응시승인 {0}회)", Model.LectEX.recount) : "")) : Model.LectEX.eend != null ? "응시완료" : Model.LectEX.rtime < 1 ? "응시시간초과" : ("응시시작 (남은시간 " + Model.LectEX.rtime + "분)" + (Model.LectEX.relaylimit.Value <= Model.LectEX.entercount ? ", [이어보기 초과]" : "")))</td></tr>
@if (Model.LectEX.estart != null)
@ -56,7 +57,8 @@
var openedexam = false;
function goexam() {
if (@(Model.LectEX.eend == null && (Model.LectEX.estart == null || Model.LectEX.relaylimit.Value >= Model.LectEX.entercount) ? 1 : 0) == 1) {
if (@(Model.LectEX.sdate.Value > DateTime.Now || Convert.ToDateTime(Model.LectEX.edate.Value.ToString("yyyy-MM-dd")).AddDays(1).AddSeconds(-1) < DateTime.Now?0:1)== 0) {
if (@(Convert.ToDateTime(Model.LectEX.testsdate) > DateTime.Now
|| Convert.ToDateTime(Convert.ToDateTime(Model.LectEX.testedate).ToString("yyyy-MM-dd")).AddDays(1).AddSeconds(-1) < DateTime.Now ? 0 : 1) == 0) {
msg("응시기간이 아닙니다.");
} else if (@Model.LectEX.rtime < 1 && @Model.LectEX.etime > 0) {
msg("응시시간이 초과되었습니다.");

View File

@ -168,7 +168,7 @@ width: 8px;height: 15px;border: solid white;border-width: 0 3px 3px 0;transform:
</form>
</div>
<br />
@if (Model.stringval2 == "2" && Model.stringval4 == "32") {
@if (Model.stringval2 == "2" && (Model.stringval4 == "32" || Model.stringval4 == "108")) {
<p class='' style="font-weight: bold; font-size: 14pt;">※ 현재 신청중인 교육은 <span style='color: red; font-weight: bold'>집체교육 참석없이</span> 교육종료일까지 수료조건을 만족하시면 됩니다.</p>
} else if (Model.stringval2 == "2") {
<p class='' style="font-weight: bold; font-size: 14pt;">※ 현재 신청중인 교육은 <span style='color: red; font-weight: bold'>온라인교육(동영상강의28시간 + 집체참석7시간)</span> 교육입니다.</p>

View File

@ -29,28 +29,39 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
Staging|Any CPU = Staging|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7D8C3282-ED23-4275-A8B6-C2533B06E30C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7D8C3282-ED23-4275-A8B6-C2533B06E30C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D8C3282-ED23-4275-A8B6-C2533B06E30C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D8C3282-ED23-4275-A8B6-C2533B06E30C}.Release|Any CPU.Build.0 = Release|Any CPU
{7D8C3282-ED23-4275-A8B6-C2533B06E30C}.Staging|Any CPU.ActiveCfg = Debug|Any CPU
{7D8C3282-ED23-4275-A8B6-C2533B06E30C}.Staging|Any CPU.Build.0 = Debug|Any CPU
{707F0AAA-F7B7-414D-B763-33DE10980702}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{707F0AAA-F7B7-414D-B763-33DE10980702}.Debug|Any CPU.Build.0 = Debug|Any CPU
{707F0AAA-F7B7-414D-B763-33DE10980702}.Release|Any CPU.ActiveCfg = Release|Any CPU
{707F0AAA-F7B7-414D-B763-33DE10980702}.Release|Any CPU.Build.0 = Release|Any CPU
{707F0AAA-F7B7-414D-B763-33DE10980702}.Staging|Any CPU.ActiveCfg = Debug|Any CPU
{707F0AAA-F7B7-414D-B763-33DE10980702}.Staging|Any CPU.Build.0 = Debug|Any CPU
{748E363F-863F-4CAA-BB9B-B3BE3BE7607E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{748E363F-863F-4CAA-BB9B-B3BE3BE7607E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{748E363F-863F-4CAA-BB9B-B3BE3BE7607E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{748E363F-863F-4CAA-BB9B-B3BE3BE7607E}.Release|Any CPU.Build.0 = Release|Any CPU
{748E363F-863F-4CAA-BB9B-B3BE3BE7607E}.Staging|Any CPU.ActiveCfg = Debug|Any CPU
{748E363F-863F-4CAA-BB9B-B3BE3BE7607E}.Staging|Any CPU.Build.0 = Debug|Any CPU
{ED9C46ED-D635-4F9B-8372-599EEB050673}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED9C46ED-D635-4F9B-8372-599EEB050673}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED9C46ED-D635-4F9B-8372-599EEB050673}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED9C46ED-D635-4F9B-8372-599EEB050673}.Release|Any CPU.Build.0 = Release|Any CPU
{ED9C46ED-D635-4F9B-8372-599EEB050673}.Staging|Any CPU.ActiveCfg = Debug|Any CPU
{ED9C46ED-D635-4F9B-8372-599EEB050673}.Staging|Any CPU.Build.0 = Debug|Any CPU
{CCAA0B88-D2FD-450C-8EF3-D5F9C6C93B25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CCAA0B88-D2FD-450C-8EF3-D5F9C6C93B25}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CCAA0B88-D2FD-450C-8EF3-D5F9C6C93B25}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CCAA0B88-D2FD-450C-8EF3-D5F9C6C93B25}.Release|Any CPU.Build.0 = Release|Any CPU
{CCAA0B88-D2FD-450C-8EF3-D5F9C6C93B25}.Staging|Any CPU.ActiveCfg = Debug|Any CPU
{CCAA0B88-D2FD-450C-8EF3-D5F9C6C93B25}.Staging|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -571,6 +571,8 @@ namespace NP.Model
public DateTime time4 { get; set; }
public DateTime time5 { get; set; }
public DateTime time6 { get; set; }
public DateTime testsdate { get; set; }
public DateTime testedate { get; set; }
}
//public class Data

View File

@ -510,6 +510,14 @@ namespace NP.Model
/// 일일 학습 회차 제한(0:무제한)
/// </summary>
public int daylectinninglimit { get; set; }
/// <summary>
/// 강좌설정 > 시험설정 파라미터
/// </summary>
public string estart { get; set; } // 집체교육 시작일
public string eend { get; set; } // 집체교육 종료일
public string instructors { get; set; } // 교강사
public string testsdate { get; set; } // 시험응시 시작날짜
public string testedate { get; set; } // 시험응시 종료날짜
}
[Serializable]
@ -2069,6 +2077,20 @@ namespace NP.Model
/// </summary>
public int iseq { get; set; }
public string teachername { get; set; }
/// <summary>강의유형</summary>
public int cshape { get; set; }
/// <summary>회차키</summary>
public int cmisno { get; set; }
/// <summary>집체교육 시작일</summary>
public string estart { get; set; }
/// <summary>집체교육 종료일</summary>
public string eend { get; set; }
/// <summary>교강사</summary>
public string instructors { get; set; }
/// <summary>시험응시 시작날짜</summary>
public string testsdate { get; set; }
/// <summary>시험응시 종료날짜</summary>
public string testedate { get; set; }
}
/// <summary>
@ -2155,7 +2177,12 @@ namespace NP.Model
public IList<CMEXLayer> cmexlayers { get; set; }
public IList<CMEXQ> cmexqs { get; set; }
public DateTime? estart { get; set; }
/// <summary>교육일정코드</summary>
public int cmisno { get; set; }
/// <summary>시험응시 시작일</summary>
public string testsdate { get; set; }
/// <summary>시험응시 종료일</summary>
public string testedate { get; set; }
}
/// <summary>
@ -2359,6 +2386,12 @@ namespace NP.Model
public String qitext8 { get; set; }
public String qitext9 { get; set; }
public String qitext10 { get; set; }
/// <summary>교강사</summary>
public string instructors { get; set; }
/// <summary>강사명</summary>
public string instructors_name { get; set; }
/// <summary>회원타입</summary>
public int usertype { get; set; }
}
/// <summary>
@ -4231,6 +4264,8 @@ namespace NP.Model
public Int64 pcmno { get; set; }
public Int64 cgcode { get; set; }
public String comment { get; set; } // 안내문구
/// <summary>담당자/교강사</summary>
public String instructors { get; set; }
}
/// <summary>

View File

@ -62,6 +62,5 @@ namespace NP.Model
public Excellog excellog { get; set; }
public IList<Excellog> excelloglook { get; set; }
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.