ListCommision::_prepareToRender()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 24
rs 9.7998
cc 1
nc 1
nop 0
1
<?php
2
/**
3
 * Copyright © Getnet. All rights reserved.
4
 *
5
 * @author    Bruno Elisei <[email protected]>
6
 * See LICENSE for license details.
7
 */
8
9
namespace Getnet\SubSellerMagento\Block\Adminhtml\System\Form\Field;
10
11
use Getnet\SubSellerMagento\Block\Adminhtml\System\Form\Field\Column\BrandColumn;
12
use Getnet\SubSellerMagento\Block\Adminhtml\System\Form\Field\Column\ProductColumn;
13
use Magento\Config\Block\System\Config\Form\Field\FieldArray\AbstractFieldArray;
14
use Magento\Framework\DataObject;
15
use Magento\Framework\Exception\LocalizedException;
16
17
/**
18
 * Class ListCommision - Add List Commision to field.
19
 */
20
class ListCommision extends AbstractFieldArray
21
{
22
    /**
23
     * @var BrandColumn
24
     */
25
    private $brandRenderer;
26
27
    /**
28
     * @var ProductColumn
29
     */
30
    private $productRenderer;
31
32
    /**
33
     * Prepare rendering the new field by adding all the needed columns.
34
     */
35
    protected function _prepareToRender()
36
    {
37
        $this->addColumn('brand', [
38
            'label'    => __('Brand'),
39
            'renderer' => $this->getFieldBrandRenderer(),
40
        ]);
41
42
        $this->addColumn('product', [
43
            'label'    => __('Product'),
44
            'renderer' => $this->getFieldProductRenderer(),
45
        ]);
46
47
        $this->addColumn('payment_plan', [
48
            'label' => __('Payment Plan'),
49
            'class' => 'required-entry',
50
        ]);
51
52
        $this->addColumn('commission_percentage', [
53
            'label' => __('Commission Percentage'),
54
            'class' => 'required-entry',
55
        ]);
56
57
        $this->_addAfter = false;
58
        $this->_addButtonLabel = __('Add');
59
    }
60
61
    /**
62
     * Prepare existing row data object.
63
     *
64
     * @param DataObject $row
65
     *
66
     * @throws LocalizedException
67
     */
68
    protected function _prepareArrayRow(DataObject $row): void
69
    {
70
        $options = [];
71
72
        $field = $row->getField();
73
        if ($field !== null) {
74
            $options['option_'.$this->getFieldBrandRenderer()->calcOptionHash($field)] = 'selected="selected"';
75
            $options['option_'.$this->getFieldProductRenderer()->calcOptionHash($field)] = 'selected="selected"';
76
        }
77
78
        $row->setData('option_extra_attrs', $options);
79
    }
80
81
    /**
82
     * Create Block Brand Renderer.
83
     *
84
     * @throws LocalizedException
85
     *
86
     * @return BrandColumn
87
     */
88
    private function getFieldBrandRenderer()
89
    {
90
        if (!$this->brandRenderer) {
91
            $this->brandRenderer = $this->getLayout()->createBlock(
92
                BrandColumn::class,
93
                '',
94
                ['data' => ['is_render_to_js_template' => true]]
95
            );
96
        }
97
98
        return $this->brandRenderer;
99
    }
100
101
    /**
102
     * Create Block Product Renderer.
103
     *
104
     * @throws LocalizedException
105
     *
106
     * @return ProductColumn
107
     */
108
    private function getFieldProductRenderer()
109
    {
110
        if (!$this->productRenderer) {
111
            $this->productRenderer = $this->getLayout()->createBlock(
112
                ProductColumn::class,
113
                '',
114
                ['data' => ['is_render_to_js_template' => true]]
115
            );
116
        }
117
118
        return $this->productRenderer;
119
    }
120
}
121