Просмотр исходного кода

관리자 > 주문상세 > 주문취소 개발중

jsh77b 5 лет назад
Родитель
Сommit
6781091284

+ 41 - 1
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaOrderDao.java

@@ -2,11 +2,11 @@ package com.style24.admin.biz.dao;
 
 import java.util.Collection;
 
-import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.session.ResultHandler;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 
 /**
  * 주문관리 Dao
@@ -359,6 +359,46 @@ public interface TsaOrderDao {
 	 */
 	Collection<Order> getCancelRequestTargetList(Order order);
 	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문변경정보 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderChange(OrderChange orderChange);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문변경정보 상세 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderChangeDetail(OrderChange orderChange);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 수정
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int updateOrderDetailItem(Order order);
+	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 22
+	 */
+	int createOrderDetailItemHst(Order order);
+	
 	
 }
 

+ 310 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaOrderService.java

@@ -1,6 +1,8 @@
 package com.style24.admin.biz.service;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,11 +13,13 @@ import org.springframework.transaction.annotation.Transactional;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.excel.env.GagaExcelConstants;
 import com.gagaframework.excel.xssf.GagaExcelResultHandler;
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.admin.biz.dao.TsaOrderDao;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.admin.support.util.TsitUtil;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -587,4 +591,310 @@ public class TsaOrderService {
 		return orderDao.getCancelRequestTargetList(order);
 	}
 	
