6450. 관리자 홈 메뉴 내 필터링 기능

This commit is contained in:
iyak 2025-04-10 04:34:27 +00:00
parent f044c66bde
commit 3d993bf121
11 changed files with 941 additions and 203 deletions

View File

@ -1,19 +1,27 @@
using System; using NP.Model;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Web;
using System.Web.Mvc; using System.Web.Mvc;
using NP.Model;
namespace NP.BO.Controllers namespace NP.BO.Controllers
{ {
public class ccController : BOBaseController public class ccController : BOBaseController
{ {
private int jkBoardNo = 13; // // ST :21, LIVE : 13 // ST :21, LIVE : 13
public ActionResult bms(NP.Model.VMCC vm) private int jkBoardNo = 13;
/// <summary>
/// 커뮤니케이션 > 게시판설정
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult bms(VMCC vm)
{ {
vm.BMs = InitM<BoardMaster>(); var ht = SetHash(vm); vm.BMs = InitM<BoardMaster>();
var ht = SetHash(vm);
if ("3".Equals(vm.stringval)) if ("3".Equals(vm.stringval))
{ {
ht.Add("bmposition", 0); ht.Add("bmposition", 0);
@ -23,18 +31,22 @@ namespace NP.BO.Controllers
{ {
ht.Add("bmposition", vm.stringval); ht.Add("bmposition", vm.stringval);
} }
ht.Add("bmtype", vm.stringval2); ht.Add("bmtype", vm.stringval2);
ht.Add("disptype", vm.stringval3); ht.Add("disptype", vm.stringval3);
vm.stringval4 = vm.stringval4 ?? "bmname"; vm.stringval4 = vm.stringval4 ?? "bmname";
ht.Add(vm.stringval4, vm.stringval5); ht.Add(vm.stringval4, vm.stringval5);
vm.BMs = Dao.Get<BoardMaster>("board.bms", ht); vm.BMs = Dao.Get<BoardMaster>("board.bms", ht);
vm.pagetotalcount = GetCount(vm.BMs.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.BMs.FirstOrDefault());
return View(vm); return View(vm);
} }
public ActionResult bmr(NP.Model.VMCC vm)
public ActionResult bmr(VMCC vm)
{ {
vm.BM = new BoardMaster() { }; vm.BM = new BoardMaster() { };
vm.BMOs = new List<BoardMasterOpening>() { }; vm.BMOs = new List<BoardMasterOpening>() { };
if (vm.intval > 0) if (vm.intval > 0)
{ {
vm.BM = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "bmno", vm.intval } }).First(); vm.BM = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "bmno", vm.intval } }).First();
@ -43,6 +55,7 @@ namespace NP.BO.Controllers
vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", vm.BM.bmno); vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", vm.BM.bmno);
} }
} }
return View(vm); return View(vm);
} }
@ -68,8 +81,8 @@ namespace NP.BO.Controllers
ht.Add("sstime", vm.stringval5); ht.Add("sstime", vm.stringval5);
ht.Add("setime", vm.stringval6); ht.Add("setime", vm.stringval6);
ht.Add("isallday", "1"); ht.Add("isallday", "1");
/*Excellog excellog = new Excellog();*/
vm.excelloglook = Dao.Get<Excellog>("excellog.look", ht); vm.excelloglook = Dao.Get<Excellog>("excellog.look", ht);
vm.pagetotalcount = GetCount(vm.excelloglook.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.excelloglook.FirstOrDefault());
return View(vm); return View(vm);
@ -106,9 +119,16 @@ namespace NP.BO.Controllers
} }
return View(vm); return View(vm);
} }
/// <summary>
/// 커뮤니케이션 > 홈페이지게시판
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult homes(NP.Model.VMCC vm) public ActionResult homes(NP.Model.VMCC vm)
{ {
vm.Boards = InitM<Board>(); vm.Boards = InitM<Board>();
var ht = SetHash(vm); var ht = SetHash(vm);
if (SUserInfo.IsSiteAdmin) if (SUserInfo.IsSiteAdmin)
{ {
@ -119,21 +139,35 @@ namespace NP.BO.Controllers
{ {
vm.Assigns = Dao.Get<Assign>("users.assigns", new System.Collections.Hashtable() { { "issite", 1 } }); vm.Assigns = Dao.Get<Assign>("users.assigns", new System.Collections.Hashtable() { { "issite", 1 } });
} }
vm.BMs = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "asno", vm.stringval }, { "bmposition", 0 }, { "isdefaults", string.IsNullOrEmpty(vm.stringval) ? "0,2" : "3" } }); vm.BMs = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "asno", vm.stringval }, { "bmposition", 0 }, { "isdefaults", string.IsNullOrEmpty(vm.stringval) ? "0,2" : "3" } });
vm.BMOs = new List<BoardMasterOpening>() { }; vm.BMOs = new List<BoardMasterOpening>() { };
if (!string.IsNullOrEmpty(vm.stringval2)) if (!string.IsNullOrEmpty(vm.stringval2))
{ {
vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", GetInt(vm.stringval2)); vm.BMOs = Dao.Get<BoardMasterOpening>("board.bmos", GetInt(vm.stringval2));
} }
ht.Add("asno", vm.stringval); ht.Add("asno", vm.stringval);
ht.Add("bmno", vm.stringval2); ht.Add("bmno", vm.stringval2);
ht.Add("opno", vm.stringval3); ht.Add("opno", vm.stringval3);
ht.Add("scc", vm.stringval4); ht.Add("scc", vm.stringval4);
ht.Add("bmposition", "0"); ht.Add("bmposition", "0");
vm.Boards = Dao.Get<Board>("board.bs", ht); // stringval6 == "Y" => Home > 잔여 업무 요약 > 강의Q&A미답변 으로 접근일떄
if (vm.stringval6 == "Y")
{
// 기존 쿼리로 조건절을 만들기엔 JOIN절의 의도를 파악하기가 어렵다.
vm.Boards = Dao.Get<Board>("board.bsnoReplies", ht);
}
else
{
vm.Boards = Dao.Get<Board>("board.bs", ht);
}
vm.pagetotalcount = GetCount(vm.Boards.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.Boards.FirstOrDefault());
if (vm.Boards.Count() > 0) if (vm.Boards.Count() > 0)
{ {
vm.Boards2 = Dao.Get<Board>("board.bcmt.cnt", new System.Collections.Hashtable() { { "bnos", string.Join(",", vm.Boards.Select(s => s.bno)) } }); vm.Boards2 = Dao.Get<Board>("board.bcmt.cnt", new System.Collections.Hashtable() { { "bnos", string.Join(",", vm.Boards.Select(s => s.bno)) } });
@ -142,6 +176,7 @@ namespace NP.BO.Controllers
d.ccount = vm.Boards2.Where(w => w.bno == d.bno).First().ccount; d.ccount = vm.Boards2.Where(w => w.bno == d.bno).First().ccount;
} }
} }
return View(vm); return View(vm);
} }
@ -215,14 +250,17 @@ namespace NP.BO.Controllers
{ {
vm.Board = new Board() { isopen = 1 }; vm.Board = new Board() { isopen = 1 };
} }
if (SUserInfo.IsSiteAdmin) if (SUserInfo.IsSiteAdmin)
{ {
vm.IsSiteAdmin = SUserInfo.IsSiteAdmin; vm.IsSiteAdmin = SUserInfo.IsSiteAdmin;
} }
vm.BMs = new List<BoardMaster>() { }; vm.BMs = new List<BoardMaster>() { };
vm.FileList = new List<File>() { }; vm.FileList = new List<File>() { };
vm.BMOs = new List<BoardMasterOpening>() { }; vm.BMOs = new List<BoardMasterOpening>() { };
vm.BoardCMTs = new List<BoardCMT>() { }; vm.BoardCMTs = new List<BoardCMT>() { };
if (vm.longval > 0 && vm.Board.pbno == null) if (vm.longval > 0 && vm.Board.pbno == null)
{ {
vm.Board = Dao.Get<Board>("board.get", vm.longval).First(); vm.Board = Dao.Get<Board>("board.get", vm.longval).First();
@ -260,10 +298,18 @@ namespace NP.BO.Controllers
vm.SCUserName = SUserInfo.UserName; vm.SCUserName = SUserInfo.UserName;
return View(vm); return View(vm);
} }
public ActionResult rooms(NP.Model.VMCC vm)
/// <summary>
/// 커뮤니케이션 > 강의실게시판
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult rooms(VMCC vm)
{ {
vm.Boards = InitM<Board>(); vm.Boards = InitM<Board>();
var ht = SetHash(vm); var ht = SetHash(vm);
if (SUserInfo.IsTeacher) if (SUserInfo.IsTeacher)
{ {
vm.Terms = Dao.Get<Term>("cm.myterm", SUserInfo.UserNo); vm.Terms = Dao.Get<Term>("cm.myterm", SUserInfo.UserNo);
@ -272,7 +318,9 @@ namespace NP.BO.Controllers
{ {
vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { }); vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { });
} }
vm.CMs = new List<CM>() { }; vm.CMs = new List<CM>() { };
if (!string.IsNullOrEmpty(vm.stringval2)) if (!string.IsNullOrEmpty(vm.stringval2))
{ {
if (SUserInfo.IsTeacher) if (SUserInfo.IsTeacher)
@ -284,18 +332,32 @@ namespace NP.BO.Controllers
vm.CMs = Dao.Get<CM>("cm.cms", new System.Collections.Hashtable() { { "tmno", vm.stringval2 }, { "ismaster", 0 }, { "orderby", "d.cname,d.classno" } }); vm.CMs = Dao.Get<CM>("cm.cms", new System.Collections.Hashtable() { { "tmno", vm.stringval2 }, { "ismaster", 0 }, { "orderby", "d.cname,d.classno" } });
} }
} }
vm.BMs = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "bmposition", 1 } }); vm.BMs = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "bmposition", 1 } });
ht.Add("tyear", !string.IsNullOrEmpty(vm.stringval2) ? null : vm.stringval); ht.Add("tyear", !string.IsNullOrEmpty(vm.stringval2) ? null : vm.stringval);
ht.Add("tmno", !string.IsNullOrEmpty(vm.stringval3) ? null : vm.stringval2); ht.Add("tmno", !string.IsNullOrEmpty(vm.stringval3) ? null : vm.stringval2);
ht.Add("cmno", vm.stringval3); ht.Add("cmno", vm.stringval3);
ht.Add("bmno", vm.stringval4); ht.Add("bmno", vm.stringval4);
ht.Add("scc", vm.stringval5); ht.Add("scc", vm.stringval5);
if (SUserInfo.IsTeacher) if (SUserInfo.IsTeacher)
{ {
ht.Add("teacherno", SUserInfo.UserNo); ht.Add("teacherno", SUserInfo.UserNo);
} }
vm.Boards = Dao.Get<Board>("board.roombs", ht);
// stringval6 == "Y" => Home > 잔여 업무 요약 > 강의Q&A미답변 으로 접근일떄
if (vm.stringval6 == "Y")
{
vm.Boards = Dao.Get<Board>("board.roombsnoReplies", ht);
}
else
{
vm.Boards = Dao.Get<Board>("board.roombs", ht);
}
vm.pagetotalcount = GetCount(vm.Boards.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.Boards.FirstOrDefault());
if (vm.Boards.Count() > 0) if (vm.Boards.Count() > 0)
{ {
vm.Boards2 = Dao.Get<Board>("board.bcmt.cnt", new System.Collections.Hashtable() { { "bnos", string.Join(",", vm.Boards.Select(s => s.bno)) } }); vm.Boards2 = Dao.Get<Board>("board.bcmt.cnt", new System.Collections.Hashtable() { { "bnos", string.Join(",", vm.Boards.Select(s => s.bno)) } });
@ -304,8 +366,10 @@ namespace NP.BO.Controllers
d.ccount = vm.Boards2.Where(w => w.bno == d.bno).First().ccount; d.ccount = vm.Boards2.Where(w => w.bno == d.bno).First().ccount;
} }
} }
return View(vm); return View(vm);
} }
public ActionResult roomr(NP.Model.VMCC vm) public ActionResult roomr(NP.Model.VMCC vm)
{ {
if (vm.Board != null && vm.Board.pbno != null) if (vm.Board != null && vm.Board.pbno != null)
@ -324,8 +388,8 @@ namespace NP.BO.Controllers
{ {
vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { }); vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { });
} }
//vm.BMs = Dao.Get<BoardMaster>("board.bms", new System.Collections.Hashtable() { { "bmposition", 1 } });
} }
vm.FileList = new List<File>() { }; vm.FileList = new List<File>() { };
vm.BoardCMTs = new List<BoardCMT>() { }; vm.BoardCMTs = new List<BoardCMT>() { };
if (vm.longval > 0 && vm.Board.pbno == null) if (vm.longval > 0 && vm.Board.pbno == null)
@ -346,22 +410,33 @@ namespace NP.BO.Controllers
} }
vm.BoardCMTs = Dao.Get<BoardCMT>("board.boardcmts", vm.Board.bno); vm.BoardCMTs = Dao.Get<BoardCMT>("board.boardcmts", vm.Board.bno);
} }
if (vm.Board.pbno != null) if (vm.Board.pbno != null)
{ {
vm.BoardP = Dao.Get<Board>("board.get", vm.Board.pbno.Value).First(); vm.BoardP = Dao.Get<Board>("board.get", vm.Board.pbno.Value).First();
} }
vm.SCUserName = SUserInfo.UserName; vm.SCUserName = SUserInfo.UserName;
return View(vm); return View(vm);
} }
/// <summary>
/// 커뮤니케이션 > 메일
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult emails(NP.Model.VMCC vm) public ActionResult emails(NP.Model.VMCC vm)
{ {
vm.Emails = InitM<EmailSend>(); vm.Emails = InitM<EmailSend>();
vm.pagerowcount = 100; vm.pagerowcount = 100;
var ht = SetHash(vm); var ht = SetHash(vm);
vm.Emails = Dao.Get<EmailSend>("common.emailsends", ht); vm.Emails = Dao.Get<EmailSend>("common.emailsends", ht);
vm.pagetotalcount = GetCount(vm.Emails.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.Emails.FirstOrDefault());
return View(vm); return View(vm);
} }
public ActionResult emailr(NP.Model.VMCC vm) public ActionResult emailr(NP.Model.VMCC vm)
{ {
vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { }); vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { });
@ -370,6 +445,12 @@ namespace NP.BO.Controllers
vm.EmailSend = new EmailSend() { }; vm.EmailSend = new EmailSend() { };
return View(vm); return View(vm);
} }
/// <summary>
/// 커뮤니케이션 > 쪽지
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult memos(NP.Model.VMCC vm) public ActionResult memos(NP.Model.VMCC vm)
{ {
vm.Memos = InitM<Memo>(); vm.Memos = InitM<Memo>();
@ -379,7 +460,8 @@ namespace NP.BO.Controllers
vm.pagetotalcount = GetCount(vm.Memos.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.Memos.FirstOrDefault());
return View(vm); return View(vm);
} }
public ActionResult memosends(NP.Model.VMCC vm)
public ActionResult memosends(VMCC vm)
{ {
vm.Memos = InitM<Memo>(); vm.Memos = InitM<Memo>();
var ht = SetHash(vm); var ht = SetHash(vm);
@ -394,6 +476,7 @@ namespace NP.BO.Controllers
vm.pagetotalcount = GetCount(vm.Memos2.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.Memos2.FirstOrDefault());
return View(vm); return View(vm);
} }
public ActionResult memosend(NP.Model.VMCC vm) public ActionResult memosend(NP.Model.VMCC vm)
{ {
vm.Assigns = Dao.Get<Assign>("users.assigns", new System.Collections.Hashtable() { { "issite", 1 } }); vm.Assigns = Dao.Get<Assign>("users.assigns", new System.Collections.Hashtable() { { "issite", 1 } });
@ -409,6 +492,7 @@ namespace NP.BO.Controllers
vm.userauths = Dao.Get<NP.Model.UserAuth>("sys.menu.auths", new System.Collections.Hashtable() { { "isall", 1 } }); vm.userauths = Dao.Get<NP.Model.UserAuth>("sys.menu.auths", new System.Collections.Hashtable() { { "isall", 1 } });
return View(vm); return View(vm);
} }
public ActionResult memoview(NP.Model.VMCC vm) public ActionResult memoview(NP.Model.VMCC vm)
{ {
ViewBag.PopupMenuName = "S".Equals(vm.sendorrcv) ? "보낸쪽지" : "받은쪽지"; ViewBag.PopupMenuName = "S".Equals(vm.sendorrcv) ? "보낸쪽지" : "받은쪽지";
@ -420,7 +504,13 @@ namespace NP.BO.Controllers
} }
return View(vm); return View(vm);
} }
public ActionResult talks(NP.Model.VMCC vm)
/// <summary>
/// 커뮤니케이션 > 알림톡
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult talks(VMCC vm)
{ {
vm.Memos = InitM<Memo>(); vm.Memos = InitM<Memo>();
var ht = SetHash(vm); var ht = SetHash(vm);
@ -429,14 +519,16 @@ namespace NP.BO.Controllers
vm.pagetotalcount = GetCount(vm.Memos.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.Memos.FirstOrDefault());
return View(vm); return View(vm);
} }
public ActionResult talkr(NP.Model.VMCC vm) public ActionResult talkr(NP.Model.VMCC vm)
{ {
vm.Assigns = Dao.Get<Assign>("users.assigns", new System.Collections.Hashtable() { { "issite", 1 } }); vm.Assigns = Dao.Get<Assign>("users.assigns", new System.Collections.Hashtable() { { "issite", 1 } });
vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { }); vm.Terms = Dao.Get<Term>("cm.term.ys", new System.Collections.Hashtable() { });
//ViewBag.PopupMenuName = "알림톡 발송";
vm.Memo = new Memo() { }; vm.Memo = new Memo() { };
vm.userauths = Dao.Get<NP.Model.UserAuth>("sys.menu.auths", new System.Collections.Hashtable() { { "isall", 1 } }); vm.userauths = Dao.Get<NP.Model.UserAuth>("sys.menu.auths", new System.Collections.Hashtable() { { "isall", 1 } });
return View(vm); return View(vm);
} }
} }
} }

