[관리자 - 지역검색조건 추가] 성인 > 교육배치관리 > 강사변경 > 팝업리스트

This commit is contained in:
hylee 2024-01-02 15:42:20 +09:00
parent 1b2e596a17
commit 4426df5b72
16 changed files with 257 additions and 10 deletions

View File

@ -0,0 +1,67 @@
package kcc.com.cmm.util;
/**
*
* @author : 이호영
* @fileName : KoreanRegionEnum.java
* @date : 2024.01.02
* @description : VEA017 지역 이랑 코드 맞춰야함
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2024.01.02 이호영 최초 생성
*
*
*
*/
public enum KoreanRegionEnum {
GANGWON("10", "강원도", "강원"),
GYEONGGI("20", "경기도", "경기"),
GYEONGSANGNAM("30", "경상남도", "경남"),
GYEONGSANGBUK("40", "경상북도", "경북"),
GWANGJU("50", "광주광역시", "광주"),
DAEGU("60", "대구광역시", "대구"),
DAEJEON("70", "대전광역시", "대전"),
BUSAN("80", "부산광역시", "부산"),
SEOUL("90", "서울특별시", "서울"),
SEJONG("100", "세종특별자치시", "세종"),
ULSAN("110", "울산광역시", "울산"),
INCHEON("120", "인천광역시", "인천"),
JEOLLANAM("130", "전라남도", "전남"),
JEOLLABUK("140", "전라북도", "전북"),
JEJU("150", "제주특별자치도", "제주"),
CHUNGCHEONGNAM("160", "충청남도", "충남"),
CHUNGCHEONGBUK("170", "충청북도", "충북");
private final String order;
private final String fullName;
private final String shortName;
KoreanRegionEnum(String order, String fullName, String shortName) {
this.order = order;
this.fullName = fullName;
this.shortName = shortName;
}
public static KoreanRegionEnum fromOrder(String order) {
for (KoreanRegionEnum region : values()) {
if (region.getOrder().equals(order)) {
return region;
}
}
throw new IllegalArgumentException("No enum constant with order: " + order);
}
public String getOrder() {
return order;
}
public String getFullName() {
return fullName;
}
public String getShortName() {
return shortName;
}
}

View File