+	/**
+	 * 주문상세 > 주문취소대상목록
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 16
+	 */
+	public GagaMap orderCancelRefundAmt(List<Order> cancelReqList) {
+		GagaMap mav = new GagaMap();
+		
+		int spanPayAmt			= 0; // 총 결제 금액
+		int spanSumRealOrdAmt	= 0; // 상품 실결제 금액
+		int spanSumDeliveryFee	= 0; // 배송금액
+		int spanOrdAmt			= 0; // 주문 상품 금액
+		int spanCnclRtnAmt		= 0; // 취소 상품 금액
+		int spanTotPntDcAmt		= 0; // 취소 사용 포인트
+		int spanPntDcAmt		= 0; // 고객 포인트
+		int spanPrePntDcAmt		= 0; // 상품 선포인트
+		int spanCpnDcAmt		= 0; // 취소 사용 쿠폰금액
+		int spanCpn1DcAmt		= 0; // 즉시할인쿠폰
+		int spanGoodsCpnDcAmt	= 0; // 상품쿠폰
+		int spanCartCpnDcAmt	= 0; // 장바구니쿠폰
+		int spanTmtbDcAmt		= 0; // 취소 다다익선 금액
+		int spanTmtb1DcAmt		= 0; // 수량할인
+		int spanTmtb2DcAmt		= 0; // 금액할인
+		int spanGfcdUseAmt		= 0; // 취소 고객 상품권 금액
+		int spanRealCnclRtnAmt	= 0; // 취소 상품 실결제 금액
+		int spanTotDeliveryFee	= 0; // 환불 배송 금액
+		int spanRefundAmt		= 0; // 환불 금액 합계
+		
+		List<Order> cancelOrderRefundList = new ArrayList<Order>();		// 주문환불금액목록
+		List<Order> cancelDelvRefundList 	= new ArrayList<Order>();	// 주문환불배송금액목록
+		
+		Order orderObj	= new Order();
+		Order delvObj	= new Order();
+		int k 			= 0 ;
+		
+		// 최초의 배송정보를 설정
+		delvObj.setOrdAmt(0);
+		delvObj.setCnclRtnAmt(0);
+		delvObj.setRealOrdAmt(0);
+		delvObj.setDelvFee(cancelReqList.get(k).getDelvFee());
+		delvObj.setMinOrdAmt(cancelReqList.get(k).getMinOrdAmt());
+		delvObj.setOrgDelvFee(cancelReqList.get(k).getOrgDelvFee());
+		delvObj.setSupplyCompCd(cancelReqList.get(k).getSupplyCompCd());
+		delvObj.setDelvFeeCd(cancelReqList.get(k).getDelvFeeCd());
+		delvObj.setAllCanYn(cancelReqList.get(k).getAllCanYn());
+		cancelDelvRefundList.add(delvObj);
+
+		for (Order oneData : cancelReqList) {
+			orderObj	= new Order();
+			
+			// 주문정보설정
+			orderObj.setItemQty(oneData.getItemQty());
+			orderObj.setOrdQty(oneData.getOrdQty());
+			orderObj.setCnclRtnQty(oneData.getCnclRtnQty());
+			orderObj.setOrdReqChgQty(oneData.getOrdReqChgQty());
+			orderObj.setOrdCanChgQty(oneData.getOrdCanChgQty());
+			orderObj.setItemPrice(oneData.getItemPrice());
+			orderObj.setOptAddPrice	(oneData.getOptAddPrice());
+			orderObj.setOrdAmt(oneData.getOrdAmt());
+			
+			orderObj.setOrdNo(oneData.getOrdNo());
+			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
+			orderObj.setGoodsCd(oneData.getGoodsCd());
+			orderObj.setGoodsNm(oneData.getGoodsNm());
+			orderObj.setOrdDtlItemSq(oneData.getOrdDtlItemSq());
+			orderObj.setItemCd(oneData.getItemCd());
+			orderObj.setItemNm(oneData.getItemNm());
+			orderObj.setOptCd1(oneData.getOptCd1());
+			orderObj.setOptCd2(oneData.getOptCd2());
+			
+			int ordQty 			= oneData.getOrdQty();
+			int itemQty 		= oneData.getItemQty();
+			int ordCanChgQty 	= oneData.getOrdCanChgQty();
+			
+			// 취소금액계산
+			orderObj.setCnclRtnAmt(((oneData.getItemPrice() + oneData.getOptAddPrice()) * itemQty) * ordCanChgQty);
+			orderObj.setCpn1DcAmt(oneData.getCpn1DcAmt() 			* (ordCanChgQty/ordQty));
+			orderObj.setTmtb1DcAmt(oneData.getTmtb1DcAmt() 			* (ordCanChgQty/ordQty));
+			orderObj.setTmtb2DcAmt(oneData.getTmtb2DcAmt() 			* (ordCanChgQty/ordQty));
+			orderObj.setGoodsCpnDcAmt(oneData.getGoodsCpnDcAmt() 	* (ordCanChgQty/ordQty));
+			orderObj.setCartCpnDcAmt(oneData.getCartCpnDcAmt() 		* (ordCanChgQty/ordQty));
+			orderObj.setPntDcAmt(oneData.getPntDcAmt() 				* (ordCanChgQty/ordQty));
+			orderObj.setPrePntDcAmt(oneData.getPrePntDcAmt() 		* (ordCanChgQty/ordQty));
+			orderObj.setGfcdUseAmt(oneData.getGfcdUseAmt() 			* (ordCanChgQty/ordQty));
+			
+			// 취소할인금액
+			int dcTotAmt		= 0;
+			dcTotAmt			+= orderObj.getTmtb1DcAmt();
+			dcTotAmt			+= orderObj.getTmtb2DcAmt();
+			dcTotAmt			+= orderObj.getGoodsCpnDcAmt();
+			dcTotAmt			+= orderObj.getCartCpnDcAmt();
+			dcTotAmt			+= orderObj.getPntDcAmt();
+			dcTotAmt			+= orderObj.getPrePntDcAmt();
+			dcTotAmt			+= orderObj.getCpn1DcAmt();
+			dcTotAmt			+= orderObj.getGfcdUseAmt();
+			
+			// 취소환불금액
+			orderObj.setRealOrdAmt(orderObj.getCnclRtnAmt() - dcTotAmt);
+			
+			// 배송관련 설정		
+			orderObj.setOrdDtlNo(oneData.getOrdDtlNo());
+			orderObj.setGoodsTypeNm(oneData.getGoodsTypeNm());
+			orderObj.setDelvFee(oneData.getDelvFee());
+			orderObj.setSupplyCompCd(oneData.getSupplyCompCd());
+			orderObj.setDelvFeeCd(oneData.getDelvFeeCd());
+			orderObj.setMinOrdAmt(oneData.getMinOrdAmt());
+			orderObj.setOrgDelvFee(oneData.getOrgDelvFee());
+			
+			// 주문상세상태
+			orderObj.setOrdDtlStat(oneData.getOrdDtlStat());
+			orderObj.setOrdDtlStatNm(oneData.getOrdDtlStatNm());
+			orderObj.setAllCanYn(oneData.getAllCanYn());
+			
+			cancelOrderRefundList.add(orderObj);
+			
+			// 배송비 정책 기준으로 조건 처리
+			if (cancelDelvRefundList.get(k).getSupplyCompCd().equals(orderObj.getSupplyCompCd()) && cancelDelvRefundList.get(k).getDelvFeeCd().equals(orderObj.getDelvFeeCd())) {
+				// 공급업체 와 배송정책코드가 같으면 주문금액, 취소금액 SUM
+				cancelDelvRefundList.get(k).setOrdAmt(cancelDelvRefundList.get(k).getOrdAmt() + orderObj.getOrdAmt());
+				cancelDelvRefundList.get(k).setCnclRtnAmt(cancelDelvRefundList.get(k).getCnclRtnAmt() + orderObj.getCnclRtnAmt());
+				cancelDelvRefundList.get(k).setRealOrdAmt(cancelDelvRefundList.get(k).getRealOrdAmt() + orderObj.getRealOrdAmt());
+				
+				if ("N".equals(orderObj.getAllCanYn())) {
+					cancelDelvRefundList.get(k).setAllCanYn("N");
+				}
+			} else {			
+				k++;
+				
+				delvObj	= new Order();
+				
+				// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+				delvObj.setOrdAmt(orderObj.getOrdAmt());
+				delvObj.setCnclRtnAmt(orderObj.getCnclRtnAmt());
+				delvObj.setRealOrdAmt(orderObj.getRealOrdAmt());
+				
+				delvObj.setDelvFee(orderObj.getDelvFee());
+				delvObj.setMinOrdAmt(orderObj.getMinOrdAmt());			
+				delvObj.setOrgDelvFee(orderObj.getOrgDelvFee());
+				delvObj.setSupplyCompCd(orderObj.getSupplyCompCd());
+				delvObj.setDelvFeeCd(orderObj.getDelvFeeCd());
+				delvObj.setAllCanYn(orderObj.getAllCanYn());
+				
+				cancelDelvRefundList.add(delvObj);
+			}
+			
+			
+			spanSumRealOrdAmt	+= oneData.getRealOrdAmt();
+			spanPntDcAmt		+= orderObj.getPntDcAmt();
+			spanPrePntDcAmt		+= orderObj.getPrePntDcAmt();
+			spanCpn1DcAmt		+= orderObj.getCpn1DcAmt();
+			spanGoodsCpnDcAmt	+= orderObj.getGoodsCpnDcAmt();
+			spanCartCpnDcAmt	+= orderObj.getCartCpnDcAmt();
+			spanTmtb1DcAmt		+= orderObj.getTmtb1DcAmt();
+			spanTmtb2DcAmt		+= orderObj.getTmtb2DcAmt();
+			spanGfcdUseAmt		+= orderObj.getGfcdUseAmt();
+			spanRealCnclRtnAmt	+= orderObj.getRealOrdAmt();
+		}
+		
+		// 추가배송비 발생여부 , 추가배송비, 배송비정책단위 전체취소 여부
+		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+			Order obj = cancelDelvRefundList.get(i);
+			
+			// 무료배송비용 > (주문금액 - 취소금액)
+			if (obj.getMinOrdAmt() > (obj.getOrdAmt() - obj.getCnclRtnAmt())) {
+				// 2020.12.28 
+				// case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
+				if ((obj.getOrdAmt() - obj.getCnclRtnAmt()) == 0) {
+					if ("N".equals(obj.getAllCanYn())) {
+						obj.setAddDelvFeeYn("Y");
+						obj.setAddDelvFee(obj.getOrgDelvFee());
+					} else {
+						// 전체취소의 경우에 해당
+						obj.setAddDelvFeeYn("N");
+						obj.setAddDelvFee(0);
+					}
+				} else {
+					// 취소신청화면에서 대부분 아래의 조건에 해당
+					obj.setAddDelvFeeYn("Y");
+					obj.setAddDelvFee(obj.getOrgDelvFee());
+				}
+			} else {
+				obj.setAddDelvFeeYn("N");
+				obj.setAddDelvFee(0);
+			}
+			
+			spanSumDeliveryFee	+= obj.getDelvFee();
+			spanOrdAmt			+= obj.getOrdAmt();
+			spanCnclRtnAmt		+= obj.getCnclRtnAmt();
+			spanTotDeliveryFee  += obj.getAddDelvFee();
+			
+			cancelDelvRefundList.set(i, obj);
+		}
+		
+		// 2020.12.30 프론트에서 필요한 부분 작업 필여
+		// 관리자 화면에서 사용하는 환불 칼럼 정보
+		// 환불금액표시
+		spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee;
+		spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
+		spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
+		spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
+		spanRefundAmt 		= spanRealCnclRtnAmt - spanTotDeliveryFee;
+
+		mav.set("cancelOrderRefundList"	, cancelOrderRefundList);	//주문 환불 금액 목록
+		mav.set("cancelDelvRefundList"	, cancelDelvRefundList);	//주문 환불 배송 금액 목록
+		mav.set("spanPayAmt"			, spanPayAmt);				//총 결제 금액
+		mav.set("spanSumRealOrdAmt"		, spanSumRealOrdAmt);		//상품 실결제 금액
+		mav.set("spanSumDeliveryFee"	, spanSumDeliveryFee);		//배송금액
+		mav.set("spanOrdAmt"			, spanOrdAmt);				//주문 상품 금액
+		mav.set("spanCnclRtnAmt"		, spanCnclRtnAmt);			//취소 상품 금액
+		mav.set("spanTotPntDcAmt"		, spanTotPntDcAmt);			//취소 사용 포인트
+		mav.set("spanPntDcAmt"			, spanPntDcAmt);			//고객 포인트
+		mav.set("spanPrePntDcAmt"		, spanPrePntDcAmt);			//상품 선포인트
+		mav.set("spanCpnDcAmt"			, spanCpnDcAmt);			//취소 사용 쿠폰금액
+		mav.set("spanCpn1DcAmt"			, spanCpn1DcAmt);			//즉시할인쿠폰
+		mav.set("spanGoodsCpnDcAmt"		, spanGoodsCpnDcAmt);		//상품쿠폰
+		mav.set("spanCartCpnDcAmt"		, spanCartCpnDcAmt);		//장바구니쿠폰
+		mav.set("spanTmtbDcAmt"			, spanTmtbDcAmt);			//취소 다다익선 금액
+		mav.set("spanTmtb1DcAmt"		, spanTmtb1DcAmt);			//수량할인
+		mav.set("spanTmtb2DcAmt"		, spanTmtb2DcAmt);			//금액할인
+		mav.set("spanGfcdUseAmt"		, spanGfcdUseAmt);			//취소 고객 상품권 금액
+		mav.set("spanRealCnclRtnAmt"	, spanRealCnclRtnAmt);		//취소 상품 실결제 금액
+		mav.set("spanTotDeliveryFee"	, spanTotDeliveryFee);		//환불 배송 금액
+		mav.set("spanRefundAmt"			, spanRefundAmt);			//환불 금액 합계
+		
+		return mav;
+	}
+	
+	// 문자의 오른쪽으로 숫자만큼 공백 삽인
+	private static String padRight(String s, int n) {
+		return String.format("%-" + n + "s", s);
+	}
+	
+	// 문자의 왼쪽으로 숫자만큼 공백 삽인
+	private static String padLeft(String s, int n) {
+		return String.format("%" + n + "s", s);
+	}
+	
+	/**
+	 * 주문상세 > 주문취소
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2020. 12. 30
+	 */
+	@Transactional("shopTxnManager")
+	public void orderCancel(GagaMap mav) {
+		
+		// 1. 세션회원조회
+		int userNo = TsaSession.getInfo().getUserNo();
+		
+		// 2. 취소요정정보목록
+		List<Order> cancelOrderRefundList = (List<Order>) mav.get("cancelOrderRefundList");
+		
+		// 3. 취소신청정보
+		int ordNo 			= Integer.parseInt(mav.getString("ordNo").toString());
+		String chgReason 	= mav.getString("chgReason").toString();
+		String chgMemo 		= mav.getString("chgMemo").toString();
+		String chgGb		= "G680_20";
+		
+		// 4.1 주문변경 기본정보 등록
+		OrderChange orderChange = new OrderChange();
+		orderChange.setOrdNo(ordNo);
+		orderChange.setChgGb(chgGb);
+		orderChange.setChgReason(chgReason);
+		orderChange.setChgMemo(chgMemo);
+		orderChange.setAddPayCost(0);
+		orderChange.setAddPayAmt(0);
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+		
+		orderDao.createOrderChange(orderChange);
+		
+		// 4.2 주문변경 상세 정보 등록
+		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+			Order vo = cancelOrderRefundList.get(i);
+			vo.setRegNo(userNo);
+			vo.setUpdNo(userNo);
+			vo.setOrdDtlStat("G685_21");
+			
+			// 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
+			if (vo.getOrdCanChgQty() > 0) {
+				OrderChange po = new OrderChange();
+				
+				po.setOrdChgSq(orderChange.getOrdChgSq());
+				po.setOrdDtlNo(vo.getOrdDtlNo());
+				po.setChgQty(vo.getOrdCanChgQty());
+				po.setChgStat("G685_21");
+				po.setRegNo(userNo);
+				po.setUpdNo(userNo);
+				
+				// 4.2.2 주문변경상세정보 등록
+				orderDao.createOrderChangeDetail(po);
+				
+				// 4.2.3 주문상세단품정보 변경
+				orderDao.updateOrderDetailItem(vo);
+				
+				// 4.2.4 주문상세단품정보 이력 등록
+				orderDao.createOrderDetailItemHst(vo);
+				
+				int a = 100/0;
+			}
+		}
+	}
+	
 }