View File

@ -1,13 +1,10 @@
using System; using NP.Base.Popbill;
using NP.Model;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Web.Mvc; using System.Web.Mvc;
using NP.Model;
using NP.Base.Popbill;
using Popbill.Taxinvoice;
using System.Collections;
using Spring.Expressions;
namespace NP.BO.Controllers namespace NP.BO.Controllers
{ {
@ -156,7 +153,8 @@ namespace NP.BO.Controllers
if (vm.addstringval == "8") if (vm.addstringval == "8")
{ {
ht.Add("statusin", "5,8,9"); ht.Add("statusin", "5,8,9");
} else if (vm.addstringval == "3") }
else if (vm.addstringval == "3")
{ {
ht.Add("statusin", "1,2,3,4"); ht.Add("statusin", "1,2,3,4");
} }
@ -813,7 +811,8 @@ namespace NP.BO.Controllers
&& String.IsNullOrEmpty(vm.stringval9) && String.IsNullOrEmpty(vm.stringval10) && String.IsNullOrEmpty(vm.stringval11)) && String.IsNullOrEmpty(vm.stringval9) && String.IsNullOrEmpty(vm.stringval10) && String.IsNullOrEmpty(vm.stringval11))
{ {
ht.Add("ustatus", 0); ht.Add("ustatus", 0);
} else }
else
{ {
ht.Add("ustatus", 99); ht.Add("ustatus", 99);
} }
@ -845,7 +844,8 @@ namespace NP.BO.Controllers
// pms6473 => 엑셀다운로드에서 수료번호의 "제" 와 "호" 글자를 제거해달라는 요청 // pms6473 => 엑셀다운로드에서 수료번호의 "제" 와 "호" 글자를 제거해달라는 요청
if (vm.Lects.Any()) if (vm.Lects.Any())
{ {
vm.Lects = vm.Lects.Select(x => { vm.Lects = vm.Lects.Select(x =>
{
x.completeno = (x.completeno != null) ? x.completeno.Replace("제", "").Replace("호", "") : ""; x.completeno = (x.completeno != null) ? x.completeno.Replace("제", "").Replace("호", "") : "";
return x; return x;
}).ToList(); }).ToList();
@ -873,7 +873,7 @@ namespace NP.BO.Controllers
, null , null
, ",2,4" , ",2,4"
, vm.excellog); , vm.excellog);
} }
} }
else else
{ {
@ -953,7 +953,7 @@ namespace NP.BO.Controllers
public ActionResult atts(VMLect vm) public ActionResult atts(VMLect vm)
{ {
vm.Lect = Dao.Get<Lect>("lect.lects", new System.Collections.Hashtable() { { "lectno", vm.longval } }).First(); vm.Lect = Dao.Get<Lect>("lect.lects", new System.Collections.Hashtable() { { "lectno", vm.longval } }).First();
vm.LectInningPages = Dao.Get<LectInningPage>("lect.lectinningpages", new System.Collections.Hashtable() { { "lectno", vm.Lect.lectno },{"isscd", 0} }); vm.LectInningPages = Dao.Get<LectInningPage>("lect.lectinningpages", new System.Collections.Hashtable() { { "lectno", vm.Lect.lectno }, { "isscd", 0 } });
// [이슈_602 / 박상완] 활동이력 탭에서 '검색' 시 데이터 로드 할 수 있도록 변경 // [이슈_602 / 박상완] 활동이력 탭에서 '검색' 시 데이터 로드 할 수 있도록 변경
// 파라미터 userno 를 -1으로 변경 // 파라미터 userno 를 -1으로 변경
@ -995,13 +995,13 @@ namespace NP.BO.Controllers
String pstatusall = null; String pstatusall = null;
if (vm.stringval3 != null) if (vm.stringval3 != null)
{ {
pstatusall = " and ((p.pstatus in (" +vm.stringval3+") and (pr.rstatus is null or p.rstatus = 0))"; pstatusall = " and ((p.pstatus in (" + vm.stringval3 + ") and (pr.rstatus is null or p.rstatus = 0))";
} }
if (vm.stringval4 != null) if (vm.stringval4 != null)
{ {
pstatusall = pstatusall == null ? "and ((pr.rfdno is not null and pr.rstatus = 0)" : (pstatusall + " or (pr.rfdno is not null and pr.rstatus = 0)"); pstatusall = pstatusall == null ? "and ((pr.rfdno is not null and pr.rstatus = 0)" : (pstatusall + " or (pr.rfdno is not null and pr.rstatus = 0)");
} }
if ((vm.stringval5??"").Contains("1")) if ((vm.stringval5 ?? "").Contains("1"))
{ {
pstatusall = pstatusall == null ? "and ((pi.rstatus=1 and p.payamt>p.refundamt)" : (pstatusall + " or (pi.rstatus=1 and p.payamt>p.refundamt)"); pstatusall = pstatusall == null ? "and ((pi.rstatus=1 and p.payamt>p.refundamt)" : (pstatusall + " or (pi.rstatus=1 and p.payamt>p.refundamt)");
} }
@ -1060,15 +1060,15 @@ namespace NP.BO.Controllers
payItem.cmistudyplacename = vm.ComCodes.Where(w => w.cgroup.ToString() == "studyplace" && w.ccode == payItem.cmistudyplace).FirstOrDefault()?.cname; payItem.cmistudyplacename = vm.ComCodes.Where(w => w.cgroup.ToString() == "studyplace" && w.ccode == payItem.cmistudyplace).FirstOrDefault()?.cname;
} }
if(vm.excellog != null) if (vm.excellog != null)
{ {
vm.excellog.userno = SUserInfo.UserNo; vm.excellog.userno = SUserInfo.UserNo;
vm.excellog.userip = GetUserIP(); vm.excellog.userip = GetUserIP();
} }
return ExportExcel( return ExportExcel(
new String[] { "결제번호", "신청자이름", "ID","주민번호", "핸드폰", "회사명", "상품유형", "환급여부", "상품명", "결제금액", "결제방법", "입금금액", "환불금액", "신청일","신청일시", "입금일", "결제상태", "환급은행명", "환급계좌번호", "환급예금주", "교육장소", "강좌교육시작일", "강좌교육종료일", "신청교육장소", "교육종료일","기술인분류","교육구분","직무분야","등급","목적","수료여부" }, new String[] { "결제번호", "신청자이름", "ID", "주민번호", "핸드폰", "회사명", "상품유형", "환급여부", "상품명", "결제금액", "결제방법", "입금금액", "환불금액", "신청일", "신청일시", "입금일", "결제상태", "환급은행명", "환급계좌번호", "환급예금주", "교육장소", "강좌교육시작일", "강좌교육종료일", "신청교육장소", "교육종료일", "기술인분류", "교육구분", "직무분야", "등급", "목적", "수료여부" },
new String[] { "payno", "username", "userid"," userpno", "mobile", "asname", "cshapename", "isrebatename", "itemname", "payamt", "pptypename", "payamt", "refundamt", "cdtymd","cdtymdhms", "payymd", "pstatusname2", "rbank", "rbankaccnum", "tbankuser", "studyplacename", "sdateymd", "edateymd", "cmistudyplacename", "cmiestartymd","tmname","edukind","tjname","tgname","tename", "completename" }, new String[] { "payno", "username", "userid", " userpno", "mobile", "asname", "cshapename", "isrebatename", "itemname", "payamt", "pptypename", "payamt", "refundamt", "cdtymd", "cdtymdhms", "payymd", "pstatusname2", "rbank", "rbankaccnum", "tbankuser", "studyplacename", "sdateymd", "edateymd", "cmistudyplacename", "cmiestartymd", "tmname", "edukind", "tjname", "tgname", "tename", "completename" },
vm.PayItems, vm.PayItems,
"ProductSales_" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day, null, null, vm.excellog); "ProductSales_" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day, null, null, vm.excellog);
} }
@ -1078,7 +1078,7 @@ namespace NP.BO.Controllers
{ {
if (!IsPost()) if (!IsPost())
{ {
LogSet(new ActLog() { logtype = 60, logtarget = 41, logdata = "결제번호: "+vm.payno, uno = SUserInfo.UserNo, uip = GetUserIP() }); LogSet(new ActLog() { logtype = 60, logtarget = 41, logdata = "결제번호: " + vm.payno, uno = SUserInfo.UserNo, uip = GetUserIP() });
} }
if (vm.isexamready == 1) if (vm.isexamready == 1)
{ {
@ -1100,7 +1100,7 @@ namespace NP.BO.Controllers
vm.Lect.typegradename = vm.ComCodes.Where(w => w.cgroup.ToString() == "typegrade" && w.ccode == vm.Lect.typegrade).FirstOrDefault()?.cname; vm.Lect.typegradename = vm.ComCodes.Where(w => w.cgroup.ToString() == "typegrade" && w.ccode == vm.Lect.typegrade).FirstOrDefault()?.cname;
vm.Lect.typejobitemname = vm.ComCodes.Where(w => w.ccode == vm.Lect.typejobitem).FirstOrDefault()?.cname; vm.Lect.typejobitemname = vm.ComCodes.Where(w => w.ccode == vm.Lect.typejobitem).FirstOrDefault()?.cname;
vm.Lect.typejobname = vm.ComCodes.Where(w => w.cgroup.ToString() == "typejob" && w.ccode == vm.Lect.typejob).FirstOrDefault()?.cname; vm.Lect.typejobname = vm.ComCodes.Where(w => w.cgroup.ToString() == "typejob" && w.ccode == vm.Lect.typejob).FirstOrDefault()?.cname;
if(!string.IsNullOrEmpty(vm.Lect.studyplace)) vm.Lect.studyplacename = vm.ComCodes.Where(w => w.cgroup.ToString() == "studyplace" && w.ccode == int.Parse(vm.Lect.studyplace)).FirstOrDefault()?.cname; if (!string.IsNullOrEmpty(vm.Lect.studyplace)) vm.Lect.studyplacename = vm.ComCodes.Where(w => w.cgroup.ToString() == "studyplace" && w.ccode == int.Parse(vm.Lect.studyplace)).FirstOrDefault()?.cname;
ViewBag.TestCode = TestCode; ViewBag.TestCode = TestCode;
vm.CM = Dao.Get<CM>("cm.cm", new System.Collections.Hashtable() { { "cmno", vm.Lect.cmno } }).First(); vm.CM = Dao.Get<CM>("cm.cm", new System.Collections.Hashtable() { { "cmno", vm.Lect.cmno } }).First();
} }
@ -1121,11 +1121,11 @@ namespace NP.BO.Controllers
vm.PayRfds = Dao.Get<PayRfd>("cr.payrfditems2", vm.rfdno); vm.PayRfds = Dao.Get<PayRfd>("cr.payrfditems2", vm.rfdno);
vm.FileList = new List<File>() { }; vm.FileList = new List<File>() { };
vm.FileList2 = new List<File>() { }; vm.FileList2 = new List<File>() { };
if (vm.PayRfds != null && (vm.PayRfds.First().fgnor??0) > 0) if (vm.PayRfds != null && (vm.PayRfds.First().fgnor ?? 0) > 0)
{ {
vm.FileList = GetFiles(vm.PayRfds.First().fgnor.Value); vm.FileList = GetFiles(vm.PayRfds.First().fgnor.Value);
} }
if (vm.PayRfds != null && (vm.PayRfds.First().fgnob??0) > 0) if (vm.PayRfds != null && (vm.PayRfds.First().fgnob ?? 0) > 0)
{ {
vm.FileList2 = GetFiles(vm.PayRfds.First().fgnob.Value); vm.FileList2 = GetFiles(vm.PayRfds.First().fgnob.Value);
} }
@ -1138,18 +1138,27 @@ namespace NP.BO.Controllers
vm.PayRfds = Dao.Get<PayRfd>("cr.payrfditems2", vm.rfdno); vm.PayRfds = Dao.Get<PayRfd>("cr.payrfditems2", vm.rfdno);
return View(vm); return View(vm);
} }
/// <summary>
/// 교육운영 > 계산서요청
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult tax(VMCRoom vm) public ActionResult tax(VMCRoom vm)
{ {
var ht = SetHash(vm, false); var ht = SetHash(vm, false);
if(vm.isexceldown != 1)
if (vm.isexceldown != 1)
{ {
vm.stringval11 = null; vm.stringval11 = null;
} }
if (!IsPost()) if (!IsPost())
{ {
vm.stringval6 = DateTime.Now.ToString("yyyy-MM-01"); vm.stringval6 = DateTime.Now.ToString("yyyy-MM-01");
vm.stringval7 = Convert.ToDateTime(vm.stringval6).AddMonths(1).AddSeconds(-1).ToString("yyyy-MM-dd"); vm.stringval7 = Convert.ToDateTime(vm.stringval6).AddMonths(1).AddSeconds(-1).ToString("yyyy-MM-dd");
} }
ht.Add("staxdatereq", vm.stringval6); ht.Add("staxdatereq", vm.stringval6);
ht.Add("etaxdatereq", string.IsNullOrEmpty(vm.stringval7) ? null : (vm.stringval7 + " 23:59:59")); ht.Add("etaxdatereq", string.IsNullOrEmpty(vm.stringval7) ? null : (vm.stringval7 + " 23:59:59"));
ht.Add("cdts", vm.stringval); ht.Add("cdts", vm.stringval);
@ -1161,11 +1170,11 @@ namespace NP.BO.Controllers
ht.Add("csdate", vm.stringval13); ht.Add("csdate", vm.stringval13);
ht.Add("cedate", string.IsNullOrEmpty(vm.stringval14) ? null : (vm.stringval14 + " 23:59:59")); ht.Add("cedate", string.IsNullOrEmpty(vm.stringval14) ? null : (vm.stringval14 + " 23:59:59"));
ht.Add("isreceipt", vm.stringval15); ht.Add("isreceipt", vm.stringval15);
ht.Add("taxnos", vm.stringval11); ht.Add("taxnos", vm.stringval11);
if (!string.IsNullOrEmpty(vm.stringval3)) if (!string.IsNullOrEmpty(vm.stringval3))
{ {
if(vm.stringval3 == "2") if (vm.stringval3 == "2")
{ {
ht.Add("iscancel", 1); ht.Add("iscancel", 1);
} }
@ -1175,6 +1184,7 @@ namespace NP.BO.Controllers
ht.Add("tstatus" + (vm.stringval3), 1); ht.Add("tstatus" + (vm.stringval3), 1);
} }
} }
if (!string.IsNullOrEmpty(vm.stringval5)) if (!string.IsNullOrEmpty(vm.stringval5))
{ {
if (!string.IsNullOrEmpty(vm.stringval4)) if (!string.IsNullOrEmpty(vm.stringval4))
@ -1186,7 +1196,9 @@ namespace NP.BO.Controllers
ht.Add("nimp", vm.stringval5); ht.Add("nimp", vm.stringval5);
} }
} }
vm.PayTaxes = Dao.Get<PayTax>("cr.paytaxes", ht); vm.PayTaxes = Dao.Get<PayTax>("cr.paytaxes", ht);
if (vm.isexceldown == 1) if (vm.isexceldown == 1)
{ {
if (vm.excellog != null) if (vm.excellog != null)
@ -1198,25 +1210,35 @@ namespace NP.BO.Controllers
return ExportExcel( return ExportExcel(
new String[] {"결제번호","신청일","입금일","결제상태","이름","아이디","전화번호","강좌명","교육종료일","회사명","대표명","주소","사업자번호","업태","종목","담당자명","담당자연락처" new String[] {"결제번호","신청일","입금일","결제상태","이름","아이디","전화번호","강좌명","교육종료일","회사명","대표명","주소","사업자번호","업태","종목","담당자명","담당자연락처"
,"계산서수신이메일","청구영수","발행요청금액","발행요청일","실제날짜","발행한날","발행상태"}, ,"계산서수신이메일","청구영수","발행요청금액","발행요청일","실제날짜","발행한날","발행상태"},
new String[] {"payno","cdtymd", "payoktimeymd", "pstatusname2","username", "userid", "mobile", "itemname","eendymd", "asname", "ceoname","asaddr", new String[] {"payno","cdtymd", "payoktimeymd", "pstatusname2","username", "userid", "mobile", "itemname","eendymd", "asname", "ceoname","asaddr",
"brno", "btype","bkind", "manname", "telno", "email", "isreceiptname", "taxamt", "taxdatereqymd","taxdateymd","realtaxdateymd","status"}, "brno", "btype","bkind", "manname", "telno", "email", "isreceiptname", "taxamt", "taxdatereqymd","taxdateymd","realtaxdateymd","status"},
vm.PayTaxes, vm.PayTaxes,
"계산서요청"+DateTime.Now.ToString("yy.MM.dd"), null, null, vm.excellog); "계산서요청" + DateTime.Now.ToString("yy.MM.dd"),
null,
null,
vm.excellog);
} }
vm.pagetotalcount = GetCount(vm.PayTaxes.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.PayTaxes.FirstOrDefault());
return View(vm); return View(vm);
} }
/// <summary>
/// 교육운영 > 계산서요청 (상세)
/// </summary>
/// <param name="vm"></param>
/// <returns></returns>
public ActionResult taxdetail(VMCRoom vm) public ActionResult taxdetail(VMCRoom vm)
{ {
if (vm.longval < 1 && vm.intval < 0 ) if (vm.longval < 1 && vm.intval < 0)
{ {
return Redirect("/croom/tax"); return Redirect("/croom/tax");
} }
if (vm.intval > 0) if (vm.intval > 0)
vm.PayTaxes = Dao.Get<PayTax>("cr.paytaxes", new System.Collections.Hashtable() { { "payno", vm.intval } }); vm.PayTaxes = Dao.Get<PayTax>("cr.paytaxes", new System.Collections.Hashtable() { { "payno", vm.intval } });
else else
vm.PayTaxes = Dao.Get<PayTax>("cr.paytaxes", new System.Collections.Hashtable() { { "taxno", vm.longval }}); vm.PayTaxes = Dao.Get<PayTax>("cr.paytaxes", new System.Collections.Hashtable() { { "taxno", vm.longval } });
vm.FileList = new List<File>() { }; vm.FileList = new List<File>() { };
if (vm.PayTaxes.First().fgno != null) if (vm.PayTaxes.First().fgno != null)
{ {
@ -1229,7 +1251,7 @@ namespace NP.BO.Controllers
vm.PayTaxItem = Dao.Get<PayItem>("cr.paytaxitem2", new System.Collections.Hashtable() { { "taxno", vm.longval } }); vm.PayTaxItem = Dao.Get<PayItem>("cr.paytaxitem2", new System.Collections.Hashtable() { { "taxno", vm.longval } });
#region Popbill #region Popbill
var payTax = vm.PayTaxes.First(); var payTax = vm.PayTaxes.First();
if (payTax != null) if (payTax != null)
{ {
var result = PopbillService.GetTaxinvoice(payTax); var result = PopbillService.GetTaxinvoice(payTax);
@ -1393,7 +1415,7 @@ namespace NP.BO.Controllers
vm.typejobs = Dao.Get<textvalue>("cr.documnetspasts.typejob", ht).ToList(); vm.typejobs = Dao.Get<textvalue>("cr.documnetspasts.typejob", ht).ToList();
vm.kinds = Dao.Get<textvalue>("cr.documnetspasts.kind", ht).ToList(); vm.kinds = Dao.Get<textvalue>("cr.documnetspasts.kind", ht).ToList();
List<textvalue> words = new List<textvalue>(); List<textvalue> words = new List<textvalue>();
words.Add(new textvalue { text = "이름", value = "이름"}); words.Add(new textvalue { text = "이름", value = "이름" });
words.Add(new textvalue { text = "주민등록번호", value = "주민등록번호" }); words.Add(new textvalue { text = "주민등록번호", value = "주민등록번호" });
words.Add(new textvalue { text = "수료번호", value = "수료번호" }); words.Add(new textvalue { text = "수료번호", value = "수료번호" });
words.Add(new textvalue { text = "업체명", value = "업체명" }); words.Add(new textvalue { text = "업체명", value = "업체명" });
@ -1409,9 +1431,9 @@ namespace NP.BO.Controllers
ht.Add("typeedu", vm.stringval6); ht.Add("typeedu", vm.stringval6);
ht.Add("typegrade", vm.stringval7); ht.Add("typegrade", vm.stringval7);
ht.Add("typejob", vm.stringval8); ht.Add("typejob", vm.stringval8);
vm.stringval9 = vm.stringval9 == null ? vm.stringval == null ? "2019-01-01 00:00:00" : vm.stringval + "-01-01 00:00:00" : vm.stringval9; vm.stringval9 = vm.stringval9 == null ? vm.stringval == null ? "2019-01-01 00:00:00" : vm.stringval + "-01-01 00:00:00" : vm.stringval9;
vm.stringval10 = vm.stringval10 == null ? vm.stringval == null ? "2020-12-31 23:59:59" : vm.stringval + "-12-31 23:59:59" : vm.stringval10; vm.stringval10 = vm.stringval10 == null ? vm.stringval == null ? "2020-12-31 23:59:59" : vm.stringval + "-12-31 23:59:59" : vm.stringval10;
ht.Add("ssdate", vm.stringval9); ht.Add("ssdate", vm.stringval9);
ht.Add("sedate", vm.stringval10); ht.Add("sedate", vm.stringval10);
switch (vm.stringval11) switch (vm.stringval11)
{ {
@ -1443,7 +1465,7 @@ namespace NP.BO.Controllers
"ceoname","slevel","uduty","mname","mphone","sprice","rprice","rbank","rbankno","rbankuser","taxemail", "ceoname","slevel","uduty","mname","mphone","sprice","rprice","rbank","rbankno","rbankuser","taxemail",
"assign","userid","userid","userid","sctime","syear"}, "assign","userid","userid","userid","sctime","syear"},
vm.DocumentList, vm.DocumentList,
"증빙서류출력(과거)",null,",0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38",vm.excellog); "증빙서류출력(과거)", null, ",0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38", vm.excellog);
} }
return View(vm); return View(vm);
} }
@ -1474,12 +1496,12 @@ namespace NP.BO.Controllers
vm.pagetotalcount = GetCount(vm.Completions.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.Completions.FirstOrDefault());
foreach (var completion in vm.Completions) foreach (var completion in vm.Completions)
{ {
completion.typeeduName = vm.ComCodes.Where(w=> w.ccode == completion.typeedu).FirstOrDefault()?.cname; completion.typeeduName = vm.ComCodes.Where(w => w.ccode == completion.typeedu).FirstOrDefault()?.cname;
completion.typegradeName = vm.ComCodes.Where(w => w.ccode == completion.typegrade).FirstOrDefault()?.cname; completion.typegradeName = vm.ComCodes.Where(w => w.ccode == completion.typegrade).FirstOrDefault()?.cname;
completion.typejobName = vm.ComCodes.Where(w => w.ccode == completion.typejob).FirstOrDefault()?.cname; completion.typejobName = vm.ComCodes.Where(w => w.ccode == completion.typejob).FirstOrDefault()?.cname;
completion.typemanName = vm.ComCodes.Where(w => w.ccode == completion.typeman).FirstOrDefault()?.cname; completion.typemanName = vm.ComCodes.Where(w => w.ccode == completion.typeman).FirstOrDefault()?.cname;
completion.studyplaceName = vm.ComCodes.Where(w => w.ccode == completion.studyplace).FirstOrDefault()?.cname; completion.studyplaceName = vm.ComCodes.Where(w => w.ccode == completion.studyplace).FirstOrDefault()?.cname;
if(completion.cshape == 2) if (completion.cshape == 2)
{ {
completion.sdate = completion.payoktime; completion.sdate = completion.payoktime;
completion.edate = completion.estart; completion.edate = completion.estart;
@ -1510,7 +1532,8 @@ namespace NP.BO.Controllers
if (vm.Completions.Any()) if (vm.Completions.Any())
{ {
vm.Completions = vm.Completions.Select(x => { vm.Completions = vm.Completions.Select(x =>
{
x.completeno = (x.completeno != null) ? x.completeno.Replace("제", "").Replace("호", "") : ""; x.completeno = (x.completeno != null) ? x.completeno.Replace("제", "").Replace("호", "") : "";
return x; return x;
}).ToList(); }).ToList();
@ -1526,7 +1549,7 @@ namespace NP.BO.Controllers
"ceoname","slevelName","uduty","mname","mphone","payamt","rbankamt","rbank","rbankaccnum","rbankuser","taxemail", "ceoname","slevelName","uduty","mname","mphone","payamt","rbankamt","rbank","rbankaccnum","rbankuser","taxemail",
"association","pcgname", "cgname", "studyplaceName","studytime","tyear"}, "association","pcgname", "cgname", "studyplaceName","studytime","tyear"},
vm.Completions, vm.Completions,
"수료관리", null, ",0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38",vm.excellog); "수료관리", null, ",0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38", vm.excellog);
} }
return View(vm); return View(vm);
} }

