ソースを参照

240722-1800-Kim

hokky 4 ヶ月 前
コミット
0d6a8b973c
33 ファイル変更1820 行追加267 行削除
  1. 1 0
      .gitattributes
  2. 0 1
      app/Helpers/Utils.php
  3. 2 0
      app/Http/Controllers/Front/Dabory/Erp/Purchase/PorderController.php
  4. 7 2
      app/Http/Controllers/Front/Dabory/Erp/Revenue/SalesController.php
  5. 3 0
      app/Http/Controllers/Front/Dabory/Erp/Sales/SquoteController.php
  6. 1 0
      app/Http/Middleware/Shop/HeaderData.php
  7. 1 0
      app/Models/Cache/ProApiCache.php
  8. 0 11
      bootstrap/cache/packages.php
  9. 23 25
      bootstrap/cache/services.php
  10. 248 171
      composer.lock
  11. 2 2
      dabory/para/erp/ko_KR/copy/body-copy/stock/genio-genio.json
  12. 35 0
      dabory/para/erp/ko_KR/etc/code-title/status/sales.json
  13. 27 18
      dabory/para/erp/ko_KR/form/form-b/etc.json
  14. 11 1
      dabory/para/erp/ko_KR/form/form-b/genio.json
  15. 17 0
      dabory/para/erp/ko_KR/form/form-b/sales/sales.json
  16. 1 5
      dabory/para/erp/ko_KR/search/slip-search/sales/sales.json
  17. 3 0
      dcon
  18. 1 0
      public/js/modals-controller/b-type/body-copy.js
  19. 12 6
      public/js/modals-controller/b-type/common.js
  20. 2 1
      public/js/modals-controller/b-type/copy-to-another.js
  21. 2 0
      public/js/modals-controller/b-type/slip.js
  22. 2 2
      public/js/plugins/codemirror/mode/julia/index.html
  23. 0 1
      public/js/utils/check-dom.js
  24. 1 1
      public/resources
  25. 10 14
      resources/views/front/dabory/erp/basic-settings/etc.blade.php
  26. 14 1
      resources/views/front/dabory/erp/purchase/porder.blade.php
  27. 1124 0
      resources/views/front/dabory/erp/revenue/sales.blade copy.php
  28. 214 0
      resources/views/front/dabory/erp/revenue/sales.blade.php
  29. 20 1
      resources/views/front/dabory/erp/revenue/sorder.blade.php
  30. 11 3
      resources/views/front/dabory/erp/sales/squote.blade.php
  31. 2 0
      resources/views/front/dabory/erp/stock/genio.blade.php
  32. 7 1
      resources/views/front/outline/static/copy-to-another.blade.php
  33. 16 0
      settings_erp.sh

+ 1 - 0
.gitattributes

@@ -2,4 +2,5 @@
 *.css linguist-vendored
 *.scss linguist-vendored
 *.js linguist-vendored
+*.sh text eol=lf
 CHANGELOG.md export-ignore

+ 0 - 1
app/Helpers/Utils.php

@@ -73,7 +73,6 @@ class Utils
                 'query' => Storage::get($fullFileUrl)
             ];
         }
-
         return false;
     }
 

+ 2 - 0
app/Http/Controllers/Front/Dabory/Erp/Purchase/PorderController.php

@@ -32,6 +32,8 @@ class PorderController extends Controller
             $formB->getData()['formB']['QueryVars']['QueryName']
         );
 
+        // dd($slipFormInitCacheData);
+
         $pickCacheData = Utils::getParamCache($menuCode,
             $formB->getData()['formB']['General']['PickApi'],
             $formB->getData()['formB']['QueryVars']['QueryName']);

+ 7 - 2
app/Http/Controllers/Front/Dabory/Erp/Revenue/SalesController.php

@@ -14,6 +14,7 @@ class SalesController extends Controller
     {
         try {
             $formB = new FormB(request('bpa'));
+            // dd($formB);
             $salesModal = (new Modal('/search/slip-search/sales/sales'))->getData();
             $companyModal = (new Modal('/search/company-search/supplier'))->getData();
             $itemModal = (new Modal('/search/item-search/supplier'))->getData();
@@ -24,6 +25,10 @@ class SalesController extends Controller
         // pick api para(cache) 얻는 함수
         $menuCode = Utils::bpaDecoding(request('bpa'))['menu_code'];
 
+        $slipFormInitCacheData = Utils::getSlipFormInitCache(
+            $formB->getData()['formB']['QueryVars']['QueryName']
+        );
+
         $pickCacheData = Utils::getParamCache($menuCode,
             $formB->getData()['formB']['General']['PickApi'],
             $formB->getData()['formB']['QueryVars']['QueryName']);
@@ -38,8 +43,8 @@ class SalesController extends Controller
                 $formB->getData(),
                 compact('salesModal',
                     'companyModal', 'itemModal'),
-                compact('pickCacheData', 'slipCacheData'),
+                compact('pickCacheData', 'slipCacheData', 'slipFormInitCacheData'),
             )
-        )->with('codeTitle', [ "deal_type('deal-type')" ]);
+        )->with('codeTitle', [ "deal_type('deal-type')", "status('sales')" ]);
     }
 }

+ 3 - 0
app/Http/Controllers/Front/Dabory/Erp/Sales/SquoteController.php

@@ -16,6 +16,7 @@ class SquoteController extends Controller
         // dump(session('GateToken'));
         try {
             $formB = new FormB(request('bpa'));
+            // dd($formB);
             $squoteModal = (new Modal('/search/slip-search/sales/squote'))->getData();
             $companyModal = (new Modal('/search/company-search/all'))->getData();
             $itemModal = (new Modal('/search/item-search/supplier'))->getData();
@@ -30,6 +31,8 @@ class SquoteController extends Controller
             $formB->getData()['formB']['QueryVars']['QueryName']
         );
 
+        // dd($slipFormInitCacheData);
+
         $pickCacheData = Utils::getParamCache($menuCode,
             $formB->getData()['formB']['General']['PickApi'],
             $formB->getData()['formB']['QueryVars']['QueryName']);

+ 1 - 0
app/Http/Middleware/Shop/HeaderData.php

@@ -28,6 +28,7 @@ class HeaderData
         })->toArray();
         $mainMenuList = Utils::formatMenuList($mainMenuPermPage, 'MenuCode');
         $topMenuList = Utils::formatMenuList($topMenuPermPage, 'MenuCode');