@ -161,6 +161,8 @@ public class VEInstrAsgnmVO extends ComDefaultVO implements Serializable {
private String cmmNotifyOrd; //평균점수 private String cmmNotifyOrd; //평균점수
private String selectRsdneQuery; // 지역쿼리
public String getMemoCn() { public String getMemoCn() {
@ -799,5 +801,11 @@ public class VEInstrAsgnmVO extends ComDefaultVO implements Serializable {
public void setCmmNotifyOrd(String cmmNotifyOrd) { public void setCmmNotifyOrd(String cmmNotifyOrd) {
this.cmmNotifyOrd = cmmNotifyOrd; this.cmmNotifyOrd = cmmNotifyOrd;
} }
public String getSelectRsdneQuery() {
return selectRsdneQuery;
}
public void setSelectRsdneQuery(String selectRsdneQuery) {
this.selectRsdneQuery = selectRsdneQuery;
}
} }

View File

@ -315,6 +315,8 @@ public class VEEduAplctVO extends ComDefaultVO implements Serializable {
////////////////paging/////////////// ////////////////paging///////////////
private String selectPagingListQuery; private String selectPagingListQuery;
private String selectRsdneQuery;
private String searchRsdne;
private String orderByQuery; private String orderByQuery;
//운영신청 목록 셀렉트박스 검색구분자 //운영신청 목록 셀렉트박스 검색구분자
@ -374,6 +376,18 @@ public class VEEduAplctVO extends ComDefaultVO implements Serializable {
public void setSelectPagingListQuery(String selectPagingListQuery) { public void setSelectPagingListQuery(String selectPagingListQuery) {
this.selectPagingListQuery = selectPagingListQuery; this.selectPagingListQuery = selectPagingListQuery;
} }
public String getSelectRsdneQuery() {
return selectRsdneQuery;
}
public void setSelectRsdneQuery(String selectRsdneQuery) {
this.selectRsdneQuery = selectRsdneQuery;
}
public String getSearchRsdne() {
return searchRsdne;
}
public void setSearchRsdne(String searchRsdne) {
this.searchRsdne = searchRsdne;
}
public String getOrderByQuery() { public String getOrderByQuery() {
return orderByQuery; return orderByQuery;
} }

View File

@ -27,6 +27,8 @@ public class VEInstrDetailVO extends ComDefaultVO implements Serializable {
private String lastUpdtPnttm; // 수정일시 private String lastUpdtPnttm; // 수정일시
private String lastUpdusrId; // 수정자 private String lastUpdusrId; // 수정자
private String searchRsdne; // 수정자
private String checkTopSum; private String checkTopSum;
private String weekCnt; private String weekCnt;
private List<String> userIdList = new ArrayList<String>(); private List<String> userIdList = new ArrayList<String>();
@ -299,6 +301,12 @@ public class VEInstrDetailVO extends ComDefaultVO implements Serializable {
public void setLastUpdusrId(String lastUpdusrId) { public void setLastUpdusrId(String lastUpdusrId) {
this.lastUpdusrId = lastUpdusrId; this.lastUpdusrId = lastUpdusrId;
} }
public String getSearchRsdne() {
return searchRsdne;
}
public void setSearchRsdne(String searchRsdne) {
this.searchRsdne = searchRsdne;
}
public String getInstrDiv() { public String getInstrDiv() {
return instrDiv; return instrDiv;
} }

View File

@ -68,4 +68,6 @@ public interface VEPrcsAplctPrdService {
List<VEPrcsDetailVO> selectOneDayBeforeTrainingStartDate(VEPrcsDetailVO vEPrcsDetailVO); List<VEPrcsDetailVO> selectOneDayBeforeTrainingStartDate(VEPrcsDetailVO vEPrcsDetailVO);
List<VEPrcsDetailVO> selectCfnPagingList4Fndth(VEPrcsDetailVO vEPrcsDetailVO) throws Exception;
} }

View File

@ -79,6 +79,11 @@ public class VEPrcsAplctPrdDAO extends EgovAbstractDAO {
return tlist; return tlist;
} }
public List<VEPrcsDetailVO> selectCfnPagingList4Fndth(VEPrcsDetailVO paramVO) throws Exception {
List<VEPrcsDetailVO> tlist = (List<VEPrcsDetailVO>) list("VEPrcsAplctPrdDAO.selectCfnPagingList4Fndth", paramVO);
return tlist;
}
public VEPrcsDetailVO selectDetailNewOne(VEPrcsDetailVO paramVO) throws Exception { public VEPrcsDetailVO selectDetailNewOne(VEPrcsDetailVO paramVO) throws Exception {
return (VEPrcsDetailVO) select("VEPrcsAplctPrdDAO.selectDetailNewOne", paramVO); return (VEPrcsDetailVO) select("VEPrcsAplctPrdDAO.selectDetailNewOne", paramVO);
} }

View File

@ -71,6 +71,11 @@ public class VEPrcsAplctPrdServiceImpl implements VEPrcsAplctPrdService {
return vEPrcsAplctPrdDAO.selectPagingList4Fndth(paramVO); return vEPrcsAplctPrdDAO.selectPagingList4Fndth(paramVO);
} }
public List<VEPrcsDetailVO> selectCfnPagingList4Fndth(VEPrcsDetailVO paramVO) throws Exception{
return vEPrcsAplctPrdDAO.selectCfnPagingList4Fndth(paramVO);
}
//R //R
public VEPrcsDetailVO selectDetailNewOne(VEPrcsDetailVO paramVO) throws Exception { public VEPrcsDetailVO selectDetailNewOne(VEPrcsDetailVO paramVO) throws Exception {
return vEPrcsAplctPrdDAO.selectDetailNewOne(paramVO); return vEPrcsAplctPrdDAO.selectDetailNewOne(paramVO);

View File

@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import com.epapyrus.common.util.StringUtils;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import kcc.com.cmm.ComDefaultCodeVO; import kcc.com.cmm.ComDefaultCodeVO;
import kcc.com.cmm.LoginVO; import kcc.com.cmm.LoginVO;
@ -24,6 +26,7 @@ import kcc.com.cmm.service.EgovCmmUseService;
import kcc.com.cmm.service.EgovFileMngService; import kcc.com.cmm.service.EgovFileMngService;
import kcc.com.cmm.service.EgovFileMngUtil; import kcc.com.cmm.service.EgovFileMngUtil;
import kcc.com.cmm.spring.data.util.ExcelUtil; import kcc.com.cmm.spring.data.util.ExcelUtil;
import kcc.com.cmm.util.KoreanRegionEnum;
import kcc.com.utl.user.service.CheckLoginUtil; import kcc.com.utl.user.service.CheckLoginUtil;
import kcc.kccadr.cmm.CmmUtil; import kcc.kccadr.cmm.CmmUtil;
import kcc.let.utl.fcc.service.EgovCryptoUtil; import kcc.let.utl.fcc.service.EgovCryptoUtil;
@ -170,12 +173,21 @@ public class EduCnfrmMngAdultController {
vEEduAplctVO.setLctrDivCd("20"); //성인강의 vEEduAplctVO.setLctrDivCd("20"); //성인강의
vEEduAplctVO.setAprvlCd("60"); //확정코드 vEEduAplctVO.setAprvlCd("60"); //확정코드
// 지역검색
/* if(StringUtils.isNotEmpty(vEEduAplctVO.getSearchRsdne()))
{
// KoreanRegionEnum Class 참고
// VEA017 코드 번호만 넘기면 경상남도, 경남과 같은 값을 return함
// return "AND rsdne like '%' || '"+fullName+"' || '%' OR rsdne like '%' || '"+shortName+"' || '%' ";
vEEduAplctVO.setSelectRsdneQuery(this.getRsdneQueryStr(vEEduAplctVO.getSearchRsdne()));
}*/
if(!"".equals(vEEduAplctVO.getSearchInstrNm())) { if(!"".equals(vEEduAplctVO.getSearchInstrNm())) {
vEEduAplctVO.setSearchInstrNm(egovCryptoUtil.encrypt(vEEduAplctVO.getSearchInstrNm())); vEEduAplctVO.setSearchInstrNm(egovCryptoUtil.encrypt(vEEduAplctVO.getSearchInstrNm()));
} }
System.out.println("vEEduAplctVO.getAprvlCd()"); System.out.println("vEEduAplctVO.getSearchRsdne()");
System.out.println(vEEduAplctVO.getAprvlCd()); System.out.println(vEEduAplctVO.getSearchRsdne());
List<VEEduAplctVO> vEEduAplctVOList = vEEduMIXService.selectTngrRsltPagingList(vEEduAplctVO); List<VEEduAplctVO> vEEduAplctVOList = vEEduMIXService.selectTngrRsltPagingList(vEEduAplctVO);
VEEduAplctVO vo = new VEEduAplctVO(); VEEduAplctVO vo = new VEEduAplctVO();
@ -198,6 +210,16 @@ public class EduCnfrmMngAdultController {
return "oprtn/adultVisitEdu/eduCnfrmMngList"; return "oprtn/adultVisitEdu/eduCnfrmMngList";
} }
private String getRsdneQueryStr(String searchRsdne) {
KoreanRegionEnum region = KoreanRegionEnum.fromOrder(searchRsdne);
String fullName = region.getFullName();
String shortName = region.getShortName();
// return String.format("AND rsdne like '%' || '%s'|| '%' OR rsdne like '%' || '%s'|| '%' ", fullName, shortName);
return "AND (rsdne like '"+fullName+"' || '%' OR rsdne like '"+shortName+"' || '%' )";
}
/** /**
* 교육배치관리 상세 화면 * 교육배치관리 상세 화면
*/ */
@ -311,10 +333,16 @@ public class EduCnfrmMngAdultController {
//String s_userCheckNInfo = checkLoginUtil.userCheckNInfo(model, request); //String s_userCheckNInfo = checkLoginUtil.userCheckNInfo(model, request);
//if (!"".equals(s_userCheckNInfo)) return s_userCheckNInfo; //if (!"".equals(s_userCheckNInfo)) return s_userCheckNInfo;
System.out.println("vEEduAplctVO.getSearchRsdne() : "+vEEduAplctVO.getSearchRsdne());
String searchRsdne = vEEduAplctVO.getSearchRsdne();
//로그인 처리==================================== //로그인 처리====================================
//0.step0 //0.step0
//해당 처시 정보 가져오기 (온라인 오프라인 여부 신청내용 확인) //해당 처시 정보 가져오기 (온라인 오프라인 여부 신청내용 확인)
vEEduAplctVO = vEEduAplctService.selectDetailChasi(vEEduAplctVO); vEEduAplctVO = vEEduAplctService.selectDetailChasi(vEEduAplctVO);
System.out.println(vEEduAplctVO.getEduSlctCd()); //10-온라인, 20-오프라인 System.out.println(vEEduAplctVO.getEduSlctCd()); //10-온라인, 20-오프라인
System.out.println(vEEduAplctVO.getAplctCn()); //신청내용 System.out.println(vEEduAplctVO.getAplctCn()); //신청내용
System.out.println(vEInstrAsgnmVO.getInstrNm()); //검색강사 System.out.println(vEInstrAsgnmVO.getInstrNm()); //검색강사
@ -326,6 +354,9 @@ public class EduCnfrmMngAdultController {
System.out.println("vEEduAplctVO.getAplctCn()"); //신청내용 System.out.println("vEEduAplctVO.getAplctCn()"); //신청내용
//1.step1.신청내용과 맞는 선호분야를 가진 강사를 가져온다. //1.step1.신청내용과 맞는 선호분야를 가진 강사를 가져온다.
@ -356,6 +387,14 @@ public class EduCnfrmMngAdultController {
} }
// 지역검색
if(StringUtils.isNotEmpty(searchRsdne))
{
// KoreanRegionEnum Class 참고
// VEA017 코드 번호만 넘기면 경상남도, 경남과 같은 값을 return함
// return "AND rsdne like '%' || '"+fullName+"' || '%' OR rsdne like '%' || '"+shortName+"' || '%' ";
vEInstrAsgnmVO.setSelectRsdneQuery(this.getRsdneQueryStr(searchRsdne));
}
vEInstrAsgnmVO.setYr(vEEduAplctVO.getEduHopeDt().substring(0,4)); vEInstrAsgnmVO.setYr(vEEduAplctVO.getEduHopeDt().substring(0,4));
vEInstrAsgnmVO.setSearchQuery(s_searchQuery); vEInstrAsgnmVO.setSearchQuery(s_searchQuery);
List<VEInstrAsgnmVO> selectVEInstrAsgnmVOList = vEAsgnmMIX2023Service.selectInstrAsgnmList_202311_adult(vEInstrAsgnmVO); List<VEInstrAsgnmVO> selectVEInstrAsgnmVOList = vEAsgnmMIX2023Service.selectInstrAsgnmList_202311_adult(vEInstrAsgnmVO);

View File

@ -1676,7 +1676,7 @@ public class CndtnPrcsInfoMngController {
//vEPrcsDetailVO.setPrcsDiv("10");// 과정구분 VE0015 10-산업종사자, 20-대학생, 30-공무원, 40-일반인, 50-청소년, 60-학부모 //vEPrcsDetailVO.setPrcsDiv("10");// 과정구분 VE0015 10-산업종사자, 20-대학생, 30-공무원, 40-일반인, 50-청소년, 60-학부모
} }
List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsAplctPrdService.selectPagingList4Fndth(vEPrcsDetailVO); List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsAplctPrdService.selectCfnPagingList4Fndth(vEPrcsDetailVO);
//3.pageing step3 //3.pageing step3
paginationInfo = this.setPagingStep3(vEPrcsDetailVOList, paginationInfo); paginationInfo = this.setPagingStep3(vEPrcsDetailVOList, paginationInfo);

View File

@ -310,7 +310,7 @@ public class FndthPrcsAplctPrdMngController {
//vEPrcsDetailVO.setPrcsDiv("10");// 과정구분 VE0015 10-산업종사자, 20-대학생, 30-공무원, 40-일반인, 50-청소년, 60-학부모 //vEPrcsDetailVO.setPrcsDiv("10");// 과정구분 VE0015 10-산업종사자, 20-대학생, 30-공무원, 40-일반인, 50-청소년, 60-학부모
} }
List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsAplctPrdService.selectPagingList4Fndth(vEPrcsDetailVO); List<VEPrcsDetailVO> vEPrcsDetailVOList = vEPrcsAplctPrdService.selectCfnPagingList4Fndth(vEPrcsDetailVO);
//3.pageing step3 //3.pageing step3
paginationInfo = this.setPagingStep3(vEPrcsDetailVOList, paginationInfo); paginationInfo = this.setPagingStep3(vEPrcsDetailVOList, paginationInfo);

View File

@ -938,6 +938,9 @@
) )
WHERE 1 =1 WHERE 1 =1
<isNotEmpty property="selectRsdneQuery">
$selectRsdneQuery$
</isNotEmpty>
AND b.user_id =a.user_id AND b.user_id =a.user_id
AND b.use_yn ='Y' AND b.use_yn ='Y'
AND b.INSTR_DIV ='20' AND b.INSTR_DIV ='20'

View File

@ -2605,6 +2605,7 @@
AND b.edu_chasi_ord = i.edu_chasi_ord AND b.edu_chasi_ord = i.edu_chasi_ord
GROUP BY i.edu_aplct_ord , i.edu_chasi_ord GROUP BY i.edu_aplct_ord , i.edu_chasi_ord
),0) AS rowNo ),0) AS rowNo
, e.rsdne as rsdne
FROM ve_edu_aplct a FROM ve_edu_aplct a
, ve_edu_chasi b , ve_edu_chasi b
@ -2733,6 +2734,11 @@
$checkListQuery$ $checkListQuery$
</isNotEmpty> </isNotEmpty>
<isNotEmpty property="selectRsdneQuery">
$selectRsdneQuery$
</isNotEmpty>
<isEqual property="searchSubmitYn" compareValue="Y"> <isEqual property="searchSubmitYn" compareValue="Y">
AND AA.CNT <![CDATA[ >= ]]> 1 AND AA.CNT <![CDATA[ >= ]]> 1
</isEqual> </isEqual>

