PosMainForm.html 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943
  1. <!DOCTYPE html>
  2. <html lang="ko"
  3. xmlns:th="http://www.thymeleaf.org">
  4. <!--
  5. *******************************************************************************
  6. * @source : PosMainForm.html
  7. * @desc : POS Main Page
  8. *============================================================================
  9. * ISTYLE24
  10. * Copyright(C) 2020 TSIT, All rights reserved.
  11. *============================================================================
  12. * VER DATE AUTHOR DESCRIPTION
  13. * === =========== ========== =============================================
  14. * 1.0 2020.11.13 moon 최초 작성
  15. *******************************************************************************
  16. -->
  17. <div id="main">
  18. <!-- TITLE -->
  19. <div class="main-title">
  20. </div>
  21. <!-- 메뉴 설명 -->
  22. <div class="infoBox menu-desc">
  23. </div>
  24. <!-- //메뉴 설명 -->
  25. <!-- TABS SPACE -->
  26. <div class="tabs">
  27. <!-- TABS NAVI -->
  28. <ul class="tabsNav p-left">
  29. <li class="on"><a href="#tab1#top" id="tab1-1">출고대기목록</a></li>
  30. <li><a href="#tab2#top">출고목록</a></li>
  31. <li><a href="#tab2-1#top">확정대기목록</a></li>
  32. <li><a href="#tab4#top">출고거부이력</a></li>
  33. </ul>
  34. <!-- //TABS NAVI -->
  35. <!-- TABS CONTENTS -->
  36. <ul class="tabsCont">
  37. <!-- TAB1 : 출고대기목록 -->
  38. <li class="tab on" id="tab1">
  39. <div class="panelStyle">
  40. <!-- TAB2 CONTENTS AREA -->
  41. <form id="waitingOrder">
  42. <input type="hidden" name="delvLocCd" th:value="${delvLocCd}">
  43. <input type="hidden" name="delvFeeRate" th:value="${delvFeeRate}">
  44. <input type="hidden" name="supplyCompCd" th:value="${supplyCompCd}">
  45. <input type="hidden" name="delvArGb" value="P"/>
  46. <input type="hidden" name="ordDtlStat" value="G013_35"/>
  47. <input type="hidden" name="ordDtlNos">
  48. <h4>출고대기</h4>
  49. <table class="frmStyle">
  50. <colgroup>
  51. <col style="width:10%;"/>
  52. <col style="width:23%;"/>
  53. <col style="width:10%;"/>
  54. <col style="width:23%;"/>
  55. <col style="width:10%;"/>
  56. <col/>
  57. </colgroup>
  58. <tbody>
  59. <tr>
  60. <th>주문번호</th>
  61. <td><input type="text" class="w300" name="ordNo"/></td>
  62. <th>수령자</th>
  63. <td colspan="5"><input type="text" class="w300" name="recipNm" maxlength="10"/></td>
  64. </tr>
  65. <tr>
  66. <th>조회기간</th>
  67. <td colspan="5" id="waitTerms"></td>
  68. </tr>
  69. </tbody>
  70. </table>
  71. <ul class="panelBar">
  72. <li class="center">
  73. <button type="button" class="btn btn-base btn-lg" id="btnWaitSearch">조회</button>
  74. <!-- <button type="button" class="btn btn-base btn-lg" id="btnCnplus">Cnplus엑셀다운로드</button> -->
  75. </li>
  76. </ul>
  77. <div id="watingGrid" style="width: 99%; height: 500px;" class="ag-theme-balham lh60" ></div>
  78. <!-- //TAB2 CONTENTS AREA -->
  79. </form>
  80. </div>
  81. </li>
  82. <!-- //TAB1 : 출고대기목록 -->
  83. <!-- TAB2 : 출고목록 -->
  84. <li class="tab" id="tab2">
  85. <div class="panelStyle">
  86. <!-- TAB2 CONTENTS AREA -->
  87. <form id="deliveryInfo">
  88. <input type="hidden" name="delvLocCd" th:value="${delvLocCd}">
  89. <input type="hidden" name="delvFeeRate" th:value="${delvFeeRate}">
  90. <input type="hidden" name="supplyCompCd" th:value="${supplyCompCd}">
  91. <input type="hidden" name="delvArGb" value="Y"/>
  92. <input type="hidden" name="ordDtlNos">
  93. <h4>출고목록</h4>
  94. <table class="frmStyle">
  95. <colgroup>
  96. <col style="width:10%;"/>
  97. <col style="width:23%;"/>
  98. <col style="width:10%;"/>
  99. <col style="width:23%;"/>
  100. <col style="width:10%;"/>
  101. <col/>
  102. </colgroup>
  103. <tbody>
  104. <tr>
  105. <th>주문번호</th>
  106. <td><input type="text" class="w300" name="ordNo"/></td>
  107. <th>수령자</th>
  108. <td><input type="text" class="w300" name="recipNm" maxlength="10"/></td>
  109. <th>주문상세상태</th>
  110. <td>
  111. <select class="w150" name="ordDtlStat">
  112. <option value="all">전체</option>
  113. <option value="G013_30" selected>상품준비중</option>
  114. <option value="G013_40">배송준비중</option>
  115. </select>
  116. </td>
  117. </tr>
  118. <tr>
  119. <th>조회기간</th>
  120. <td colspan="5" id="deliveryTerms"></td>
  121. </tr>
  122. </tbody>
  123. </table>
  124. <ul class="panelBar">
  125. <li class="center">
  126. <button type="button" class="btn btn-base btn-lg" id="btnDeliveySearch">조회</button>
  127. <button type="button" class="btn btn-base btn-lg" id="btnReCnplus">Cnplus엑셀다운로드</button>
  128. <button type="button" class="btn btn-base btn-lg" id="btnDeliveySave">송장번호저장</button>
  129. </li>
  130. </ul>
  131. <label class="off">
  132. <a href="javascript:void(0);" id="deliveryExcelList" style="display: none;">송장생성된주문 Cnplus엑셀다운로드</a>
  133. </label>
  134. <div id="deliveryGrid" style="width: 99%; height: 500px;" class="ag-theme-balham lh60" ></div>
  135. <!-- //TAB2 CONTENTS AREA -->
  136. </form>
  137. </div>
  138. </li>
  139. <!-- //TAB2 : 출고목록 -->
  140. <!-- TAB2-1 : 확정대기목록 -->
  141. <li class="tab" id="tab2-1">
  142. <div class="panelStyle">
  143. <!-- TAB2-1 CONTENTS AREA -->
  144. <form id="confirmation">
  145. <input type="hidden" name="delvLocCd" th:value="${delvLocCd}">
  146. <input type="hidden" name="delvFeeRate" th:value="${delvFeeRate}">
  147. <input type="hidden" name="supplyCompCd" th:value="${supplyCompCd}">
  148. <input type="hidden" name="ordDtlNos">
  149. <input type="hidden" name="delvArGb" value="Y"/>
  150. <h4>확정대기목록</h4>
  151. <table class="frmStyle">
  152. <colgroup>
  153. <col style="width:10%;"/>
  154. <col style="width:23%;"/>
  155. <col style="width:10%;"/>
  156. <col style="width:23%;"/>
  157. <col style="width:10%;"/>
  158. <col/>
  159. </colgroup>
  160. <tbody>
  161. <tr>
  162. <th>주문번호</th>
  163. <td><input type="text" class="w300" name="ordNo"/></td>
  164. <th>수령자</th>
  165. <td><input type="text" class="w300" name="recipNm" maxlength="10"/></td>
  166. <th>주문상세상태</th>
  167. <td>
  168. <select class="w150" name="ordDtlStat">
  169. <option value="all">전체</option>
  170. <option value="G013_40" selected>배송준비중</option>
  171. <option value="G013_50">배송중</option>
  172. <option value="G013_60">배송완료</option>
  173. </select>
  174. </td>
  175. </tr>
  176. <tr>
  177. <th>조회기간</th>
  178. <td colspan="5" id="confirmTerms"></td>
  179. </tr>
  180. </tbody>
  181. </table>
  182. <ul class="panelBar">
  183. <li class="center">
  184. <button type="button" class="btn btn-base btn-lg" id="btnConfirmSearch">조회</button>
  185. <button type="button" class="btn btn-base btn-lg" id="btnConfirmSave">출고확정</button>
  186. </li>
  187. </ul>
  188. <div id="confirmGrid" style="width: 99%; height: 500px;" class="ag-theme-balham lh60" ></div>
  189. <!-- //TAB2-1 CONTENTS AREA -->
  190. </form>
  191. </div>
  192. </li>
  193. <!-- //TAB2-1 : 확정대기목록 -->
  194. <!-- TAB3 : 정산 내역
  195. <li class="tab" id="tab3" >
  196. <div class="panelStyle">
  197. <form id="usacList">
  198. <input type="hidden" name="delvLocCd" th:value="${delvLocCd}">
  199. <input type="hidden" name="delvFeeRate" th:value="${delvFeeRate}">
  200. <input type="hidden" name="supplyCompCd" th:value="${supplyCompCd}">
  201. <h4>정산 내역</h4>
  202. <table class="frmStyle">
  203. <colgroup>
  204. <col style="width:10%;"/>
  205. <col style="width:23%;"/>
  206. <col style="width:10%;"/>
  207. <col style="width:23%;"/>
  208. <col style="width:10%;"/>
  209. <col/>
  210. </colgroup>
  211. <tbody>
  212. <tr>
  213. <th>조회기간</th>
  214. <td colspan="3" id="usacTerms"></td>
  215. </tr>
  216. </tbody>
  217. </table>
  218. <ul class="panelBar">
  219. <li class="center">
  220. <button type="button" class="btn btn-base btn-lg" id="btnSearchUsac">조회</button>
  221. </li>
  222. </ul>
  223. <div id="usacGrid" style="width: 99%; height: 500px;" class="ag-theme-balham lh60" ></div>
  224. </form>
  225. </div>
  226. </li>
  227. //TAB3 : 정산 내역 -->
  228. <!-- TAB4 : 출고거부 내역 -->
  229. <li class="tab" id="tab4">
  230. <div class="panelStyle">
  231. <!-- TAB4 CONTENTS AREA -->
  232. <form id="banDelv">
  233. <input type="hidden" name="delvLocCd" th:value="${delvLocCd}">
  234. <input type="hidden" name="delvFeeRate" th:value="${delvFeeRate}">
  235. <input type="hidden" name="supplyCompCd" th:value="${supplyCompCd}">
  236. <h4>출고거부 내역</h4>
  237. <table class="frmStyle">
  238. <colgroup>
  239. <col style="width:10%;"/>
  240. <col style="width:80%;"/>
  241. <col style="width:10%;"/>
  242. <col/>
  243. </colgroup>
  244. <tbody>
  245. <tr>
  246. <th>상품코드</th>
  247. <td><input type="text" class="w300" id="goodsCd" name="goodsCd"/></td>
  248. </tr>
  249. <tr>
  250. <th>조회기간</th>
  251. <td colspan="3" id="banDelvTerms"></td>
  252. </tr>
  253. </tbody>
  254. </table>
  255. <ul class="panelBar">
  256. <li class="center">
  257. <button type="button" class="btn btn-base btn-lg" id="btnBanDelvSearch">조회</button>
  258. </li>
  259. </ul>
  260. <div id="banDelvGrid" style="width: 99%; height: 500px;" class="ag-theme-balham lh60" ></div>
  261. </form>
  262. </div>
  263. <!-- //TAB4 CONTENTS AREA -->
  264. </li>
  265. <!-- //TAB4 : 출고거부 내역 -->
  266. </ul>
  267. <!-- //TABS CONTENTS -->
  268. <!-- //TABS SPACE -->
  269. </div>
  270. </div>
  271. <script th:inline="javascript">
  272. /*<![CDATA[*/
  273. var goodsImgParam = "?width=60&height=60";
  274. var goodsImgBigParam = "?width=600&height=600";
  275. var delvarGbList = {"P" : "출고대기", "Y" : "출고수락", "N" : "출고거부"};
  276. var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
  277. var shipCompanyList = gagajf.convertToArray([[${shipCompanyList}]]);
  278. var orderDtlSateList = gagajf.convertToArray([[${orderDtlSateList}]]);
  279. var g300Init = {'cd' :'0', 'cdNm' :'[선택]'};
  280. var g300ObjectList = [[${g300List}]];
  281. g300ObjectList.push(g300Init);
  282. var g300List = gagajf.convertToArray(g300ObjectList);
  283. delete g300List["G300_90"];
  284. delete g300List["G300_40"];
  285. var delvLocCd = [[${delvLocCd}]];
  286. //출고대기 그리드
  287. var columnwatingApplyDefs = [
  288. {headerName: "수락", field: "delvArGbY", width: 100, cellClass: 'text-center',
  289. cellRenderer: function(params) {
  290. var btnText = '';
  291. if(params.value === 'P'){
  292. btnText = '<button type="button"class="btn btn-success" onClick="fnApplyDelvLoc(\''+params.data.ordNo+'\',\''+params.data.ordDtlNo+'\',\''+params.data.ordQty+'\',\''+params.data.goodsType+'\')"> 수락 </button>';
  293. }
  294. return btnText;
  295. }
  296. },
  297. {headerName: "거부", field: "delvArGbN", width: 100, cellClass: 'text-center',
  298. cellRenderer: function(params) {
  299. var btnText = '';
  300. if(params.value === 'P') {
  301. btnText = '<button type="button"class="btn btn-success" onClick="javascript:void(0);"> 거부 </button>';
  302. }
  303. return btnText;
  304. }
  305. },
  306. {headerName: "거부사유", field: "rejectReason", width: 80, minWidth: 75, cellClass: 'text-center', sortable: true ,
  307. cellEditor: 'agSelectCellEditor',
  308. editable : function (params) { return (params.data.ordDtlStat === 'G013_35' && params.data.delvArGb === 'P') ? true : false;},
  309. cellEditorParams: { values: gagaAgGrid.extractValues(g300List) },
  310. valueFormatter: function (params) {
  311. var dataValue = '0';
  312. if(!gagajf.isNull(params.value)) {
  313. dataValue = params.value;
  314. }
  315. return gagaAgGrid.lookupValue(g300List, dataValue);
  316. },
  317. valueParser: function (params) { return gagaAgGrid.lookupKey(g300List, params.newValue); },
  318. singleClickEdit: true
  319. },
  320. {
  321. headerName: "출고여부", field: "delvArGb", width: 130, cellClass: 'text-center' ,
  322. valueFormatter: function (params) { return gagaAgGrid.lookupValue(delvarGbList, params.value); },
  323. },
  324. {headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center',
  325. cellRenderer: function(params) {
  326. return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
  327. }
  328. },
  329. {headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
  330. {headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center' },
  331. {headerName: "컬러", field: "optCd1", width: 85, cellClass: 'text-center' },
  332. {headerName: "사이즈", field: "optCd2", width: 85, cellClass: 'text-center' },
  333. {headerName: "주문수량", field: "saleQty", width: 80, cellClass: 'text-center',
  334. valueFormatter: function(params) {return params.value.addComma();}
  335. },
  336. {headerName: "주문번호", field: "ordNo", width: 90, cellClass: 'text-center'},
  337. {headerName: "주문상세번호", field: "ordDtlNo", width: 90, cellClass: 'text-center', hide: true},
  338. {headerName: "주문일시", field: "ordDt", width: 150, cellClass: 'text-center',
  339. cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  340. },
  341. {headerName: "주문자", field: "ordNm", width: 130, cellClass: 'text-center' },
  342. {headerName: "수령자", field: "recipNm", width: 130, cellClass: 'text-center'},
  343. {headerName: "송장번호", field: "invoiceNo", width: 120, cellClass: 'text-center'},
  344. {headerName: "우편번호", field: "recipZipcode", width: 90, cellClass: 'text-center'},
  345. {headerName: "주소", field: "recipAddr", width: 450, cellClass: 'text-left'},
  346. {headerName: "전화번호", field: "recipPhnno", width: 120, cellClass: 'text-center'},
  347. {headerName: "배송메모", field: "delvMemo", width: 120, cellClass: 'text-center'}
  348. ];
  349. //출고그리드
  350. var columnDeliveryDefs= [
  351. {width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
  352. {headerName: "송장번호", field: "invoiceNo", width: 120, cellClass: 'text-center',
  353. cellEditor: 'textCellEditor',
  354. editable : function (params) { return (params.data.ordDtlStat == 'G013_30' && params.data.delvArGb == 'Y') ? true : false;},
  355. cellEditorParams: { maxlength: 15 }
  356. },
  357. {headerName: "택배사", field: "shipCompCd", width: 100, minWidth: 75, cellClass: 'text-center',
  358. cellEditor: 'agRichSelectCellEditor',
  359. editable : function (params) { return (params.data.ordDtlStat == 'G013_30' && params.data.delvArGb == 'Y') ? true : false;},
  360. cellEditorParams: { values: gagaAgGrid.extractValues(shipCompanyList) },
  361. valueFormatter: function (params) { return gagaAgGrid.lookupValue(shipCompanyList, params.value); },
  362. valueParser: function (params) { return gagaAgGrid.lookupKey(shipCompanyList, params.newValue); }
  363. },
  364. {headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center',
  365. cellRenderer: function(params) {
  366. return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
  367. }
  368. },
  369. {headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left', editable :false},
  370. {headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center' , editable :false},
  371. {headerName: "컬러", field: "optCd1", width: 85, cellClass: 'text-center' , editable :false},
  372. {headerName: "사이즈", field: "optCd2", width: 85, cellClass: 'text-center' , editable :false},
  373. {headerName: "주문수량", field: "saleQty", width: 80, cellClass: 'text-center', editable :false,
  374. valueFormatter: function(params) {return params.value.addComma();}
  375. },
  376. {headerName: "주문번호", field: "ordNo", width: 90, cellClass: 'text-center', editable :false},
  377. {headerName: "주문상세번호", field: "ordDtlNo", width: 90, cellClass: 'text-center', editable :false},
  378. {headerName: "주문상세상태", field: "ordDtlStat", width: 130, cellClass: 'text-center', editable :false,
  379. cellEditorParams: { values: gagaAgGrid.extractValues(orderDtlSateList) },
  380. valueFormatter: function (params) { return gagaAgGrid.lookupValue(orderDtlSateList, params.value); },
  381. valueParser: function (params) { return gagaAgGrid.lookupKey(orderDtlSateList, params.newValue); }
  382. },
  383. {headerName: "주문상세번호", field: "ordDtlNo", width: 90, cellClass: 'text-center', hide: true, editable :false},
  384. {
  385. headerName: "주문일시", field: "ordDt", width: 150, cellClass: 'text-center', editable :false,
  386. cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  387. },
  388. {
  389. headerName: "출고일시", field: "delvStdt", width: 150, cellClass: 'text-center', editable :false,
  390. cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  391. },
  392. {headerName: "주문자", field: "ordNm", width: 130, cellClass: 'text-center' , editable :false},
  393. {headerName: "수령자", field: "recipNm", width: 130, cellClass: 'text-center', editable :false},
  394. {headerName: "우편번호", field: "recipZipcode", width: 90, cellClass: 'text-center'},
  395. {headerName: "주소", field: "recipAddr", width: 450, cellClass: 'text-left'},
  396. {headerName: "전화번호", field: "recipPhnno", width: 120, cellClass: 'text-center'},
  397. {headerName: "배송메모", field: "delvMemo", width: 120, cellClass: 'text-center'},
  398. {headerName: "수락취소", field: "delvArGbCnl", width: 120, cellClass: 'text-center',
  399. cellRenderer: function(params) {
  400. var btnText = '';
  401. if(params.value === 'Y') {
  402. // btnText= '<a href="javascript:void(0);" class="btn btn-success btn-lg">수락취소</a>';
  403. btnText= '<button type="button"class="btn btn-success" onClick="javascript:void(0);"> 수락취소 </button>';
  404. }
  405. return btnText;
  406. }
  407. },
  408. {headerName: "거부사유", field: "rejectReason", width: 100, minWidth: 75, cellClass: 'text-center', sortable: true ,
  409. cellEditor: 'agSelectCellEditor',
  410. editable : function (params) { return ((params.data.ordDtlStat == 'G013_30' || params.data.ordDtlStat == 'G013_40') && params.data.delvArGb == 'Y') ? true : false;},
  411. cellEditorParams: { values: gagaAgGrid.extractValues(g300List) },
  412. valueFormatter: function (params) {
  413. var dataValue = '0';
  414. if(!gagajf.isNull(params.value)) {
  415. dataValue = params.value;
  416. }
  417. return gagaAgGrid.lookupValue(g300List, dataValue);
  418. },
  419. valueParser: function (params) { return gagaAgGrid.lookupKey(g300List, params.newValue); },
  420. singleClickEdit: true
  421. }
  422. ];
  423. //확정대기 그리드
  424. var columnConfirmDefs= [
  425. {width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
  426. {headerName: "송장번호", field: "invoiceNo", width: 120, cellClass: 'text-center',
  427. cellEditor: 'textCellEditor',
  428. editable : function (params) { return (params.data.ordDtlStat == 'G013_30' && params.data.delvArGb == 'Y') ? true : false;},
  429. cellEditorParams: { maxlength: 15 }
  430. },
  431. {headerName: "택배사", field: "shipCompCd", width: 100, minWidth: 75, cellClass: 'text-center',
  432. cellEditor: 'agRichSelectCellEditor',
  433. editable : function (params) { return (params.data.ordDtlStat == 'G013_30' && params.data.delvArGb == 'Y') ? true : false;},
  434. cellEditorParams: { values: gagaAgGrid.extractValues(shipCompanyList) },
  435. valueFormatter: function (params) { return gagaAgGrid.lookupValue(shipCompanyList, params.value); },
  436. valueParser: function (params) { return gagaAgGrid.lookupKey(shipCompanyList, params.newValue); }
  437. },
  438. {headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center',
  439. cellRenderer: function(params) {
  440. return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
  441. }
  442. },
  443. {headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left', editable :false},
  444. {headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center' , editable :false},
  445. {headerName: "컬러", field: "optCd1", width: 85, cellClass: 'text-center' , editable :false},
  446. {headerName: "사이즈", field: "optCd2", width: 85, cellClass: 'text-center' , editable :false},
  447. {headerName: "주문수량", field: "saleQty", width: 80, cellClass: 'text-center', editable :false,
  448. valueFormatter: function(params) {return params.value.addComma();}
  449. },
  450. {headerName: "주문번호", field: "ordNo", width: 90, cellClass: 'text-center', editable :false},
  451. {headerName: "주문상세번호", field: "ordDtlNo", width: 90, cellClass: 'text-center', editable :false},
  452. {headerName: "주문상세상태", field: "ordDtlStat", width: 130, cellClass: 'text-center', editable :false,
  453. cellEditorParams: { values: gagaAgGrid.extractValues(orderDtlSateList) },
  454. valueFormatter: function (params) { return gagaAgGrid.lookupValue(orderDtlSateList, params.value); },
  455. valueParser: function (params) { return gagaAgGrid.lookupKey(orderDtlSateList, params.newValue); }
  456. },
  457. {headerName: "주문상세번호", field: "ordDtlNo", width: 90, cellClass: 'text-center', hide: true, editable :false},
  458. {
  459. headerName: "주문일시", field: "ordDt", width: 150, cellClass: 'text-center', editable :false,
  460. cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  461. },
  462. {
  463. headerName: "출고일시", field: "delvStdt", width: 150, cellClass: 'text-center', editable :false,
  464. cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  465. },
  466. {headerName: "주문자", field: "ordNm", width: 130, cellClass: 'text-center' , editable :false},
  467. {headerName: "수령자", field: "recipNm", width: 130, cellClass: 'text-center', editable :false},
  468. {headerName: "우편번호", field: "recipZipcode", width: 90, cellClass: 'text-center'},
  469. {headerName: "주소", field: "recipAddr", width: 450, cellClass: 'text-left'},
  470. {headerName: "전화번호", field: "recipPhnno", width: 120, cellClass: 'text-center'},
  471. {headerName: "배송메모", field: "delvMemo", width: 120, cellClass: 'text-center'},
  472. ];
  473. //정산내역 그리드
  474. /*
  475. var columnUsacDefs = [
  476. {headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center',
  477. cellRenderer: function(params) {
  478. return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
  479. }
  480. },
  481. {headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
  482. {headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center' },
  483. {headerName: "사이즈", field: "sizeCd", width: 85, cellClass: 'text-center' },
  484. {
  485. headerName: "출고수량", field: "ordQty", width: 80, cellClass: 'text-right',
  486. valueFormatter: function(params) {return params.value.addComma();}
  487. },
  488. {
  489. headerName: "발생일시", field: "occurDt", width: 150, cellClass: 'text-right',
  490. cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  491. },
  492. {
  493. headerName: "출고일시", field: "delvStdt", width: 150, cellClass: 'text-center',
  494. cellRenderer: function (params) { return gagaAgGrid.toDateTimeFormat(params.value); }
  495. },
  496. {headerName: "출고구분", field: "usacGbNm", width: 100, cellClass: 'text-center' },
  497. {headerName: "실결제금액", field: "realAmt", width: 95, cellClass: 'text-right'
  498. ,valueFormatter: function(params) {
  499. return params.value.addComma();
  500. }
  501. },
  502. {headerName: "수수료율", field: "delvFeeRate", width: 95, cellClass: 'text-right'
  503. ,cellRenderer: function(params) {
  504. return params.value === 0 ? '': params.value+'%';
  505. }
  506. },
  507. {headerName: "수수료", field: "delvFeeAmt", width: 95, cellClass: 'text-right'
  508. ,valueFormatter: function(params) {
  509. return params.value.addComma();
  510. }
  511. },
  512. {headerName: "주문번호", field: "ordNo", width: 90, cellClass: 'text-center'},
  513. {headerName: "주문상세", field: "ordDtlNo", width: 90, cellClass: 'text-center', hide: true}
  514. ];
  515. */
  516. //출고거부 이력 그리드
  517. var columnBanDelvDefs = [
  518. {headerName: "이미지", field: "imgPath1", width: 100, height: 60, cellClass: 'text-center',
  519. cellRenderer: function(params) {
  520. return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
  521. }
  522. },
  523. {headerName: "거부일시", field: "delvBanStdt", width: 150, cellClass: 'text-center'
  524. },
  525. {headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center'},
  526. {headerName: "컬러", field: "optCd1", width: 80, cellClass: 'text-center'},
  527. {headerName: "사이즈", field: "optCd2", width: 80, cellClass: 'text-center'},
  528. {headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center'},
  529. {headerName: "거부사유", field: "rejectReason", width: 100, cellClass: 'text-center'}
  530. ];
  531. var gridWaitingOptions = gagaAgGrid.getGridOptions(columnwatingApplyDefs);
  532. var gridDeliveryOptions = gagaAgGrid.getGridOptions(columnDeliveryDefs);
  533. var gridConfirmOptions = gagaAgGrid.getGridOptions(columnConfirmDefs);
  534. //var gridUsacOptions = gagaAgGrid.getGridOptions(columnUsacDefs);
  535. var gridBanDelvOptions = gagaAgGrid.getGridOptions(columnBanDelvDefs);
  536. gridWaitingOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
  537. gridDeliveryOptions.rowHeight = 60;
  538. gridConfirmOptions.rowHeight = 60;
  539. //gridUsacOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
  540. gridBanDelvOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
  541. //gridDeliveryOptions.rowSelection = 'multiple';
  542. //gridWaitingOptions.rowSelection = 'multiple';
  543. gridDeliveryOptions.defaultColDef.editable = true;
  544. gridDeliveryOptions.stopEditingWhenGridLosesFocus = true;
  545. gridWaitingOptions.isRowSelectable = function(rowNode) {
  546. return rowNode.data.delvArGb == 'Y';
  547. }
  548. // 출고대기 주문조회
  549. $('#btnWaitSearch').on('click', function () {
  550. if(!gagajf.validation('#waitingOrder'))
  551. return;
  552. gagaAgGrid.fetch('/pos/wait/order/list',gridWaitingOptions, '#waitingOrder');
  553. });
  554. // 출고조회
  555. $('#btnDeliveySearch').on('click', function () {
  556. if(!gagajf.validation('#deliveryInfo'))
  557. return;
  558. gagaAgGrid.fetch('/pos/delivery/order/list',gridDeliveryOptions, '#deliveryInfo');
  559. });
  560. // 확정대기 조회
  561. $('#btnConfirmSearch').on('click', function () {
  562. if(!gagajf.validation('#confirmation'))
  563. return;
  564. gagaAgGrid.fetch('/pos/confirm/order/list',gridConfirmOptions, '#confirmation');
  565. });
  566. // 정산내역 조회
  567. /*
  568. $('#btnSearchUsac').on('click', function () {
  569. gagaAgGrid.fetch('/pos/usac/list',gridUsacOptions, '#usacList');
  570. });
  571. */
  572. // 출고거부 조회
  573. $('#btnBanDelvSearch').on('click', function () {
  574. gagaAgGrid.fetch('/pos/ban/delivery/list',gridBanDelvOptions, '#banDelv');
  575. });
  576. var fnSetDelvCallback = function() {
  577. $('#tab1').trigger('click');
  578. $('#btnWaitSearch').trigger('click');
  579. };
  580. var fnCancelCallback = function() {
  581. $('#tab2').trigger('click');
  582. $('#btnDeliveySearch').trigger('click');
  583. };
  584. // 출고수락
  585. var fnApplyDelvLoc = function(ordNo, ordDtlNo, ordQty, goodsType) {
  586. var params = {};
  587. params.ordNo = ordNo;
  588. params.ordDtlNo = ordDtlNo;
  589. params.delvLocCd = delvLocCd;
  590. params.ordQty = ordQty
  591. params.delvArGb = 'Y'; // 수락
  592. var msg ="";
  593. if("G056_S" == goodsType){
  594. msg ="세트상품입니다.<br>관련상품 모두 출고수락 하시겠습니까?";
  595. } else {
  596. msg ="출고수락 하시겠습니까?";
  597. }
  598. mcxDialog.confirm(msg, {
  599. cancelBtnText: "취소",
  600. sureBtnText: "확인",
  601. sureBtnClick: function(){
  602. var jsonData = JSON.stringify(params);
  603. gagajf.ajaxJsonSubmit('/pos/delivery/assign/save', jsonData, fnSetDelvCallback);
  604. }
  605. });
  606. };
  607. // 출고거부
  608. gridWaitingOptions.onCellClicked = function(event) {
  609. if (event.colDef.field == 'delvArGbN' && event.data.delvArGb == 'P'){
  610. if(gagajf.isNull(event.data.rejectReason) || event.data.rejectReason === '0'){
  611. mcxDialog.alert('거부 사유를 선택해주세요.');
  612. } else {
  613. var params = {};
  614. params.ordNo = event.data.ordNo;
  615. params.ordDtlNo = event.data.ordDtlNo;
  616. params.delvLocCd = delvLocCd;
  617. params.ordQty = event.data.ordQty
  618. params.delvArGb = 'N'; // 거부
  619. params.rejectReason = event.data.rejectReason;
  620. var msg = "";
  621. if("G056_S" == event.data.goodsType){
  622. msg = "세트상품입니다.<br>관련상품 모두 거부 하시겠습니까?";
  623. } else {
  624. msg = "거부 하시겠습니까?";
  625. }
  626. mcxDialog.confirm(msg, {
  627. cancelBtnText: "취소",
  628. sureBtnText: "확인",
  629. sureBtnClick: function(){
  630. var jsonData = JSON.stringify(params);
  631. gagajf.ajaxJsonSubmit('/pos/delivery/assign/save', jsonData, fnSetDelvCallback);
  632. }
  633. });
  634. }
  635. }
  636. }
  637. // 수락취소
  638. gridDeliveryOptions.onCellClicked = function(event) {
  639. if (event.colDef.field == 'delvArGbCnl' && (event.data.ordDtlStat == 'G013_30' || event.data.ordDtlStat == 'G013_40')){
  640. if(gagajf.isNull(event.data.rejectReason) || event.data.rejectReason === '0'){
  641. mcxDialog.alert('수락취소 사유를 선택해주세요.');
  642. } else {
  643. var params = {};
  644. params.ordNo = event.data.ordNo;
  645. params.ordDtlNo = event.data.ordDtlNo;
  646. params.delvLocCd = event.data.delvLocCd;
  647. params.ordQty = event.data.ordQty
  648. params.delvArGb = 'N'; // 거부
  649. params.rejectReason = event.data.rejectReason;
  650. mcxDialog.confirm('수락취소 하시겠습니까?<br/> 다른출고처로 지정됩니다.', {
  651. cancelBtnText: "취소",
  652. sureBtnText: "확인",
  653. sureBtnClick: function(){
  654. var jsonData = JSON.stringify(params);
  655. gagajf.ajaxJsonSubmit('/pos/delivery/assign/save/cancel', jsonData, fnCancelCallback);
  656. }
  657. });
  658. }
  659. }
  660. }
  661. // Cnplus엑셀다운로드
  662. $('#btnReCnplus').on('click', function() {
  663. var selectedData = gagaAgGrid.selectedRowData(gridDeliveryOptions);
  664. var dataLength = selectedData.length;
  665. if (dataLength === 0) {
  666. mcxDialog.alert('선택된 행이 없습니다.');
  667. return;
  668. }
  669. var ordDtlNoArr = [];
  670. $.each(selectedData, function(idx, data) {
  671. if(!gagajf.isNull(data.ordDtlNo)) {
  672. ordDtlNoArr.push(data.ordDtlNo);
  673. }
  674. });
  675. $('#deliveryInfo input[name=ordDtlNos]').val(ordDtlNoArr.join(','));
  676. mcxDialog.confirm('CNPlus양식 엑셀 다운로드 하시겠습니까?', {
  677. cancelBtnText: "취소",
  678. sureBtnText: "확인",
  679. sureBtnClick: function(){
  680. fnExcelDownLoad('#deliveryInfo');
  681. }
  682. });
  683. });
  684. //엑셀다운로드
  685. var fnExcelDownLoad = function(formId) {
  686. var params = $(formId).serialize();
  687. if(formId==='#waitingOrder') {
  688. $('#orderExcelList').attr({ href : '/pos/order/excel/list?' + params }).get(0).click();
  689. }
  690. if(formId==='#deliveryInfo') {
  691. $('#deliveryExcelList').attr({ href : '/pos/order/excel/list?' + params }).get(0).click();
  692. }
  693. };
  694. // 송장번호 등록 버튼
  695. $('#btnDeliveySave').on('click', function() {
  696. var selectData = gagaAgGrid.selectedRowData(gridDeliveryOptions);
  697. var dataLength = selectData.length;
  698. if (dataLength === 0) {
  699. mcxDialog.alert('선택된 행이 없습니다.');
  700. return;
  701. }
  702. var selectedData = gridDeliveryOptions.api.getSelectedNodes();
  703. var chk ="Y";
  704. $.each(selectedData, function(idx, row) {
  705. if(!gagajf.isNull(row.data.ordDtlNo)) {
  706. // 송장번호 저장 완료건들 체크 풀기
  707. if(row.data.ordDtlStat =="G013_40" || row.data.ordDtlStat =="G013_50" || row.data.ordDtlStat =="G013_60" || row.data.ordDtlStat =="G013_70"){
  708. gridDeliveryOptions.api.deselectIndex(row.rowIndex);
  709. }
  710. if(row.data.shipCompCd == "D1029"){
  711. var invoNo = row.data.invoiceNo;
  712. //송장번호 자리수 체크 12자리
  713. var invoNoLen = invoNo.length;
  714. if(invoNoLen != 12){
  715. mcxDialog.alert('['+invoNo+']은 잘못된 송장번호 형식입니다.');
  716. chk = "N";
  717. return false;
  718. }
  719. // 송장번호 유효성 체크 [ 앞2자리 제외하고 3번째자리부터 9개숫자를 7로나눈 나머지가 12번째 숫자임.]
  720. var invoNolast = invoNo.substring(11,12);
  721. var chkInvono = invoNo.substring(2,11);
  722. var invonoMod = chkInvono % 7 ;
  723. if(invoNolast != invonoMod ){
  724. mcxDialog.alert('['+invoNo+']은 잘못된 송장번호 형식입니다.');
  725. chk = "N";
  726. return false;
  727. }
  728. }
  729. if(gagajf.isNull(row.data.invoiceNo)){
  730. mcxDialog.alert('송장번호를 입력해 주세요.');
  731. chk = "N";
  732. return false;
  733. }
  734. }
  735. });
  736. var selectedData2 = gagaAgGrid.selectedRowData(gridDeliveryOptions);
  737. var dataLength2 = selectedData2.length;
  738. if (dataLength2 === 0) {
  739. mcxDialog.alert('이미 완료된 대상입니다.');
  740. return;
  741. }
  742. if(chk == "N") return false;
  743. mcxDialog.confirm('송장번호등록 하시겠습니까?', {
  744. cancelBtnText: "취소",
  745. sureBtnText: "확인",
  746. sureBtnClick: function(){
  747. fnSaveInvoice();
  748. }
  749. });
  750. });
  751. // 송장번호 등록
  752. var fnSaveInvoice = function(){
  753. var selectedData = gagaAgGrid.selectedRowData(gridDeliveryOptions);
  754. var dataLength = selectedData.length;
  755. if (dataLength === 0) {
  756. mcxDialog.alert('선택된 행이 없습니다.');
  757. return;
  758. }
  759. var ordDtlNoArr = [];
  760. $.each(selectedData, function(idx, data) {
  761. if(!gagajf.isNull(data.ordDtlNo)) {
  762. ordDtlNoArr.push(data.ordDtlNo);
  763. }
  764. });
  765. $('#deliveryInfo input[name=ordDtlNos]').val(ordDtlNoArr.join(','));
  766. var jsonData = JSON.stringify(selectedData);
  767. gagajf.ajaxJsonSubmit('/pos/invoice/save/invoiceno', jsonData, fnInvoiceCallback);
  768. }
  769. var fnInvoiceCallback = function() {
  770. $('#tab2').trigger('click');
  771. $('#btnDeliveySearch').trigger('click');
  772. mcxDialog.alert('입력이 완료되었습니다.<br>확정대기목록에서 출고확정 하세요.');
  773. };
  774. // 출고확정
  775. $('#btnConfirmSave').on('click', function() {
  776. var selectData = gagaAgGrid.selectedRowData(gridConfirmOptions);
  777. var dataLength = selectData.length;
  778. if (dataLength === 0) {
  779. mcxDialog.alert('선택된 행이 없습니다.');
  780. return;
  781. }
  782. var selectedData = gridConfirmOptions.api.getSelectedNodes();
  783. $.each(selectedData, function(idx, row) {
  784. if(!gagajf.isNull(row.data.ordDtlNo)) {
  785. // 출고확정 완료건들 체크 풀기
  786. if(row.data.ordDtlStat =="G013_50" || row.data.ordDtlStat =="G013_60" || row.data.ordDtlStat =="G013_70"){
  787. gridConfirmOptions.api.deselectIndex(row.rowIndex);
  788. }
  789. }
  790. });
  791. var selectedData2 = gagaAgGrid.selectedRowData(gridConfirmOptions);
  792. var dataLength2 = selectedData2.length;
  793. if (dataLength2 === 0) {
  794. mcxDialog.alert('이미 완료된 대상입니다.');
  795. return;
  796. }
  797. mcxDialog.confirm('출고확정 하시겠습니까?', {
  798. cancelBtnText: "취소",
  799. sureBtnText: "확인",
  800. sureBtnClick: function(){
  801. fnConfirmSave();
  802. }
  803. });
  804. });
  805. // 출고확정 저장
  806. var fnConfirmSave = function(){
  807. var selectedData = gagaAgGrid.selectedRowData(gridConfirmOptions);
  808. var dataLength = selectedData.length;
  809. if (dataLength === 0) {
  810. mcxDialog.alert('선택된 행이 없습니다.');
  811. return;
  812. }
  813. var ordDtlNoArr = [];
  814. $.each(selectedData, function(idx, data) {
  815. if(!gagajf.isNull(data.ordDtlNo)) {
  816. ordDtlNoArr.push(data.ordDtlNo);
  817. }
  818. });
  819. $('#confirmation input[name=ordDtlNos]').val(ordDtlNoArr.join(','));
  820. var jsonData = JSON.stringify(selectedData);
  821. gagajf.ajaxJsonSubmit('/pos/confirm/save', jsonData, fnConfirmCallback);
  822. }
  823. // 출고확정 콜백
  824. var fnConfirmCallback = function() {
  825. $('#tab2-1').trigger('click');
  826. $('#btnConfirmSearch').trigger('click');
  827. // mcxDialog.alert('출고확정 되었습니다.');
  828. };
  829. $(document).ready(function() {
  830. gagaAgGrid.createGrid('watingGrid', gridWaitingOptions);
  831. gagaAgGrid.createGrid('deliveryGrid',gridDeliveryOptions);
  832. gagaAgGrid.createGrid('confirmGrid',gridConfirmOptions);
  833. gagaAgGrid.createGrid('banDelvGrid', gridBanDelvOptions);
  834. cfnCreateCalendar('#waitTerms', 'waitOrdStDate', 'waitOrdEdDate', true, '조회');
  835. cfnCreateCalendar('#deliveryTerms', 'deliveryStDate', 'deliveryEdDate', true, '조회');
  836. cfnCreateCalendar('#confirmTerms', 'confirmStDate', 'confirmEdDate', true, '조회');
  837. cfnCreateCalendar('#banDelvTerms', 'banDelvStDate', 'banDelvEdDate', true, '조회');
  838. cfnChangeCalendar('1d', $('#waitOrdStDate'), $('#waitOrdEdDate'));
  839. cfnChangeCalendar('1d', $('#deliveryStDate'), $('#deliveryEdDate'));
  840. cfnChangeCalendar('1d', $('#confirmStDate'), $('#confirmEdDate'));
  841. cfnChangeCalendar('1m', $('#banDelvStDate'), $('#banDelvEdDate'));
  842. $('#btnWaitSearch').trigger('click');
  843. });
  844. /*]]>*/
  845. </script>
  846. </html>