+ 65 - 2
style24.admin/src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -3,6 +3,7 @@ package com.style24.admin.biz.web;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -31,8 +32,11 @@ import com.style24.admin.biz.service.TsaOrderService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TsaPageRequest;
+import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -47,6 +51,9 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class TsaOrderController extends TsaBaseController {
 	
+	@Autowired
+	private TscMessageByLocale message;
+	
 	@Autowired
 	private Environment env;
 	
@@ -637,18 +644,74 @@ public class TsaOrderController extends TsaBaseController {
 		
 		Collection<Order> cancelRequestTargetList = orderService.getCancelRequestTargetList(order);
 
-		Order orderInfo = orderService.getOrderInfo(order);
+		//Order orderInfo = orderService.getOrderInfo(order);
 
 		//mav.addObject("nicePay", nicePay);
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 취소사유
 		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 취소요청대상 목록
-		mav.addObject("orderInfo"					, orderInfo);										// 주문정보
+		//mav.addObject("orderInfo"					, orderInfo);										// 주문정보
 		mav.addObject("ordNo"						, ordNo);
 		mav.addObject("cncWait"						, cncWait);
 
 		mav.setViewName("order/CancelRequestForm");
 		return mav;
 	}
+	
+	/**
+	 * 주문취소신청환불금액 계산
+	 * @param Collection<Order>- 주문취소신청목록
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 29
+	 */
+	@PostMapping("/cancel/refundAmt")
+	@ResponseBody
+	public GagaMap orderCancelRefundAmt(@RequestBody List<Order> cancelReqList) {
+		
+		GagaMap mav = new GagaMap();
+		
+		if (cancelReqList == null || cancelReqList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+		
+		// 1. 환불금액정보 계산 & 조회
+		mav = orderService.orderCancelRefundAmt(cancelReqList);
+		
+		return mav;
+	}
+	
+	/**
+	 * 주문취소신청
+	 * @param Collection<Order> - 주문취소신청목록
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 29
+	 */
+	@PostMapping("/cancel")
+	@ResponseBody
+	public GagaResponse orderCancel(@RequestBody OrderChange cancelReq) {
+		
+		GagaMap mav = new GagaMap();
+		
+		if (cancelReq== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		List<Order> cancelReqList = cancelReq.getCancelReqList(); // 취소요청정보
+		
+		// 1. 환불금액정보 계산 & 조회
+		mav = orderService.orderCancelRefundAmt(cancelReqList);
+		
+		// 2. 주문변경기본정보 설정
+		mav.set("ordNo"			, cancelReq.getOrdNo());
+		mav.set("chgReason"		, cancelReq.getChgReason());
+		mav.set("chgMemo"		, cancelReq.getChgMemo());
+		
+		// 3. 주문변경 DB 등록 (주문정보, 배송정보)
+		orderService.orderCancel(mav);
+		
+		return super.ok("성공");
+	}
 }
 
 

+ 6 - 0
style24.admin/src/main/java/com/style24/persistence/domain/Order.java

@@ -315,6 +315,12 @@ public class Order extends TscBaseDomain {
 	private int orgDelvFee;
 	private String delvFeeCd;
 	private int ordCanChgQty;
+	private String allCanYn;
+	
+	private String addDelvFeeYn;
+	private int addDelvFee;
+	private int ordDtlItemSq;
+	
 
 }
 

+ 75 - 0
style24.admin/src/main/java/com/style24/persistence/domain/OrderChange.java

@@ -0,0 +1,75 @@
+package com.style24.persistence.domain;
+
+import java.util.List;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 주문 취소 Domain
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@SuppressWarnings("serial")
+@Data
+public class OrderChange extends TscBaseDomain {
+	
+	List<Order> cancelReqList;
+	private int ordNo;
+	
+	private int ordChgSq;
+	private String chgGb;
+	private String chgReason;
+	private String chgMemo;
+	private String chgerNm;
+	private String chgerPhnno;
+	private String chgerTelno;
+	private String chgerEmail;
+	private String chgerZipNo;
+	private String chgerBaseAddr;
+	private String chgerDtlAddr;
+	private String chgerRtnMemo;
+	private int addPayCost;
+	private int addPayAmt;
+	private String wdInvoiceNo;
+	private String wdInvoiceSendYn;
+	private String wdStdt;
+	private String wdEddt;
+	private String shipCompCd;
+	
+	private int ordDtlNo;
+	private int chgQty;
+	private String chgStat;
+	private String chgStatNm;
+	private String whMemo;
+	
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 184 - 4
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -33,7 +33,9 @@
 			     , OCD.CHG_STAT
 			FROM   TB_ORDER_CHANGE OC
 			INNER  JOIN TB_ORDER_CHANGE_DETAIL OCD
-			ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
+			ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ
+			WHERE  1=1 
+			GROUP  BY OCD.ORD_DTL_NO 
 		) OCD
 		ON    OD.ORD_DTL_NO = OCD.ORD_DTL_NO
 		WHERE  1=1
@@ -246,6 +248,8 @@
 					FROM   TB_ORDER_CHANGE OC
 					INNER  JOIN TB_ORDER_CHANGE_DETAIL OCD
 					ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
+					WHERE  1=1
+					GROUP  BY OCD.ORD_DTL_NO 
 				) OCD
 				ON    OD.ORD_DTL_NO = OCD.ORD_DTL_NO
 				WHERE  1=1
@@ -1569,6 +1573,7 @@
 	
 	<!-- 주문정보 -->
 	<select id="getOrderInfo" parameterType="Order" resultType="Order">
+		/* order.getOrderInfo */
 		SELECT O.ORD_NO
 		     , O.MALL_GB
 		     , FN_GET_CODE_NM('G011', O.MALL_GB) AS MALL_GB_NM
@@ -1633,8 +1638,15 @@
 	
 	<!-- 주문상세 > 주문취소대상목록 -->
 	<select id="getCancelRequestTargetList" parameterType="Order" resultType="Order">
+		/* order.getCancelRequestTargetList */
 		SELECT OD.ORD_NO
 		     , OD.ORD_DTL_NO
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+		     , CASE WHEN OD.ORD_DTL_STAT IN ('G013_20', 'G013_30', 'G013_40')
+		            THEN 'Y'
+		            ELSE 'N'
+		             END ALL_CAN_YN
 		     , G1.GOODS_CD
 		     , G1.GOODS_NM
 		     , G1.GOODS_TYPE
@@ -1686,7 +1698,7 @@
 			INNER  JOIN TB_ORDER_DETAIL OD
 			ON     OCD.ORD_DTL_NO = OD.ORD_DTL_NO
 			WHERE  1=1
-			AND    OD.ORD_NO = 9
+			AND    OD.ORD_NO = #{ordNo}
 			AND    OCD.CHG_STAT IN (
 				'G685_20', 'G685_30', 'G685_40'
 			)
@@ -1703,12 +1715,180 @@
 		AND    OD.ORD_DTL_STAT IN (
 			'G013_10', 'G013_20', 'G013_30', 'G013_40'
 		)
-		AND    OD.ORD_NO = 9
+		AND    OD.ORD_NO = #{ordNo}
 		GROUP  BY OD.ORD_NO
 		     , OD.ORD_DTL_NO
 	    ORDER  BY OD.ORD_NO
 	         , OD.ORD_DTL_NO
-	</select>
+	</select>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
+	<insert id="createOrderChange" parameterType="OrderChange" keyProperty="ordChgSq">
+		/* Order.createOrderChange */
+		INSERT INTO TB_ORDER_CHANGE (
+			CHG_GB
+			, CHG_REASON
+			, CHG_MEMO
+			, CHGER_NM
+			, CHGER_PHNNO
+			, CHGER_TELNO
+			, CHGER_EMAIL
+			, CHGER_ZIP_NO
+			, CHGER_BASE_ADDR
+			, CHGER_DTL_ADDR
+			, CHGER_RTN_MEMO
+			, ADD_PAY_COST
+			, ADD_PAY_AMT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) 
+		SELECT #{chgGb}
+			 , #{chgReason}
+			 , #{chgMemo}
+			 , ORD_NM
+			 , ORD_PHNNO
+			 , ORD_TELNO
+			 , ORD_EMAIL
+			 , #{chgerZipNo}
+			 , #{chgerBaseAddr}
+			 , #{chgerDtlAddr}
+			 , #{chgerRtnMemo}
+			 , #{addPayCost}
+			 , #{addPayAmt}
+			 , #{regNo}
+			 , SYSDATE()
+			 , #{updNo}
+			 , SYSDATE()
+		FROM   TB_ORDER  
+		WHERE  ORD_NO = #{ordNo}
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문변경정보 등록-->
+	<insert id="createOrderChangeDetail" parameterType="OrderChange">
+		/* Order.createOrderChangeDetail */
+		INSERT INTO TB_ORDER_CHANGE_DETAIL (
+			ORD_CHG_SQ
+			, ORD_DTL_NO
+			, CHG_QTY
+			, CHG_STAT
+			, COMPLETE_DT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			#{ordChgSq}
+			, #{ordDtlNo}
+			, #{chgQty}
+			, #{chgStat}
+			, SYSDATE()
+			, #{regNo}
+			, SYSDATE()
+			, #{updNo}
+			, SYSDATE()
+		)
+	</insert>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->
+	<update id="updateOrderDetailItem" parameterType="Order">
+		/* Order.updateOrderDetailItem */
+		UPDATE TB_ORDER_DETAIL_ITEM
+		SET    ORD_AMT = ORD_AMT - #{cnclRtnAmt}
+		     , CNCL_RTN_AMT = CNCL_RTN_AMT + #{cnclRtnAmt}
+		     , CPN1_DC_AMT = CPN1_DC_AMT - #{cpn1DcAmt}
+		     , TMTB1_DC_AMT = TMTB1_DC_AMT - #{tmtb1DcAmt}
+		     , TMTB2_DC_AMT = TMTB1_DC_AMT - #{tmtb2DcAmt}
+		     , GOODS_CPN_DC_AMT = GOODS_CPN_DC_AMT - #{goodsCpnDcAmt}
+		     , CART_CPN_DC_AMT = CART_CPN_DC_AMT - #{cartCpnDcAmt}
+		     , PNT_DC_AMT = PNT_DC_AMT - #{pntDcAmt}
+		     , PRE_PNT_DC_AMT = PRE_PNT_DC_AMT - #{prePntDcAmt}
+		     , SAVE_PNT_AMT = SAVE_PNT_AMT - #{savePntAmt}
+		     , REAL_ORD_AMT = REAL_ORD_AMT - #{realOrdAmt}
+		     , GFCD_USE_AMT = GFCD_USE_AMT - #{gfcdUseAmt}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = SYSDATE()
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo} 
+		AND    ORD_DTL_NO = #{ordDtlNo} 
+		AND    ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
+	</update>
+	
+	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 이력 등록 -->
+	<insert id="createOrderDetailItemHst" parameterType="Order">
+		/* Order.createOrderDetailItemHst */
+		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
+			ORD_DTL_ITEM_SQ
+			, ORD_DTL_NO
+			, ORD_NO
+			, ORD_DTL_STAT
+			, ITEM_CD
+			, OPT_CD
+			, OPT_CD1
+			, OPT_CD2
+			, SKU_MODEL_NO
+			, PRODUCT_NO
+			, PRODUCT_CODE
+			, ITEM_QTY
+			, ITEM_PRICE
+			, OPT_ADD_PRICE
+			, DISP_ORD
+			, ORD_AMT
+			, CNCL_RTN_AMT
+			, CPN1_DC_AMT
+			, TMTB1_DC_AMT
+			, TMTB2_DC_AMT
+			, GOODS_CPN_DC_AMT
+			, CART_CPN_DC_AMT
+			, PNT_DC_AMT
+			, PRE_PNT_DC_AMT
+			, SAVE_PNT_AMT
+			, REAL_ORD_AMT
+			, GFCD_USE_AMT
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) 
+		SELECT ORD_DTL_ITEM_SQ
+			 , ORD_DTL_NO
+			 , ORD_NO
+			 , #{ordDtlStat}
+			 , ITEM_CD
+			 , OPT_CD
+			 , OPT_CD1
+			 , OPT_CD2
+			 , SKU_MODEL_NO
+			 , PRODUCT_NO
+			 , PRODUCT_CODE
+			 , ITEM_QTY
+			 , ITEM_PRICE
+			 , OPT_ADD_PRICE
+			 , DISP_ORD
+			 , #{ordAmt}
+			 , #{cnclRtnAmt}
+			 , #{cpn1DcAmt}
+			 , #{tmtb1DcAmt}
+			 , #{tmtb2DcAmt}
+			 , #{goodsCpnDcAmt}
+			 , #{cartCpnDcAmt}
+			 , #{pntDcAmt}
+			 , #{prePntDcAmt}
+			 , #{savePntAmt}
+			 , #{realOrdAmt}
+			 , #{gfcdUseAmt}
+			 , REG_NO
+			 , REG_DT
+			 , UPD_NO
+			 , UPD_DT
+		FROM   TB_ORDER_DETAIL_ITEM
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo} 
+		AND    ORD_DTL_NO = #{ordDtlNo} 
+		AND    ORD_DTL_ITEM_SQ = #{ordDtlItemSq}
+	</insert>
+	
 </mapper>
 
 