View File

@ -403,6 +403,78 @@
ORDER BY 1
<isEmpty property="orderByQuery">
, a.prcs_aplct_prd_ord desc
</isEmpty>
<isNotEmpty property="orderByQuery">
, $orderByQuery$
</isNotEmpty>
/*
LIMIT recordCountPerPage OFFSET firstIndex
*/
OFFSET #firstIndex# ROWS FETCH NEXT #recordCountPerPage# ROWS ONLY;
</select>
<!-- 기반강화, 기소유예 확정 L page -->
<select id="VEPrcsAplctPrdDAO.selectCfnPagingList4Fndth" parameterClass="VEPrcsDetailVO" resultClass="VEPrcsDetailVO">
/* VEPrcsAplctPrdDAO.selectCfnPagingList4Fndth */
SELECT
COUNT(1) OVER() AS totCnt ,
<include refid="VEPrcsAplctPrdDAO.select_column_name"/>
, (SELECT user_nm FROM comvnusermaster WHERE esntl_id = a.frst_register_id) as frstRegisterNm
, (SELECT orignl_file_nm FROM lettnfiledetail WHERE atch_file_id = a.atch_file_id LIMIT 1) as atchFileNm
, b.prcs_nm as prcsNm
, b.prcs_div as prcsDiv
, (SELECT COUNT(*)
FROM ve_edu_aplct x
WHERE x.prcs_ord = a.prcs_aplct_prd_ord
AND x.sbmt_yn='Y'
AND x.aprvl_cd != 40 /*취소된 신청자 제거*/
AND x.aprvl_cd != 30 /*취소된 신청자 제거*/
) AS nosCnt1
/*
신청자 정보
*/
FROM
<include refid="VEPrcsAplctPrdDAO.table_name"/> a
, ve_prcs b
WHERE
1=1
AND a.prcs_ord=b.prcs_ord
<isNotEmpty property="selectPagingListQuery">
$selectPagingListQuery$
</isNotEmpty>
<isNotEmpty property="lctrDivCd">
AND a.lctr_div_cd=#lctrDivCd#
</isNotEmpty>
<isNotEmpty property="prcsAplctPrdOrd">
AND a.prcs_aplct_prd_ord=#prcsAplctPrdOrd#
</isNotEmpty>
/*교육확정목록을 조회하기 위한 조건문*/
<isNotEmpty property="ddlnCd">
AND a.ddln_cd = #ddlnCd#
</isNotEmpty>
<isNotEmpty property="searchKeyword">
AND b.prcs_nm LIKE '%'|| #searchKeyword# ||'%'
</isNotEmpty>
ORDER BY 1 ORDER BY 1
<isEmpty property="orderByQuery"> <isEmpty property="orderByQuery">