View File

@ -1,4 +1,5 @@
@model NP.Model.VMHome @model NP.Model.VMHome
<!-- 잔여업무 요약 -->
<section class="panel panel-default"> <section class="panel panel-default">
<header class="panel-heading"><strong><i class="fa fa-bars"></i> 잔여 업무 요약<span class=""></span></strong></header> <header class="panel-heading"><strong><i class="fa fa-bars"></i> 잔여 업무 요약<span class=""></span></strong></header>
<div class="table-responsive" id="excel1"> <div class="table-responsive" id="excel1">
@ -15,17 +16,19 @@
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="link text-center @(Model.Data.intval > 0 ? "emphasis":"")"><a href="/cc/memos">@Model.Data.intval.ToString("#,0") 건</a></td> <td class="link text-center @(Model.Data.intval > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(1);">@Model.Data.intval.ToString("#,0") 건</a></td>
<td class="link text-center @(Model.Data.intval2 > 0 ? "emphasis":"")"><a href="/cc/homes">@Model.Data.intval2.ToString("#,0") 건</a></td> <td class="link text-center @(Model.Data.intval2 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(2);">@Model.Data.intval2.ToString("#,0") 건</a></td>
<td class="link text-center @(Model.Data.intval3 > 0 ? "emphasis":"")"><a href="/cc/rooms">@Model.Data.intval3.ToString("#,0") 건</a></td> <td class="link text-center @(Model.Data.intval3 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(3);">@Model.Data.intval3.ToString("#,0") 건</a></td>
<td class="link text-center @(Model.Data.intval4 > 0 ? "emphasis":"")"><a href="/croom/pay">@Model.Data.intval4.ToString("#,0") 건</a></td> <td class="link text-center @(Model.Data.intval4 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(4);">@Model.Data.intval4.ToString("#,0") 건</a></td>
@*<td class="link text-center @(Model.Data.intval5 > 0 ? "emphasis":"")"><a href="/croom/deliveries">@Model.Data.intval5.ToString("#,0") 건</a></td>*@ @*<td class="link text-center @(Model.Data.intval5 > 0 ? "emphasis":"")"><a href="/croom/deliveries">@Model.Data.intval5.ToString("#,0") 건</a></td>*@
<td class="link text-center @(Model.Data.intval6 > 0 ? "emphasis":"")"><a href="/croom/tax">@Model.Data.intval6.ToString("#,0") 건</a></td> <td class="link text-center @(Model.Data.intval6 > 0 ? "emphasis":"")"><a href="javascript:taskSummaryPendingLink(5);">@Model.Data.intval6.ToString("#,0") 건</a></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</section> </section>
<!-- // 잔여업무 요약 -->
<!-- 운영중인 강의 -->
<section class="panel panel-default"> <section class="panel panel-default">
<header class="panel-heading"><strong><i class="fa fa-bars"></i> 운영중인 강의<span class=""></span></strong></header> <header class="panel-heading"><strong><i class="fa fa-bars"></i> 운영중인 강의<span class=""></span></strong></header>
<div style="padding: 8px 10px;">@Html.Partial("./Partial/Text", Model.stringval, Helpers.DicText(new NP.Model.TextDic() { Name = "stringval", Value = Model.stringval, PH = "강좌명을 입력하시고 Enter키를 입력하세요.", CssClass = "ff" }))</div> <div style="padding: 8px 10px;">@Html.Partial("./Partial/Text", Model.stringval, Helpers.DicText(new NP.Model.TextDic() { Name = "stringval", Value = Model.stringval, PH = "강좌명을 입력하시고 Enter키를 입력하세요.", CssClass = "ff" }))</div>
@ -44,29 +47,34 @@
</tr> </tr>
</thead> </thead>
<tbody id="tbody1"> <tbody id="tbody1">
@foreach (var d in Model.CMs) @foreach (var d in Model.CMs)
{ {
<tr> <tr>
<td>@d.tmname</td> <td>@d.tmname</td>
<td>@d.cgname</td> <td>@d.cgname</td>
<td>@d.cshapename</td> <td>@d.cshapename</td>
<td class="text-left">@d.cnameclassno</td> <td class="text-left">@d.cnameclassno</td>
<td>@d.sssename</td> <td>@d.sssename</td>
<td><a href="#" onclick="golink(0, @d.cmno)" class="btn btn-xxs btn-select">강좌관리</a></td> <td><a href="javascript:;" onclick="golink(0, @d.cmno)" class="btn btn-xxs btn-select">강좌관리</a></td>
<td><a href="#" onclick="golink(1, @d.cmno)" class="btn btn-xxs btn-info">신청관리</a></td> <td><a href="javascript:;" onclick="golink(1, @d.cmno)" class="btn btn-xxs btn-info">신청관리</a></td>
<td><a href="#" onclick="golink(2, @d.cmno)" class="btn btn-xxs btn-primary">성적관리</a></td> <td><a href="javascript:;" onclick="golink(2, @d.cmno)" class="btn btn-xxs btn-primary">성적관리</a></td>
</tr> </tr>
} }
</tbody> </tbody>
</table> </table>
</div> </div>
</section> </section>
<!-- // 운영중인 강의 -->
<form id="mform" method="post"> <form id="mform" method="post">
<input type="hidden" name="intval" id="intval" /> <input type="hidden" name="intval" id="intval" />
</form> </form>
@section styles{ @section styles{
<style type="text/css"> <style type="text/css">
.link.emphasis a{font-weight: bold; color: red !important;font-size: 13px !important;} .link.emphasis a {
font-weight: bold;
color: red !important;
font-size: 13px !important;
}
</style> </style>
} }
@section scriptsHeader{ @section scriptsHeader{
@ -81,11 +89,13 @@
$("#mainlayerframe").css("height", "520px"); $("#mainlayerframe").css("height", "520px");
} }
}); });
$("#stringval").on('keydown', function(e) {
$("#stringval").on('keydown', function (e) {
if (e.keyCode == 13) { if (e.keyCode == 13) {
capp("/acommon/cmget", {ismaster:0, cname: val("stringval"), iscurrent:1,orderby : "a.setime desc, t.tyear desc,t.tseq desc,a.cname,a.classno"}, "cbget"); capp("/acommon/cmget", { ismaster: 0, cname: val("stringval"), iscurrent: 1, orderby: "a.setime desc, t.tyear desc,t.tseq desc,a.cname,a.classno" }, "cbget");
} }
}); });
function cbget() { function cbget() {
$("#tbody1").find("tr").remove(); $("#tbody1").find("tr").remove();
if (capResult.obj.length > 0) { if (capResult.obj.length > 0) {
@ -99,6 +109,7 @@
msg("결과가 없습니다."); msg("결과가 없습니다.");
} }
} }
function golink(idx, no) { function golink(idx, no) {
if (idx == 0) { if (idx == 0) {
setv("intval", no); setv("intval", no);
@ -114,5 +125,39 @@
submit(); submit();
} }
} }
@*
/* 잔여업무 요약 클릭 시 링크
* @param {string} tabNo - 탭 번호 (1: 미열람쪽지, 2: 홈페이지Q&A미답변, 3: 강의Q&A미답변, 4: 환불요청, 5: 계산서미확인)
* */
*@
function taskSummaryPendingLink(tabNo) {
switch (tabNo) {
case 1:
window.location.href = "/cc/memos";
break;
case 2:
var p = {};
p.stringval6 = 'Y';
postSubmit('/cc/homes', p);
break;
case 3:
var p = {};
p.stringval6 = 'Y';
postSubmit('/cc/rooms', p);
break;
case 4:
window.location.href = "/croom/pay";
break;
case 5:
var p = {};
p.stringval6 = '';
p.stringval7 = '';
p.stringval12 = '0';
postSubmit('/croom/tax', p);
break;
default: break;
}
}
</script> </script>
} }

View File

@ -18,7 +18,7 @@
@RenderSection("stylecdn", required: false) @RenderSection("stylecdn", required: false)
@Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/scripts") @Scripts.Render("~/bundles/scripts")
<script src="/js/site.js?v=250402"></script> <script src="/js/site.js?v=250410"></script>
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="/js/ie/html5shiv.js"></script> <script src="/js/ie/html5shiv.js"></script>
<script src="/js/ie/respond.min.js"></script> <script src="/js/ie/respond.min.js"></script>

View File

@ -1679,6 +1679,92 @@ function cbeditorupload() {
$(_uploadeditorimageitem).summernote('editor.insertImage', _uploadeditorimagertn.obj.uri); $(_uploadeditorimageitem).summernote('editor.insertImage', _uploadeditorimagertn.obj.uri);
} }
} }
/* Post Submit
* parameter :
* url : action URL
* parameters : JSON Object
* target : 대상페이지 형태 (생략가능, '_blank', '_self')
* Exec :
* var p = {};
* p.userid = 'kim09';
* p.hakbunID = 'S000000001';
*
* postSubmit('/home/index', p);
* */
function postSubmit(url, parameters, target) {
if (typeof (parameters) === 'string') {
parameters = queryToJSON(parameters);
}
else if (parameters === undefined || parameters === null) {
parameters = {};
}
// _hiddenPostForm 이 존재하면 제거
var existingForm = document.getElementById('__hiddenPostForm');
if (existingForm) {
existingForm.remove();
}
// 새로운 form 요소 생성
var form = document.createElement('form');
form.id = '__hiddenPostForm';
form.action = url;
form.method = 'post';
form.target = (target === null || target === undefined) ? '_self' : target;
// parameters 처리
if (parameters !== null) {
for (var key in parameters) {
if (parameters.hasOwnProperty(key)) {
var input = document.createElement('input');
input.type = 'hidden';
input.value = parameters[key];
input.name = key;
input.id = key;
form.appendChild(input);
}
}
}
// form을 body에 추가
document.body.appendChild(form);
// form 제출
form.submit();
}
/* GetQuery JSON
* parameter :
* query : URL의 쿼리스트링 (studentcode=S123456&id=kim01&grade=4)
* Exec :
* queryToJSON('studentcode=S123456&id=kim01&grade=4')
* Return :
* {studentcode: "S123456", id: "kim01", grade: "4"}
* */
function queryToJSON(query) {
// URL에서 '?' 제거
query = query.replace('?', '');
// '&'로 분리하여 키-값 쌍 배열 생성
var keyValueParts = query.split('&');
var jsonResult = {};
// 각 키-값 쌍에 대해 반복 처리
for (var i = 0; i < keyValueParts.length; i++) {
// '='로 나누어 키와 값을 분리
var keyValue = keyValueParts[i].split('=');
var key = keyValue[0];
var value = keyValue.length > 1 ? decodeURIComponent(keyValue[1]) : ''; // 값이 없으면 빈 문자열로 처리
// 결과 객체에 키-값 추가
jsonResult[key] = value;
}
return jsonResult;
}
var focusoutobj; var focusoutobj;
$(document).ready(function () { $(document).ready(function () {
//$("").on("click", hideFindCode); //$("").on("click", hideFindCode);

View File

@ -161,6 +161,7 @@
<Compile Include="Filter\AuthFilter.cs" /> <Compile Include="Filter\AuthFilter.cs" />
<Compile Include="Lib\ENUM.cs" /> <Compile Include="Lib\ENUM.cs" />
<Compile Include="Lib\Excel2Entity.cs" /> <Compile Include="Lib\Excel2Entity.cs" />
<Compile Include="Lib\IPUtility.cs" />
<Compile Include="Lib\KISA256.cs" /> <Compile Include="Lib\KISA256.cs" />
<Compile Include="Lib\Logger.cs" /> <Compile Include="Lib\Logger.cs" />
<Compile Include="Lib\Logging.cs" /> <Compile Include="Lib\Logging.cs" />

View File

@ -16,6 +16,7 @@ using OfficeOpenXml;
using System.Collections; using System.Collections;
using System.Net.Mail; using System.Net.Mail;
using System.Net; using System.Net;
using System.Text.RegularExpressions;
namespace NP.Base namespace NP.Base
{ {
@ -106,6 +107,7 @@ namespace NP.Base
{ {
MENUS = null; MENUS = null;
} }
public string GetUserIP() public string GetUserIP()
{ {
string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
@ -123,6 +125,8 @@ namespace NP.Base
} }
return ipAddress; return ipAddress;
} }
string EncKey = "YNP.net"; string EncKey = "YNP.net";
/// <summary> /// <summary>
/// AES to Base64 암호화 /// AES to Base64 암호화

396
Base/Lib/IPUtility.cs Normal file
View File

@ -0,0 +1,396 @@
using System;
using System.Net;
using System.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Web;
using System.Net.Http;
using System.Threading.Tasks;
namespace NP.Base.Lib
{
/// <summary>
/// IP 주소 획득 유틸리티 클래스
/// </summary>
public static class IPUtility
{
/// <summary>
/// 클라이언트의 실제 IP 주소를 가져옵니다.
/// 컨트롤러나 Razor 뷰 어디서든 호출 가능합니다.
/// </summary>
/// <returns>클라이언트 IP 주소</returns>
public static string GetUserIP()
{
// 현재 HttpContext 가져오기 (컨트롤러나 Razor 뷰 모두에서 동작)
HttpContextBase httpContext = GetCurrentContext();
if (httpContext == null)
{
return "0.0.0.0"; // HttpContext를 얻을 수 없는 경우
}
return GetUserIPFromContext(httpContext);
}
/// <summary>
/// 주어진 HttpContext에서 클라이언트 IP를 추출합니다.
/// </summary>
/// <param name="httpContext">HttpContext 객체</param>
/// <returns>클라이언트 IP 주소</returns>
public static string GetUserIPFromContext(HttpContextBase httpContext)
{
if (httpContext == null)
return "0.0.0.0";
// IP를 수집할 리스트
List<string> potentialIPs = new List<string>();
// 1. 모든 서버 변수 확인
string[] headerKeys = new[]
{
"HTTP_X_FORWARDED_FOR",
"X-Forwarded-For",
"HTTP_X_REAL_IP",
"X-Real-IP",
"HTTP_CLIENT_IP",
"HTTP_X_FORWARDED",
"HTTP_X_CLUSTER_CLIENT_IP",
"HTTP_FORWARDED_FOR",
"HTTP_FORWARDED",
"HTTP_VIA",
"Proxy-Client-IP",
"WL-Proxy-Client-IP",
"CF-Connecting-IP", // Cloudflare
"True-Client-IP", // Akamai, Cloudflare
"X-Client-IP",
"REMOTE_ADDR"
};
try
{
// 서버 변수에서 IP 확인
foreach (string key in headerKeys)
{
try
{
string headerValue = httpContext.Request.ServerVariables[key];
if (!string.IsNullOrEmpty(headerValue))
{
// 쉼표로 구분된 여러 IP 처리
string[] addresses = headerValue.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string address in addresses)
{
string trimmedIP = address.Trim();
if (!string.IsNullOrEmpty(trimmedIP))
{
potentialIPs.Add(trimmedIP);
}
}
}
}
catch
{
// 특정 서버 변수에 접근할 수 없는 경우 계속 진행
continue;
}
}
// 2. Headers 컬렉션에서 확인
foreach (string key in headerKeys)
{
try
{
var headerValue = httpContext.Request.Headers[key];
if (!string.IsNullOrEmpty(headerValue))
{
string[] addresses = headerValue.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string address in addresses)
{
string trimmedIP = address.Trim();
if (!string.IsNullOrEmpty(trimmedIP))
{
potentialIPs.Add(trimmedIP);
}
}
}
}
catch
{
// 특정 헤더에 접근할 수 없는 경우 계속 진행
continue;
}
}
// 3. UserHostAddress 확인
try
{
string userHostAddress = httpContext.Request.UserHostAddress;
if (!string.IsNullOrEmpty(userHostAddress))
{
potentialIPs.Add(userHostAddress);
}
}
catch
{
// UserHostAddress에 접근할 수 없는 경우 무시
}
}
catch (Exception)
{
// 전체 처리 중 예외 발생 시 기본값 반환
return "0.0.0.0";
}
// 수집된 IP 검증 및 필터링
foreach (string ip in potentialIPs)
{
// 유효한 IP 확인
if (IsValidClientIP(ip))
{
return ip;
}
}
// 기본 IP (아무것도 찾지 못한 경우)
return "0.0.0.0";
}
/// <summary>
/// 현재 HttpContext를 가져옵니다.
/// 컨트롤러와 Razor 뷰 모두에서 동작합니다.
/// </summary>
/// <returns>현재 HttpContext</returns>
private static HttpContextBase GetCurrentContext()
{
// 컨트롤러 또는 Razor 뷰에서 접근 가능한 현재 HttpContext 가져오기
if (HttpContext.Current != null)
{
return new HttpContextWrapper(HttpContext.Current);
}
return null;
}
/// <summary>
/// IP 주소가 유효한지 확인합니다.
/// </summary>
/// <param name="ip">확인할 IP 주소</param>
/// <returns>유효한 경우 true, 그렇지 않으면 false</returns>
private static bool IsValidClientIP(string ip)
{
if (string.IsNullOrWhiteSpace(ip))
return false;
// 알려진 특수 IP 처리
if (ip.ToLower() == "unknown")
return false;
// 로컬 IP 허용 여부 (필요에 따라 수정)
if (ip == "::1" || ip == "127.0.0.1")
return true;
// 프라이빗 IP 필터링 여부 (필요에 따라 수정)
if (IsPrivateIP(ip))
return true; // 프라이빗 IP 허용
// 표준 IP 형식 검증
IPAddress address;
if (!IPAddress.TryParse(ip, out address))
return false;
// IP 기본 검증 - 비어있는 주소 거부
byte[] bytes = address.GetAddressBytes();
if (bytes.All(b => b == 0))
return false;
return true;
}
/// <summary>
/// 주어진 IP가 프라이빗 IP인지 확인합니다.
/// </summary>
/// <param name="ipAddress">확인할 IP 주소</param>
/// <returns>프라이빗 IP인 경우 true, 그렇지 않으면 false</returns>
private static bool IsPrivateIP(string ipAddress)
{
try
{
// IP 파싱
IPAddress address;
if (!IPAddress.TryParse(ipAddress, out address))
return false;
// IPv4 프라이빗 주소 범위 확인
if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
byte[] bytes = address.GetAddressBytes();
// 10.0.0.0/8
if (bytes[0] == 10)
return true;
// 172.16.0.0/12
if (bytes[0] == 172 && bytes[1] >= 16 && bytes[1] <= 31)
return true;
// 192.168.0.0/16
if (bytes[0] == 192 && bytes[1] == 168)
return true;
// 169.254.0.0/16 (링크-로컬)
if (bytes[0] == 169 && bytes[1] == 254)
return true;
}
// IPv6 프라이빗 주소 체크
else if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
{
// IPv6 로컬 주소 확인 (fc00::/7)
byte[] bytes = address.GetAddressBytes();
return (bytes[0] & 0xFE) == 0xFC;
}
return false;
}
catch
{
return false;
}
}
/// <summary>
/// 외부 API를 사용하여 공인 IP 주소를 가져옵니다.
/// </summary>
/// <returns>공인 IP 주소</returns>
public static string GetPublicIP()
{
try
{
// 여러 IP 확인 서비스 목록
string[] ipServices = new[]
{
"https://api.ipify.org",
"https://icanhazip.com",
"https://ipinfo.io/ip",
"https://checkip.amazonaws.com",
"https://wtfismyip.com/text"
};
foreach (string service in ipServices)
{
try
{
using (var client = new WebClient())
{
string ip = client.DownloadString(service).Trim();
// IP 형식 검증
if (IsValidIPFormat(ip))
{
return ip;
}
}
}
catch
{
// 한 서비스가 실패하면 다음 서비스 시도
continue;
}
}
return "IP 확인 실패";
}
catch (Exception ex)
{
return "오류: " + ex.Message;
}
}
/// <summary>
/// 비동기 방식으로 공인 IP 주소를 가져옵니다.
/// </summary>
/// <returns>공인 IP 주소</returns>
public static async Task<string> GetPublicIPAsync()
{
try
{
// 여러 IP 확인 서비스 목록
string[] ipServices = new[]
{
"https://api.ipify.org",
"https://icanhazip.com",
"https://ipinfo.io/ip",
"https://checkip.amazonaws.com",
"https://wtfismyip.com/text"
};
foreach (string service in ipServices)
{
try
{
using (var client = new HttpClient())
{
client.Timeout = TimeSpan.FromSeconds(3); // 3초 타임아웃
string ip = (await client.GetStringAsync(service)).Trim();
// IP 형식 검증
if (IsValidIPFormat(ip))
{
return ip;
}
}
}
catch
{
// 한 서비스가 실패하면 다음 서비스 시도
continue;
}
}
return "IP 확인 실패";
}
catch (Exception ex)
{
return "오류: " + ex.Message;
}
}
/// <summary>
/// 문자열이 유효한 IP 형식인지 확인합니다.
/// </summary>
private static bool IsValidIPFormat(string ip)
{
if (string.IsNullOrWhiteSpace(ip))
return false;
// IPv4 형식 확인 (간단한 정규식)
string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";
return Regex.IsMatch(ip, pattern);
}
/// <summary>
/// 클라이언트의 IP를 가져오되, 로컬 테스트 환경일 경우 공인 IP를 조회합니다.
/// </summary>
public static string GetClientIPWithFallback()
{
string ip = GetUserIP();
// 로컬 IP인 경우 공인 IP 조회 시도
if (ip == "127.0.0.1" || ip == "::1" || ip.StartsWith("192.168.") || ip.StartsWith("10.") || (ip.StartsWith("172.") && ip.Split('.').Length > 1 && int.Parse(ip.Split('.')[1]) >= 16 && int.Parse(ip.Split('.')[1]) <= 31))
{
string publicIP = GetPublicIP();
if (IsValidIPFormat(publicIP))
{
return publicIP;
}
}
return ip;
}
}
}

View File

@ -125,53 +125,94 @@
<update id="board.bmassign.save2" parameterClass="hashtable"> <update id="board.bmassign.save2" parameterClass="hashtable">
update boardmaster set <include refid="sql.up"></include>,isopen=0 where bmno in (select bmno from (select bmno from boardmaster where asno=#asno# and isdefault=3) a) update boardmaster set <include refid="sql.up"></include>,isopen=0 where bmno in (select bmno from (select bmno from boardmaster where asno=#asno# and isdefault=3) a)
</update> </update>
<select id="board.bs" parameterClass="hashtable" resultClass="board">
select a.rno,a.pagetotalcount,a.pcno <!-- 커뮤니케이션 > 홈페이지 게시판 리스트-->
,e.asname <select id="board.bs" parameterClass="hashtable" resultClass="board">
,c.bmno,c.bmname,c.isuseopening,c.isreply,c.bmtype SELECT a.rno, a.pagetotalcount, a.pcno
,f.opname , e.asname
,b.cno,b.bno,b.pbno,b.subject,b.istop,b.issecr,b.cdt,d.username cnoname,d.userid cnoid , c.bmno, c.bmname, c.isuseopening, c.isreply, c.bmtype
,b.rcount,b.rpcount,b.fgno,b.fgnothumb,case when #getcontents# is null then '' else b.contents end contents , f.opname
,d.usertype , b.cno, b.bno, b.pbno, b.subject, b.istop, b.issecr, b.cdt, d.username cnoname, d.userid cnoid
,g.fileurl , b.rcount, b.rpcount, b.fgno, b.fgnothumb, CASE WHEN #getcontents# IS NULL THEN '' ELSE b.contents END contents
from ( , d.usertype
select a.* , g.fileurl
from ( FROM (
select b.bno SELECT a.*
,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">b.istop desc,case when b.pbno is null then b.cdt else b2.cdt end desc,case when b.pbno is null then 0 else 1 end</isNull>) rno FROM (
,count(a.cno) over() pagetotalcount,b2.cno pcno SELECT b.bno
from boardmaster a , ROW_NUMBER() OVER(ORDER BY <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">b.istop DESC, CASE WHEN b.pbno IS NULL THEN b.cdt ELSE b2.cdt END DESC, CASE WHEN b.pbno IS NULL THEN 0 ELSE 1 END</isNull>) rno
inner join board b on b.bmno=a.bmno , COUNT(a.cno) OVER() pagetotalcount, b2.cno pcno
<isNotNull property="bno">and b.bno=#bno#</isNotNull> FROM boardmaster a
and b.isdel=0 INNER JOIN board b ON b.bmno = a.bmno
<isNotNull property="opno">and b.opno=#opno#</isNotNull> <isNotNull property="bno">AND b.bno = #bno#</isNotNull>
<isNotNull property="isopen">and b.isopen=#isopen#</isNotNull> AND b.isdel = 0
<isNotNull property="issecr">and b.issecr=#issecr#</isNotNull> <isNotNull property="opno">AND b.opno = #opno#</isNotNull>
<isNotNull property="opno">and b.opno=#opno#</isNotNull> <isNotNull property="isopen">AND b.isopen = #isopen#</isNotNull>
<isNotNull property="isbase" prepend="and">b.pbno is null</isNotNull> <isNotNull property="issecr">AND b.issecr = #issecr#</isNotNull>
<isNotNull property="cno" prepend="and">b.cno=#cno#</isNotNull> <isNotNull property="opno">AND b.opno = #opno#</isNotNull>
<isNotNull property="cmno" prepend="and">b.cmno=#cmno#</isNotNull> <isNotNull property="isbase" prepend="AND">b.pbno IS NULL</isNotNull>
<isNotNull property="bmposition" prepend="and">a.bmposition=#bmposition#</isNotNull> <isNotNull property="cno" prepend="AND">b.cno = #cno#</isNotNull>
left outer join board b2 on b.pbno is not null and b2.bno=b.pbno <isNotNull property="cmno" prepend="AND">b.cmno = #cmno#</isNotNull>
inner join users c on c.userno=b.cno <isNotNull property="bmposition" prepend="AND">a.bmposition = #bmposition#</isNotNull>
<dynamic prepend="where"> LEFT OUTER JOIN board b2 ON b.pbno IS NOT NULL AND b2.bno = b.pbno
<isNotNull property="bmno" prepend="and">a.bmno=#bmno#</isNotNull> INNER JOIN users c ON c.userno = b.cno
<isNotNull property="asno" prepend="and">a.asno=#asno#</isNotNull> <dynamic prepend="WHERE">
<isNotNull property="scc" prepend="and">(b.subject like concat('%',#scc#,'%') or b.contents like concat('%',#scc#,'%') or c.username=#scc#)</isNotNull> <isNotNull property="bmno" prepend="AND">a.bmno = #bmno#</isNotNull>
</dynamic> <isNotNull property="asno" prepend="AND">a.asno = #asno#</isNotNull>
) a <isNotNull property="scc" prepend="AND">(b.subject LIKE CONCAT('%',#scc#,'%') OR b.contents LIKE CONCAT('%',#scc#,'%') OR c.username = #scc#)</isNotNull>
</dynamic>
) a
<include refid="sql.pagedynamic"></include>
) a
INNER JOIN board b ON b.bno = a.bno
INNER JOIN boardmaster c ON c.bmno = b.bmno
INNER JOIN users d ON d.userno = b.cno
LEFT OUTER JOIN assign e ON e.asno = c.asno
LEFT OUTER JOIN boardmasteropening f ON f.opno = b.opno
LEFT OUTER JOIN fileinfo g ON g.fgno = b.fgnothumb AND g.isdel = 0
ORDER BY a.rno
</select>
<!-- 커뮤니케이션 > 홈페이지 게시판 리스트 중 미답변만 (메인 > 잔여 업무 요약에서 접근) -->
<select id="board.bsnoReplies" parameterClass="hashtable" resultClass="board">
SELECT a.rno, a.pagetotalcount, a.pcno
, e.asname
, c.bmno, c.bmname, c.isuseopening, c.isreply, c.bmtype
, f.opname
, b.cno, b.bno, b.pbno, b.subject, b.istop, b.issecr, b.cdt, d.username cnoname, d.userid cnoid
, b.rcount, b.rpcount, b.fgno, b.fgnothumb
, (CASE WHEN #getcontents# IS NULL THEN '' ELSE b.contents END) contents
, d.usertype
, g.fileurl
FROM (
SELECT a.*
FROM (
SELECT b.bno
, ROW_NUMBER() OVER(ORDER BY <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">b.istop DESC, CASE WHEN b.pbno IS NULL THEN b.cdt ELSE b2.cdt END DESC, CASE WHEN b.pbno IS NULL THEN 0 ELSE 1 END</isNull>) rno
, COUNT(a.cno) OVER() pagetotalcount, b2.cno pcno
FROM boardmaster a
INNER JOIN board b ON b.bmno = a.bmno AND b.isdel = 0
LEFT OUTER JOIN board b2 ON b.bno = b2.pbno AND b2.isdel = 0
INNER JOIN users c ON c.userno = b.cno
WHERE a.bmtype = 2
<isNotNull property="bmposition" prepend="AND">a.bmposition = #bmposition#</isNotNull>
AND a.isopen = 1
AND b.pbno IS NULL
AND b2.pbno IS NULL
AND a.disptype = 0
) a
<include refid="sql.pagedynamic"></include> <include refid="sql.pagedynamic"></include>
) a ) a
inner join board b on b.bno=a.bno INNER JOIN board b ON b.bno = a.bno
<!--left outer join board b2 on b2.pbno=b.bno and b2.isdel=0--> INNER JOIN boardmaster c ON c.bmno = b.bmno
inner join boardmaster c on c.bmno=b.bmno INNER JOIN users d ON d.userno = b.cno
inner join users d on d.userno=b.cno LEFT OUTER JOIN assign e ON e.asno = c.asno
left outer join assign e on e.asno=c.asno LEFT OUTER JOIN boardmasteropening f ON f.opno = b.opno
left outer join boardmasteropening f on f.opno=b.opno LEFT OUTER JOIN fileinfo g ON g.fgno = b.fgnothumb AND g.isdel = 0
left outer join fileinfo g on g.fgno=b.fgnothumb and g.isdel=0 ORDER BY a.rno
order by a.rno
</select> </select>
<select id="board.bs.bypbnos" parameterClass="string" resultClass="board">
<select id="board.bs.bypbnos" parameterClass="string" resultClass="board">
select f.opname,a.bno,a.pbno,a.subject,a.cdt,b.username cnoname,a.rpcount,a.issecr,a.cno select f.opname,a.bno,a.pbno,a.subject,a.cdt,b.username cnoname,a.rpcount,a.issecr,a.cno
,case when #getcontents# is null then '' else a.contents end contents ,case when #getcontents# is null then '' else a.contents end contents
,b.usertype ,b.usertype
@ -180,46 +221,94 @@
left outer join boardmasteropening f on f.opno=a.opno left outer join boardmasteropening f on f.opno=a.opno
where a.pbno in ($pbnos$) and a.isopen=1 and a.isdel=0 where a.pbno in ($pbnos$) and a.isopen=1 and a.isdel=0
</select> </select>
<select id="board.roombs" parameterClass="hashtable" resultClass="board">
select a.rno,a.pagetotalcount
,e.asname <!-- 커뮤니케이션 > 강의실게시판 리스트 -->
,c.bmno,c.bmname,c.isuseopening,c.isreply <select id="board.roombs" parameterClass="hashtable" resultClass="board">
,f.opname SELECT a.rno, a.pagetotalcount
<!--,b.bno,b.pbno,b.subject,b.istop,b.issecr,b.cdt,d.username cnoname,b.rcount,b.fgno,b.fgnothumb,b.cmno--> , e.asname
,b.bno,b.pbno,b.subject,b.istop,b.issecr,b.cdt,d.username cnoname,d.userid cnoid, b.rcount,b.fgno,b.fgnothumb,b.cmno , c.bmno, c.bmname, c.isuseopening, c.isreply
,g.cname,g.classno , f.opname
,h.tyear,h.tseq <!--,b.bno,b.pbno,b.subject,b.istop,b.issecr,b.cdt,d.username cnoname,b.rcount,b.fgno,b.fgnothumb,b.cmno-->
from ( , b.bno, b.pbno, b.subject, b.istop, b.issecr, b.cdt, d.username cnoname, d.userid cnoid, b.rcount, b.fgno, b.fgnothumb, b.cmno
select a.* , g.cname, g.classno
from ( , h.tyear, h.tseq
select b.bno FROM (
,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">b.istop desc,case when b.pbno is null then b.cdt else b2.cdt end desc,case when b.pbno is null then 0 else 1 end</isNull>) rno SELECT a.*
,count(a.cno) over() pagetotalcount FROM (
from boardmaster a SELECT b.bno
inner join board b on b.bmno=a.bmno and b.isdel=0 <isNotNull property="cmno">and b.cmno=#cmno#</isNotNull> , ROW_NUMBER() OVER(ORDER BY <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">b.istop DESC, CASE WHEN b.pbno IS NULL THEN b.cdt ELSE b2.cdt END DESC, CASE WHEN b.pbno IS NULL THEN 0 ELSE 1 END</isNull>) rno
left outer join board b2 on b.pbno is not null and b2.bno=b.pbno , COUNT(a.cno) OVER() pagetotalcount
inner join users c on c.userno=b.cno FROM boardmaster a
inner join cm d on d.cmno=b.cmno INNER JOIN board b ON b.bmno = a.bmno AND b.isdel = 0 <isNotNull property="cmno">AND b.cmno = #cmno#</isNotNull>
inner join term e on e.tmno=d.tmno <isNotNull property="tmno">and d.tmno=#tmno#</isNotNull> <isNotNull property="tyear">and e.tyear=#tyear#</isNotNull> LEFT OUTER JOIN board b2 ON b.pbno IS NOT NULL AND b2.bno = b.pbno
<isNotNull property="teacherno"> INNER JOIN users c ON c.userno = b.cno
inner join cmprof cp on cp.cmno=b.cmno and cp.userno=#teacherno# INNER JOIN cm d ON d.cmno = b.cmno
</isNotNull> INNER JOIN term e ON e.tmno = d.tmno <isNotNull property="tmno">AND d.tmno = #tmno#</isNotNull> <isNotNull property="tyear">AND e.tyear = #tyear#</isNotNull>
where a.bmposition=1 <isNotNull property="teacherno">
<isNotNull property="bmno" prepend="and">a.bmno=#bmno#</isNotNull> INNER JOIN cmprof cp ON cp.cmno = b.cmno AND cp.userno = #teacherno#
<isNotNull property="asno" prepend="and">a.asno=#asno#</isNotNull> </isNotNull>
<isNotNull property="scc" prepend="and">(b.subject like concat('%',#scc#,'%') or b.contents like concat('%',#scc#,'%') or c.username=#scc#)</isNotNull> WHERE a.bmposition = 1
) a <isNotNull property="bmno" prepend="AND">a.bmno = #bmno#</isNotNull>
<include refid="sql.pagedynamic"></include> <isNotNull property="asno" prepend="AND">a.asno = #asno#</isNotNull>
) a <isNotNull property="scc" prepend="AND">(b.subject LIKE CONCAT('%',#scc#,'%') OR b.contents LIKE CONCAT('%',#scc#,'%') OR c.username = #scc#)</isNotNull>
inner join board b on b.bno=a.bno ) a
inner join boardmaster c on c.bmno=b.bmno <include refid="sql.pagedynamic"></include>
inner join users d on d.userno=b.cno ) a
inner join cm g on g.cmno=b.cmno INNER JOIN board b ON b.bno = a.bno
inner join term h on h.tmno=g.tmno INNER JOIN boardmaster c ON c.bmno = b.bmno
left outer join assign e on e.asno=c.asno INNER JOIN users d ON d.userno = b.cno
left outer join boardmasteropening f on f.opno=b.opno INNER JOIN cm g ON g.cmno = b.cmno
order by a.rno INNER JOIN term h ON h.tmno = g.tmno
</select> LEFT OUTER JOIN assign e ON e.asno = c.asno
LEFT OUTER JOIN boardmasteropening f ON f.opno = b.opno
LEFT OUTER JOIN board pb ON b.bno = pb.pbno AND pb.isdel = 0
ORDER BY a.rno
</select>
<!-- 커뮤니케이션 > 강의실게시판 리스트 중 미답변만 (메인 > 잔여 업무 요약에서 접근) -->
<select id="board.roombsnoReplies" parameterClass="hashtable" resultClass="board">
SELECT a.rno, a.pagetotalcount
, e.asname
, c.bmno, c.bmname, c.isuseopening, c.isreply
, f.opname
, b.bno, b.pbno, b.subject, b.istop, b.issecr, b.cdt
, d.username cnoname, d.userid cnoid
, b.rcount, b.fgno, b.fgnothumb, b.cmno
, g.cname, g.classno
, h.tyear, h.tseq
FROM (
SELECT a.*
FROM (
SELECT b.bno
, ROW_NUMBER() OVER(ORDER BY <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">b.istop DESC, CASE WHEN b.pbno IS NULL THEN b.cdt ELSE b2.cdt END DESC, CASE WHEN b.pbno IS NULL THEN 0 ELSE 1 END</isNull>) rno
, COUNT(a.cno) OVER() pagetotalcount
FROM boardmaster a
INNER JOIN board b ON a.bmno = b.bmno AND b.isdel = 0
LEFT OUTER JOIN board b2 ON b.bno = b2.pbno AND b2.isdel = 0
INNER JOIN users c ON c.userno = b.cno
INNER JOIN cm d ON d.cmno = b.cmno
WHERE a.bmposition = 1
AND a.bmtype = 2
AND a.isopen = 1
AND b.pbno IS NULL
AND b2.pbno IS NULL
AND a.disptype = 0
) a
<include refid="sql.pagedynamic"></include>
) a
INNER JOIN board b ON b.bno = a.bno
INNER JOIN boardmaster c ON c.bmno = b.bmno
INNER JOIN users d ON d.userno = b.cno
INNER JOIN cm g ON g.cmno = b.cmno
INNER JOIN term h ON h.tmno = g.tmno
LEFT OUTER JOIN assign e ON e.asno = c.asno
LEFT OUTER JOIN boardmasteropening f ON f.opno = b.opno
LEFT OUTER JOIN board pb ON b.bno = pb.pbno AND pb.isdel = 0
ORDER BY a.rno
</select>
<select id="board.get" parameterClass="long" resultClass="board"> <select id="board.get" parameterClass="long" resultClass="board">
select e.asname select e.asname
,c.bmno,c.bmname,c.isuseopening,c.isreply,c.disptype,c.bmtype ,c.bmno,c.bmname,c.isuseopening,c.isreply,c.disptype,c.bmtype

View File

@ -1,49 +1,52 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NP.Model namespace NP.Model
{ {
public class VMCRoom : VMBase public class VMCRoom : VMBase
{ {
public Int64 cmino{ get; set; } #region Request
public long cmino { get; set; }
public int ctno { get; set; } public int ctno { get; set; }
public int cpno { get; set; } public int cpno { get; set; }
public Int64 lectno { get; set; } public long lectno { get; set; }
public int pseq { get; set; } public int pseq { get; set; }
public int ismobile { get; set; } public int ismobile { get; set; }
public int istaste { get; set; } public int istaste { get; set; }
public int status { get; set; } public int status { get; set; }
public int todayLectinningCount { get; set; }
public int daylectinninglimit { get; set; }
public int croomcmno { get; set; }
public int croomusertype { get; set; }
public string croomparam { get; set; }
public int croombmno { get; set; }
public int? opno { get; set; }
public string scc { get; set; }
public int estno { get; set; }
#endregion
#region Data
public CMInning CMInning { get; set; } public CMInning CMInning { get; set; }
public IList<LectInning> LectInnings { get; set; } public IList<LectInning> LectInnings { get; set; }
public LectInningPage lip { get; set; } public LectInningPage lip { get; set; }
public IList<CTPage> Pages { get; set; } public IList<CTPage> Pages { get; set; }
public CTPage Page { get; set; } public CTPage Page { get; set; }
public Int64 croomlectno { get; set; } public Int64 croomlectno { get; set; }
public int croomcmno { get; set; } public Int64 BNo { get; set; }
public int croomusertype { get; set; } public Int64? PBNo { get; set; }
public String croomparam { get; set; }
public IList<Data> Datas { get; set; } public IList<Data> Datas { get; set; }
public CMEV CMEV { get; set; } public CMEV CMEV { get; set; }
public Lect Lect { get; set; } public Lect Lect { get; set; }
public IList<CMPR> CMPRs { get; set; } public IList<CMPR> CMPRs { get; set; }
public CM CM { get; set; } public CM CM { get; set; }
public IList<CMRS> CMRSes { get; set; } public IList<CMRS> CMRSes { get; set; }
public int croombmno { get; set; }
public BoardMaster BM { get; set; } public BoardMaster BM { get; set; }
public IList<BoardMasterOpening> BMOs { get; set; } public IList<BoardMasterOpening> BMOs { get; set; }
public int? opno { get; set; }
public String scc { get; set; }
public IList<Board> Boards { get; set; } public IList<Board> Boards { get; set; }
public Board Board { get; set; } public Board Board { get; set; }
public IList<BoardCMT> BoardCMTs { get; set; } public IList<BoardCMT> BoardCMTs { get; set; }
public Int64 BNo { get; set; }
public Int64? PBNo { get; set; }
public int estno { get; set; }
public LectEX LectEX { get; set; } public LectEX LectEX { get; set; }
public IList<LectEXQ> UserExamDatas { get; set; } public IList<LectEXQ> UserExamDatas { get; set; }
public IList<QuestionItem> QuestionItems { get; set; } public IList<QuestionItem> QuestionItems { get; set; }
@ -60,9 +63,8 @@ namespace NP.Model
public IList<Lect> Lects { get; set; } public IList<Lect> Lects { get; set; }
public IList<Completion> Completions { get; set; } public IList<Completion> Completions { get; set; }
public Data ErrLi { get; set; } public Data ErrLi { get; set; }
public int todayLectinningCount { get; set; }
public int daylectinninglimit { get; set; }
public Excellog excellog { get; set; } public Excellog excellog { get; set; }
#endregion
} }
} }