+ 248 - 133
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -21,13 +21,20 @@
 		</div>
 			
 		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
-			<form id="cancelRequestFrm">
+			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="chgReason" value=""/>
+				<input type="hidden" name="chgReasonDesc" value=""/>
+				
 				<h3>주문정보</h3>
 				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 
 				<h3>취소정보</h3>
 				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 				
+				<h3>배송비정보</h3>
+				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
 					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
 					<label th:if="${sessionInfo.userId == 'jsshin'
@@ -54,7 +61,7 @@
 							<td>
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdDesc}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 								</select>
 							</td>
 							<th>귀책사유</th>
@@ -63,12 +70,12 @@
 						<tr>
 							<th>요청메모</th>
 							<td colspan="3">
-								<textarea name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
 							</td>
 						</tr>
 					</tbody>
 				</table>
-
+				
 				<h4>환불예정금액</h4>
 				<table class="frmStyle">
 					<colgroup>
@@ -80,24 +87,40 @@
 					<tbody>
 						<tr>
 							<th>총 결제 금액</th>
-							<td><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanDeliveryFee"></span>원) </td>
+							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
+						</tr>
+						<tr>
+							<th>주문 상품 금액</th>
+							<td><span id="spanOrdAmt"></span>원</td>
 							<th>취소 상품 금액</th>
-							<td><span id="spanCurrPrice"></span>원</td>
+							<td><span id="spanCnclRtnAmt"></span>원</td>
 						</tr>
 						<tr>
 							<th>취소 사용 포인트</th>
-							<td><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 즉시 사용 마일리지 : <span id="spanPrePntDcAmt"></span>원) </td>
+							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
+						</tr>
+						<tr>
 							<th>취소 사용 쿠폰금액</th>
-							<td><span id="spanTotCpnDcAmt"></span>원</td>
+							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
 						</tr>
+						<tr>
+							<th>취소 다다익선 금액</th>
+							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
+						</tr>
+						
+						<tr>
+							<th>취소 고객 상품권 금액</th>
+							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
+						</tr>
+						
 						<tr>
 							<th>취소 상품 실결제 금액</th>
-							<td><span id="spanCancelPayAmt"></span>원</td>
-							<th>환불 배송금액</th>
+							<td><span id="spanRealCnclRtnAmt"></span>원</td>
+							<th>추가 배송 금액</th>
 							<td><span id="spanTotDeliveryFee"></span>원 </td>
 						</tr>
 						<tr>
-							<th>환불금액</th>
+							<th>환불 금액 합계</th>
 							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
 						</tr>
 					</tbody>
@@ -114,25 +137,17 @@
 var cancelRequestTargetList = [[${cancelRequestTargetList}]];
 
 var temp1 = true;