View File

@ -560,8 +560,6 @@
</div> </div>
<div class="util_right"> <div class="util_right">
<input type="text" id="searchInsttNm" name="searchInsttNm" class="search_input" placeholder="검색어를 입력하세요" value="${vEEduAplctVO.searchInsttNm}" onkeyDown="press(event);"> <input type="text" id="searchInsttNm" name="searchInsttNm" class="search_input" placeholder="검색어를 입력하세요" value="${vEEduAplctVO.searchInsttNm}" onkeyDown="press(event);">
<button class="btn_type08" onclick="fncGoList(); return false;">검색</button>
<button class="btn_type03" onclick="fncReset(this); return false;">초기화</button>
</div> </div>
</div> </div>
<div class="list_top_1"> <div class="list_top_1">
@ -585,8 +583,24 @@
<div class="calendar_wrap"> <div class="calendar_wrap">
<input type="text" class="calendar" title="종료일 선택" id="searchEndDt" name="searchEndDt" value="<c:out value='${vEEduAplctVO.searchEndDt}'/>"> <input type="text" class="calendar" title="종료일 선택" id="searchEndDt" name="searchEndDt" value="<c:out value='${vEEduAplctVO.searchEndDt}'/>">
</div> </div>
<button class="btn_type08" onclick="fncGoList(); return false;">검색</button>
<button class="btn_type03" onclick="fncReset(this); return false;">초기화</button>
</div> </div>
</div> </div>
<%--
<div class="list_top_2">
<div class="util_left">
<p>지역검색</p>
</div>
<div class="util_right">
<ve:select codeId="VEA017" name="searchRsdne" id="searchRsdne" css="class='sel_type1'"
selectedValue="${vEEduAplctVO.searchRsdne}" defaultValue=''
defaultText='전체'
/>
<button class="btn_type08" onclick="fncGoList(); return false;">검색</button>
<button class="btn_type03" onclick="fncReset(this); return false;">초기화</button>
</div>
</div> --%>
</div> </div>
<!-- //list_top --> <!-- //list_top -->

