src/Eccube/Resource/template/admin/Product/product_class.twig line 1

Open in your IDE?
  1. {#
  2. This file is part of EC-CUBE
  3. Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  4. http://www.ec-cube.co.jp/
  5. For the full copyright and license information, please view the LICENSE
  6. file that was distributed with this source code.
  7. #}
  8. {% extends '@admin/default_frame.twig' %}
  9. {% set menus = ['product', 'product_edit'] %}
  10. {% block title %}{{ 'admin.product.product_class_registration'|trans }}{% endblock %}
  11. {% block sub_title %}{{ 'admin.product.product_management'|trans }}{% endblock %}
  12. {% form_theme form '@admin/Form/bootstrap_4_horizontal_layout.html.twig' %}
  13. {% form_theme clearForm '@admin/Form/bootstrap_4_horizontal_layout.html.twig' %}
  14. {% block javascript %}
  15.     <script>
  16.         $(function() {
  17.             // 無制限チェックボックス初期表示
  18.             $('input[id$=_stock_unlimited]').each(function() {
  19.                 var check = $(this).prop('checked');
  20.                 var index = $(this).attr('id').match(/\d+/);
  21.                 if (check) {
  22.                     $('#product_class_matrix_product_classes_' + index + '_stock').prop('disabled', true);
  23.                 } else {
  24.                     $('#product_class_matrix_product_classes_' + index + '_stock').prop('disabled', false);
  25.                 }
  26.             });
  27.             // 無制限チェックボックス
  28.             $('input[id$=_stock_unlimited]').on('click', function() {
  29.                 var check = $(this).prop('checked');
  30.                 var index = $(this).attr('id').match(/\d+/);
  31.                 if (check) {
  32.                     $('#product_class_matrix_product_classes_' + index + '_stock').prop('disabled', true);
  33.                 } else {
  34.                     $('#product_class_matrix_product_classes_' + index + '_stock').prop('disabled', false);
  35.                 }
  36.             });
  37.             // 登録チェックボックス
  38.             $('#check-all').click(function() {
  39.                 var checked = $('#check-all').prop('checked');
  40.                 if (checked) {
  41.                     $('input[id$=_checked]').prop('checked', true);
  42.                 } else {
  43.                     $('input[id$=_checked]').prop('checked', false);
  44.                 }
  45.             });
  46.             // 1行目をコピーボタン
  47.             $('#copy').on('click', function(event) {
  48.                 event.preventDefault();
  49.                 var check = $('#product_class_matrix_product_classes_0_add').prop('checked');
  50.                 $('input[id$=_add]').prop('checked', check);
  51.                 var product_code = $('#product_class_matrix_product_classes_0_code').val();
  52.                 $('input[id$=_code]').val(product_code);
  53.                 var stock = $('#product_class_matrix_product_classes_0_stock').val();
  54.                 $('input[id$=_stock]').val(stock);
  55.                 var stock_unlimited = $('#product_class_matrix_product_classes_0_stock_unlimited').prop('checked');
  56.                 // 無制限チェックボックス
  57.                 $('input[id$=_stock_unlimited]').each(function() {
  58.                     var index = $(this).attr('id').match(/\d+/);
  59.                     if (stock_unlimited) {
  60.                         $(this).prop('checked', true);
  61.                         $('#product_class_matrix_product_classes_' + index + '_stock').prop('disabled', true);
  62.                     } else {
  63.                         $(this).prop('checked', false);
  64.                         $('#product_class_matrix_product_classes_' + index + '_stock').prop('disabled', false);
  65.                     }
  66.                 });
  67.                 var sale_limit = $('#product_class_matrix_product_classes_0_sale_limit').val();
  68.                 $('input[id$=_sale_limit]').val(sale_limit);
  69.                 var price01 = $('#product_class_matrix_product_classes_0_price01').val();
  70.                 $('input[id$=_price01]').val(price01);
  71.                 var price02 = $('#product_class_matrix_product_classes_0_price02').val();
  72.                 $('input[id$=_price02]').val(price02);
  73.                 var delivery_fee = $('#product_class_matrix_product_classes_0_delivery_fee').val();
  74.                 $('input[id$=_delivery_fee]').val(delivery_fee);
  75.                 var delivery_duration = $('#product_class_matrix_product_classes_0_delivery_duration').val();
  76.                 $('select[id$=_delivery_duration]').val(delivery_duration);
  77.                 var tax_rate = $('#product_class_matrix_product_classes_0_tax_rate').val();
  78.                 $('input[id$=_tax_rate]').val(tax_rate);
  79.                 var sale_type = $('#product_class_matrix_product_classes_0_sale_type').val();
  80.                 $('select[id$=_sale_type]').val(sale_type);
  81.             });
  82.         });
  83.     </script>
  84. {% endblock javascript %}
  85. {% block main %}
  86.     <div class="c-contentsArea__cols">
  87.         <div class="c-contentsArea__primaryCol">
  88.             <div class="c-primaryCol">
  89.                 <div class="card rounded border-0 mb-4">
  90.                     {% if Product.hasProductClass %}
  91.                         {# 規格あり商品 #}
  92.                         <div id="ex-product_class-header" class="card-header">
  93.                             <div class="row">
  94.                                 <div class="col-8">
  95.                                     <span class="card-title align-middle">{{ Product.name }}</span>
  96.                                 </div>
  97.                             </div>
  98.                         </div>
  99.                         <div id="ex-product_class-body" class="card-body">
  100.                             <div class="row mb-2">
  101.                                 <div class="col">
  102.                                     <div class="d-inline-block me-2">
  103.                                         <span>{{ 'admin.product.class_category1__short'|trans }}</span>
  104.                                     </div>
  105.                                     <div class="d-inline-block">
  106.                                         <span>{{ ClassName1.name }} [{{ 'admin.product.class_name__backend_name'|trans }}{{ 'admin.common.separator__colon'|trans }}{{ ClassName1.backend_name }}]</span>
  107.                                     </div>
  108.                                 </div>
  109.                             </div>
  110.                             {% if ClassName2 %}
  111.                                 <div class="row">
  112.                                     <div class="col">
  113.                                         <div class="d-inline-block me-2">
  114.                                             <span>{{ 'admin.product.class_category2__short'|trans }}</span>
  115.                                         </div>
  116.                                         <div class="d-inline-block">
  117.                                             <span>{{ ClassName2.name }} [{{ 'admin.product.class_name__backend_name'|trans }}{{ 'admin.common.separator__colon'|trans }}{{ ClassName2.backend_name }}]</span>
  118.                                         </div>
  119.                                     </div>
  120.                                 </div>
  121.                             {% endif %}
  122.                         </div>
  123.                     {% else %}
  124.                         {# 規格なし商品 #}
  125.                         <form method="post" action="{{ url('admin_product_product_class', { id: Product.id, return_product_list: return_product_list }) }}">
  126.                             <input type="hidden" name="_token" value="{{ csrf_token('_token') }}">
  127.                             <div class="card-header">
  128.                                 <div class="row">
  129.                                     <div class="col-8">
  130.                                         <span class="card-title align-middle">{{ Product.name }}</span>
  131.                                     </div>
  132.                                     <div class="col-4 text-end">
  133.                                         {# 商品規格の設定ボタン #}
  134.                                         <button class="btn btn-ec-conversion" type="submit">
  135.                                             {{ 'admin.product.product_class__create'|trans }}
  136.                                         </button>
  137.                                     </div>
  138.                                 </div>
  139.                             </div>
  140.                             <div class="card-body">
  141.                                 <div class="row mb-2">
  142.                                     {{ form_widget(form.class_name1) }}
  143.                                     {{ form_errors(form.class_name1) }}
  144.                                 </div>
  145.                                 <div class="row">
  146.                                     {{ form_widget(form.class_name2) }}
  147.                                     {{ form_errors(form.class_name2) }}
  148.                                 </div>
  149.                             </div>
  150.                         </form>
  151.                     {% endif %}
  152.                 </div>
  153.                 {% if form.product_classes|length > 0 %}
  154.                     <form method="post" action="{{ url('admin_product_product_class', {'id': Product.id, return_product_list: return_product_list }) }}">
  155.                         <input type="hidden" name="_token" value="{{ csrf_token('_token') }}">
  156.                         <input type="hidden" name="{{ form.class_name1.vars.full_name }}"
  157.                                value="{{ form.class_name1.vars.value }}">
  158.                         <input type="hidden" name="{{ form.class_name2.vars.full_name }}"
  159.                                value="{{ form.class_name2.vars.value }}">
  160.                         <div class="card rounded border-0 mb-4">
  161.                             <div class="card-header">
  162.                                 <div class="row justify-content-between">
  163.                                     <div class="col-6">
  164.                                         <span class="align-middle">
  165.                                             {{ 'admin.product.procuct_class_count'|trans({
  166.                                                 '%count%' : form.product_classes|length
  167.                                             }) }}</span>
  168.                                         {{ form_errors(form.product_classes) }}
  169.                                     </div>
  170.                                     <div class="col-4 text-end">
  171.                                         <button type="button" id="copy" class="btn btn-ec-regular">
  172.                                             <i class="fa fa-files-o me-1"></i>
  173.                                             <span>{{ 'admin.product.copy_first_line'|trans }}</span>
  174.                                         </button>
  175.                                     </div>
  176.                                 </div>
  177.                             </div>
  178.                             <div id="ex-product_class" class="card-body p-0">
  179.                                 <table class="table table-sm">
  180.                                     <thead>
  181.                                     <th class="pt-2 pb-2 ps-3">
  182.                                         <input type="checkbox" id="check-all">
  183.                                     </th>
  184.                                     <th class="pt-2 pb-2">{{ ClassName1 ? ClassName1.name }}</th>
  185.                                     <th class="pt-2 pb-2">{{ ClassName2 ? ClassName2.name }}</th>
  186.                                     <th class="pt-2 pb-2">{{ 'admin.product.product_code__short'|trans }}</th>
  187.                                     <th class="pt-2 pb-2">{{ 'admin.product.stock__short'|trans }}</th>
  188.                                     <th class="pt-2 pb-2">{{ 'admin.product.sale_limit'|trans }}</th>
  189.                                     <th class="pt-2 pb-2">{{ 'admin.product.normal_price'|trans }}</th>
  190.                                     <th class="pt-2 pb-2">{{ 'admin.product.sale_price'|trans }}</th>
  191.                                     {% if BaseInfo.option_product_delivery_fee %}
  192.                                         <th class="pt-2 pb-2">{{ 'admin.product.delivery_fee'|trans }}</th>
  193.                                     {% endif %}
  194.                                     {% if BaseInfo.option_product_tax_rule %}
  195.                                         <th class="pt-2 pb-2">{{ 'admin.product.tax_rate'|trans }}</th>
  196.                                     {% endif %}
  197.                                     <th class="pt-2 pb-2">{{ 'admin.product.delivery_duration'|trans }}</th>
  198.                                     <th class="pt-2 pb-2 pe-3">{{ 'admin.product.sale_type'|trans }}</th>
  199.                                     {# エンティティ拡張の自動出力 #}
  200.                                     {% for product_class_form in form.product_classes %}
  201.                                         {# product_class_formはcollection typeなので, 1行目だけ出力する #}
  202.                                         {% if loop.first %}
  203.                                             {% for f in product_class_form|filter(f => f.vars.eccube_form_options.auto_render) %}
  204.                                                 <th class="pt-2 pb-2">{{ f.vars.label|trans }}</th>
  205.                                             {% endfor %}
  206.                                         {% endif %}
  207.                                     {% endfor %}
  208.                                     </thead>
  209.                                     {% for product_class_form in form.product_classes %}
  210.                                         <tr id="ex-product_class-{{ product_class_form.vars.name }}">
  211.                                             <td class="align-middle ps-3">
  212.                                                 {{ form_widget(product_class_form.checked) }}
  213.                                             </td>
  214.                                             <td class="align-middle">
  215.                                                 {{ product_class_form.vars.value.ClassCategory1 }}
  216.                                                 {{ form_widget(product_class_form.ClassCategory1) }}
  217.                                             </td>
  218.                                             <td class="align-middle">
  219.                                                 {{ product_class_form.vars.value.ClassCategory2 }}
  220.                                                 {{ form_widget(product_class_form.ClassCategory2) }}
  221.                                             </td>
  222.                                             <td class="align-middle">
  223.                                                 {{ form_widget(product_class_form.code) }}
  224.                                                 {{ form_errors(product_class_form.code) }}
  225.                                             </td>
  226.                                             <td class="align-middle">
  227.                                                 <div class="row">
  228.                                                     <div class="col-5">
  229.                                                         {{ form_widget(product_class_form.stock) }}
  230.                                                         {{ form_errors(product_class_form.stock) }}
  231.                                                     </div>
  232.                                                     <div class="col-auto">
  233.                                                         <div class="form-check form-check-inline">
  234.                                                             {{ form_widget(product_class_form.stock_unlimited) }}
  235.                                                         </div>
  236.                                                     </div>
  237.                                                 </div>
  238.                                             </td>
  239.                                             <td class="align-middle">
  240.                                                 <div class="row">
  241.                                                     <div class="col-6">
  242.                                                         {{ form_widget(product_class_form.sale_limit) }}
  243.                                                         {{ form_errors(product_class_form.sale_limit) }}
  244.                                                     </div>
  245.                                                 </div>
  246.                                             </td>
  247.                                             <td class="align-middle">
  248.                                                 {{ form_widget(product_class_form.price01) }}
  249.                                                 {{ form_errors(product_class_form.price01) }}
  250.                                             </td>
  251.                                             <td class="align-middle">
  252.                                                 {{ form_widget(product_class_form.price02) }}
  253.                                                 {{ form_errors(product_class_form.price02) }}
  254.                                             </td>
  255.                                             {% if BaseInfo.option_product_delivery_fee %}
  256.                                                 <td class="align-middle">
  257.                                                     {{ form_widget(product_class_form.delivery_fee) }}
  258.                                                     {{ form_errors(product_class_form.delivery_fee) }}
  259.                                                 </td>
  260.                                             {% endif %}
  261.                                             {% if BaseInfo.option_product_tax_rule %}
  262.                                                 <td class="align-middle">
  263.                                                     {{ form_widget(product_class_form.tax_rate) }}
  264.                                                     {{ form_errors(product_class_form.tax_rate) }}
  265.                                                 </td>
  266.                                             {% endif %}
  267.                                             <td class="align-middle">
  268.                                                 {{ form_widget(product_class_form.delivery_duration) }}
  269.                                                 {{ form_errors(product_class_form.delivery_duration) }}
  270.                                             </td>
  271.                                             <td class="align-middle pe-3">
  272.                                                 {{ form_widget(product_class_form.sale_type) }}
  273.                                                 {{ form_errors(product_class_form.sale_type) }}
  274.                                             </td>
  275.                                             {# エンティティ拡張の自動出力 #}
  276.                                             {% for f in product_class_form|filter(f => f.vars.eccube_form_options.auto_render) %}
  277.                                                 {% if f.vars.eccube_form_options.form_theme %}
  278.                                                     {% form_theme f f.vars.eccube_form_options.form_theme %}
  279.                                                     {{ form_row(f) }}
  280.                                                 {% else %}
  281.                                                     <td class="align-middle pe-3">
  282.                                                         {{ form_widget(f) }}
  283.                                                         {{ form_errors(f) }}
  284.                                                     </td>
  285.                                                 {% endif %}
  286.                                             {% endfor %}
  287.                                         </tr>
  288.                                     {% endfor %}
  289.                                 </table>
  290.                             </div>
  291.                         </div>
  292.                         <div class="c-conversionArea">
  293.                             <div class="c-conversionArea__container">
  294.                                 <div class="row justify-content-between align-items-center">
  295.                                     <div class="col-6">
  296.                                         <div class="c-conversionArea__leftBlockItem">
  297.                                             {% if return_product_list %}
  298.                                                 <a class="c-baseLink" href="{{ url('admin_product', {'resume': 1}) }}">
  299.                                                     <i class="fa fa-backward" aria-hidden="true"></i>
  300.                                                     <span>{{ 'admin.product.product_list'|trans }}</span>
  301.                                                 </a>
  302.                                             {% else %}
  303.                                                 <a class="c-baseLink" href="{{ url('admin_product_product_edit', {'id': Product.id}) }}">
  304.                                                     <i class="fa fa-backward" aria-hidden="true"></i>
  305.                                                     <span>{{ 'admin.product.product_registration'|trans }}</span>
  306.                                                 </a>
  307.                                             {% endif %}
  308.                                         </div>
  309.                                     </div>
  310.                                     <div class="col-6">
  311.                                         <div id="ex-conversion-action" class="row align-items-center justify-content-end">
  312.                                             <div class="col-auto">
  313.                                                 <button class="btn btn-ec-conversion px-5" name="{{ form.save.vars.full_name }}" type="submit">
  314.                                                     {{ 'admin.common.registration'|trans }}
  315.                                                 </button>
  316.                                             </div>
  317.                                         </div>
  318.                                     </div>
  319.                                 </div>
  320.                             </div>
  321.                         </div>
  322.                     </form>
  323.                 {% else %}
  324.                     <div class="c-conversionArea">
  325.                         <div class="c-conversionArea__container">
  326.                             <div class="row justify-content-between align-items-center">
  327.                                 <div class="col-6">
  328.                                     <div class="c-conversionArea__leftBlockItem">
  329.                                         {% if return_product_list %}
  330.                                             <a class="c-baseLink" href="{{ url('admin_product', {'resume': 1}) }}">
  331.                                                 <i class="fa fa-backward" aria-hidden="true"></i>
  332.                                                 <span>{{ 'admin.product.product_list'|trans }}</span>
  333.                                             </a>
  334.                                         {% else %}
  335.                                             <a class="c-baseLink" href="{{ url('admin_product_product_edit', {'id': Product.id}) }}">
  336.                                                 <i class="fa fa-backward" aria-hidden="true"></i>
  337.                                                 <span>{{ 'admin.product.product_registration'|trans }}</span>
  338.                                             </a>
  339.                                         {% endif %}
  340.                                     </div>
  341.                                 </div>
  342.                             </div>
  343.                         </div>
  344.                     </div>
  345.                 {% endif %}
  346.             </div>
  347.         </div>
  348.     </div>
  349. {% endblock %}