-var temp2 = true;
+var temp2 = false;
 
 // specify the columns
 var columnCancelReqList = [
-	/*
-	{	
-		width						: 40
-		, minWidth					: 40
-		, cellClass					: 'text-center'
-		, headerCheckboxSelection	: true
-		, checkboxSelection			: true
-		, filter					: false
-	},
-	*/
 	{
 		headerName	: "주문상세정보",
 		children	: [
 			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
 			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
@@ -141,6 +156,7 @@ var columnCancelReqList = [
 	{
 		headerName	: "주문상세단품정보",
 		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
 			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
@@ -211,7 +227,6 @@ var columnCancelReqList = [
 					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
 					
 					for (i=0 ; i<=ordCanChgQty ; i++) {
-						//alert(i + " :::: " +params.data.ordCanChgQty);
 						if (i == params.data.ordCanChgQty) {
 							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
 						} else {
@@ -222,43 +237,6 @@ var columnCancelReqList = [
 					strVal += "</select>";
 					return strVal;
 				}
-				/*
-				, valueGetter	: function(params) {
-					return params.data.ordCanChgQty;
-				}
-				, valueSetter	: function(params) {
-					var ordQty 			= parseInt(params.data.ordQty);
-					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
-					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
-					
-					if (params.data.ordCanChgQty != params.newValue) {
-						if (!isNaN(parseInt(params.newValue))) {
-							// 2020.12.24 외부몰 취소건에 대해서는 업무 협의
-							if (orderInfo.mallGb == '20') {
-								if (parseInt(params.newValue) != parseInt(params.data.ordQty)) {
-									mcxDialog.alert('외부몰주문건은 전체취소만 가능합니다.'); return false;
-								} else {
-									params.data.chgQty = parseInt(params.newValue);
-								}
-							} else {
-								if (parseInt(params.newValue) > ordCanChgQty) {
-									mcxDialog.alert('취소가능수량보다 큽니다!'); 
-									return false;
-								} else {
-									alert(parseInt(params.newValue));
-									params.data.ordCanChgQty = parseInt(params.newValue);
-								}
-							}
-						} else {
-							mcxDialog.alert('숫자만 입력이 가능합니다!'); return false;
-						}
-						return true;
-					} else {
-						return false;
-					}
-				}
-				*/
 			}
 		]
 	},
@@ -400,7 +378,8 @@ var columnCancelReqList = [
 					return params.value.addComma();
 				}
 				, hide			: temp2
-			}
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
 		]
 	}
 ];
@@ -417,6 +396,8 @@ var columnCancelReqToBeList = [
 		children	: [
 			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
 			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
 			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
@@ -425,6 +406,7 @@ var columnCancelReqToBeList = [
 	{
 		headerName	: "주문상세단품정보",
 		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
 			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
@@ -594,9 +576,133 @@ var columnCancelReqToBeList = [
 				}
 			}
 		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+
+//specify the columns
+var columnDelvCdList = [
+	{
+		headerName	: "배송코드기준금액",
+		children	: [
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불"		
+				, field			: "realOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "추가배송비"		
+				, field			: "addDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
 	}
 ];
-var gridOptionsCancelReqLToBeist = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
 </script>
 
 <!-- AgGrid 컬럼 세팅 -->
@@ -640,7 +746,7 @@ var orderAgGrid = {
 <script>
 // 취소정보계산
 var fnCalculateRefundAmt = function (obj) {
-	//취소정보담은목록
+	// 취소정보담은목록
 	var cancelRequestTargetToBeList = [];
 
 	if (obj != null) {
@@ -656,87 +762,96 @@ var fnCalculateRefundAmt = function (obj) {
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
-	// 취소정보 초기화
-	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
-		var obj = new Object();
-		
-		var itemQty 		= cancelRequestTargetList[i].itemQty;
-		var ordQty 			= cancelRequestTargetList[i].ordQty;
-		var cnclRtnQty 		= cancelRequestTargetList[i].cnclRtnQty;
-		var ordReqChgQty 	= cancelRequestTargetList[i].ordReqChgQty;
-		var ordCanChgQty 	= cancelRequestTargetList[i].ordCanChgQty;
-		var itemPrice 		= cancelRequestTargetList[i].itemPrice;
-		var optAddPrice 	= cancelRequestTargetList[i].optAddPrice;
-		var ordAmt 			= cancelRequestTargetList[i].ordAmt;
-		
-		var cnclRtnAmt 		= cancelRequestTargetList[i].cnclRtnAmt;
-		var cpn1DcAmt 		= cancelRequestTargetList[i].cpn1DcAmt;
-		var tmtb1DcAmt 		= cancelRequestTargetList[i].tmtb1DcAmt;
-		var tmtb2DcAmt 		= cancelRequestTargetList[i].tmtb2DcAmt;
-		var goodsCpnDcAmt 	= cancelRequestTargetList[i].goodsCpnDcAmt;
-		var cartCpnDcAmt 	= cancelRequestTargetList[i].cartCpnDcAmt;
-		var pntDcAmt 		= cancelRequestTargetList[i].pntDcAmt;
-		var prePntDcAmt 	= cancelRequestTargetList[i].prePntDcAmt;
-		var gfcdUseAmt 		= cancelRequestTargetList[i].gfcdUseAmt;
-		var realOrdAmt 		= cancelRequestTargetList[i].realOrdAmt;
-		
-		obj.ordNo			= cancelRequestTargetList[i].ordNo;
-		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
-		obj.goodsCd			= cancelRequestTargetList[i].goodsCd;
-		obj.goodsNm			= cancelRequestTargetList[i].goodsNm;
-		obj.itemCd			= cancelRequestTargetList[i].itemCd;
-		obj.itemNm			= cancelRequestTargetList[i].itemNm;
-		obj.optCd1			= cancelRequestTargetList[i].optCd1;
-		obj.optCd2			= cancelRequestTargetList[i].optCd2;
-		obj.itemQty			= itemQty;
-		obj.ordQty			= ordQty;
-		obj.cnclRtnQty		= cnclRtnQty;
-		obj.ordReqChgQty	= ordReqChgQty;
-		obj.ordCanChgQty	= ordCanChgQty;
-		obj.itemPrice		= itemPrice;
-		obj.optAddPrice		= optAddPrice;
-		obj.ordAmt			= ordAmt;
-		
-		obj.cnclRtnAmt 		= ((itemPrice + optAddPrice) * itemQty) * ordCanChgQty;
-		obj.cpn1DcAmt 		= cpn1DcAmt 		* (ordCanChgQty/ordQty);
-		obj.tmtb1DcAmt 		= tmtb1DcAmt 		* (ordCanChgQty/ordQty);
-		obj.tmtb2DcAmt 		= tmtb2DcAmt 		* (ordCanChgQty/ordQty);
-		obj.goodsCpnDcAmt 	= goodsCpnDcAmt 	* (ordCanChgQty/ordQty);
-		obj.cartCpnDcAmt 	= cartCpnDcAmt 		* (ordCanChgQty/ordQty);
-		obj.pntDcAmt 		= pntDcAmt 			* (ordCanChgQty/ordQty);
-		obj.prePntDcAmt 	= prePntDcAmt 		* (ordCanChgQty/ordQty);
-		obj.gfcdUseAmt 		= gfcdUseAmt 		* (ordCanChgQty/ordQty);
-		
-		obj.realOrdAmt 		= obj.cnclRtnAmt - (obj.cpn1DcAmt  + obj.tmtb1DcAmt + obj.tmtb2DcAmt + obj.goodsCpnDcAmt + obj.cartCpnDcAmt + obj.pntDcAmt + obj.prePntDcAmt + obj.gfcdUseAmt);
-		
-		cancelRequestTargetToBeList[i] = obj;
+	// 환불금액계산호출
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/refundAmt'
+		, jsonData
+		, function(result) {
+			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
+			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			
+			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
+			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
+			
+			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
+			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
+			
+			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
+			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
+			
+			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+			
+			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
+			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
+			
+			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+			
+			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
+			
+			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
+		}
+	);
+}
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrREasonCd = reasonCd.split(":");
+	
+	// 취소, 반품, 교환 사유 판단
+	if (arrREasonCd[0] == 'G686_10') {
+		$("#imputeReason").text("고객");
+		isImputationCustomers = true;
+	} else {
+		$("#imputeReason").text("회사");
+		isImputationCustomers = false;
 	}
 
-	gridOptionsCancelReqLToBeist.api.setRowData(cancelRequestTargetToBeList);
+	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+
+	//fnCalculateRefundAmt();			//환불예정금액 계산.
+}
+
+// 취소요청
+var fnCancelRequestPartOk = function () {
+	var jsonObj = {
+		"ordNo"			: $('#cancelRequestFrm input[name=ordNo]').val()
+		,"chgReason" 	: $('#cancelRequestFrm input[name=chgReason]').val()
+		,"chgMemo"		: $('#chgMemo').val()
+		,"cancelReqList" : cancelRequestTargetList
+	}
+	
+	// 취소, 반품, 교환 신청 정보 목록
+	var jsonData = JSON.stringify(jsonObj);
+	
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/'
+		, jsonData
+		, function() {
+			
+		}
+	);
 }
 
 $(document).ready(function() {	
 	// Create a agGrid
-	gagaAgGrid.createGrid('gridOrderCancelRequestList', gridOptionsCancelReqList);			// as-is 정보
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
 	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	
-	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList', gridOptionsCancelReqLToBeist);	// to-be 정보
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
 	
 	// 취소정보계산
 	fnCalculateRefundAmt(null);
-	
-	/*
-	// 그리드 클릭마다 환불금액 계산
-	gridOptionsCancelReqList.onRowSelected = function(event){
-		fnCalculateRefundAmt();		//환불예정금액 계산.
-	}
-	gridOptionsCancelReqList.onRowClicked = function(event){
-		fnCalculateRefundAmt();		//환불예정금액 계산.
-	}
-	gridOptionsCancelReqList.onCellValueChanged = function(event){
-		fnCalculateRefundAmt();		//환불예정금액 계산.
-	}
-	*/
 });
 </script>
 </html>

+ 1092 - 0
style24.admin/src/main/webapp/WEB-INF/views/order/CancelRequestFormBack.html

@@ -0,0 +1,1092 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CancelRequestForm.html
+ * @desc    : 취소요청 화면
+ *============================================================================
+ * Pastelmall
+ * Copyright(C) 2019 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.12.12   jsh77b       최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1400" data-height="600">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>취소요청</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCancelRequestForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/order/cancel" method="post" target="hdFrameForOrderCancel">
+				<input type="hidden" name="chgGb" 		value="30" />
+				<input type="hidden" name="ordDtlNos" 	value="" />
+				<input type="hidden" name="chgQtys" 	value="" />
+				<input type="hidden" name="ordNo" 	 	th:value="${ordNo}" />
+				<input type="hidden" name="mallGb" 		th:value="${orderInfo.mallGb}" />
+				<input type="hidden" name="delvFee" 	value="0" />
+				<input type="hidden" name="pgStat"	 	value="" />
+				<input type="hidden" name="chgReason"	value="" />
+				<input type="hidden" name="chgReasonDesc" value="" />
+				<input type="hidden" name="cncWait" 	th:value="${cncWait}" />
+		
+				<h3>주문정보</h3>
+				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+
+				<h3>취소정보</h3>
+				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+				
+				<h3>배송비정보</h3>
+				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				
+				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
+					<button type="button" class="btn btn-success" id="btnCancelRequestEscrow" onclick="fnCancelRequestEscrow();" style="display:none;">에스크로 결제생성</button>
+					<label th:if="${sessionInfo.userId == 'jsshin'
+									|| sessionInfo.userId == 'dlffyd7942'
+									|| sessionInfo.userId == 'card007'
+									|| sessionInfo.userId == 'hrkim'
+									|| sessionInfo.userId =='666badboy'
+									|| sessionInfo.userId =='yjyy83'}">
+						<input type="checkbox" name="pgStats" value="N">PG 전문 미전송
+					</label>
+					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
+				</div>
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>취소사유 <i class="star"></i></th>
+							<td>
+								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
+									<option value="">[선택하세요]</option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>귀책사유</th>
+							<td><span id="imputeReason"></span></td>
+						</tr>
+						<tr>
+							<th>요청메모</th>
+							<td colspan="3">
+								<textarea name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<h4>환불예정금액</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+						<col style="width:20%;"/>
+						<col style="width:30%;"/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>총 결제 금액</th>
+							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
+						</tr>
+						<tr>
+							<th>주문 상품 금액</th>
+							<td><span id="spanOrdAmt"></span>원</td>
+							<th>취소 상품 금액</th>
+							<td><span id="spanCnclRtnAmt"></span>원</td>
+						</tr>
+						<tr>
+							<th>취소 사용 포인트</th>
+							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
+						</tr>
+						<tr>
+							<th>취소 사용 쿠폰금액</th>
+							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
+						</tr>
+						<tr>
+							<th>취소 다다익선 금액</th>
+							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
+						</tr>
+						
+						<tr>
+							<th>취소 고객 상품권 금액</th>
+							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
+						</tr>
+						
+						<tr>
+							<th>취소 상품 실결제 금액</th>
+							<td><span id="spanRealCnclRtnAmt"></span>원</td>
+							<th>추가 배송 금액</th>
+							<td><span id="spanTotDeliveryFee"></span>원 </td>
+						</tr>
+						<tr>
+							<th>환불 금액 합계</th>
+							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
+						</tr>
+					</tbody>
+				</table>
+				
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var cancelRequestTargetList = [[${cancelRequestTargetList}]];
+
+var temp1 = true;
+var temp2 = false;
+
+// specify the columns
+var columnCancelReqList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "단품수량"		
+				, field			: "itemQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "ordCanChgQty"			
+				, width			: 100		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var ordQty 			= parseInt(params.data.ordQty);
+					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
+					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
+					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+					
+					var strVal 			= "";
+					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
+					
+					for (i=0 ; i<=ordCanChgQty ; i++) {
+						if (i == params.data.ordCanChgQty) {
+							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
+						} else {
+							strVal += "	<option value='"+i+"'>"+i+"</option>";
+						}
+					}
+				
+					strVal += "</select>";
+					return strVal;
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqList = orderAgGrid.getGridOptions(columnCancelReqList);
+// Add on options
+gridOptionsCancelReqList.suppressRowClickSelection = true;
+gridOptionsCancelReqList.rowSelection = 'multiple';
+
+
+//specify the columns
+var columnCancelReqToBeList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{headerName: "칼라코드"		, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "사이즈코드"		, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "단품수량"		
+				, field			: "itemQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "ordCanChgQty"			
+				, width			: 100		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsCancelReqToBeList = orderAgGrid.getGridOptions(columnCancelReqToBeList);
+
+//specify the columns
+var columnDelvCdList = [
+	{
+		headerName	: "배송코드기준금액",
+		children	: [
+			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "환불"		
+				, field			: "realOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "무료배송비"		
+				, field			: "minOrdAmt"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "추가배송비여부"		, field: "addDelvFeeYn"		, width: 140	, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "추가배송비"		
+				, field			: "addDelvFee"			
+				, width			: 100		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsDelvCdList = orderAgGrid.getGridOptions(columnDelvCdList);
+</script>
+
+<!-- AgGrid 컬럼 세팅 -->
+<script>
+// 공통1. 주문상세 그리드 옵션 정보 적용
+var orderAgGrid = {
+	getGridOptions : function(colDefs) {
+		return {
+			columnDefs					: colDefs
+			, detailCellRendererParams	: {
+				detailGridOptions	: {
+					columnDefs				: []
+					, defaultColDef			: {
+						resizable: true
+					}
+					, suppressLoadingOverlay: false
+					, onGridReady			: function (params) {
+						params.api.setDomLayout('autoHeight');
+					}
+					, onFirstDataRendered	: function (params) {
+						params.api.sizeColumnsToFit();
+					}
+				}
+				, getDetailRowData: function (params) {
+					params.successCallback(params.data.orderDetailList);
+				}
+			}
+			, defaultColDef: {
+				resizable: true
+			}
+			, isRowMaster: function (dataItem) {
+				return dataItem ? dataItem.orderDetailList.length > 1 : false;
+			}
+			, suppressRowTransform: true
+			, enableRangeSelection: true
+		};
+	}
+}
+</script>
+
+<script>
+// 취소정보계산
+var fnCalculateRefundAmt = function (obj) {
+	// 취소정보담은목록
+	var cancelRequestTargetToBeList = [];
+
+	if (obj != null) {
+		for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+			var orDtlNo 		= $(obj).attr("ordDtlNo");
+			var ordCanChgQty 	= $(obj).val();
+			
+			if (cancelRequestTargetList[i].ordDtlNo == orDtlNo) {
+				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
+			}
+		}
+		// 주문정보 다시 셋팅 (체크해봐야할문제)
+		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	}
+	
+	/*
+	// 취소 후 발생되는 배송정보 설정
+	var delvFeeList 		= [];
+	var delvObj				= new Object();
+	var k					= 0;
+	
+	// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+	delvObj.ordAmt 			= 0;
+	delvObj.cnclRtnAmt 		= 0;
+	delvObj.realOrdAmt 		= 0;
+	delvObj.delvFee 		= cancelRequestTargetList[k].delvFee;
+	delvObj.minOrdAmt 		= cancelRequestTargetList[k].minOrdAmt;
+	delvObj.orgDelvFee 		= cancelRequestTargetList[k].orgDelvFee;
+	delvObj.supplyCompCd 	= cancelRequestTargetList[k].supplyCompCd;
+	delvObj.delvFeeCd 		= cancelRequestTargetList[k].delvFeeCd;
+	delvObj.allCanYn		= cancelRequestTargetList[k].allCanYn;
+
+	delvFeeList[k] 			= delvObj;
+	
+	var spanPayAmt			= 0; // 총 결제 금액
+	var spanSumRealOrdAmt	= 0; // 상품 실결제 금액
+	var spanSumDeliveryFee	= 0; // 배송금액
+	var spanOrdAmt			= 0; // 주문 상품 금액
+	var spanCnclRtnAmt		= 0; // 취소 상품 금액
+	var spanTotPntDcAmt		= 0; // 취소 사용 포인트
+	var spanPntDcAmt		= 0; // 고객 포인트
+	var spanPrePntDcAmt		= 0; // 상품 선포인트
+	var spanCpnDcAmt		= 0; // 취소 사용 쿠폰금액
+	var spanCpn1DcAmt		= 0; // 즉시할인쿠폰
+	var spanGoodsCpnDcAmt	= 0; // 상품쿠폰
+	var spanCartCpnDcAmt	= 0; // 장바구니쿠폰
+	var spanTmtbDcAmt		= 0; // 취소 다다익선 금액
+	var spanTmtb1DcAmt		= 0; // 수량할인
+	var spanTmtb2DcAmt		= 0; // 금액할인
+	var spanGfcdUseAmt		= 0; // 취소 고객 상품권 금액
+	var spanRealCnclRtnAmt	= 0; // 취소 상품 실결제 금액
+	var spanTotDeliveryFee	= 0; // 환불 배송 금액
+	var spanRefundAmt		= 0; // 환불 금액 합계
+
+	// 취소정보 설정
+	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+		var obj 			= new Object();
+		
+		var itemQty 		= cancelRequestTargetList[i].itemQty;
+		var ordQty 			= cancelRequestTargetList[i].ordQty;
+		var cnclRtnQty 		= cancelRequestTargetList[i].cnclRtnQty;
+		var ordReqChgQty 	= cancelRequestTargetList[i].ordReqChgQty;
+		var ordCanChgQty 	= cancelRequestTargetList[i].ordCanChgQty;
+		var itemPrice 		= cancelRequestTargetList[i].itemPrice;
+		var optAddPrice 	= cancelRequestTargetList[i].optAddPrice;
+		var ordAmt 			= cancelRequestTargetList[i].ordAmt;
+		
+		var cnclRtnAmt 		= cancelRequestTargetList[i].cnclRtnAmt;
+		var cpn1DcAmt 		= cancelRequestTargetList[i].cpn1DcAmt;
+		var tmtb1DcAmt 		= cancelRequestTargetList[i].tmtb1DcAmt;
+		var tmtb2DcAmt 		= cancelRequestTargetList[i].tmtb2DcAmt;
+		var goodsCpnDcAmt 	= cancelRequestTargetList[i].goodsCpnDcAmt;
+		var cartCpnDcAmt 	= cancelRequestTargetList[i].cartCpnDcAmt;
+		var pntDcAmt 		= cancelRequestTargetList[i].pntDcAmt;
+		var prePntDcAmt 	= cancelRequestTargetList[i].prePntDcAmt;
+		var gfcdUseAmt 		= cancelRequestTargetList[i].gfcdUseAmt;
+		var realOrdAmt 		= cancelRequestTargetList[i].realOrdAmt;
+		
+		obj.ordNo			= cancelRequestTargetList[i].ordNo;
+		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
+		obj.goodsCd			= cancelRequestTargetList[i].goodsCd;
+		obj.goodsNm			= cancelRequestTargetList[i].goodsNm;
+		obj.itemCd			= cancelRequestTargetList[i].itemCd;
+		obj.itemNm			= cancelRequestTargetList[i].itemNm;
+		obj.optCd1			= cancelRequestTargetList[i].optCd1;
+		obj.optCd2			= cancelRequestTargetList[i].optCd2;
+		obj.itemQty			= itemQty;
+		obj.ordQty			= ordQty;
+		obj.cnclRtnQty		= cnclRtnQty;
+		obj.ordReqChgQty	= ordReqChgQty;
+		obj.ordCanChgQty	= ordCanChgQty;
+		obj.itemPrice		= itemPrice;
+		obj.optAddPrice		= optAddPrice;
+		obj.ordAmt			= ordAmt;
+		
+		obj.cnclRtnAmt 		= ((itemPrice + optAddPrice) * itemQty) * ordCanChgQty;
+		obj.cpn1DcAmt 		= cpn1DcAmt 		* (ordCanChgQty/ordQty);
+		obj.tmtb1DcAmt 		= tmtb1DcAmt 		* (ordCanChgQty/ordQty);
+		obj.tmtb2DcAmt 		= tmtb2DcAmt 		* (ordCanChgQty/ordQty);
+		obj.goodsCpnDcAmt 	= goodsCpnDcAmt 	* (ordCanChgQty/ordQty);
+		obj.cartCpnDcAmt 	= cartCpnDcAmt 		* (ordCanChgQty/ordQty);
+		obj.pntDcAmt 		= pntDcAmt 			* (ordCanChgQty/ordQty);
+		obj.prePntDcAmt 	= prePntDcAmt 		* (ordCanChgQty/ordQty);
+		obj.gfcdUseAmt 		= gfcdUseAmt 		* (ordCanChgQty/ordQty);
+		
+		obj.realOrdAmt 		= obj.cnclRtnAmt - (obj.cpn1DcAmt  + obj.tmtb1DcAmt + obj.tmtb2DcAmt + obj.goodsCpnDcAmt + obj.cartCpnDcAmt + obj.pntDcAmt + obj.prePntDcAmt + obj.gfcdUseAmt);
+		
+		// 배송관련 설정		
+		obj.ordDtlNo		= cancelRequestTargetList[i].ordDtlNo;
+		obj.goodsTypeNm		= cancelRequestTargetList[i].goodsTypeNm;
+		obj.delvFee			= cancelRequestTargetList[i].delvFee;
+		obj.supplyCompCd	= cancelRequestTargetList[i].supplyCompCd;
+		obj.delvFeeCd		= cancelRequestTargetList[i].delvFeeCd;
+		obj.minOrdAmt		= cancelRequestTargetList[i].minOrdAmt;
+		obj.orgDelvFee		= cancelRequestTargetList[i].orgDelvFee;
+		
+		// 주문상세상태
+		obj.ordDtlStat		= cancelRequestTargetList[i].ordDtlSat;
+		obj.ordDtlSatNm		= cancelRequestTargetList[i].ordDtlSatNm;
+		obj.allCanYn		= cancelRequestTargetList[i].allCanYn;
+		
+		cancelRequestTargetToBeList[i] = obj;
+
+		// 배송비 정책 기준으로 조건 처리
+		if (delvFeeList[k].supplyCompCd == obj.supplyCompCd && delvFeeList[k].delvFeeCd == obj.delvFeeCd) {
+			// 공급업체 와 배송정책코드가 같으면 주문금액, 취소금액 SUM
+			delvFeeList[k].ordAmt 		+= obj.ordAmt;
+			delvFeeList[k].cnclRtnAmt 	+= obj.cnclRtnAmt;
+			delvFeeList[k].realOrdAmt 	+= obj.realOrdAmt;
+			
+			if (obj.allCanYn == "N") {
+				delvFeeList[k].allCanYn = "N";
+			}
+		} else {			
+			k++;
+			
+			var delvObj					= new Object();
+			
+			// 공급업체 와 배송정책코드가 같지안으면 주문금액, 취소금액 RESET
+			delvObj.ordAmt 				= obj.ordAmt;
+			delvObj.cnclRtnAmt 			= obj.cnclRtnAmt;
+			delvObj.realOrdAmt 			= obj.realOrdAmt;
+			
+			delvObj.delvFee 			= obj.delvFee;
+			delvObj.minOrdAmt 			= obj.minOrdAmt;			
+			delvObj.orgDelvFee 			= obj.orgDelvFee;
+			delvObj.supplyCompCd 		= obj.supplyCompCd;
+			delvObj.delvFeeCd 			= obj.delvFeeCd;
+			delvObj.allCanYn			= obj.allCanYn;
+			
+			delvFeeList[k] 				= delvObj;
+		}
+		
+		spanSumRealOrdAmt	+= realOrdAmt;
+		spanPntDcAmt		+= obj.pntDcAmt;
+		spanPrePntDcAmt		+= obj.prePntDcAmt;
+		spanCpn1DcAmt		+= obj.cpn1DcAmt;
+		spanGoodsCpnDcAmt	+= obj.goodsCpnDcAmt;
+		spanCartCpnDcAmt	+= obj.cartCpnDcAmt;
+		spanTmtb1DcAmt		+= obj.tmtb1DcAmt;
+		spanTmtb2DcAmt		+= obj.tmtb2DcAmt;
+		spanGfcdUseAmt		+= obj.gfcdUseAmt;
+		spanRealCnclRtnAmt	+= obj.realOrdAmt;
+	}
+	
+	// 추가배송비 발생여부 , 추가배송비, 배송비정책단위 전체취소 여부
+	for (i=0 ; i<delvFeeList.length ; i++) {
+		var obj = delvFeeList[i];
+		
+		// 무료배송비용 > (주문금액 - 취소금액)
+		if (obj.minOrdAmt > (obj.ordAmt - obj.cnclRtnAmt)) {
+			// 2020.12.28 
+			// case : 배송정책 기준으로 1,2 상품 주문 후 1번 출고 후 1번반품 2번취소 할 경우 전체 취소 가 아니므로 배송비 부과 있을지 모르겠음 주문업체 단위로 배송되기 때문에 발생하지 않을것 같음
+			if ((obj.ordAmt - obj.cnclRtnAmt) == 0) {
+				if (obj.allCanYn == "N") {
+					obj.addDelvFeeYn 	= "Y";
+					obj.addDelvFee 		= obj.orgDelvFee;
+				} else {
+					// 전체취소의 경우에 해당
+					obj.addDelvFeeYn 	= "N";
+					obj.addDelvFee 		= 0;
+				}
+			} else {
+				// 취소신청화면에서 대부분 아래의 조건에 해당
+				obj.addDelvFeeYn 	= "Y";
+				obj.addDelvFee 		= obj.orgDelvFee;
+			}
+			
+			//obj.addDelvFeeYn 	= "Y";
+			//obj.addDelvFee 		= obj.orgDelvFee;
+		} else {
+			obj.addDelvFeeYn 	= "N";
+			obj.addDelvFee 		= 0;
+		}
+		
+		spanSumDeliveryFee	+= obj.delvFee;
+		spanOrdAmt			+= obj.ordAmt;
+		spanCnclRtnAmt		+= obj.cnclRtnAmt;
+		spanTotDeliveryFee  += obj.addDelvFee;
+				
+		delvFeeList[i] = obj;
+	}
+
+	gridOptionsCancelReqToBeList.api.setRowData(cancelRequestTargetToBeList);
+	gridOptionsDelvCdList.api.setRowData(delvFeeList);
+	
+	// 환불금액표시
+	spanPayAmt 			= spanSumRealOrdAmt + spanSumDeliveryFee;
+	spanTotPntDcAmt 	= spanPntDcAmt + spanPrePntDcAmt;
+	spanCpnDcAmt 		= spanCpn1DcAmt + spanGoodsCpnDcAmt + spanCartCpnDcAmt;
+	spanTmtbDcAmt 		= spanTmtb1DcAmt + spanTmtb2DcAmt;
+	spanRefundAmt 		= spanRealCnclRtnAmt - spanTotDeliveryFee;
+	
+	$("#spanPayAmt").text(spanPayAmt.addComma());					//총 결제 금액
+	$("#spanSumRealOrdAmt").text(spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+	$("#spanSumDeliveryFee").text(spanSumDeliveryFee.addComma());	//배송금액
+	
+	$("#spanOrdAmt").text(spanOrdAmt.addComma());					//주문 상품 금액
+	$("#spanCnclRtnAmt").text(spanCnclRtnAmt.addComma());			//취소 상품 금액
+	
+	$("#spanTotPntDcAmt").text(spanTotPntDcAmt.addComma());			//취소 사용 포인트
+	$("#spanPntDcAmt").text(spanPntDcAmt.addComma());				//고객 포인트
+	$("#spanPrePntDcAmt").text(spanPrePntDcAmt.addComma());			//상품 선포인트
+	
+	$("#spanCpnDcAmt").text(spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+	$("#spanCpn1DcAmt").text(spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+	$("#spanGoodsCpnDcAmt").text(spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+	$("#spanCartCpnDcAmt").text(spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+	
+	$("#spanTmtbDcAmt").text(spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+	$("#spanTmtb1DcAmt").text(spanTmtb1DcAmt.addComma());			//수량할인
+	$("#spanTmtb2DcAmt").text(spanTmtb2DcAmt.addComma());			//금액할인
+	
+	$("#spanGfcdUseAmt").text(spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+	
+	$("#spanRealCnclRtnAmt").text(spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+	$("#spanTotDeliveryFee").text(spanTotDeliveryFee.addComma());	//환불 배송 금액
+	
+	$("#spanRefundAmt").text(spanRefundAmt.addComma());				//환불 금액 합계
+	*/
+	
+	// 환불금액계산호출
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/refundAmt'
+		, jsonData
+		, function(result) {
+			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
+			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			
+			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
+			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
+			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
+			
+			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
+			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
+			
+			$("#spanTotPntDcAmt").text(result.spanTotPntDcAmt.addComma());			//취소 사용 포인트
+			$("#spanPntDcAmt").text(result.spanPntDcAmt.addComma());				//고객 포인트
+			$("#spanPrePntDcAmt").text(result.spanPrePntDcAmt.addComma());			//상품 선포인트
+			
+			$("#spanCpnDcAmt").text(result.spanCpnDcAmt.addComma());				//취소 사용 쿠폰금액
+			$("#spanCpn1DcAmt").text(result.spanCpn1DcAmt.addComma());				//즉시할인쿠폰
+			$("#spanGoodsCpnDcAmt").text(result.spanGoodsCpnDcAmt.addComma());		//상품쿠폰
+			$("#spanCartCpnDcAmt").text(result.spanCartCpnDcAmt.addComma());		//장바구니쿠폰
+			
+			$("#spanTmtbDcAmt").text(result.spanTmtbDcAmt.addComma());				//취소 다다익선 금액
+			$("#spanTmtb1DcAmt").text(result.spanTmtb1DcAmt.addComma());			//수량할인
+			$("#spanTmtb2DcAmt").text(result.spanTmtb2DcAmt.addComma());			//금액할인
+			
+			$("#spanGfcdUseAmt").text(result.spanGfcdUseAmt.addComma());			//취소 고객 상품권 금액
+			
+			$("#spanRealCnclRtnAmt").text(result.spanRealCnclRtnAmt.addComma());	//취소 상품 실결제 금액
+			$("#spanTotDeliveryFee").text(result.spanTotDeliveryFee.addComma());	//환불 배송 금액
+			
+			$("#spanRefundAmt").text(result.spanRefundAmt.addComma());				//환불 금액 합계
+			
+			//alert("a");
+			//$('#btnSearch').trigger('click');
+		}
+	);
+}
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrREasonCd = reasonCd.split(":");
+	
+	// 취소, 반품, 교환 사유 판단
+	if (arrREasonCd[0] == 'G686_10') {
+		$("#imputeReason").text("고객");
+		isImputationCustomers = true;
+	} else {
+		$("#imputeReason").text("회사");
+		isImputationCustomers = false;
+	}
+
+	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+
+	//fnCalculateRefundAmt();			//환불예정금액 계산.
+}
+
+// 에스크로 전체취소, 부분취소 요청
+var fnCancelRequestPartOk = function () {
+	// 취소, 반품, 교환 신청 정보 목록
+	//cancelRequestTargetList;
+	
+	var jsonData = JSON.stringify(cancelRequestTargetList);
+	
+	gagajf.ajaxJsonSubmit(
+		'/order/cancel/'
+		, jsonData
+		, function() {
+			$('#btnSearch').trigger('click');
+		}
+	);
+	
+}
+
+$(document).ready(function() {	
+	// Create a agGrid
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
+	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	
+	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
+	
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
+	
+	// 취소정보계산
+	fnCalculateRefundAmt(null);
+});
+</script>
+</html>
+
+
+
+
+