View File

@ -132,6 +132,10 @@
<div class="util_left"> <div class="util_left">
<p>강사검색</p> <p>강사검색</p>
</div> </div>
<ve:select codeId="VEA017" name="searchRsdne" id="searchRsdne" css="class='sel_type1'"
selectedValue="${vEEduAplctVO.searchRsdne}" defaultValue=''
defaultText='지역전체'
/>
<%-- <ve:select codeId="VE0008" name="searchEduSlctAreaCd" id="searchEduSlctAreaCd" css="class='sel_type1'" --%> <%-- <ve:select codeId="VE0008" name="searchEduSlctAreaCd" id="searchEduSlctAreaCd" css="class='sel_type1'" --%>
<%-- selectedText="${vEEduAplctVO.rsdne}" defaultValue='' --%> <%-- selectedText="${vEEduAplctVO.rsdne}" defaultValue='' --%>
<%-- defaultText='전체' --%> <%-- defaultText='전체' --%>

View File

@ -252,7 +252,7 @@
<th>교육구분코드</th> <th>교육구분코드</th>
<th>과정명</th> <th>과정명</th>
<th>교육기간</th> <th>교육기간</th>
<th>신청자/정원</th> <th>승인자/정원</th>
<th>상태</th> <th>상태</th>
<th>강사배정</th> <th>강사배정</th>
<!-- <th>공개여부</th> --> <!-- <th>공개여부</th> -->