+        dd($topMenuList);
 
         $headerPart = app(CallApiService::class)->callApi([
             'url' => 'list-type1-book',

+ 1 - 0
app/Models/Cache/ProApiCache.php

@@ -10,6 +10,7 @@ class ProApiCache
     public function getCachedResponse($url, $filePath)
     {
         $responseFilePath = $this->getFullFilePath($filePath, 'response');
+        echo "getCachedResponse() : ".$responseFilePath;
         // 1. $filePath reponse를 먼저 읽어온다.
         if (Storage::disk('dabory')->exists($responseFilePath)) {
             return json_decode(Storage::disk('dabory')->get($responseFilePath), true);

+ 0 - 11
bootstrap/cache/packages.php

@@ -201,15 +201,4 @@
       0 => 'SocialiteProviders\\Manager\\ServiceProvider',
     ),
   ),
-  'stevebauman/location' => 
-  array (
-    'providers' => 
-    array (
-      0 => 'Stevebauman\\Location\\LocationServiceProvider',
-    ),
-    'aliases' => 
-    array (
-      'Location' => 'Stevebauman\\Location\\Facades\\Location',
-    ),
-  ),
 );

+ 23 - 25
bootstrap/cache/services.php

@@ -46,19 +46,18 @@
     42 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
     43 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
     44 => 'SocialiteProviders\\Manager\\ServiceProvider',
-    45 => 'Stevebauman\\Location\\LocationServiceProvider',
-    46 => 'App\\Providers\\AppServiceProvider',
-    47 => 'App\\Providers\\AuthServiceProvider',
-    48 => 'App\\Providers\\EventServiceProvider',
-    49 => 'App\\Providers\\RouteServiceProvider',
-    50 => 'App\\Providers\\GettextServiceProvider',
-    51 => 'App\\Providers\\ThirdPartyApiServiceServiceProvider',
-    52 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
-    53 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
-    54 => 'SocialiteProviders\\Manager\\ServiceProvider',
-    55 => 'Eusonlito\\LaravelMeta\\MetaServiceProvider',
-    56 => 'Jenssegers\\Agent\\AgentServiceProvider',
-    57 => 'Mews\\Captcha\\CaptchaServiceProvider',
+    45 => 'App\\Providers\\AppServiceProvider',
+    46 => 'App\\Providers\\AuthServiceProvider',
+    47 => 'App\\Providers\\EventServiceProvider',
+    48 => 'App\\Providers\\RouteServiceProvider',
+    49 => 'App\\Providers\\GettextServiceProvider',
+    50 => 'App\\Providers\\ThirdPartyApiServiceServiceProvider',
+    51 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
+    52 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
+    53 => 'SocialiteProviders\\Manager\\ServiceProvider',
+    54 => 'Eusonlito\\LaravelMeta\\MetaServiceProvider',
+    55 => 'Jenssegers\\Agent\\AgentServiceProvider',
+    56 => 'Mews\\Captcha\\CaptchaServiceProvider',
   ),
   'eager' => 
   array (
@@ -91,18 +90,17 @@
     26 => 'Carbon\\Laravel\\ServiceProvider',
     27 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
     28 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
-    29 => 'Stevebauman\\Location\\LocationServiceProvider',
-    30 => 'App\\Providers\\AppServiceProvider',
-    31 => 'App\\Providers\\AuthServiceProvider',
-    32 => 'App\\Providers\\EventServiceProvider',
-    33 => 'App\\Providers\\RouteServiceProvider',
-    34 => 'App\\Providers\\GettextServiceProvider',
-    35 => 'App\\Providers\\ThirdPartyApiServiceServiceProvider',
-    36 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
-    37 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
-    38 => 'Eusonlito\\LaravelMeta\\MetaServiceProvider',
-    39 => 'Jenssegers\\Agent\\AgentServiceProvider',
-    40 => 'Mews\\Captcha\\CaptchaServiceProvider',
+    29 => 'App\\Providers\\AppServiceProvider',
+    30 => 'App\\Providers\\AuthServiceProvider',
+    31 => 'App\\Providers\\EventServiceProvider',
+    32 => 'App\\Providers\\RouteServiceProvider',
+    33 => 'App\\Providers\\GettextServiceProvider',
+    34 => 'App\\Providers\\ThirdPartyApiServiceServiceProvider',
+    35 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
+    36 => 'SimpleSoftwareIO\\QrCode\\QrCodeServiceProvider',
+    37 => 'Eusonlito\\LaravelMeta\\MetaServiceProvider',
+    38 => 'Jenssegers\\Agent\\AgentServiceProvider',
+    39 => 'Mews\\Captcha\\CaptchaServiceProvider',
   ),
   'deferred' => 
   array (

ファイルの差分が大きいため隠しています
+ 248 - 171
composer.lock


+ 2 - 2
dabory/para/erp/ko_KR/copy/body-copy/stock/genio-genio.json

@@ -75,7 +75,7 @@
         {
             "$Check": "$Check",
             "No": "번호",
-            "SlipNo": "재고조정 번호",
+            "SlipNo": "재고 번호",
             "CompanyName": "공급업체",
             "ItemCode": "품목코드",
             "ItemName": "품명",
@@ -123,7 +123,7 @@
             "ItemCode": "item"
         },
         {
-            "SlipNo": "/search/slip-search/sales/genio",
+            "SlipNo": "/search/slip-search/stock/genio",
             "CompanyName": "/search/company-search/company",
             "ItemCode": "/search/item-search/supplier"
         }

+ 35 - 0
dabory/para/erp/ko_KR/etc/code-title/status/sales.json

@@ -0,0 +1,35 @@
+[
+    {
+        "Code": "",
+        "Title": "상태값 없음"
+    },
+    {
+        "Code": "0",
+        "Title": "입금대기"
+    },
+    {
+        "Code": "1",
+        "Title": "결제완료"
+    },
+    {
+        "Code": "2",
+        "Title": "배송준비"
+    },
+    {
+        "Code": "3",
+        "Title": "배송중"
+    },
+    {
+        "Code": "4",
+        "Title": "배송완료"
+    },
+    {
+        "Code": "5",
+        "Title": "구매확정"
+    },
+    {
+        "Code": "C",
+        "Title": "클레임발생"
+    }
+]
+

+ 27 - 18
dabory/para/erp/ko_KR/form/form-b/etc.json

@@ -1,6 +1,7 @@
 {
     "General": {
-        "Title": "견적서 입력",
+
+        "Title": "상용구 등록",
         "PickApi": "slip-form-book",
         "ActApi": "squote-act"
     },
@@ -17,6 +18,25 @@
         "CustomCode": "squote"
     },
 
+    "SimpleSelectOptions": [
+        {
+            "Value": "mx.etc_type='domestic' ",
+            "Caption": "내수거래조건"
+        },
+        {
+            "Value": "mx.etc_type='trade' ",
+            "Caption": "무역거래조건"
+        },
+        {
+            "Value": "mx.etc_type='product-ipn' ",
+            "Caption": "상품정보제공고시"
+        },
+        {
+            "Value": "mx.etc_type='smart-courier' ",
+            "Caption": "택배사"
+        }
+    ],
+
     "HeadSelectOptions": [
         {
             "Value": "new",
@@ -53,35 +73,24 @@
         {
             "SaveButton": "저장",
             "AddNewBdButton": "항목 추가",
-            "Delivery": "선택명 지정"
+            "SelectName": "선택명 지정"
         },
         {
             "SaveButton": "left",
             "AddNewBdButton": "left",
-            "Delivery": "left"
+            "SelectName": "left"
         },
         {
             "SaveButton": "0",
             "AddNewBdButton": "0",
-            "Delivery": "20"
+            "SelectName": "20"
         },
         {
             "SaveButton": "",
             "AddNewBdButton": "",
-            "AutoSlipNo": "required",
-            "Date": "required",
-            "Supplier": "required",
-            "Input1": "required",
-            "DealType": "required",
-            "VatType": "required",
-            "VaildPeriod": "",
-            "VatTypeRate": "",
-            "Delivery": "",
-            "PayTerms": "",
-            "Column1": "",
-            "Column2": "",
-            "Remarks": "",
-            "Status": ""
+            "EtcType": "",
+            "SelectName": ""
+
         }
     ],
     "// ListVars": "ListVars[0]-Caption, ListVars[1]-Size(%), ListVars[2]-align",

+ 11 - 1
dabory/para/erp/ko_KR/form/form-b/genio.json

@@ -20,6 +20,11 @@
             "Caption": "저장 후 추가",
             "Parameter": ""
         },
+        {
+            "Value": "copy-to-another",
+            "Caption": "복사",
+            "Parameter": "stock/genio-genio"
+        },
         {
             "Value": "delete",
             "Caption": "삭제",
@@ -67,6 +72,11 @@
     ],
 
     "BodySelectOptions": [
+        {
+            "Value": "body-copy",
+            "Caption": "항목 복사① (재고에서)",
+            "Parameter": "stock/genio-genio"
+        },
         {
             "Value": "multi-delete",
             "Caption": "항목 삭제",
@@ -94,7 +104,7 @@
             "GenioDate": "수불일자*",
             "DealType": "거래구분*",
             "CompanyName": "거래업체*",
-            "Contact": "업체담당자*",
+            "Contact": "업체담당자",
             "Status": "상황",
             "VatType": "부가세*",
             "VatTypeRate": "부가세율",

+ 17 - 0
dabory/para/erp/ko_KR/form/form-b/sales/sales.json

@@ -80,7 +80,11 @@
             "Status": "상황",
             "Supplier": "매출업체*",
             "Contact": "업체담당자",
+<<<<<<< HEAD
             "DealType": "거래구분*",
+=======
+            "DealType": "거래구분",
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             "VatType": "부가세*",
             "VatTypeRate": "부가세율",
             "Delivery": "납품기한",
@@ -90,8 +94,13 @@
             "Column2": "컬럼2#",
             "Remarks": "비고",
             "IsClosed": "수주종결",
+<<<<<<< HEAD
             "SgroupName": "영업부서*",
             "UserName": "사용자명*"
+=======
+            "SgroupName": "영업부서#",
+            "UserName": "사용자명#"
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
         },
         {
             "SaveButton": "left",
@@ -149,7 +158,11 @@
             "Status": "",
             "Supplier": "required",
             "Contact": "",
+<<<<<<< HEAD
             "DealType": "required",
+=======
+            "DealType": "",
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             "VatType": "required",
             "VatTypeRate": "",
             "Delivery": "",
@@ -179,6 +192,10 @@
             "VatAmt": "세액*",
             "SumAmt": "합계금액*",
             "StdSalesPrc": "표준매출가#",
+<<<<<<< HEAD
+=======
+            "DeliDate": "확정납기일*",
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             "Ref1": "참고1",
             "Ref2": "참고2",
             "SorderMemo": "품목설명(M)"

+ 1 - 5
dabory/para/erp/ko_KR/search/slip-search/sales/sales.json

@@ -65,10 +65,6 @@
             "Value": "quick",
             "Caption": "빠른검색"
         },
-        {
-            "Value": "normal",
-            "Caption": "대표품목-금액검색"
-        },
         {
             "Value": "detailed",
             "Caption": "거래처-품목 상세검색"
@@ -134,7 +130,7 @@
             "SetGroup": "left",
             "Item": "left",
             "Amt": "decimal('sales_amt')",
-            "Status": "left",
+            "Status": "status('sales')",
             "Ref": "left"
         }
     ]

+ 3 - 0
dcon

@@ -0,0 +1,3 @@
+
+docker_id="$1"
+winpty docker exec -it "${docker_id}" sh

+ 1 - 0
public/js/modals-controller/b-type/body-copy.js

@@ -82,6 +82,7 @@ function is_auto_create_slip_checked() {
 }
 
 async function body_copy($this) {
+    console.log('body_copy');
     mainModalGetsFocus(`#modal-bodycopy.show`, bodyCopy[$('#modal-bodycopy.show').data('class')]);
 
     let slip_no = $($this).data('slip_no');

+ 12 - 6
public/js/modals-controller/b-type/common.js

@@ -35,7 +35,6 @@
     Btype.get_slip_form_init = async function (query_name = undefined) {
         if (isEmpty(query_name)) {
             query_name = formB['QueryVars']['QueryName']
-            // console.log('query_name : ', query_name);
         }
         const response = await get_api_data('slip-form-init', {
             QueryVars: {
@@ -56,7 +55,7 @@
 
     Btype.create_vat_type_select_box_options = async function (page, dom_val = '#vat-type-select') {
         // let page = await get_select_box_options_data('vat-rate-page', '')
-        // console.log(page)
+        // console.log('page : ', page)
         let html =  page.reduce(function (accumulator, item) {
             return accumulator + `
                 <option value="${item.Id}" data-vatrate="${item.VatRate}" data-viewvatrate="${item.VatRate * 100}"
@@ -64,6 +63,7 @@
                     ${item.VatName}
                 </option>`;
         }, '');
+
         $(dom_val).append(html);
         $(dom_val).trigger('change');
     };
@@ -131,7 +131,6 @@
         let url = eval(namespace).formB.General.ActApi;
 
         if (! isEmpty(act_api)) { url = act_api; }
-
         $('.save-button').prop('disabled', true);
         $.when(get_api_data(url, {
             Page: [
@@ -219,10 +218,10 @@
     };
 
     Btype.enterPressedinCell = async function (event, type = 1, namespace = 'window') {
+        console.log('enterPressedinCell');
         if ((event.which && event.which == 13) || event.keyCode && event.keyCode == 13) {
             document.activeElement.blur();
             let query, input_class;
-
             switch (type) {
                 case 1:
                     query = `item_code='${$(event.target).val()}'`
@@ -266,6 +265,7 @@
     };
 
     Btype.get_item_id = async function (item_id, namespace = 'window') {
+        console.log('get_item_id');
         let response = await get_api_data('item-pick', {
             Page : [
                 {Id: item_id }
@@ -320,6 +320,7 @@
     };
 
     Btype.handleEnterPressedinTabCell = function (event) {
+        console.log('handleEnterPressedinTabCell');
         if ((event.which && event.which == 13) || event.keyCode && event.keyCode == 13) {
             let table = $(event.target).closest('table');
             let cursor = $($(event.target).closest('tr')).find('td:eq(0) input').attr('name')
@@ -615,6 +616,7 @@
     };
 
     Btype.check_the_checkbox_when_changing = function ($this, checked = true, namespace = 'window') {
+        console.log('check_the_checkbox_when_changing');
         let tr = $($this).closest('tr');
         let index = $(tr).prevAll().length
 
@@ -643,11 +645,14 @@
     };
 
     Btype.fetch_slip_form_book = async function (slip_no, namespace = 'window', callback = undefined) {
+        console.log('fetch_slip_form_book');
         let response = await call_slip_form_book(eval(namespace).formB['General']['PickApi'],
             eval(namespace).formB['QueryVars']['QueryName'], slip_no, menuCode);
         if (isEmpty(callback)) {
+            console.log('1 : ', response);
             eval(namespace).update_hd_ui(response);
         } else {
+            console.log('2');
             callback(response);
         }
     };
@@ -680,6 +685,7 @@
             });
             return;
         }
+
         Btype.call_act_api(eval(namespace).get_parameter(), function() {
             eval(namespace).btn_act_new();
         }, undefined, argObj, namespace);
@@ -694,11 +700,10 @@
             });
             return false;
         }
-
+        console.log('save : ', get_parameter());
         Btype.call_act_api(eval(namespace).get_parameter(), function() {
             if (! isEmpty(callback)) { callback(); }
         }, undefined, argObj, namespace);
-
         return true;
     };
     // end head act btn
@@ -717,6 +722,7 @@
         });
         const page = response.data.Page
         if (page) {
+            console.log('page : ', page);
             set_as_response_id(page[0].Id, argObj)
             return true
         } else {

+ 2 - 1
public/js/modals-controller/b-type/copy-to-another.js

@@ -123,7 +123,8 @@ async function copy_to_another() {
 
     console.log(copy_data)
     fetch_copy_to_another(moealSetFile.General.ActApi, copy_data, function (response) {
-        console.log(response)
+        console.log("moealSetFile.General.ActApi", moealSetFile.General.ActApi)
+        console.log("copy_data", copy_data)
         let d = response.data
         if (d.Hd) {
             iziToast.success({

+ 2 - 0
public/js/modals-controller/b-type/slip.js

@@ -59,6 +59,7 @@ const slip = (function ($, window, document, undefined) {
 
 
     slip_open = (limit, offset, page = 1) => {
+        console.log('slip_open');
         let html = ''
         let menu_code = (typeof menuCode === 'undefined') ? false : menuCode
         let modal_class_name = $(id).data('class') || ''
@@ -105,6 +106,7 @@ const slip = (function ($, window, document, undefined) {
                 make_pagination('slip', d.PageVars.QueryCnt, page, modal_class_name);
                 let no = get_table_no(d.PageVars.QueryCnt, page, limit);
                 for (let i in d.Page) {
+                    console.log('d.Page : ', d.Page);
                     const onclick = `${$this.data('clicked')}('${d.Page[i].SlipNo}')`;
                     html +=
                     `<tr>

+ 2 - 2
public/js/plugins/codemirror/mode/julia/index.html

@@ -174,9 +174,9 @@ x ? y : z
 if else elseif while for
  begin let end do
 try catch finally return break continue
-global local const 
+global local const
 export import importall using
-function macro module baremodule 
+function macro module baremodule
 type immutable quote
 true false enumerate
 

+ 0 - 1
public/js/utils/check-dom.js

@@ -18,7 +18,6 @@ function dom_required_check(dom_val) {
     let msg = false;
 
     $(dom_val).each(function() {
-        // console.log($(this).val())
         let this_val = $(this).val() || ''
         if($(this).prop('required') && !this_val.co_trim()) {
             const label_txt = $(this).closest('.form-group').find('label').text()

+ 1 - 1
public/resources

@@ -1 +1 @@
-../../../../dabory/themes/kbgolf/pro/resources
+../../../../dabory/themes/point2u/pro/resources

+ 10 - 14
resources/views/front/dabory/erp/basic-settings/etc.blade.php

@@ -52,24 +52,20 @@
                                     <div class="card-body">
                                         <div class="form-group d-flex flex-column mb-2">
                                             <div class="d-flex align-items-center">
-                                                <input type="radio">
-                                                <label for="" class="m-0 mr-2">내수거래조건</label>
-
-                                                <input type="radio">
-                                                <label for="" class="m-0 mr-2">무역거래조건</label>
-
-                                                <input type="radio">
-                                                <label for="" class="m-0 mr-2">상품정보제공고시</label>
-
-                                                <input type="radio">
-                                                <label for="" class="m-0 mr-2">택배사</label>
+                                            @foreach($formB['SimpleSelectOptions'] as $key => $option)
+                                                @empty($option['Caption'])
+                                                @else
+                                                    <input name="select-name" type="radio" id="" value="{{'select-name-'.$key+1}}" autocomplete="off">
+                                                    <label for="{{'select-name-'.$key}}" class="m-0 mr-2">{{$option['Caption']}}</label>
+                                                @endempty
+                                            @endforeach
                                             </div>
                                         </div>
                                         <div class="form-group d-flex flex-column mb-2">
-                                            <label class="m-0">{{ $formB['FormVars']['Title']['Delivery'] }}</label>
+                                            <label class="m-0">{{ $formB['FormVars']['Title']['SelectName'] }}</label>
                                             <select class="rounded w-100" id="delivery-select"
-                                                    maxlength="{{ $formB['FormVars']['MaxLength']['Delivery'] }}"
-                                                {{ $formB['FormVars']['Required']['Delivery'] }}></select>
+                                                    maxlength="{{ $formB['FormVars']['MaxLength']['SelectName'] }}"
+                                                {{ $formB['FormVars']['Required']['SelectName'] }}></select>
                                         </div>
                                     </div>
                                 </div>

+ 14 - 1
resources/views/front/dabory/erp/purchase/porder.blade.php

@@ -506,7 +506,8 @@
                 Ref2: bd.Ref2,
                 PorderMemo: bd.PorderMemo,
                 IsEnd: parseInt(bd.IsEnd),
-                Ip: window.User['Ip']
+                Ip: window.User['Ip'],
+                FirstThumb: bd.TurboThumb
             }
             if (id < 0) {
                 parameter = { Id: id }
@@ -535,7 +536,11 @@
         }
 
         async function add_td_last_tap_out($this, id) {
+<<<<<<< HEAD
             Btype.btn_act_save('#porder-form #frm', async function () {
+=======
+            Btype.btn_act_save('#squote-form #frm', async function () {
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                 let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
                 let index = $(tr).prevAll().length
 
@@ -720,11 +725,16 @@
                 VatRate: vat_rate,
                 VatName: vat_name,
                 SgroupName: window.User['SgroupName'],
+<<<<<<< HEAD
                 TotalQty : String(Number(total_qty) - 0)
             }
 
             if (typeof first_thumb !== 'undefined') {
                 parameter.FirstThumb = first_thumb;
+=======
+                TotalQty : String(Number(total_qty) - 0),
+                FirstThumb : first_thumb
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             }
 
             if (id < 0) {
@@ -1145,10 +1155,13 @@
             bd_page[index].PorderPrc = item.PurchPrc
             bd_page[index].StdPurchPrc = item.PurchPrc// override_amt_calc_txt_is_changed();
             bd_page[index].TurboThumb = item.TurboThumb
+<<<<<<< HEAD
 
             if (!ThumbArr) { // item 받아왔을 때만 bd_page에 TurboThumb 저장
                 bd_page[index].TurboThumb = item.TurboThumb
             }
+=======
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
 
             if (bd_page[index].Id === 0) {
                 $(tr).children('td:eq(16)').find('textarea').val(item.ItemMemo)

+ 1124 - 0
resources/views/front/dabory/erp/revenue/sales.blade copy.php

@@ -0,0 +1,1124 @@
+@extends('layouts.master')
+@section('title', $formB['General']['Title'])
+@section('content')
+
+<div class="content revenue">
+    <div class="row">
+        <div class="col-xl-12">
+            <div class="mb-1 pt-2 text-right">
+                <button type="button" hidden
+                    class="btn btn-success btn-open-modal item-modal-btn"
+                    data-target="item"
+                    data-clicked="Btype.get_item_id"
+                    data-variable="itemModal">
+                </button>
+
+                <button type="button" hidden
+                    class="btn btn-success btn-open-modal modal-btn">
+                </button>
+
+                <button type="button"
+                    class="btn btn-success btn-open-modal"
+                    data-target="slip"
+                    data-clicked="Btype.fetch_slip_form_book"
+                    data-variable="salesModal">
+                    <i class="icon-folder-open"></i>
+                </button>
+                <button type="button" class="btn btn-sm btn-primary save-spinner-btn">
+                    <span class="save-spinner spinner-border spinner-border-sm text-center" role="status" aria-hidden="true"></span>
+                        Loading...
+                </button>
+                <div class="btn-group" hidden>
+                    <button type="button" class="btn btn-sm btn-primary sales-act save-button" data-value="save" {{ $formB['FormVars']['Hidden']['SaveButton'] }}>
+                        {{ $formB['FormVars']['Title']['SaveButton'] }}
+                    </button>
+                    @include('front.dabory.erp.partial.select-btn-options', [
+                        'selectBtns' => $formB['HeadSelectOptions'],
+                        'eventClassName' => 'sales-act',
+                    ])
+                </div>
+            </div>
+
+            <div class="card" id="sales-form">
+                <div class="card-header" id="frm">
+                    <div class="row">
+                        <div class="col-12 col-md-4 col-lg card-header-item">
+                            <div class="card card card-primary mb-3 mb-md-2 mb-lg-0 border-light" style="height: 310px">
+                                <div class="card-header p-0 mb-2">
+                                </div>
+                                <div class="card-body">
+                                    <input type="hidden" id="Id" name="Id" value="0">
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0 overflow-hidden text-nowrap">{{ $formB['FormVars']['Title']['AutoSlipNo'] }}</label>
+                                        <div class="col-12 d-flex p-0">
+                                        {{-- <button id="auto-slip-no-btn" class="btn-dark border-white rounded overflow-hidden col-3 text-center text-white text-nowrap radius-r0"--}}
+                                        {{--       onclick="get_last_slip_no(this)">--}}
+                                        {{--       <span class="icon-cogs"></span>--}}
+                                        {{--    </button>                           --}}
+                                            <input type="text" id="auto-slip-no-txt" class="rounded w-100 radius-l0" autocomplete="off" disabled
+                                                   maxlength="{{ $formB['FormVars']['MaxLength']['AutoSlipNo'] }}"
+                                                {{ $formB['FormVars']['Required']['AutoSlipNo'] }}>
+                                        </div>
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['SalesDate'] }}</label>
+                                        <input class="rounded w-100" type="date" value="" id="sales-date"
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['SalesDate'] }}"
+                                            {{ $formB['FormVars']['Required']['SalesDate'] }}>
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0 ">{{ $formB['FormVars']['Title']['StockDate'] }}</label>
+                                        <input class="rounded w-100" type="date" value="" id="stock-date"
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['StockDate'] }}"
+                                            {{ $formB['FormVars']['Required']['StockDate'] }}>
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['SorderNo'] }}</label>
+                                        <input class="rounded w-100" type="text" id="sorder-no-txt" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['SorderNo'] }}"
+                                            {{ $formB['FormVars']['Required']['SorderNo'] }}>
+                                    </div>
+                                    <div class="form-group d-flex flex-column">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['Status'] }}</label>
+                                        <input type="text" id="status-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['Status'] }}"
+                                            {{ $formB['FormVars']['Required']['Status'] }}>
+
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-12 col-md-4 col-lg card-header-item">
+                            <div class="card card card-info mb-3 mb-md-2 mb-lg-0 border-light" style="height: 310px">
+                                <div class="card-header p-0 mb-2">
+                                </div>
+                                <div class="card-body">
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['DealType'] }}</label>
+                                        <input type="text" id="deal-type-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['DealType'] }}"
+                                            {{ $formB['FormVars']['Required']['DealType'] }}>
+                                        {{-- <select class="rounded w-100" id="deal-type-select" disabled>
+                                            <option value=""></option>
+                                        </select> --}}
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0 ">{{ $formB['FormVars']['Title']['Supplier'] }}</label>
+                                        <input type="text" id="supplier-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['Supplier'] }}"
+                                            {{ $formB['FormVars']['Required']['Supplier'] }}>
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['Contact'] }}</label>
+                                        <input class="rounded w-100" id="supplier-contact-txt" type="text" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['Contact'] }}"
+                                            {{ $formB['FormVars']['Required']['Contact'] }}>
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['VatType'] }}</label>
+                                        <input type="text" id="vat-type-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['VatType'] }}"
+                                            {{ $formB['FormVars']['Required']['VatType'] }}>
+                                        <select class="rounded w-100" id="vat-type-select" onchange="set_vat_type_rate(this)" hidden disabled>
+                                            <option value=""></option>
+                                        </select>
+                                    </div>
+                                    <div class="form-group d-flex flex-column">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['VatTypeRate'] }}</label>
+                                        <input type="text" id="vat-type-rate-text" class="rounded w-100" autocomplete="off" value="" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['VatTypeRate'] }}"
+                                            {{ $formB['FormVars']['Required']['VatTypeRate'] }}>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-12 col-md-4 col-lg card-header-item">
+                            <div class="card card card-success mb-3 mb-md-2 mb-lg-0 border-light" style="height: 310px"><!--260-->
+                                <div class="card-header p-0 mb-2">
+                                    {{-- <p class="card-title p-1 ml-2">거래 조건</p> --}}
+                                </div>
+                                <div class="card-body">
+
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['Delivery'] }}</label>
+                                        <input type="text" id="delivery-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['Delivery'] }}"
+                                            {{ $formB['FormVars']['Required']['Delivery'] }}>
+                                        {{-- <select class="rounded w-100" id="delivery-select" disabled>
+                                            <option value=""></option>
+                                        </select> --}}
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['PayTerms'] }}</label>
+                                        <input type="text" id="payTerms-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['PayTerms'] }}"
+                                            {{ $formB['FormVars']['Required']['PayTerms'] }}>
+                                        {{-- <select class="rounded w-100" id="payTerms-select" disabled>
+                                            <option value=""></option>
+                                        </select> --}}
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['Destination'] }}</label>
+                                        <input type="text" id="destination-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['Destination'] }}"
+                                            {{ $formB['FormVars']['Required']['Destination'] }}>
+                                        {{-- <select class="rounded w-100" id="destination-select" disabled>
+                                            <option value=""></option>
+                                        </select> --}}
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['Column1'] }}</label>
+                                        <input type="text" id="column1-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['Column1'] }}"
+                                            {{ $formB['FormVars']['Required']['Column1'] }}>
+                                        {{-- <select class="rounded w-100" id="column1-select" disabled>
+                                            <option value=""></option>
+                                        </select> --}}
+                                    </div>
+                                    <div class="form-group d-flex flex-column">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['Column2'] }}</label>
+                                        <input type="text" id="column2-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['Column2'] }}"
+                                            {{ $formB['FormVars']['Required']['Column2'] }}>
+                                        {{-- <select class="rounded w-100" id="column2-select" disabled>
+                                            <option value=""></option>
+                                        </select> --}}
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-12 col-md-4 col-lg card-header-item">
+                            <div class="card card card-danger mb-3 mb-md-0 border-light" style="height: 310px">
+                                <div class="card-header p-0 mb-2">
+                                    {{-- <p class="card-title p-1 ml-2">기타</p> --}}
+                                </div>
+                                <div class="card-body">
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['Remarks'] }}</label>
+                                        <textarea style="height: 85px" class="rounded w-100 bg-white" id="remarks-txt-area" role="button" readonly></textarea>
+                                        <div class="fr-view" id="remarks-preview" hidden></div>
+                                    </div>
+                                    <div class="form-group d-flex flex-column">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['IsClosed'] }}</label>
+                                        <input class="rounded" type="checkbox" id="is-closed-check" value="1" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['IsClosed'] }}"
+                                            {{ $formB['FormVars']['Required']['IsClosed'] }}>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-12 col-md-4 col-lg card-header-item">
+                            <div class="card card card-danger mb-0 border-light" style="height: 310px">
+                                <div class="card-header p-0 mb-2">
+                                </div>
+                                <div class="card-body">
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['SgroupName'] }}</label>
+                                        <input type="text" id="sgroup-name-txt" data-id="0" class="rounded w-100 radius-r0" autocomplete="off" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['SgroupName'] }}"
+                                            {{ $formB['FormVars']['Required']['SgroupName'] }}>
+                                        {{-- <select class="rounded w-100" data-closed="0" id="sgroup-id-select" disabled>
+                                            <option value=""></option>
+                                        </select> --}}
+                                    </div>
+                                    <div class="form-group d-flex flex-column mb-2">
+                                        <label class="m-0">{{ $formB['FormVars']['Title']['UserName'] }}</label>
+                                        <input class="rounded w-100" type="text" id="user-txt" disabled
+                                               maxlength="{{ $formB['FormVars']['MaxLength']['UserName'] }}"
+                                            {{ $formB['FormVars']['Required']['UserName'] }}>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="card-body p-0 mt-2 mx-2">
+                    <div id="">
+                        <div class="d-flex justify-content-end">
+                            <button class="btn btn-primary mr-1" id="down-btn" onclick="override_seq_no_up_down('down')"
+                                data-clicked="">▼
+                            </button>
+                            <button class="btn btn-primary mr-1" id="up-btn" onclick="override_seq_no_up_down('up')"
+                                data-clicked="">▲
+                            </button>
+
+                            @if ($formB['FormVars']['Hidden']['AddNewBdButton'] == 'hidden')
+                                <div class="btn-group">
+                                    <button class="btn btn-sm btn-primary sales-bd-act" data-parameter="{{ $formB['BodySelectOptions'][0]['ParameterName'] ?? '' }}" data-value="{{ $formB['BodySelectOptions'][0]['Value'] }}">
+                                            {{ $formB['BodySelectOptions'][0]['Caption'] }}
+                                    </button>
+
+                                    @include('front.dabory.erp.partial.select-btn-options', [
+                                        'selectBtns' => array_slice($formB['BodySelectOptions'], 1),
+                                        'eventClassName' => 'sales-bd-act'
+                                    ])
+                                </div>
+                            @else
+                                <div class="btn-group">
+                                    <button class="btn btn-sm btn-primary sales-bd-act" data-value="add">
+                                        {{ $formB['FormVars']['Title']['AddNewBdButton'] }}
+                                    </button>
+
+                                    @include('front.dabory.erp.partial.select-btn-options', [
+                                        'selectBtns' => $formB['BodySelectOptions'],
+                                        'eventClassName' => 'sales-bd-act'
+                                    ])
+                                </div>
+                            @endif
+                        </div>
+
+                        <div class="table-responsive mt-2" style="height:400px;" id="scroll-area">
+                            <table class="table-row sales-table">
+                                <thead id="sales-table-head">
+                                    @include('front.dabory.erp.partial.make-thead', [
+                                        'listVars' => $formB['ListVars'],
+                                        'checkboxName' => 'bd-cud-check'
+                                    ])
+                                </thead>
+                                <tbody id="sales-table-body">
+                                </tbody>
+                            </table>
+                        </div>
+
+                        <div class="table-footer justify-content-between col-12 d-flex flex-column flex-md-row align-items-start align-items-stretch mb-2 p-2 border mt-2 rounded">
+                            <div class="d-flex flex-column flex-md-row ml-0 ml-md-4">
+                                <div class="d-flex align-items-stretch flex-column  mb-2 mb-md-0 px-2">
+                                    <label class="w-100 overflow-hidden text-nowrap m-0 p-0" {{ $formB['FooterVars']['Hidden']['StorageName'] }}
+                                        rowspan="1" colspan="1">
+                                        {{ $formB['FooterVars']['Title']['StorageName'] }}
+                                    </label>
+                                    <input type="text" class="w-100 w-md-80 rounded text-left" id="StorageName" disabled>
+                                </div>
+                                <div class="d-flex align-items-stretch flex-column  mb-2 mb-md-0 px-2">
+                                    <label class="w-100 overflow-hidden text-nowrap m-0 p-0" {{ $formB['FooterVars']['Hidden']['BranchName'] }}
+                                        rowspan="1" colspan="1">
+                                        {{ $formB['FooterVars']['Title']['BranchName'] }}
+                                    </label>
+                                    <input type="text" class="w-100 w-md-80 rounded text-left" id="BranchName" disabled>
+                                </div>
+                            </div>
+                            <div class="d-flex flex-column flex-md-row">
+                                <div class="d-flex align-items-stretch flex-column  mb-2 mb-md-0 px-2">
+                                    <label class="w-100 overflow-hidden text-nowrap m-0 p-0" {{ $formB['FooterVars']['Hidden']['QtyTotal'] }}
+                                        rowspan="1" colspan="1">
+                                        {{ $formB['FooterVars']['Title']['QtyTotal'] }}
+                                    </label>
+                                    <input type="text" class="w-100 w-md-80 rounded" id="QtyTotal" disabled>
+                                </div>
+                                <div class="d-flex align-items-stretch flex-column  mb-2 mb-md-0 px-2">
+                                    <label class="w-100 overflow-hidden text-nowrap m-0 p-0" {{ $formB['FooterVars']['Hidden']['SupplyTotal'] }}
+                                        rowspan="1" colspan="1">
+                                        {{ $formB['FooterVars']['Title']['SupplyTotal'] }}
+                                    </label>
+                                    <input type="text" class="w-100 w-md-80 rounded" id="SupplyTotal" disabled>
+                                </div>
+                                <div class="d-flex align-items-stretch flex-column  mb-2 mb-md-0 px-2">
+                                    <label class="w-100 overflow-hidden text-nowrap m-0 p-0" {{ $formB['FooterVars']['Hidden']['VatTotal'] }}
+                                        rowspan="1" colspan="1">
+                                        {{ $formB['FooterVars']['Title']['VatTotal'] }}
+                                    </label>
+                                    <input type="text" class="w-100 w-md-80 rounded" id="VatTotal" disabled>
+                                </div>
+                                <div class="d-flex align-items-stretch flex-column  mb-2 mb-md-0 px-2">
+                                    <label class="w-100 overflow-hidden text-nowrap m-0 p-0" {{ $formB['FooterVars']['Hidden']['SumTotal'] }}
+                                        rowspan="1" colspan="1">
+                                        {{ $formB['FooterVars']['Title']['SumTotal'] }}
+                                    </label>
+                                    <input type="text" class="w-100 w-md-80 rounded" id="SumTotal" disabled>
+                                </div>
+                            </div>
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+@endsection
+
+@foreach ($formB['HeadSelectOptions'] as $selectOption)
+    @if (! empty($selectOption['Parameter']))
+        @push('modal')
+            @include($selectOption['BladeRoute'], [
+                'moealSetFile' => $selectOption['Parameter'],
+                'modalClassName' => $selectOption['ModalClassName']
+            ])
+        @endpush
+    @endif
+@endforeach
+
+@foreach ($formB['BodySelectOptions'] as $selectOption)
+    @if (! empty($selectOption['Parameter']))
+        @push('modal')
+            @include($selectOption['BladeRoute'], [
+                'moealSetFile' => $selectOption['Parameter'],
+                'modalClassName' => $selectOption['ModalClassName']
+            ])
+        @endpush
+    @endif
+@endforeach
+
+@section('modal')
+    @include('front.outline.static.slip', ['moealSetFile' => $salesModal])
+    @include('front.outline.static.company', ['moealSetFile' => $companyModal])
+    @include('front.outline.static.item', ['moealSetFile' => $itemModal])
+    @include('front.outline.static.memo2')
+@endsection
+
+@section('js')
+<script src="{{ csset('/js/modals-controller/b-type/common.js') }}"></script>
+    <script>
+        window.onload = async function () {
+            make_dynamic_table_css('.sales-table', make_dynamic_table_px(formB['ListVars']['Size']))
+            // slip-search cache 사용
+            // Btype.set_slip_cache_data();
+
+            slipInit = await Btype.get_slip_form_init()
+            console.log('slipInit : ', slipInit);
+            // slipInit = @json($slipFormInitCacheData);
+            // formB['SlipCommonSetup'] = slipInit['SlipCommonSetup']
+            // await Btype.create_deal_type_select_box_options(slipInit.DealTypePage)
+            // await Btype.create_vat_type_select_box_options(slipInit.VatRatePage)
+            // await create_etc_select_box_options(slipInit)
+
+            // if (formB['SlipCommonSetup']['IsNewRecAutoSlipNo']) {
+            //     $('.is-new-rec-auto-slip-no').text('자동채번')
+            //     $('#auto-slip-no-txt').prop('disabled', true)
+            //     // get_last_slip_no()
+            // }
+
+
+            Btype.set_slip_no_btn_disabled()
+            $('#sales-date').val(date_to_sting(new Date()))
+            $('#stock-date').val(date_to_sting(new Date()))
+
+            // if (! isEmpty(pickCacheData['query'])) {
+            //     let query = JSON.parse(pickCacheData['query'])
+            //     await Btype.fetch_slip_form_book(query['QueryVars']['FilterValue']);
+            // }
+
+            $('.sales-act').on('click', function () {
+                // console.log($(this).data('value'))
+                switch( $(this).data('value') ) {
+                    case 'save': Btype.btn_act_save('#sales-form #frm'); break;
+                    case 'new': btn_act_new(); break;
+                    case 'save-and-new': Btype.btn_act_save_and_new(); break;
+                    case 'copy-to-another': btn_act_copy_to_another(str_replace_hyphen($(this).data('parameter'), '/')); break;
+                    case 'delete': Btype.btn_act_del('#sales-form #frm'); break;
+                    case 'rpt-print': Btype.rpt_print(); break;
+                    case 'rpt-custom': Btype.rpt_custom(); break;
+                }
+            });
+
+            $('.sales-bd-act').on('click', function () {
+                switch( $(this).data('value') ) {
+                    case 'add': btn_bd_act_add(); break;
+                    case 'body-copy': btn_bd_act_body_copy(str_replace_hyphen($(this).data('parameter'), '/')); break;
+                    case 'multi-delete': override_btn_bd_act_multi_delete(); break;
+                    case 'multi-update': override_btn_bd_act_multi_update(); break;
+                }
+            });
+
+            $('#remarks-txt-area').on('dblclick', function () {
+                $('#modal-memo2').find('#memo-textarea').val('')
+                $('#modal-memo2').data('txtarea_id', '#remarks-txt-area')
+
+                $('#modal-memo2').find('#memo-textarea').val($('#remarks-txt-area').val())
+                $('#modal-memo2').modal('show')
+            });
+
+            activate_button_group()
+
+        }
+
+        async function override_seq_no_up_down(move) {
+            let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
+            let index = $(tr).prevAll().length
+            let bd = bd_page[index]
+
+            if (isEmpty(bd) || parseInt($(`#frm`).find(`input[name="Id"]`).val()) == 0) {
+                iziToast.error({
+                    title: 'Error',
+                    message: @json(_e('Can NOT move UP or DOWN in the status')),
+                });
+                return;
+            }
+
+            let data = {
+                BdTableName: 'dbr_sales_bd',
+                HdIdName: 'sales_id',
+                HdId: parseInt(bd.SalesId),
+                CurrId: parseInt(bd.Id),
+                Move: move,
+            }
+
+            $('#down-btn').prop('disabled', true);
+            $('#up-btn').prop('disabled', true);
+            await Btype.seq_no_up_down(move, data, '#sales-table-body', index)
+            $('#down-btn').prop('disabled', false);
+            $('#up-btn').prop('disabled', false);
+        }
+
+        // start body act btn
+        function override_btn_bd_act_multi_update() {
+            Btype.btn_bd_act_multi_update('.sales-table')
+        }
+
+        function override_btn_bd_act_multi_delete() {
+            Btype.btn_bd_act_multi_delete('.sales-table')
+        }
+
+
+        async function btn_bd_act_add() {
+            if (parseInt($(`#frm`).find(`input[name="Id"]`).val()) == 0) {
+                iziToast.error({
+                    title: 'Error',
+                    message: @json(_e('Action failed')),
+                });
+                return;
+            }
+            if (! Btype.last_item_added_check('#sales-table-body')) {
+                add_tr();
+            }
+        }
+
+        function btn_bd_act_body_copy(parameter_name) {
+            if (parseInt($('#frm').find('#Id').val()) == 0) {
+                iziToast.error({
+                    title: 'Error',
+                    message: @json(_e('Can NOT copy in the status')),
+                });
+                return;
+            }
+
+            $(`#modal-bodycopy.${parameter_name}`).find('.slip_no-txt').val($('#auto-slip-no-txt').val())
+            $(`#modal-bodycopy.${parameter_name}`).find('.company_name-txt').val($('#supplier-txt').val())
+
+            let data = formB['BodySelectOptions'].filter(selectOption => selectOption['ModalClassName'] == parameter_name)[0];
+            $('.revenue').find('.modal-btn').data('target', 'bodycopy')
+            $('.revenue').find('.modal-btn').data('variable', data['Parameter'])
+            $('.revenue').find('.modal-btn').data('class', parameter_name)
+            $('.revenue').find('.modal-btn').trigger('click')
+            $(`#modal-bodycopy.${parameter_name}`).find('.body-copy-act').data('slip_no', $('#auto-slip-no-txt').val() )
+        }
+
+        function btn_act_new() {
+            console.log('btn_act_new')
+            bd_page = [];
+            $(`#frm`).find(`input[name="Id"]`).val(0)
+            $('.save-button').prop('disabled', false)
+
+            $('#auto-slip-no-txt').val('')
+            // Btype.set_slip_no_btn_abled()
+            $('#sales-date').val(date_to_sting(new Date()))
+            $('#stock-date').val(date_to_sting(new Date()))
+            $('#sorder-no-txt').val('')
+            $('#sorder-no-txt').data('id', 0)
+            $('#status-txt').val('')
+
+            select_box_first_selected('#deal-type-select')
+            $('#deal-type-txt').val('')
+            $('#supplier-txt').val('')
+            $('#supplier-txt').data('id', 0)
+            $('#supplier-txt').data('contact', '')
+            $('#supplier-contact-txt').val('')
+            $('#vat-type-txt').val('')
+            $('#vat-type-select').html(`<option value=""></option>`);
+            $('#vat-type-rate-text').val('')
+
+            $('#delivery-txt').val('')
+            $('#payTerms-txt').val('')
+            $('#destination-txt').val('')
+            $('#column1-txt').val('')
+            $('#column2-txt').val('')
+            select_box_first_selected('#delivery-select')
+            select_box_first_selected('#payTerms-select')
+            select_box_first_selected('#destination-select')
+            select_box_first_selected('#column1-select')
+            select_box_first_selected('#column2-select')
+
+            $('#remarks-txt-area').val('')
+            $('#remarks-preview').html('')
+            $('#is-closed-check').prop('checked', false)
+
+            $('#sgroup-name-txt').val('')
+            select_box_first_selected('#sgroup-name-select')
+            $('#user-txt').val('')
+            select_box_first_selected('#our-contact-select')
+
+            $('#StorageName').val('')
+            $('#BranchName').val('')
+
+            // table body 초기화
+            table_head_check_box_reset('#sales-table-head')
+            $('#sales-table-body').html('');
+
+            // footer 합계 초기화
+            $('#QtyTotal').val('')
+            $('#SupplyTotal').val('')
+            $('#VatTotal').val('')
+            $('#SumTotal').val('')
+
+            // if (formB['SlipCommonSetup']['IsNewRecAutoSlipNo']) {
+                get_last_slip_no()
+            // }
+        }
+
+        function btn_act_copy_to_another(parameter_name) {
+            let data = formB['HeadSelectOptions'].filter(selectOption => selectOption['ModalClassName'] == parameter_name)[0];
+            // $(`#modal-copy-to-another.${parameter_name}`).find('.target-slip-no-txt').data('slip-no', $('#auto-slip-no-txt').val())
+            $(`#modal-copy-to-another.${parameter_name}`).find('.source-slip-no-txt').val($('#auto-slip-no-txt').val())
+
+            $('.revenue').find('.modal-btn').data('target', 'copy-to-another')
+            $('.revenue').find('.modal-btn').data('variable', data['Parameter'])
+            $('.revenue').find('.modal-btn').data('class', parameter_name)
+            $('.revenue').find('.modal-btn').trigger('click')
+        }
+
+        function get_parameter() {
+            // const deal_name = slipInit['DealTypePage'].filter(page => page['Id'] === Number($('#deal-type-select').val()))[0]['DealName']
+            // const vat_rate = $('#vat-type-select').find('option:selected').data('vatrate')
+            // const vat_name = slipInit['VatRatePage'].filter(page => page['Id'] === Number($('#vat-type-select').val()))[0]['VatName']
+            let first_item = ''
+            let first_thumb = ''
+            if (bd_page.length > 0) {
+                const first_sales = bd_page[0]
+                first_item = first_sales['ItemCode'] + '_' + first_sales['ItemName']
+                if (first_sales['SubName']) {
+                    first_item += '_' + first_sales['SubName']
+                }
+                first_item += '(' + bd_page.length + ')'
+
+                if(first_sales['TurboThumb']){
+                    first_thumb = first_sales['TurboThumb']
+                }
+            }
+            // console.log('first_sales : ', bd_page[0]);
+            const itmtot_amt = bd_page.reduce((accumulator, bd) => {
+                return accumulator + parseFloat(bd.SalesSupply) //공급가액
+            }, 0)
+
+            console.log('itmtot_amt : ', itmtot_amt);
+
+            // const total_qty = bd_page.reduce((accumulator, bd) => {
+            //     return accumulator + parseFloat(bd.PorderQty) //발주수량
+            // }, 0)
+            let id = parseInt($(`#frm`).find(`input[name="Id"]`).val());
+            let parameter = {
+                Id: id,
+                CreatedOn: get_now_time_stamp(),
+                UpdatedOn: get_now_time_stamp(),
+                SorderId: parseInt($('#sorder-no-txt').data('id')),
+                SalesNo: $('#auto-slip-no-txt').val(),
+                SalesDate: moment(new Date($('#sales-date').val())).format('YYYYMMDD'),
+                StockDate: moment(new Date($('#stock-date').val())).format('YYYYMMDD'),
+                UserId: window.User['UserId'],
+                Remarks: $('#remarks-txt-area').val(),
+                Ip: window.User['Ip'],
+
+                FirstItem: first_item,
+                ItmtotAmt: String(itmtot_amt),
+                // DiscountAmt: '0',
+                TotalAmt: String(Number(itmtot_amt) - 0),
+                //DealName: deal_name,
+                // VatRate: vat_rate,
+                // VatName: vat_name,
+                // SgroupName: window.User['SgroupName'],
+                //TotalQty : String(Number(total_qty) - 0),
+                FirstThumb : first_thumb
+            }
+            if (id < 0) {
+                parameter = { Id: id }
+            } else if (id > 0) {
+                delete parameter.CreatedOn;
+            } else {
+                delete parameter.UpdatedOn;
+            }
+
+            return parameter;
+        }
+
+        async function get_last_slip_no($this) {
+            Btype.set_slip_no_btn_disabled()
+            let response = await Btype.get_last_slip_no(formB['QueryVars']['QueryName']);
+            $('#auto-slip-no-txt').val(moment(new Date()).format('YYMMDD') + '-' + response.data.LastSlipNo)
+        }
+
+        async function get_override_supplier_id(supplier_id) {
+            await get_supplier_id(supplier_id);
+            $('#supplier-contact-txt').val($('#supplier-txt').data('contact'))
+        }
+
+        function set_vat_type_rate($this, msg = true) {
+            let vate_rate = $($this).find('option:selected').data('viewvatrate');
+            $('#vat-type-rate-text').val(vate_rate + '%')
+
+            if (parseInt($(`#frm`).find(`input[name="Id"]`).val()) == 0 || ! msg) return;
+        }
+
+        function get_bd_parameter(bd) {
+            let id = parseInt(bd.Id);
+
+            let parameter = {
+                Id: id,
+                CreatedOn: get_now_time_stamp(),
+                UpdatedOn: get_now_time_stamp(),
+                SalesId: parseInt(bd.SalesId),
+                SeqNo: bd.SeqNo,
+                SalesQty: String(bd.SalesQty),
+                SalesSupply: String(bd.SalesSupply),
+                SalesVat: String(bd.SalesVat),
+                SalesSum: String(bd.SalesSum),
+                CostPrc: String(bd.CostPrc),
+                Ip: window.User['Ip'],
+                FirstThumb: bd.TurboThumb
+            }
+
+            if (id < 0) {
+                parameter = { Id: id }
+            } else if (id > 0) {
+                delete parameter.CreatedOn;
+            } else {
+                delete parameter.UpdatedOn;
+            }
+
+            return parameter;
+        }
+
+        function amt_total_calc() {
+            let qty_total = 0, supply_total = 0, vat_amt_vat_total = 0, sum_total = 0;
+
+            bd_page.forEach(bd => {
+                qty_total += parseFloat(bd.SalesQty);
+                supply_total += parseFloat(bd.SalesSupply);
+                vat_amt_vat_total += parseFloat(bd.SalesVat);
+                sum_total += parseFloat(bd.SalesSum);
+            })
+
+            $('#QtyTotal').val(format_conver_for(qty_total, formB.ListVars['Format'].SalesQty));
+            $('#SupplyTotal').val(format_conver_for(supply_total, formB.ListVars['Format'].SupplyAmt));
+            $('#VatTotal').val(format_conver_for(vat_amt_vat_total, formB.ListVars['Format'].VatAmt));
+            $('#SumTotal').val(format_conver_for(sum_total, formB.ListVars['Format'].SumAmt));
+        }
+
+        async function add_td_last_tap_out($this, id) {
+            Btype.btn_act_save('#sales-form #frm', async function () {
+                let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
+                let index = $(tr).prevAll().length
+
+                if (bd_page[index].SorderBdId == 0) {
+                    iziToast.error({
+                        title: 'Error',
+                        message: @json(_e('Action failed')),
+                    });
+                    return;
+                };
+
+                // 필수텍스트가 안비어있으고 fouces out == 다음 tr 추가
+                if (! dom_required_check($(tr).find(`input`))) {
+                    if ($($this).data('last')) {
+                        let seq_no = await Btype.get_last_seq_no('sales', $('#auto-slip-no-txt').val())
+                        bd_page[index].SeqNo = seq_no;
+                    }
+                    console.log('get_bd_parameter', get_bd_parameter(bd_page[index]));
+                    Btype.call_bd_act_api([ get_bd_parameter(bd_page[index]) ], function (page) {
+                        bd_page[index].Id = page[0].Id;
+
+                        body_act_success_callback($this, tr);
+                        Btype.check_the_checkbox_when_changing($this, false)
+                    });
+                } else {
+                    iziToast.error({
+                        title: 'Error',
+                        message: @json(_e('(*)Required item(s) omitted')),
+                    });
+                }
+            });
+        }
+
+        function body_act_success_callback($this, tr) {
+            // 합계 계산
+            amt_total_calc();
+
+            let qty = $(tr).children('td:eq(6)').find('input')
+            let prc = $(tr).children('td:eq(7)').find('input')
+            let supply_amt = $(tr).children('td:eq(8)').find('input')
+            let vat_amt = $(tr).children('td:eq(9)').find('input')
+            let sum_amt = $(tr).children('td:eq(10)').find('input')
+            let std_sales_price = $(tr).children('td:eq(11)')
+
+            $(qty).val( format_conver_for(minusComma($(qty).val()), formB.ListVars['Format'].SalesQty) )
+            $(prc).val( format_conver_for(minusComma($(prc).val()), formB.ListVars['Format'].SorderPrc) )
+            $(supply_amt).val( format_conver_for(minusComma($(supply_amt).val()), formB.ListVars['Format'].SupplyAmt) )
+            $(vat_amt).val( format_conver_for(minusComma($(vat_amt).val()), formB.ListVars['Format'].VatAmt) )
+            $(sum_amt).val( format_conver_for(minusComma($(sum_amt).val()), formB.ListVars['Format'].SumAmt) )
+            $(std_sales_price).text( format_conver_for(minusComma($(std_sales_price).text()), formB.ListVars['Format'].SorderPrc) )
+
+            if ($($this).data('last')) {
+                add_tr();
+                $($this).data('last', false)
+            }
+            iziToast.success({ title: 'Success', message: $('#action-completed').text() });
+        }
+
+        function override_amt_calc_txt_is_changed() {
+            console.log('override_amt_calc_txt_is_changed');
+            let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
+            let index = $(tr).prevAll().length
+            let supply_amt, vat_amt, sum_amt;
+
+            Btype.amt_calc_txt_is_changed(tr, function (bd) {
+                [supply_amt, vat_amt, sum_amt] = Btype.amt_calc(bd, parseFloat($('#vat-type-select').find('option:selected').data('vatrate')));
+
+                if (isNaN(bd.pquote_prc)) return;
+
+                $(tr).children('td:eq(6)').find('input').val(format_conver_for(bd.pquote_qty, formB.ListVars['Format'].SalesQty))
+                $(tr).children('td:eq(7)').find('input').val(format_conver_for(bd.pquote_prc, formB.ListVars['Format'].SorderPrc))
+
+                $(tr).children('td:eq(8)').find('input').val(format_conver_for(supply_amt, formB.ListVars['Format'].SupplyAmt))
+                $(tr).children('td:eq(9)').find('input').val(format_conver_for(vat_amt, formB.ListVars['Format'].VatAmt))
+                $(tr).children('td:eq(10)').find('input').val(format_conver_for(sum_amt, formB.ListVars['Format'].SumAmt))
+
+                bd_page[index].SorderPrc = bd.pquote_prc
+                bd_page[index].SalesQty = bd.pquote_qty
+                bd_page[index].SalesSupply = supply_amt
+                bd_page[index].SalesVat = vat_amt
+                bd_page[index].SalesSum = sum_amt
+            })
+        }
+
+        function override_custom_supply_amt_or_vat_amt() {
+            Btype.custom_supply_amt_or_vat_amt(function (supply_amt, vat_amt, sum_amt, index) {
+                bd_page[index].SalesSupply = supply_amt
+                bd_page[index].SalesVat = vat_amt
+                bd_page[index].SalesSum = sum_amt
+            })
+        }
+
+        function override_custom_sum_amt() {
+            Btype.custom_sum_amt(function (sum_amt, index) {
+                bd_page[index].SalesSum = sum_amt
+            })
+        }
+
+        function create_bd_page() {
+            let html = []
+            let qty_total = 0, supply_total = 0, vat_amt_vat_total = 0, sum_total = 0;
+            bd_page.forEach(bd => {
+                qty_total += parseFloat(bd.SalesQty);
+                supply_total += parseFloat(bd.SalesSupply);
+                vat_amt_vat_total += parseFloat(bd.SalesVat);
+                sum_total += parseFloat(bd.SalesSum);
+
+                // 품목코드, 수량, 단가, 공급가액, 세액, 합계금액
+                html.push (
+                `<tr>
+                    <td class="text-${formB.ListVars['Align'].$Radio} px-import-0" ${formB.ListVars['Hidden'].$Radio}>
+                        <input name="bd-cursor-state" type="radio" value="1" tabindex="-1"
+                        class="text-${formB.ListVars['Align'].$Radio}"
+                        onclick="Btype.bd_cursor_click(this)">
+                    </td>
+                    <td class="text-${formB.ListVars['Align'].$Check} px-import-0">
+                        <input name="bd-cud-check" type="checkbox" value="1" tabindex="-1"
+                        class="text-${formB.ListVars['Align'].$Check}">
+                    </td>
+                    <td onkeydown="Btype.enterPressedinCell(event)"
+                        class="text-${formB.ListVars['Align'].ItemCode}" ${formB.ListVars['Hidden'].ItemCode}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].ItemCode} border-0 bg-white" value="${bd.ItemCode}" readonly
+                        onchange="Btype.check_the_checkbox_when_changing(this)">
+                    </td>
+                    <td
+                        class="text-${formB.ListVars['Align'].ItemName}" ${formB.ListVars['Hidden'].ItemName}>${bd.ItemName}
+                    </td>
+                    <td
+                        class="text-${formB.ListVars['Align'].SubName}" ${formB.ListVars['Hidden'].SubName}>${bd.SubName}
+                    </td>
+                    <td
+                        class="text-${formB.ListVars['Align'].CountUnit}" ${formB.ListVars['Hidden'].CountUnit}>${bd.CountUnit}
+                    </td>
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].SalesQty}" ${formB.ListVars['Hidden'].SalesQty}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].SalesQty} border-0 bg-white" value="${format_conver_for(bd.SalesQty, formB.ListVars['Format'].SalesQty)}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="override_amt_calc_txt_is_changed()"
+                        required>
+                    </td>
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].SorderPrc}" ${formB.ListVars['Hidden'].SorderPrc}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].SorderPrc} border-0 bg-white" value="${format_conver_for(bd.SorderPrc, formB.ListVars['Format'].SorderPrc)}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="override_amt_calc_txt_is_changed()">
+                    </td>
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].SupplyAmt}" ${formB.ListVars['Hidden'].SupplyAmt}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].SupplyAmt} border-0 bg-white" value="${format_conver_for(bd.SalesSupply, formB.ListVars['Format'].SupplyAmt)}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="override_custom_supply_amt_or_vat_amt()"
+                        required>
+                    </td>
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].VatAmt}" ${formB.ListVars['Hidden'].VatAmt}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].VatAmt} border-0 bg-white" value="${format_conver_for(bd.SalesVat, formB.ListVars['Format'].VatAmt)}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="override_custom_supply_amt_or_vat_amt()"
+                        required>
+                    </td>
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        onfocusout="add_td_last_tap_out(this, ${bd.Id})"
+                        class="text-${formB.ListVars['Align'].SumAmt}" ${formB.ListVars['Hidden'].SumAmt}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].SumAmt} border-0 bg-white" value="${format_conver_for(bd.SalesSum, formB.ListVars['Format'].SumAmt)}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="override_custom_sum_amt()"
+                        required>
+                    </td>
+                    <td
+                        class="text-${formB.ListVars['Align'].StdSalesPrc}" ${formB.ListVars['Hidden'].StdSalesPrc}>${format_conver_for(bd.StdSalesPrc, formB.ListVars['Format'].StdSalesPrc)}
+                    </td>
+
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].DeliDate}" ${formB.ListVars['Hidden'].DeliDate}
+                        >
+                        <input type="date" class="text-${formB.ListVars['Align'].DeliDate} border-0 bg-white" value="${isEmpty(bd.DeliDate) ? '' : moment(bd.DeliDate).format(formB.ListVars['Format'].DeliDate)}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="save_data_when_entering_text()">
+                    </td>
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].Ref1}" ${formB.ListVars['Hidden'].Ref1}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].Ref1} border-0 bg-white" value="${bd.Ref1}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="save_data_when_entering_text()">
+                    </td>
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].Ref2}" ${formB.ListVars['Hidden'].Ref2}
+                        >
+                        <input type="text" class="text-${formB.ListVars['Align'].Ref2} border-0 bg-white" value="${bd.Ref2}" disabled
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="save_data_when_entering_text()">
+                    </td>
+                    <td
+                        class="text-${formB.ListVars['Align'].SorderMemo}" ${formB.ListVars['Hidden'].SorderMemo}>${bd.SorderMemo}
+                    </td>
+                </tr>` )
+            });
+
+            $('#QtyTotal').val(format_conver_for(qty_total, formB.ListVars['Format'].SalesQty));
+            $('#SupplyTotal').val(format_conver_for(supply_total, formB.ListVars['Format'].SupplyAmt));
+            $('#VatTotal').val(format_conver_for(vat_amt_vat_total, formB.ListVars['Format'].VatAmt));
+            $('#SumTotal').val(format_conver_for(sum_total, formB.ListVars['Format'].SumAmt));
+
+            document.getElementById('sales-table-body').innerHTML = html.join('');
+
+        }
+
+        async function add_tr() {
+            let last_bd_id_inc = 0;
+            if (bd_page.length > 0) {
+                last_bd_id_inc = bd_page[bd_page.length - 1].cursorId + 1 || 0
+            }
+
+            let html =
+            `<tr>
+                <td class="text-${formB.ListVars['Align'].$Radio} px-import-0">
+                    <input name="bd-cursor-state" type="radio" value="1" tabindex="-1"
+                    class="text-${formB.ListVars['Align'].$Radio}"
+                    id="bd-cursor-state-${last_bd_id_inc}"
+                    onclick="Btype.bd_cursor_click(this)">
+                </td>
+                <td class="text-${formB.ListVars['Align'].$Check} px-import-0">
+                    <input name="bd-cud-check" type="checkbox" value="1" tabindex="-1"
+                    class="text-${formB.ListVars['Align'].$Check}">
+                </td>
+                <td onkeydown="Btype.enterPressedinCell(event)"
+                    class="text-${formB.ListVars['Align'].ItemCode}" ${formB.ListVars['Hidden'].ItemCode}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].ItemCode} border-0 bg-white" value=""
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    id="item-code-${last_bd_id_inc}">
+                </td>
+                <td
+                    class="text-${formB.ListVars['Align'].ItemName}" ${formB.ListVars['Hidden'].ItemName}>
+                </td>
+                <td
+                    class="text-${formB.ListVars['Align'].SubName}" ${formB.ListVars['Hidden'].SubName}>
+                </td>
+                <td
+                    class="text-${formB.ListVars['Align'].CountUnit}" ${formB.ListVars['Hidden'].CountUnit}>
+                </td>
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].SalesQty}" ${formB.ListVars['Hidden'].SalesQty}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].SalesQty} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="override_amt_calc_txt_is_changed()"
+                    required>
+                </td>
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].SorderPrc}" ${formB.ListVars['Hidden'].SorderPrc}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].SorderPrc} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="override_amt_calc_txt_is_changed()">
+                </td>
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].SupplyAmt}" ${formB.ListVars['Hidden'].SupplyAmt}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].SupplyAmt} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="override_custom_supply_amt_or_vat_amt()"
+                    required>
+                </td>
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].VatAmt}" ${formB.ListVars['Hidden'].VatAmt}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].VatAmt} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="override_custom_supply_amt_or_vat_amt()"
+                    required>
+                </td>
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    data-last=true onfocusout="add_td_last_tap_out(this, ${last_bd_id_inc})"
+                    class="text-${formB.ListVars['Align'].SumAmt}" ${formB.ListVars['Hidden'].SumAmt}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].SumAmt} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="override_custom_sum_amt()"
+                    required>
+                </td>
+                <td
+                    class="text-${formB.ListVars['Align'].StdSalesPrc}" ${formB.ListVars['Hidden'].StdSalesPrc}>
+                </td>
+
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].DeliDate}" ${formB.ListVars['Hidden'].DeliDate}
+                    >
+                    <input type="date" class="text-${formB.ListVars['Align'].DeliDate} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="save_data_when_entering_text()">
+                </td>
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].Ref1}" ${formB.ListVars['Hidden'].Ref1}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].Ref1} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="save_data_when_entering_text()">
+                </td>
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].Ref2}" ${formB.ListVars['Hidden'].Ref2}
+                    >
+                    <input type="text" class="text-${formB.ListVars['Align'].Ref2} border-0 bg-white"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="save_data_when_entering_text()">
+                </td>
+                <td
+                    class="text-${formB.ListVars['Align'].SorderMemo}" ${formB.ListVars['Hidden'].SorderMemo}>
+                </td>
+            </tr>`;
+
+            $('#sales-table-body').append(html)
+
+            await setTimeout( function() {
+                $(`#bd-cursor-state-${last_bd_id_inc}`).trigger('click')
+            }, 100);
+
+            bd_page.push({
+                cursorId: last_bd_id_inc,
+                Id: 0,
+                ItemId: 0,
+                ItemCode: '',
+                ItemName: '',
+                SubName: '',
+                CountUnit: '',
+                SeqNo: 0,
+                SalesId: parseInt($(`#frm`).find(`input[name="Id"]`).val()),
+                SorderBdId: 0,
+                SorderPrc: 0,
+                SalesQty: 0,
+                SalesSupply: 0,
+                SalesVat: 0,
+                SalesSum: 0,
+                StdSalesPrc: 0,
+                CostPrc: 0,
+                DeliDate: '',
+                Ref1: '',
+                Ref2: '',
+                SorderMemo: '',
+            })
+        }
+
+        function update_hd_ui(response) {
+            if (isEmpty(response.data) || response.data.apiStatus) {
+                $('#modal-slip').modal('hide');
+                return;
+            }
+            Btype.set_slip_no_btn_disabled()
+
+            let hd_page = response.data.HdPage[0]
+            bd_page = response.data.BdPage ?? []
+
+            $('#Id').val(hd_page.Id)
+            $('#auto-slip-no-txt').val(hd_page.SalesNo)
+            $('#sales-date').val(moment(to_date(hd_page.SalesDate)).format('YYYY-MM-DD'))
+            $('#stock-date').val(moment(to_date(hd_page.StockDate)).format('YYYY-MM-DD'))
+            $('#sorder-no-txt').val(hd_page.SorderNo)
+            $('#sorder-no-txt').data('id', hd_page.SorderId)
+            $('#status-txt').val(hd_page.Status)
+
+            $('#deal-type-txt').val(format_conver_for(hd_page.DealCode, "deal_type('deal-type')"))
+            $('#supplier-txt').val(hd_page.CompanyName)
+            $('#supplier-txt').data('id', hd_page.SupplierId)
+            $('#supplier-txt').data('contact', hd_page.BuyerContact)
+            $('#supplier-contact-txt').val(hd_page.BuyerContact)
+
+            let html = `<option value="${hd_page.VatRateId}" data-vatrate="${hd_page.VatRate}" data-viewvatrate="${hd_page.VatRate * 100}">${hd_page.VatName}</option>`
+            $('#vat-type-select').html(html);
+            $('#vat-type-select').val(hd_page.VatRateId)
+            $('#vat-type-txt').val(hd_page.VatName)
+            set_vat_type_rate('#vat-type-select', false);
+
+            $('#delivery-txt').val(hd_page.Delivery)
+            $('#payTerms-txt').val(hd_page.PayTerms)
+            $('#destination-txt').val(hd_page.Destination)
+            $('#column1-txt').val(hd_page.Column1)
+            $('#column2-txt').val(hd_page.Column2)
+
+            $('#remarks-txt-area').val(hd_page.Remarks)
+            $('#remarks-preview').html(hd_page.Remarks)
+            $('#is-closed-check').prop('checked', hd_page.IsClosed == '1')
+            $('#is-closed-check').val(hd_page.IsClosed)
+
+            $('#sgroup-name-txt').val(hd_page.SgroupName)
+            $('#user-txt').val(hd_page.NickName)
+
+            $('#StorageName').val(hd_page.StorageName)
+            $('#BranchName').val(hd_page.BranchName)
+
+            // table body에 데이터 추가
+            create_bd_page();
+
+            if (bd_page.length > 0) {
+                let unique = bd_page[bd_page.length - 1].SeqNo * bd_page[bd_page.length - 1].Id + rand(1, 999);
+                bd_page[bd_page.length - 1].cursorId = unique
+            }
+
+            $('#modal-slip').modal('hide');
+        }
+
+        const salesModal = {!! json_encode($salesModal) !!};
+        const companyModal = {!! json_encode($companyModal) !!};
+        const itemModal = {!! json_encode($itemModal) !!};
+        const slipCacheData = {!! json_encode($slipCacheData) !!};
+        const pickCacheData = {!! json_encode($pickCacheData) !!};
+        var formB = {!! json_encode($formB) !!};
+        var bd_page = [];
+        let slipInit = null;
+    </script>
+@endsection

+ 214 - 0
resources/views/front/dabory/erp/revenue/sales.blade.php

@@ -206,7 +206,12 @@
                                 <div class="card-body">
                                     <div class="form-group d-flex flex-column mb-2">
                                         <label class="m-0">{{ $formB['FormVars']['Title']['SgroupName'] }}</label>
+<<<<<<< HEAD
                                         <select class="rounded w-100" data-closed="0" id="sgroup-id-select"
+=======
+                                            {{ $formB['FormVars']['Required']['SgroupName'] }}
+                                            <select class="rounded w-100" data-closed="0" id="sgroup-id-select"
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                                                 maxlength="{{ $formB['FormVars']['MaxLength']['SgroupName'] }}"
                                             {{ $formB['FormVars']['Required']['SgroupName'] }}>
                                         </select>
@@ -361,12 +366,62 @@
         window.onload = async function () {
             ThumbArr = [];
             make_dynamic_table_css('.sales-table', make_dynamic_table_px(formB['ListVars']['Size']))
+<<<<<<< HEAD
+=======
+
+            var test = Btype.get_storage_name_and_branch_name()
+            console.log();
+            // let sgroup_pick = await get_api_data('sgroup-pick', { Page: [ { Id:  parseInt(window.User['SgroupId']) } ] });
+            // window.User['SgroupName'] = sgroup_pick['data']['Page'][0]['SgroupName'];
+            // console.log('sgroup_pick : ', sgroup_pick);
+
+            slipInit = await Btype.get_slip_form_init()
+            // slipInit = @json($slipFormInitCacheData);
+            formB['SlipCommonSetup'] = slipInit['SlipCommonSetup']
+            await Btype.create_deal_type_select_box_options(slipInit.DealTypePage)
+            await Btype.create_vat_type_select_box_options(slipInit.VatRatePage)
+            await Btype.create_sgroup_select_box_options(slipInit.SgroupPage)
+            await create_etc_select_box_options(slipInit)
+            $('#user-txt').val(window.User['NickName'])
+
+            if (formB['SlipCommonSetup']['IsNewRecAutoSlipNo']) {
+                $('.is-new-rec-auto-slip-no').text('자동채번')
+                $('#auto-slip-no-txt').prop('disabled', true)
+                // get_last_slip_no()
+            }
+
+            // slip-search cache 사용
+            if (formB['SlipCommonSetup']['IsLastSlipGet']) {
+                console.log('여기 체크');
+                // slip-search cache 사용
+                Btype.set_slip_cache_data();
+
+                if (! isEmpty(pickCacheData['query'])) {
+                    let query = JSON.parse(pickCacheData['query'])
+                    await Btype.fetch_slip_form_book(query['QueryVars']['FilterValue']);
+                }
+            }
+            // Btype.set_slip_cache_data();
+
+
+            $('#sales-table-body').on('click', 'tr', function() {
+                // Find the input element with name="bd-cursor-state" within the clicked row
+                const $bdCursorStateInput = $(this).find('input[name="bd-cursor-state"]');
+                if ($bdCursorStateInput.length) {
+                    $($bdCursorStateInput).prop('checked', true)
+                    Btype.bd_cursor_click($bdCursorStateInput)
+                }
+            });
+
+            Btype.set_slip_no_btn_disabled()
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             $('#sales-date').val(date_to_sting(new Date()))
             $('#stock-date').val(date_to_sting(new Date()))
             Btype.get_storage_name_and_branch_name()
             let sgroup_pick = await get_api_data('sgroup-pick', { Page: [ { Id:  parseInt(window.User['SgroupId']) } ] });
             window.User['SgroupName'] = sgroup_pick['data']['Page'][0]['SgroupName'];
 
+<<<<<<< HEAD
             slipInit = await Btype.get_slip_form_init()
             // slipInit = @json($slipFormInitCacheData);
             formB['SlipCommonSetup'] = slipInit['SlipCommonSetup']
@@ -402,6 +457,8 @@
             });
             Btype.set_slip_no_btn_disabled()
 
+=======
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             $('.sales-act').on('click', function () {
                 switch( $(this).data('value') ) {
                     case 'save': Btype.btn_act_save('#sales-form #frm'); break;
@@ -475,6 +532,24 @@
             $('#up-btn').prop('disabled', false);
         }
 
+<<<<<<< HEAD
+=======
+
+        function save_data_when_entering_text() {
+            let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
+            let index = $(tr).prevAll().length
+
+            bd_page[index].ConfirmDate = $(tr).children('td:eq(12)').find('input').val()
+            bd_page[index].DeliDate = $(tr).children('td:eq(13)').find('input').val()
+            bd_page[index].Ref1 = $(tr).children('td:eq(14)').find('input').val()
+            bd_page[index].Ref2 = $(tr).children('td:eq(15)').find('input').val()
+        }
+
+        // start body act btn
+        function override_btn_bd_act_multi_update() {
+            Btype.btn_bd_act_multi_update('.sales-table')
+        }
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
 
         function save_data_when_entering_text() {
             let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
@@ -486,6 +561,7 @@
         }
 
         async function btn_bd_act_add() {
+            console.log('btn_bd_act_add');
             if (parseInt($(`#frm`).find(`input[name="Id"]`).val()) == 0) {
                 iziToast.error({
                     title: 'Error',
@@ -519,10 +595,19 @@
         }
 
         function btn_act_new() {
+<<<<<<< HEAD
             data_init()
             if (formB['SlipCommonSetup']['IsNewRecAutoSlipNo']) {
                 get_last_slip_no()
             }
+=======
+            console.log('btn_act_new');
+            data_init()
+
+            // if (formB['SlipCommonSetup']['IsNewRecAutoSlipNo']) {
+                get_last_slip_no()
+            // }
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
         }
 
         function btn_act_copy_to_another(parameter_name) {
@@ -581,6 +666,7 @@
                     first_thumb = first_sales['TurboThumb']
                 }
             }
+<<<<<<< HEAD
             const itmtot_amt = bd_page.reduce((accumulator, bd) => {
                 return accumulator + parseFloat(bd.SalesSupply) + parseFloat(bd.SalesVat) // 합계금액 (공급가액 + 세액)
             }, 0)
@@ -588,6 +674,17 @@
             const total_qty = bd_page.reduce((accumulator, bd) => {
                 return accumulator + parseFloat(bd.SalesQty)
             }, 0)
+=======
+            // console.log('first_sales : ', bd_page[0]);
+            const itmtot_amt = bd_page.reduce((accumulator, bd) => {
+                // return accumulator + parseFloat(bd.SalesSupply) + parseFloat(bd.SalesVat) // 합계금액 (공급가액 + 세액)
+                return accumulator + parseFloat(bd.SalesSupply)
+            }, 0)
+
+            // const total_qty = bd_page.reduce((accumulator, bd) => {
+            //     return accumulator + parseFloat(bd.PorderQty)
+            // }, 0)
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             let id = parseInt($(`#frm`).find(`input[name="Id"]`).val());
             let parameter = {
                 Id: id,
@@ -621,12 +718,17 @@
                 VatRate: vat_rate,
                 VatName: vat_name,
                 SgroupName: window.User['SgroupName'],
+<<<<<<< HEAD
                 // FirstThumb : first_thumb,
                 TotalQty : String(Number(total_qty) - 0)
             }
 
             if (typeof first_thumb !== 'undefined') {
                 parameter.FirstThumb = first_thumb;
+=======
+                //TotalQty : String(Number(total_qty) - 0),
+                FirstThumb : first_thumb
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             }
             if (id < 0) {
                 parameter = { Id: id }
@@ -635,6 +737,12 @@
             } else {
                 delete parameter.UpdatedOn;
             }
+<<<<<<< HEAD
+=======
+
+            console.log('save : ', parameter);
+
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             return parameter;
         }
 
@@ -711,6 +819,17 @@
             $('#our-contact-select').html(our_contact);
         }
 
+<<<<<<< HEAD
+=======
+        // function set_vat_type_rate($this, msg = true) {
+        //     let vate_rate = $($this).find('option:selected').data('viewvatrate');
+        //     console.log('vate_rate : ', vate_rate);
+        //     $('#vat-type-rate-text').val(vate_rate + '%')
+
+        //     if (parseInt($(`#frm`).find(`input[name="Id"]`).val()) == 0 || ! msg) return;
+        // }
+
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
         function set_vat_type_rate($this, msg = true) {
             let vate_rate = $($this).find('option:selected').data('viewvatrate');
             $('#vat-type-rate-text').val(vate_rate + '%')
@@ -742,6 +861,7 @@
                 SalesSupply: String(bd.SalesSupply),
                 SalesVat: String(bd.SalesVat),
                 SalesSum: String(bd.SalesSum),
+<<<<<<< HEAD
                 // ConfirmDate: isEmpty(bd.ConfirmDate) ? '' : moment(bd.ConfirmDate).format('YYYYMMDD'),
                 // DeliDate: isEmpty(bd.DeliDate) ? '' : moment(bd.DeliDate).format('YYYYMMDD'),
                 // DiscountRate: String(discount_rate),
@@ -751,6 +871,11 @@
                 Ref2: bd.Ref2,
                 SorderMemo: bd.SorderMemo,
                 Ip: window.User['Ip']
+=======
+                CostPrc: String(bd.CostPrc),
+                Ip: window.User['Ip'],
+                FirstThumb: bd.TurboThumb
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             }
 
             if (id < 0) {
@@ -783,6 +908,7 @@
             Btype.btn_act_save('#sales-form #frm', async function () {
                 let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
                 let index = $(tr).prevAll().length
+<<<<<<< HEAD
                 // if (bd_page[index].SorderBdId == 0) {
                 //     console.log('bd_page[index] : ', bd_page[index]);
                 //     iziToast.error({
@@ -801,6 +927,26 @@
                     Btype.call_bd_act_api([ get_bd_parameter(bd_page[index]) ], function (page) {
                         bd_page[index].Id = page[0].Id;
 
+=======
+
+                if (bd_page[index].SorderBdId == 0) {
+                    iziToast.error({
+                        title: 'Error',
+                        message: @json(_e('Action failed')),
+                    });
+                    return;
+                };
+
+                // 필수텍스트가 안비어있으고 fouces out == 다음 tr 추가
+                if (! dom_required_check($(tr).find(`input`))) {
+                    if ($($this).data('last')) {
+                        let seq_no = await Btype.get_last_seq_no('sales', $('#auto-slip-no-txt').val())
+                        bd_page[index].SeqNo = seq_no;
+                    }
+                    Btype.call_bd_act_api([ get_bd_parameter(bd_page[index]) ], function (page) {
+                        bd_page[index].Id = page[0].Id;
+
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                         body_act_success_callback($this, tr);
                         Btype.check_the_checkbox_when_changing($this, false)
                     });
@@ -878,6 +1024,7 @@
         }
 
         function create_bd_page() {
+            console.log('create_bd_page()');
             let html = []
             let qty_total = 0, supply_total = 0, vat_amt_vat_total = 0, sum_total = 0;
             bd_page.forEach(bd => {
@@ -927,7 +1074,11 @@
                     <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
                         class="text-${formB.ListVars['Align'].SorderPrc}" ${formB.ListVars['Hidden'].SorderPrc}
                         >
+<<<<<<< HEAD
                         <input type="text" class="text-${formB.ListVars['Align'].SorderPrc} border-0 bg-white" value="${format_conver_for(bd.CostPrc, formB.ListVars['Format'].SorderPrc)}" readonly
+=======
+                        <input type="text" class="text-${formB.ListVars['Align'].SorderPrc} border-0 bg-white" value="${format_conver_for(bd.SorderPrc, formB.ListVars['Format'].SorderPrc)}" readonly
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                         onchange="Btype.check_the_checkbox_when_changing(this)"
                         onfocusout="override_amt_calc_txt_is_changed()"
                         require>
@@ -951,7 +1102,11 @@
                     <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
                         class="text-${formB.ListVars['Align'].SumAmt}" ${formB.ListVars['Hidden'].SumAmt}
                         >
+<<<<<<< HEAD
                         <input type="text" class="text-${formB.ListVars['Align'].SumAmt} border-0 bg-white" value="${format_conver_for(bd.SalesSum, formB.ListVars['Format'].SumAmt)}" readonly
+=======
+                        <input type="text" class="text-${formB.ListVars['Align'].SumAmt} border-0 bg-white" value="${format_conver_for(bd.SorderSum, formB.ListVars['Format'].SumAmt)}" readonly
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                         onchange="Btype.check_the_checkbox_when_changing(this)"
                         onfocusout="override_custom_sum_amt()"
                         required>
@@ -959,6 +1114,18 @@
                     <td
                         class="text-${formB.ListVars['Align'].StdSalesPrc}" ${formB.ListVars['Hidden'].StdSalesPrc}>${format_conver_for(bd.StdSalesPrc, formB.ListVars['Format'].StdSalesPrc)}
                     </td>
+<<<<<<< HEAD
+=======
+
+                    <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                        class="text-${formB.ListVars['Align'].DeliDate}" ${formB.ListVars['Hidden'].DeliDate}
+                        >
+                        <input type="date" class="text-${formB.ListVars['Align'].DeliDate} border-0 bg-white" value="${isEmpty(bd.DeliDate) ? '' : moment(bd.DeliDate).format('YYYY-MM-DD')}" readonly
+                        onchange="Btype.check_the_checkbox_when_changing(this)"
+                        onfocusout="save_data_when_entering_text()"
+                        required>
+                    </td>
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                     <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
                         class="text-${formB.ListVars['Align'].Ref1}" ${formB.ListVars['Hidden'].Ref1}
                         >
@@ -975,7 +1142,11 @@
                         onfocusout="save_data_when_entering_text()">
                     </td>
                     <td
+<<<<<<< HEAD
                         class="text-${formB.ListVars['Align'].SorderMemo}" ${formB.ListVars['Hidden'].SorderMemo}>
+=======
+                        class="text-${formB.ListVars['Align'].SorderMemo}" ${formB.ListVars['Hidden'].SordderMemo}>
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                         <textarea style="max-height: 30px;" class="rounded w-100 bg-white memo-textarea" id="memo-textarea-${bd.Id}"
                             ondblclick="Btype.dblclick_memo_textarea(this, ${bd.Id})" role="button" readonly>${bd.SorderMemo}</textarea>
                     </td>
@@ -1070,6 +1241,18 @@
                 <td
                     class="text-${formB.ListVars['Align'].StdSalesPrc}" ${formB.ListVars['Hidden'].StdSalesPrc}>
                 </td>
+<<<<<<< HEAD
+=======
+                <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
+                    class="text-${formB.ListVars['Align'].DeliDate}" ${formB.ListVars['Hidden'].DeliDate}
+                    >
+                    <input type="date" class="text-${formB.ListVars['Align'].DeliDate} border-0 bg-white" readonly
+                    value="${moment().format('YYYY-MM-DD')}"
+                    onchange="Btype.check_the_checkbox_when_changing(this)"
+                    onfocusout="save_data_when_entering_text()"
+                    required>
+                </td>
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                 <td onkeydown="Btype.handleEnterPressedinTabCell(event)"
                     class="text-${formB.ListVars['Align'].Ref1}" ${formB.ListVars['Hidden'].Ref1}
                     >
@@ -1125,6 +1308,7 @@
         }
 
         function set_item_data_to_textbox(item) {
+<<<<<<< HEAD
             let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
             $(tr).children('td:eq(2)').find('input').val(item.ItemCode)
             $(tr).children('td:eq(3)').find('input').val(item.ItemName)
@@ -1157,13 +1341,39 @@
             // if (bd_page[index].Id === 0) {
             //     $(tr).children('td:eq(16)').find('textarea').val(item.ItemMemo)
             //     bd_page[index].SalesMemo = item.ItemMemo
+=======
+            console.log('item : ', item);
+            let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
+            // $(tr).children('td:eq(2)').find('input').val(item.ItemCode)
+            // $(tr).children('td:eq(3)').find('input').val(item.ItemName)
+            // $(tr).children('td:eq(4)').text(item.SubName)
+            // $(tr).children('td:eq(5)').text(item.CountUnit)
+            // $(tr).children('td:eq(6)').find('input').val()
+            // $(tr).children('td:eq(7)').find('input').val(parseFloat(item.PurchPrc).toFixed(window.User['PurchPrcPoint']))
+            // $(tr).children('td:eq(11)').text(parseFloat(item.PurchPrc).toFixed(window.User['PurchPrcPoint']))
+            // let index = $(tr).prevAll().length;
+            // bd_page[index].ItemId = item.Id
+            // bd_page[index].ItemCode = item.ItemCode
+            // bd_page[index].ItemName = item.ItemName
+            // bd_page[index].SubName = item.SubName
+            // bd_page[index].CountUnit = item.CountUnit
+            // bd_page[index].StdSalesPrc = item.PurchPrc
+            // bd_page[index].StdPurchPrc = item.PurchPrc// override_amt_calc_txt_is_changed();
+            // bd_page[index].TurboThumb = item.TurboThumb
+
+            // if (bd_page[index].Id === 0) {
+            //     $(tr).children('td:eq(16)').find('textarea').val(item.ItemMemo)
+            //     bd_page[index].PorderMemo = item.ItemMemo
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             // }
 
             return $(tr).children('td:eq(6)').find('input')
         }
 
         function update_hd_ui(response) {
+            console.log('update_hd_ui');
             if (isEmpty(response.data) || response.data.apiStatus) {
+                console.log('isEmpty(response.data) || response.data.apiStatus');
                 $('#modal-slip').modal('hide');
                 return;
             }
@@ -1172,12 +1382,16 @@
 
             let hd_page = response.data.HdPage[0]
             bd_page = response.data.BdPage ?? []
+<<<<<<< HEAD
             let thumb = response.data.HdPage[0]['FirstThumb']
 
             if(!thumb){
                 ThumbArr = thumb;
             }
 
+=======
+            console.log('response : ', response);
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             $('#Id').val(hd_page.Id)
             $('#auto-slip-no-txt').val(hd_page.SalesNo)
             $('#sales-date').val(moment(to_date(hd_page.SalesDate)).format('YYYY-MM-DD'))

+ 20 - 1
resources/views/front/dabory/erp/revenue/sorder.blade.php

@@ -327,7 +327,10 @@
 <script src="{{ csset('/js/modals-controller/b-type/common.js') }}"></script>
     <script>
         window.onload = async function () {
+<<<<<<< HEAD
             ThumbArr = [];
+=======
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             //await Btype.fetch_slip_form_book(query['QueryVars']['FilterValue']);
             make_dynamic_table_css('.sorder-table', make_dynamic_table_px(formB['ListVars']['Size']))
 
@@ -336,6 +339,7 @@
             Btype.get_storage_name_and_branch_name()
             // let data = await Btype.get_slip_form_init()
             slipInit = @json($slipFormInitCacheData);
+            // console.log('slipInit : ', slipInit);
             formB['SlipCommonSetup'] = slipInit['SlipCommonSetup']
             await Btype.create_deal_type_select_box_options(slipInit.DealTypePage)
             await Btype.create_vat_type_select_box_options(slipInit.VatRatePage)
@@ -512,7 +516,11 @@
         }
 
         async function add_td_last_tap_out($this, id) {
+<<<<<<< HEAD
             Btype.btn_act_save('#sorder-form #frm', async function () {
+=======
+            Btype.btn_act_save('#squote-form #frm', async function () {
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                 let tr = $(`input[name='bd-cursor-state']:checked`).closest('tr')
                 let index = $(tr).prevAll().length
 
@@ -520,6 +528,10 @@
                 if (bd_page[index].ItemId != 0 && ! dom_required_check($(tr).find(`input`))) {
                     if ($($this).data('last')) {
                         let seq_no = await Btype.get_last_seq_no('sorder', $('#auto-slip-no-txt').val())
+<<<<<<< HEAD
+=======
+                        console.log('seq_no : ', seq_no);
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                         bd_page[index].SeqNo = seq_no;
                     }
 
@@ -527,6 +539,10 @@
                         bd_page[index].Id = page[0].Id;
                         body_act_success_callback($this, tr);
                         Btype.check_the_checkbox_when_changing($this, false)
+<<<<<<< HEAD
+=======
+                        // Btype.btn_act_save('#sorder-form #frm');
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
                     });
                 } else {
                     iziToast.error({
@@ -667,7 +683,6 @@
             const vat_rate = $('#vat-type-select').find('option:selected').data('vatrate')
             const vat_name = slipInit['VatRatePage'].filter(page => page['Id'] === Number($('#vat-type-select').val()))[0]['VatName']
             let first_item = ''
-            let first_thumb = ''
 
             if (bd_page.length > 0) {
                 const first_sorder = bd_page[0]
@@ -737,6 +752,10 @@
                 delete parameter.UpdatedOn;
             }
 
+<<<<<<< HEAD
+=======
+            console.log('save : ', parameter)
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             return parameter;
         }
 

+ 11 - 3
resources/views/front/dabory/erp/sales/squote.blade.php

@@ -283,7 +283,6 @@
     <script>
         window.onload = async function () {
             make_dynamic_table_css('.squote-table', make_dynamic_table_px(formB['ListVars']['Size']))
-
             $('#squote-date').val(date_to_sting(new Date()))
 
             let sgroup_pick = await get_api_data('sgroup-pick', { Page: [ { Id:  parseInt(window.User['SgroupId']) } ] });
@@ -431,7 +430,7 @@
 
             // $(`#modal-bodycopy.${parameter_name}`).find('.slip_no-txt').val($('#auto-slip-no-txt').val())
             $(`#modal-bodycopy.${parameter_name}`).find('.company_name-txt').val($('#supplier-txt').val())
-
+            console.log('parameter_name : ', parameter_name);
             let data = formB['BodySelectOptions'].filter(selectOption => selectOption['ModalClassName'] == parameter_name)[0];
             $('.sales').find('.modal-btn').data('target', 'bodycopy')
             $('.sales').find('.modal-btn').data('variable', data['Parameter'])
@@ -445,6 +444,7 @@
         function btn_act_copy_to_another(parameter_name) {
             let data = formB['HeadSelectOptions'].filter(selectOption => selectOption['ModalClassName'] == parameter_name)[0];
             // $(`#modal-copy-to-another.${parameter_name}`).find('.target-slip-no-txt').data('slip-no', $('#auto-slip-no-txt').val())
+            console.log('parameter : ', data['Parameter']);
             $(`#modal-copy-to-another.${parameter_name}`).find('.source-slip-no-txt').val($('#auto-slip-no-txt').val())
             $('.sales').find('.modal-btn').data('target', 'copy-to-another')
             $('.sales').find('.modal-btn').data('variable', data['Parameter'])
@@ -487,19 +487,23 @@
             const deal_name = slipInit['DealTypePage'].filter(page => page['Id'] === Number($('#deal-type-select').val()))[0]['DealName']
             const vat_rate = $('#vat-type-select').find('option:selected').data('vatrate')
             const vat_name = slipInit['VatRatePage'].filter(page => page['Id'] === Number($('#vat-type-select').val()))[0]['VatName']
+            console.log('vat_name : ', vat_name);
 
             let first_item = ''
             if (bd_page.length > 0) {
+                console.log('bd_page : ', bd_page[0]);
                 const first_squote = bd_page[0]
                 first_item = first_squote['ItemCode'] + '_' + first_squote['ItemName']
                 if (first_squote['SubName']) {
                     first_item += '_' + first_squote['SubName']
                 }
+                squote_vat=first_squote['SquoteVat'];
                 first_item += '(' + bd_page.length + ')'
             }
             const itmtot_amt = bd_page.reduce((accumulator, bd) => {
                 return accumulator + parseFloat(bd.SquoteSupply) + parseFloat(bd.SquoteVat) // 합계금액 (공급가액 + 세액)
             }, 0)
+
             let id = parseInt($(`#frm`).find(`input[name="Id"]`).val());
             let parameter = {
                 Id: id,
@@ -625,7 +629,7 @@
         function set_vat_type_rate($this, msg = true) {
             let vate_rate = $($this).find('option:selected').data('viewvatrate');
             $('#vat-type-rate-text').val(vate_rate + '%')
-
+            console.log('vate_rate : ', vate_rate);
             if (parseInt($(`#frm`).find(`input[name="Id"]`).val()) == 0 || ! msg) return;
             Btype.call_act_api(get_parameter(), function() { });
 
@@ -856,7 +860,11 @@
             $(tr).children('td:eq(3)').find('input').val(item.ItemName)
             $(tr).children('td:eq(4)').text(item.SubName)
             $(tr).children('td:eq(5)').text(item.CountUnit)
+<<<<<<< HEAD
             $(tr).children('td:eq(6)').find('input').val()
+=======
+            $(tr).children('td:eq(6)').find('input').val(0)
+>>>>>>> 79e2e07b19fcabaccbe8bd7b4812a3a803613323
             $(tr).children('td:eq(7)').find('input').val(parseFloat(item.PurchPrc).toFixed(window.User['PurchPrcPoint']))
             $(tr).children('td:eq(11)').text(parseFloat(item.SalesPrc).toFixed(window.User['PurchPrcPoint']))
 

+ 2 - 0
resources/views/front/dabory/erp/stock/genio.blade.php

@@ -387,6 +387,8 @@
                 VatName: vat_name,
                 SgroupName: window.User['SgroupName']
             }
+
+            console.log('parameter : ', parameter);
             if (id < 0) {
                 parameter = { Id: id }
             } else if (id > 0) {

+ 7 - 1
resources/views/front/outline/static/copy-to-another.blade.php

@@ -1,5 +1,7 @@
 <!--- copy-to-anther --->
-@php $modalClassName = $modalClassName ?? ''; @endphp
+@php $modalClassName = $modalClassName ?? '';
+//var_dump($moealSetFile['General']['Title']);
+@endphp
 <div class="modal fade {{ $modalClassName }}" id="modal-copy-to-another" aria-hidden="true" data-backdrop="static" style="display: none; z-index: 1050; overflow: auto;">
     <div class="modal-dialog m-auto pt-4" style="width: 480px;">
         <button type="button" hidden
@@ -66,6 +68,10 @@
     });
 </script>
 
+@php
+ //var_dump($moealSetFile['CopyToAnotherPopupVars']['Display']);
+@endphp
+
 @foreach ($moealSetFile['CopyToAnotherPopupVars']['Display'] as $key => $i)
     @if ($moealSetFile['CopyToAnotherPopupVars']['Display'][$key] != 'd-none')
         @push('modal')

+ 16 - 0
settings_erp.sh

@@ -0,0 +1,16 @@
+#!/bin/bash
+main_dir="/var/www/html"
+del_vendor_dir="/var/www/html/vendor"
+s_vendor_dir="/home/vendor"
+
+# vendor 디렉토리 삭제
+rm -rf "$del_vendor_dir"
+# home 경로에 vendor 디렉토리 생성
+mkdir -p "$s_vendor_dir"
+# /var/www/html 경로 이동
+cd "$main_dir"
+# vendor 심볼릭 링크 생성
+ln -s "$s_vendor_dir" vendor
+cd "$main_dir"
+# composer update 실행
+composer update

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません