2023-11-15 15:29 청소년 강사 자동 배정 수정
This commit is contained in:
parent
916f0a28c4
commit
8c4f7706be
@ -630,14 +630,19 @@ public class CommonWebController {
|
||||
int p=0;
|
||||
{
|
||||
for (int i=0;i<vEEduAplctVOList.size();i++) {
|
||||
//학교 지역, 희망일자가 필요
|
||||
|
||||
//chasiord, aplctord, hopedt & loginVO
|
||||
p = p + this.setTngrInstrAsgnm20231115(vEEduAplctVOList.get(i), loginVO);
|
||||
|
||||
/*
|
||||
//eduChasiOrd, 희망일자가 필요
|
||||
VEEduAplctVO tChasiInfo = vEEduAplctVOList.get(i);
|
||||
|
||||
String s_eduHopeDt = tChasiInfo.getEduHopeDt(); //교육희망일자
|
||||
String s_addr = tChasiInfo.getAddr(); //지역명
|
||||
//String s_addr = tChasiInfo.getAddr(); //지역명
|
||||
|
||||
System.out.println(s_eduHopeDt);
|
||||
System.out.println(s_addr);
|
||||
//System.out.println(s_addr);
|
||||
|
||||
|
||||
//파라미터
|
||||
@ -712,6 +717,7 @@ public class CommonWebController {
|
||||
VEInstrAsgnmVO vEInstrAsgnmVOTmp = vEEduChasiInstrAsgnmService.selectDetail(p_vEInstrAsgnmVO);
|
||||
if (vEInstrAsgnmVOTmp!=null) p = p+1;
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@ -864,6 +870,64 @@ public class CommonWebController {
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
//강사 대량 자동 배정
|
||||
@RequestMapping(value="/instrMassAsgnmEAAjax20231115.do")
|
||||
public ModelAndView instrMassAsgnmEAAjax20231115( HttpServletRequest request , ModelMap model , VEEduAplctVO veEduAplctVO) throws Exception {
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
|
||||
//기존에 강사 배정이 안된 차시에 대해서만 자동 배정 조건에 따라서 강사 배정을 한다.
|
||||
|
||||
//step0.소속 차시 정보 가져오기
|
||||
//step1.온오프라인 여부 확인
|
||||
//step2.대상 리스트 가져오기
|
||||
//step3.없으면 저장하고, 있으면 skip
|
||||
|
||||
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
|
||||
|
||||
|
||||
//private String strtOprtnDt; //시작운영일
|
||||
//private String endOprtnDt; //마감운영일
|
||||
|
||||
//String strtOprtnDt = veEduAplctVO.getStrtOprtnDt().replace(".", "").trim();
|
||||
//String endOprtnDt = veEduAplctVO.getEndOprtnDt().replace(".", "").trim();
|
||||
|
||||
|
||||
//step1.전달 파라미터를 대상 쿼리로 변경 하기
|
||||
|
||||
String s_query = " SELECT '' AS edu_aplct_ord, '' AS edu_chasi_ord FROM DUAL ";
|
||||
String[] s_arr = veEduAplctVO.getEduAplctOrd().split("__");
|
||||
for (int i=0;i<s_arr.length;i++) {
|
||||
String[] s_arr_in = s_arr[i].split("@");
|
||||
if (s_arr_in.length==2) {
|
||||
s_query = s_query + " UNION ALL SELECT '"+s_arr_in[0]+"' AS edu_aplct_ord, '"+s_arr_in[1]+"' AS edu_chasi_ord FROM DUAL ";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
System.out.println("===대상차시 가져오기===");
|
||||
|
||||
VEEduAplctVO vEEduAplctVO = new VEEduAplctVO();
|
||||
vEEduAplctVO.setSelectPagingListQuery(s_query);
|
||||
List<VEEduAplctVO> vEEduAplctVOList = vEEduMIXService.selectTngrRsltPagingList_EA(vEEduAplctVO);
|
||||
|
||||
|
||||
//step2.배정 대상별 가능한 대상 강사 찾기 및 등록
|
||||
int p=0;
|
||||
{
|
||||
for (int i=0;i<vEEduAplctVOList.size();i++) {
|
||||
|
||||
//chasiord, aplctord, hopedt & loginVO
|
||||
p = p + this.setTngrInstrAsgnm20231115(vEEduAplctVOList.get(i), loginVO);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//modelAndView.addObject("rsCnt", rs);
|
||||
modelAndView.addObject("result", "success");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
//강사 대량 삭제
|
||||
@RequestMapping(value="/instrMassAsgnmDeleteAjax.do")
|
||||
public ModelAndView instrMassAsgnmDeleteAjax( HttpServletRequest request , ModelMap model , VEEduAplctVO veEduAplctVO) throws Exception {
|
||||
@ -1226,4 +1290,121 @@ public class CommonWebController {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//청소년 강사 배정 - 20231115
|
||||
private int setTngrInstrAsgnm20231115(
|
||||
VEEduAplctVO p_tChasiInfo //대상 차시 정보
|
||||
, LoginVO p_loginVO //등록자 정보
|
||||
) throws Exception{
|
||||
|
||||
int i_ret = 0; //성공시 1 ret
|
||||
|
||||
//eduChasiOrd, 희망일자가 필요
|
||||
//VEEduAplctVO tChasiInfo = vEEduAplctVOList.get(i);
|
||||
|
||||
String s_eduHopeDt = p_tChasiInfo.getEduHopeDt(); //교육희망일자
|
||||
//String s_addr = tChasiInfo.getAddr(); //지역명
|
||||
|
||||
System.out.println(s_eduHopeDt);
|
||||
//System.out.println(s_addr);
|
||||
|
||||
|
||||
//파라미터
|
||||
VEAutoAsgnmVO vEAutoAsgnmVO = null;
|
||||
|
||||
String s_user_id = "'aaa'";
|
||||
|
||||
//대상 강사 리스트
|
||||
List<VEAutoAsgnmVO> vEInstrAssiEduAplctVOList = null;
|
||||
|
||||
//필수 조건(월별시수제한, 요일, 희망지역)
|
||||
{
|
||||
System.out.println("===step2-1.가능 강사중 월별 시수이상을 받지 않은자 & 해당 요일에 수업 가능한 강사 리스트(필)===");
|
||||
//step2-1.가능 강사중 월별 시수이상을 받지 않은자 & 해당 요일에 수업 가능한 강사 리스트(필)
|
||||
vEAutoAsgnmVO = new VEAutoAsgnmVO();
|
||||
vEAutoAsgnmVO.setEduHopeMnt(s_eduHopeDt.substring(5,7));
|
||||
vEAutoAsgnmVO.setYr(s_eduHopeDt.substring(0,4));
|
||||
vEAutoAsgnmVO.setInstrDiv("10"); //10-청소년, 20-성인
|
||||
vEAutoAsgnmVO.setEduChasiOrd(p_tChasiInfo.getEduChasiOrd());
|
||||
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrMntAsgnmtChasiList(vEAutoAsgnmVO);
|
||||
|
||||
//step2-2.희망 지역 강사 검색(필)
|
||||
|
||||
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
|
||||
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
|
||||
}
|
||||
|
||||
if (!"'aaa'".equals(s_user_id)) { //대상 강사가 있을때만 다음을 실행한다.
|
||||
System.out.println("===O있음===");
|
||||
|
||||
System.out.println("===////step2-2.희망 지역 강사 검색(필)===");
|
||||
vEAutoAsgnmVO.setUserIds(s_user_id);
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrHopeAreaList(vEAutoAsgnmVO);
|
||||
}else {
|
||||
System.out.println("===X없음===");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//우선순위
|
||||
{
|
||||
//step3-1.거주지 강사 우선(월별배정 비율 적용)
|
||||
//step3-2.연강가능여부(같은날 연강은 연강강사가 우선 배정)
|
||||
//step3-3.패널티(패널티 없는 사람이 우선순위 높게)
|
||||
|
||||
|
||||
//step3-4.월별시수대비할당이적은자 우선(필)
|
||||
s_user_id = "'aaa'";
|
||||
for (int j=0;j<vEInstrAssiEduAplctVOList.size();j++) {
|
||||
s_user_id = s_user_id + ",'" + vEInstrAssiEduAplctVOList.get(j).getUserId()+"'";
|
||||
}
|
||||
|
||||
if (!"'aaa'".equals(s_user_id)) { //대상 강사가 있을때만 다음을 실행한다.
|
||||
System.out.println("===O있음===");
|
||||
|
||||
System.out.println("===//step3-4.월별시수대비할당이적은자 우선(필)===");
|
||||
vEAutoAsgnmVO.setUserIds(s_user_id);
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectInstrPriorityList(vEAutoAsgnmVO);
|
||||
}else {
|
||||
System.out.println("===X없음===");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//강사배정-대상 강사가 있어야 강사를 할당한다.
|
||||
if (vEInstrAssiEduAplctVOList.size()>0) {
|
||||
VEInstrAsgnmVO p_vEInstrAsgnmVO = new VEInstrAsgnmVO();
|
||||
p_vEInstrAsgnmVO.setEduAplctOrd(p_tChasiInfo.getEduAplctOrd());
|
||||
p_vEInstrAsgnmVO.setEduChasiOrd(p_tChasiInfo.getEduChasiOrd());
|
||||
|
||||
p_vEInstrAsgnmVO.setUserId(vEInstrAssiEduAplctVOList.get(0).getUserId()); //배정 강사
|
||||
p_vEInstrAsgnmVO.setRmrks("배정기준1순위");
|
||||
|
||||
p_vEInstrAsgnmVO.setFrstRegisterId(p_loginVO.getUniqId());
|
||||
p_vEInstrAsgnmVO.setAsgnmAprvlCd("10"); //수락요청전
|
||||
p_vEInstrAsgnmVO.setAsgnmAprvlId(p_loginVO.getUniqId());
|
||||
|
||||
|
||||
System.out.println("===//강사배정-대상 강사가 있어야 강사를 할당한다.===");
|
||||
|
||||
//저장
|
||||
vEEduChasiInstrAsgnmService.insert(p_vEInstrAsgnmVO);
|
||||
|
||||
//저장여부 확인
|
||||
//step3-1.해당 차시에 강사 배정이 있는지 확인
|
||||
VEInstrAsgnmVO vEInstrAsgnmVOTmp = vEEduChasiInstrAsgnmService.selectDetail(p_vEInstrAsgnmVO);
|
||||
if (vEInstrAsgnmVOTmp!=null) {
|
||||
System.out.println("===O저장확인===");
|
||||
i_ret = 1;
|
||||
|
||||
}else {
|
||||
System.out.println("===X저장안됨===");
|
||||
}
|
||||
}
|
||||
|
||||
return i_ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,5 +16,9 @@ public interface VEAutoAsgnmMIXService {
|
||||
|
||||
//step3-1.월별시수대비할당이적은자 우선(필)
|
||||
List<VEAutoAsgnmVO> selectInstrPriorityList(VEAutoAsgnmVO paramVO) throws Exception;
|
||||
|
||||
|
||||
|
||||
//월별 교육시간 배정 정보
|
||||
List<VEAutoAsgnmVO> selectAsgnmInfoList(VEAutoAsgnmVO paramVO) throws Exception;
|
||||
}
|
||||
|
||||
@ -30,6 +30,49 @@ public class VEAutoAsgnmVO extends ComDefaultVO implements Serializable {
|
||||
|
||||
private String rownum; //배정순번
|
||||
|
||||
private String m01Tm; //할당된 시간
|
||||
private String m02Tm; //할당된 시간
|
||||
private String m03Tm; //할당된 시간
|
||||
private String m04Tm; //할당된 시간
|
||||
private String m05Tm; //할당된 시간
|
||||
private String m06Tm; //할당된 시간
|
||||
private String m07Tm; //할당된 시간
|
||||
private String m08Tm; //할당된 시간
|
||||
private String m09Tm; //할당된 시간
|
||||
private String m10Tm; //할당된 시간
|
||||
private String m11Tm; //할당된 시간
|
||||
private String m12Tm; //할당된 시간
|
||||
|
||||
private String mTmSum; //할당된 시간
|
||||
|
||||
private String m01Area; //할당된 지역수
|
||||
private String m02Area; //할당된 지역수
|
||||
private String m03Area; //할당된 지역수
|
||||
private String m04Area; //할당된 지역수
|
||||
private String m05Area; //할당된 지역수
|
||||
private String m06Area; //할당된 지역수
|
||||
private String m07Area; //할당된 지역수
|
||||
private String m08Area; //할당된 지역수
|
||||
private String m09Area; //할당된 지역수
|
||||
private String m10Area; //할당된 지역수
|
||||
private String m11Area; //할당된 지역수
|
||||
private String m12Area; //할당된 지역수
|
||||
|
||||
private String m01Isc; //실제 받은 시간
|
||||
private String m02Isc; //받은 시간
|
||||
private String m03Isc; //받은 시간
|
||||
private String m04Isc; //받은 시간
|
||||
private String m05Isc; //받은 시간
|
||||
private String m06Isc; //받은 시간
|
||||
private String m07Isc; //받은 시간
|
||||
private String m08Isc; //받은 시간
|
||||
private String m09Isc; //받은 시간
|
||||
private String m10Isc; //받은 시간
|
||||
private String m11Isc; //받은 시간
|
||||
private String m12Isc; //받은 시간
|
||||
|
||||
private String mIscSum; //받은 시간
|
||||
|
||||
|
||||
public String getEduHopeMnt() {
|
||||
return eduHopeMnt;
|
||||
@ -118,6 +161,310 @@ public class VEAutoAsgnmVO extends ComDefaultVO implements Serializable {
|
||||
public void setRownum(String rownum) {
|
||||
this.rownum = rownum;
|
||||
}
|
||||
|
||||
public String getM01Tm() {
|
||||
return m01Tm;
|
||||
}
|
||||
|
||||
public void setM01Tm(String m01Tm) {
|
||||
this.m01Tm = m01Tm;
|
||||
}
|
||||
|
||||
public String getM02Tm() {
|
||||
return m02Tm;
|
||||
}
|
||||
|
||||
public void setM02Tm(String m02Tm) {
|
||||
this.m02Tm = m02Tm;
|
||||
}
|
||||
|
||||
public String getM03Tm() {
|
||||
return m03Tm;
|
||||
}
|
||||
|
||||
public void setM03Tm(String m03Tm) {
|
||||
this.m03Tm = m03Tm;
|
||||
}
|
||||
|
||||
public String getM04Tm() {
|
||||
return m04Tm;
|
||||
}
|
||||
|
||||
public void setM04Tm(String m04Tm) {
|
||||
this.m04Tm = m04Tm;
|
||||
}
|
||||
|
||||
public String getM05Tm() {
|
||||
return m05Tm;
|
||||
}
|
||||
|
||||
public void setM05Tm(String m05Tm) {
|
||||
this.m05Tm = m05Tm;
|
||||
}
|
||||
|
||||
public String getM06Tm() {
|
||||
return m06Tm;
|
||||
}
|
||||
|
||||
public void setM06Tm(String m06Tm) {
|
||||
this.m06Tm = m06Tm;
|
||||
}
|
||||
|
||||
public String getM07Tm() {
|
||||
return m07Tm;
|
||||
}
|
||||
|
||||
public void setM07Tm(String m07Tm) {
|
||||
this.m07Tm = m07Tm;
|
||||
}
|
||||
|
||||
public String getM08Tm() {
|
||||
return m08Tm;
|
||||
}
|
||||
|
||||
public void setM08Tm(String m08Tm) {
|
||||
this.m08Tm = m08Tm;
|
||||
}
|
||||
|
||||
public String getM09Tm() {
|
||||
return m09Tm;
|
||||
}
|
||||
|
||||
public void setM09Tm(String m09Tm) {
|
||||
this.m09Tm = m09Tm;
|
||||
}
|
||||
|
||||
public String getM10Tm() {
|
||||
return m10Tm;
|
||||
}
|
||||
|
||||
public void setM10Tm(String m10Tm) {
|
||||
this.m10Tm = m10Tm;
|
||||
}
|
||||
|
||||
public String getM11Tm() {
|
||||
return m11Tm;
|
||||
}
|
||||
|
||||
public void setM11Tm(String m11Tm) {
|
||||
this.m11Tm = m11Tm;
|
||||
}
|
||||
|
||||
public String getM12Tm() {
|
||||
return m12Tm;
|
||||
}
|
||||
|
||||
public void setM12Tm(String m12Tm) {
|
||||
this.m12Tm = m12Tm;
|
||||
}
|
||||
|
||||
public String getM01Area() {
|
||||
return m01Area;
|
||||
}
|
||||
|
||||
public void setM01Area(String m01Area) {
|
||||
this.m01Area = m01Area;
|
||||
}
|
||||
|
||||
public String getM02Area() {
|
||||
return m02Area;
|
||||
}
|
||||
|
||||
public void setM02Area(String m02Area) {
|
||||
this.m02Area = m02Area;
|
||||
}
|
||||
|
||||
public String getM03Area() {
|
||||
return m03Area;
|
||||
}
|
||||
|
||||
public void setM03Area(String m03Area) {
|
||||
this.m03Area = m03Area;
|
||||
}
|
||||
|
||||
public String getM04Area() {
|
||||
return m04Area;
|
||||
}
|
||||
|
||||
public void setM04Area(String m04Area) {
|
||||
this.m04Area = m04Area;
|
||||
}
|
||||
|
||||
public String getM05Area() {
|
||||
return m05Area;
|
||||
}
|
||||
|
||||
public void setM05Area(String m05Area) {
|
||||
this.m05Area = m05Area;
|
||||
}
|
||||
|
||||
public String getM06Area() {
|
||||
return m06Area;
|
||||
}
|
||||
|
||||
public void setM06Area(String m06Area) {
|
||||
this.m06Area = m06Area;
|
||||
}
|
||||
|
||||
public String getM07Area() {
|
||||
return m07Area;
|
||||
}
|
||||
|
||||
public void setM07Area(String m07Area) {
|
||||
this.m07Area = m07Area;
|
||||
}
|
||||
|
||||
public String getM08Area() {
|
||||
return m08Area;
|
||||
}
|
||||
|
||||
public void setM08Area(String m08Area) {
|
||||
this.m08Area = m08Area;
|
||||
}
|
||||
|
||||
public String getM09Area() {
|
||||
return m09Area;
|
||||
}
|
||||
|
||||
public void setM09Area(String m09Area) {
|
||||
this.m09Area = m09Area;
|
||||
}
|
||||
|
||||
public String getM10Area() {
|
||||
return m10Area;
|
||||
}
|
||||
|
||||
public void setM10Area(String m10Area) {
|
||||
this.m10Area = m10Area;
|
||||
}
|
||||
|
||||
public String getM11Area() {
|
||||
return m11Area;
|
||||
}
|
||||
|
||||
public void setM11Area(String m11Area) {
|
||||
this.m11Area = m11Area;
|
||||
}
|
||||
|
||||
public String getM12Area() {
|
||||
return m12Area;
|
||||
}
|
||||
|
||||
public void setM12Area(String m12Area) {
|
||||
this.m12Area = m12Area;
|
||||
}
|
||||
|
||||
public String getM01Isc() {
|
||||
return m01Isc;
|
||||
}
|
||||
|
||||
public void setM01Isc(String m01Isc) {
|
||||
this.m01Isc = m01Isc;
|
||||
}
|
||||
|
||||
public String getM02Isc() {
|
||||
return m02Isc;
|
||||
}
|
||||
|
||||
public void setM02Isc(String m02Isc) {
|
||||
this.m02Isc = m02Isc;
|
||||
}
|
||||
|
||||
public String getM03Isc() {
|
||||
return m03Isc;
|
||||
}
|
||||
|
||||
public void setM03Isc(String m03Isc) {
|
||||
this.m03Isc = m03Isc;
|
||||
}
|
||||
|
||||
public String getM04Isc() {
|
||||
return m04Isc;
|
||||
}
|
||||
|
||||
public void setM04Isc(String m04Isc) {
|
||||
this.m04Isc = m04Isc;
|
||||
}
|
||||
|
||||
public String getM05Isc() {
|
||||
return m05Isc;
|
||||
}
|
||||
|
||||
public void setM05Isc(String m05Isc) {
|
||||
this.m05Isc = m05Isc;
|
||||
}
|
||||
|
||||
public String getM06Isc() {
|
||||
return m06Isc;
|
||||
}
|
||||
|
||||
public void setM06Isc(String m06Isc) {
|
||||
this.m06Isc = m06Isc;
|
||||
}
|
||||
|
||||
public String getM07Isc() {
|
||||
return m07Isc;
|
||||
}
|
||||
|
||||
public void setM07Isc(String m07Isc) {
|
||||
this.m07Isc = m07Isc;
|
||||
}
|
||||
|
||||
public String getM08Isc() {
|
||||
return m08Isc;
|
||||
}
|
||||
|
||||
public void setM08Isc(String m08Isc) {
|
||||
this.m08Isc = m08Isc;
|
||||
}
|
||||
|
||||
public String getM09Isc() {
|
||||
return m09Isc;
|
||||
}
|
||||
|
||||
public void setM09Isc(String m09Isc) {
|
||||
this.m09Isc = m09Isc;
|
||||
}
|
||||
|
||||
public String getM10Isc() {
|
||||
return m10Isc;
|
||||
}
|
||||
|
||||
public void setM10Isc(String m10Isc) {
|
||||
this.m10Isc = m10Isc;
|
||||
}
|
||||
|
||||
public String getM11Isc() {
|
||||
return m11Isc;
|
||||
}
|
||||
|
||||
public void setM11Isc(String m11Isc) {
|
||||
this.m11Isc = m11Isc;
|
||||
}
|
||||
|
||||
public String getM12Isc() {
|
||||
return m12Isc;
|
||||
}
|
||||
|
||||
public void setM12Isc(String m12Isc) {
|
||||
this.m12Isc = m12Isc;
|
||||
}
|
||||
|
||||
public String getmTmSum() {
|
||||
return mTmSum;
|
||||
}
|
||||
|
||||
public void setmTmSum(String mTmSum) {
|
||||
this.mTmSum = mTmSum;
|
||||
}
|
||||
|
||||
public String getmIscSum() {
|
||||
return mIscSum;
|
||||
}
|
||||
|
||||
public void setmIscSum(String mIscSum) {
|
||||
this.mIscSum = mIscSum;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -27,6 +27,9 @@ public interface VEEduMIXService {
|
||||
|
||||
List<VEEduAplctVO> selectTngrRsltPagingList(VEEduAplctVO paramVO) throws Exception;
|
||||
|
||||
//대량강사자동배정대상 - step0,1 - 개별
|
||||
List<VEEduAplctVO> selectTngrRsltPagingList_EA(VEEduAplctVO paramVO) throws Exception;
|
||||
|
||||
List<VEEduAplctVO> selectTngrRsltList(VEEduAplctVO paramVO) throws Exception;
|
||||
|
||||
//특정강사배정을 위한 대상 차시 리스트
|
||||
|
||||
@ -34,5 +34,12 @@ public class VEAutoAsgnmMIXDAO extends EgovAbstractDAO {
|
||||
return tlist;
|
||||
}
|
||||
|
||||
public List<VEAutoAsgnmVO> selectAsgnmInfoList(VEAutoAsgnmVO paramVO) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<VEAutoAsgnmVO> tlist = (List<VEAutoAsgnmVO>) list("VEAutoAsgnmDAO.selectAsgnmInfoList", paramVO);
|
||||
return tlist;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -38,4 +38,9 @@ public class VEAutoAsgnmMIXServiceImpl implements VEAutoAsgnmMIXService {
|
||||
return vEAutoAsgnmMIXDAO.selectInstrPriorityList(paramVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VEAutoAsgnmVO> selectAsgnmInfoList(VEAutoAsgnmVO paramVO) throws Exception{
|
||||
return vEAutoAsgnmMIXDAO.selectAsgnmInfoList(paramVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -67,7 +67,12 @@ public class VEEduMIXDAO extends EgovAbstractDAO {
|
||||
List<VEEduAplctVO> tlist = (List<VEEduAplctVO>) list("VEEduMIXDAO.selectTngrRsltPagingList", paramVO);
|
||||
return tlist;
|
||||
}
|
||||
|
||||
|
||||
public List<VEEduAplctVO> selectTngrRsltPagingList_EA(VEEduAplctVO paramVO) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<VEEduAplctVO> tlist = (List<VEEduAplctVO>) list("VEEduMIXDAO.selectTngrRsltPagingList_EA", paramVO);
|
||||
return tlist;
|
||||
}
|
||||
|
||||
public List<VEEduAplctVO> selectTngrRsltList(VEEduAplctVO paramVO) {
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
@ -60,6 +60,11 @@ public class VEEduMIXServiceImpl implements VEEduMIXService {
|
||||
return vEEduMIXDAO.selectTngrRsltPagingList(paramVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VEEduAplctVO> selectTngrRsltPagingList_EA(VEEduAplctVO paramVO) throws Exception{
|
||||
return vEEduMIXDAO.selectTngrRsltPagingList_EA(paramVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VEEduAplctVO> selectTngrRsltList(VEEduAplctVO paramVO) throws Exception{
|
||||
return vEEduMIXDAO.selectTngrRsltList(paramVO);
|
||||
|
||||
@ -53,6 +53,8 @@ import kcc.ve.aplct.cpyrgExprnClsrm.exprnClsrmAplct.service.ScholInfoService;
|
||||
import kcc.ve.aplct.cpyrgExprnClsrm.exprnClsrmAplct.service.ScholInfoVO;
|
||||
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEEduPnltyService;
|
||||
import kcc.ve.instr.tngrVisitEdu.asgnmInfo.service.VEInstrAsgnmVO;
|
||||
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEAutoAsgnmMIXService;
|
||||
import kcc.ve.instr.tngrVisitEdu.eduInfo.service.VEAutoAsgnmVO;
|
||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailService;
|
||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrDetailVO;
|
||||
import kcc.ve.instr.tngrVisitEdu.instrInfo.service.VEInstrMixService;
|
||||
@ -224,6 +226,9 @@ public class OprtnInstrTngrPrflContoller {
|
||||
@Resource(name="instrHstryOrdGnrService")
|
||||
private EgovIdGnrService instrHstryOrdGnrService;
|
||||
|
||||
@Resource(name = "vEAutoAsgnmMIXService")
|
||||
private VEAutoAsgnmMIXService vEAutoAsgnmMIXService;
|
||||
|
||||
/**
|
||||
* 1.강사등록신청 목록 조회 -
|
||||
*/
|
||||
@ -1770,6 +1775,13 @@ public class OprtnInstrTngrPrflContoller {
|
||||
List<VELctrDetailVO> selectAsgnmInfoT2List = vEInstrMixService.selectAsgnmInfoT2(t_vEInstrDetailVO);
|
||||
model.addAttribute("asgnmInfoT2List",selectAsgnmInfoT2List);
|
||||
|
||||
|
||||
VEAutoAsgnmVO vEAutoAsgnmVO = new VEAutoAsgnmVO();
|
||||
vEAutoAsgnmVO.setUserId(vEInstrDetailVO.getUserId());
|
||||
List<VEAutoAsgnmVO> vEInstrAssiEduAplctVOList = null;
|
||||
vEInstrAssiEduAplctVOList = vEAutoAsgnmMIXService.selectAsgnmInfoList(vEAutoAsgnmVO);
|
||||
model.addAttribute("vEInstrAssiEduAplctVOList",vEInstrAssiEduAplctVOList);
|
||||
|
||||
return "/oprtn/tngrVisitEdu/instrMngDetail";
|
||||
}
|
||||
|
||||
|
||||
@ -637,5 +637,113 @@
|
||||
AND aa.user_id IN ($userIds$)
|
||||
)aaa
|
||||
ORDER BY aaa.instrSumChasi*10000/(aaa.asgnmTm+1) asc
|
||||
</select>
|
||||
</select>
|
||||
|
||||
<!-- //월별 교육시간 배정 정보 L page -->
|
||||
<select id="VEAutoAsgnmDAO.selectAsgnmInfoList" parameterClass="VEAutoAsgnmVO" resultClass="VEAutoAsgnmVO" remapResults="true">
|
||||
/* VEAutoAsgnmDAO.selectAsgnmInfoList */
|
||||
|
||||
SELECT aa.yr
|
||||
, aa.user_id AS userId
|
||||
|
||||
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='01' THEN bb.instrSumChasi END),0) AS m01Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='02' THEN bb.instrSumChasi END),0) AS m02Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='03' THEN bb.instrSumChasi END),0) AS m03Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='04' THEN bb.instrSumChasi END),0) AS m04Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='05' THEN bb.instrSumChasi END),0) AS m05Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='06' THEN bb.instrSumChasi END),0) AS m06Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='07' THEN bb.instrSumChasi END),0) AS m07Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='08' THEN bb.instrSumChasi END),0) AS m08Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='09' THEN bb.instrSumChasi END),0) AS m09Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='10' THEN bb.instrSumChasi END),0) AS m10Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='11' THEN bb.instrSumChasi END),0) AS m11Isc
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='12' THEN bb.instrSumChasi END),0) AS m12Isc
|
||||
|
||||
, NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='01' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='02' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='03' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='04' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='05' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='06' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='07' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='08' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='09' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='10' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='11' THEN bb.instrSumChasi END),0)
|
||||
+ NVL(SUM(CASE WHEN substring(bb.yrmnt,6,7)='12' THEN bb.instrSumChasi END),0) AS mIscSum
|
||||
|
||||
|
||||
, NVL(aa.m01_tm,0) AS m01Tm
|
||||
, NVL(aa.m02_tm,0) AS m02Tm
|
||||
, NVL(aa.m03_tm,0) AS m03Tm
|
||||
, NVL(aa.m04_tm,0) AS m04Tm
|
||||
, NVL(aa.m05_tm,0) AS m05Tm
|
||||
, NVL(aa.m06_tm,0) AS m06Tm
|
||||
, NVL(aa.m07_tm,0) AS m07Tm
|
||||
, NVL(aa.m08_tm,0) AS m08Tm
|
||||
, NVL(aa.m09_tm,0) AS m09Tm
|
||||
, NVL(aa.m10_tm,0) AS m10Tm
|
||||
, NVL(aa.m11_tm,0) AS m11Tm
|
||||
, NVL(aa.m12_tm,0) AS m12Tm
|
||||
|
||||
, NVL(aa.m01_tm,0)
|
||||
+ NVL(aa.m02_tm,0)
|
||||
+ NVL(aa.m03_tm,0)
|
||||
+ NVL(aa.m04_tm,0)
|
||||
+ NVL(aa.m05_tm,0)
|
||||
+ NVL(aa.m06_tm,0)
|
||||
+ NVL(aa.m07_tm,0)
|
||||
+ NVL(aa.m08_tm,0)
|
||||
+ NVL(aa.m09_tm,0)
|
||||
+ NVL(aa.m10_tm,0)
|
||||
+ NVL(aa.m11_tm,0)
|
||||
+ NVL(aa.m12_tm,0) AS mTmSum
|
||||
FROM vea_instr_indvd_mnt_tm aa
|
||||
LEFT OUTER JOIN (
|
||||
|
||||
SELECT d.user_id,
|
||||
substring(b.EDU_HOPE_DT ,0,7) AS yrMnt ,
|
||||
SUM(NVL(b.chasi, 0)) AS instrSumChasi
|
||||
FROM ve_edu_aplct a ,
|
||||
ve_edu_chasi b
|
||||
LEFT OUTER JOIN ve_edu_chasi_instr_asgnm d
|
||||
ON (
|
||||
b.edu_aplct_ord=d.edu_aplct_ord
|
||||
AND b.edu_chasi_ord=d.edu_chasi_ord
|
||||
)
|
||||
WHERE 1 =1
|
||||
AND a.edu_aplct_ord =b.edu_aplct_ord
|
||||
AND NVL(A.USE_YN, 'Y') <![CDATA[ <> ]]> 'N'
|
||||
AND a.LCTR_DIV_CD = '10'
|
||||
AND a.aprvl_cd = '60'
|
||||
AND 1 =1
|
||||
|
||||
GROUP BY d.user_id
|
||||
, substring(b.EDU_HOPE_DT ,0,7)
|
||||
|
||||
)bb
|
||||
on(
|
||||
aa.user_id=bb.user_id
|
||||
AND aa.yr=substring(bb.yrMnt,0,4)
|
||||
)
|
||||
WHERE aa.user_id=#userId#
|
||||
|
||||
GROUP BY aa.yr
|
||||
, aa.user_id
|
||||
, aa.m01_tm
|
||||
, aa.m02_tm
|
||||
, aa.m03_tm
|
||||
, aa.m04_tm
|
||||
, aa.m05_tm
|
||||
, aa.m06_tm
|
||||
, aa.m07_tm
|
||||
, aa.m08_tm
|
||||
, aa.m09_tm
|
||||
, aa.m10_tm
|
||||
, aa.m11_tm
|
||||
, aa.m12_tm
|
||||
|
||||
ORDER BY aa.yr
|
||||
</select>
|
||||
</sqlMap>
|
||||
|
||||
@ -2435,6 +2435,23 @@
|
||||
</isNotEqual>
|
||||
</select>
|
||||
|
||||
<!-- 청소년 교육 결과 L page -->
|
||||
<select id="VEEduMIXDAO.selectTngrRsltPagingList_EA" parameterClass="VEEduAplctVO" resultClass="VEEduAplctVO" remapResults="true">
|
||||
/* VEEduMIXDAO.selectTngrRsltPagingList_EA */
|
||||
SELECT b.edu_aplct_ord AS eduAplctOrd
|
||||
, b.edu_chasi_ord AS eduChasiOrd
|
||||
, b.edu_hope_dt AS eduHopeDt
|
||||
from ve_edu_aplct a
|
||||
, ve_edu_chasi b
|
||||
, (
|
||||
$selectPagingListQuery$
|
||||
) c
|
||||
WHERE 1=1
|
||||
AND a.edu_aplct_ord=b.edu_aplct_ord
|
||||
AND b.edu_aplct_ord=c.edu_aplct_ord
|
||||
AND b.edu_chasi_ord=c.edu_chasi_ord
|
||||
</select>
|
||||
|
||||
<!-- 청소년 교육 결과 L page -->
|
||||
<select id="VEEduMIXDAO.selectTngrRsltList" parameterClass="VEEduAplctVO" resultClass="VEEduAplctVO" remapResults="true">
|
||||
/* VEEduMIXDAO.selectTngrRsltList */
|
||||
|
||||
@ -560,6 +560,71 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function fncInstrMassAsgnmEA20231115(){ //개별 선택한 경우만 처리한다.
|
||||
|
||||
|
||||
var pageIndex = $('#listForm [name=pageIndex]').val();
|
||||
|
||||
var varEduAplctOrd = '';
|
||||
var fnExit = false;
|
||||
|
||||
$('input:checkbox[name="chk"]:checked').each(function(idx) {
|
||||
if($(this).attr("class") != "") {
|
||||
alert("선택한 목록 중 교욱확정알림이 불가능한 건이 있습니다.");
|
||||
fnExit = true;
|
||||
}else{
|
||||
varEduAplctOrd = varEduAplctOrd + $(this).val() + "__";
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
//체크한 리스트 중 해당 상태에 실행 불가능한 건이 있는지 체크 후, 존재 시 함수 종료
|
||||
if(fnExit) return false;
|
||||
|
||||
if (varEduAplctOrd==''){
|
||||
alert("선택된 항목이 없습니다.");
|
||||
return ;
|
||||
}
|
||||
|
||||
//alert(varEduAplctOrd);
|
||||
|
||||
/*
|
||||
if (varEduHopeDtStrt=='' || varEduHopeDtEnd==''){
|
||||
alert("대상의 교육일자 기간은 반드시 선택해야 합니다.");
|
||||
return ;
|
||||
}
|
||||
*/
|
||||
|
||||
//private String strtOprtnDt; //시작운영일
|
||||
//private String endOprtnDt; //마감운영일
|
||||
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
url:"${pageContext.request.contextPath}/web/ve/comm/instrMassAsgnmEAAjax20231115.do",
|
||||
data: {
|
||||
"eduAplctOrd":varEduAplctOrd,
|
||||
//"strtOprtnDt" : varEduHopeDtStrt ,
|
||||
//"endOprtnDt" : varEduHopeDtEnd ,
|
||||
//"instrDiv" : "10" ,
|
||||
|
||||
},
|
||||
dataType:'json',
|
||||
success:function(returnData){
|
||||
if(returnData.result=="success"){
|
||||
alert("상태가 변경 되었습니다.");
|
||||
linkPage(pageIndex);
|
||||
}else{
|
||||
alert("강사 자동 배정 중에 오류가 발생 되었습니다.");
|
||||
linkPage(pageIndex);
|
||||
}
|
||||
},
|
||||
error:function(request , status, error){
|
||||
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//강사교육확정
|
||||
function fncInstrMassAsgnm30(){
|
||||
@ -911,9 +976,10 @@
|
||||
<button class="btn_type03" onclick="fncReset(this); return false;">초기화</button>
|
||||
<div class="btn_wrap btn_layout01" style="width:100%;">
|
||||
<div class="btn_right" style="width:100%;margin-bottom:40px;">
|
||||
<button type="button" class="btn_type06" onclick="fncInstrMassAsgnm(); return false;">강사배정(전체)X</button>
|
||||
<button type="button" class="btn_type06" onclick="fncInstrMassAsgnm20231109(); return false;">강사배정(전체)N-X</button>
|
||||
<button type="button" class="btn_type06" onclick="fncInstrMassAsgnmEA(); return false;">강사배정(개별)X</button>
|
||||
<!-- <button type="button" class="btn_type06" onclick="fncInstrMassAsgnm(); return false;">강사배정(전체)X</button> -->
|
||||
<button type="button" class="btn_type06" onclick="fncInstrMassAsgnm20231109(); return false;">강사배정(전체)</button>
|
||||
<!-- <button type="button" class="btn_type06" onclick="fncInstrMassAsgnmEA(); return false;">강사배정(개별)X</button> -->
|
||||
<button type="button" class="btn_type06" onclick="fncInstrMassAsgnmEA20231115(); return false;">강사배정(개별)</button>
|
||||
|
||||
<button type="button" style="width:200px;" class="btn_type06" onclick="fncSpcfcInstrAsgnmInfo(); return false;">특정강사배정</button>
|
||||
</div>
|
||||
|
||||
@ -756,23 +756,25 @@
|
||||
<div class="tb_type01 list2">
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 4.0%;">
|
||||
<col style="width: 9.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.5%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: 7.0%;">
|
||||
<col style="width: auto;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">1월(일수/지역수)</th>
|
||||
<th scope="col">년도</th>
|
||||
<th scope="col">1월(배정차시/배정가능수)</th>
|
||||
<th scope="col">2월</th>
|
||||
<th scope="col">3월</th>
|
||||
<th scope="col">4월</th>
|
||||
@ -790,22 +792,23 @@
|
||||
<tbody>
|
||||
|
||||
|
||||
<c:forEach var="asgnmInfoT2" items="${asgnmInfoT2List}" varStatus="status">
|
||||
<c:forEach var="asgnmInfoT2" items="${vEInstrAssiEduAplctVOList}" varStatus="status">
|
||||
<tr>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm1}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm2}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm3}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm4}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm5}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm6}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm7}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm8}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm9}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm10}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm11}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.asgnmTm12}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.yr}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m01Isc}" />/<c:out value="${asgnmInfoT2.m01Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m02Isc}" />/<c:out value="${asgnmInfoT2.m02Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m03Isc}" />/<c:out value="${asgnmInfoT2.m03Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m04Isc}" />/<c:out value="${asgnmInfoT2.m04Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m05Isc}" />/<c:out value="${asgnmInfoT2.m05Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m06Isc}" />/<c:out value="${asgnmInfoT2.m06Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m07Isc}" />/<c:out value="${asgnmInfoT2.m07Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m08Isc}" />/<c:out value="${asgnmInfoT2.m08Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m09Isc}" />/<c:out value="${asgnmInfoT2.m09Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m10Isc}" />/<c:out value="${asgnmInfoT2.m10Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m11Isc}" />/<c:out value="${asgnmInfoT2.m11Tm}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.m12Isc}" />/<c:out value="${asgnmInfoT2.m12Tm}" /></td>
|
||||
|
||||
<td><c:out value="${asgnmInfoT2.mntSum}" /></td>
|
||||
<td><c:out value="${asgnmInfoT2.mIscSum}" />/<c:out value="${asgnmInfoT2.mTmSum}" /></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
|
||||
|
||||
@ -235,6 +235,7 @@
|
||||
<label for="cntnsLctrPsblYn_n">아니오</label>
|
||||
</td>
|
||||
</tr>
|
||||
<!--
|
||||
<tr>
|
||||
<th scope="row">연 최대 배정시간</th>
|
||||
<td><input type="text" name="yrMxmmAsgnmTm" value="<c:out value='${lctrStngInfo.yrMxmmAsgnmTm }' />" />
|
||||
@ -245,6 +246,7 @@
|
||||
<th scope="row">월 최소시간</th>
|
||||
<td><input type="text" name="mntMnmmTm" value="<c:out value='${lctrStngInfo.mntMnmmTm}' />" /></td>
|
||||
</tr>
|
||||
-->
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user