Code Duplication    Length = 264-268 lines in 2 locations

src/SprykerEco/Yves/Payone/Form/AbstractOnlineTransferSubForm.php 1 location

@@ 22-285 (lines=264) @@
19
use Symfony\Component\OptionsResolver\OptionsResolver;
20
use Symfony\Component\Validator\Context\ExecutionContextInterface;
21
22
abstract class AbstractOnlineTransferSubForm extends AbstractPayoneSubForm
23
{
24
    const PAYMENT_METHOD = 'online_transfer';
25
    const FIELD_IBAN = 'iban';
26
    const FIELD_BIC = 'bic';
27
    const FIELD_BANK_COUNTRY = 'bankcountry';
28
    const FIELD_BANK_ACCOUNT = 'bankaccount';
29
    const FIELD_BANK_CODE = 'bankcode';
30
    const FIELD_BANK_BRANCH_CODE = 'bankbranchcode';
31
    const FIELD_BANK_CHECK_DIGIT = 'bankcheckdigit';
32
    const FIELD_ONLINE_BANK_TRANSFER_TYPE = 'onlinebanktransfertype';
33
    const FIELD_BANK_GROUP_TYPE = 'bankgrouptype';
34
    const OPTION_ONLINE_BANK_TRANSFER_TYPES = 'online bank transfer types';
35
    const OPTION_BANK_COUNTRIES = '';
36
37
    /**
38
     * @return string
39
     */
40
    public function getName()
41
    {
42
        return PaymentTransfer::PAYONE_ONLINE_TRANSFER;
43
    }
44
45
    /**
46
     * @return string
47
     */
48
    public function getTemplatePath()
49
    {
50
        return PayoneConstants::PROVIDER_NAME . '/' . static::PAYMENT_METHOD;
51
    }
52
53
    /**
54
     * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
55
     *
56
     * @return void
57
     */
58
    public function configureOptions(OptionsResolver $resolver)
59
    {
60
        $resolver->setDefaults([
61
            'data_class' => PayonePaymentOnlinetransferTransfer::class,
62
        ])->setRequired(SubFormInterface::OPTIONS_FIELD_NAME);
63
    }
64
65
    /**
66
     * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
67
     *
68
     * @return void
69
     */
70
    public function setDefaultOptions(OptionsResolver $resolver)
71
    {
72
        $this->configureOptions($resolver);
73
    }
74
75
    /**
76
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
77
     * @param array $options
78
     *
79
     * @return void
80
     */
81
    public function buildForm(FormBuilderInterface $builder, array $options)
82
    {
83
        $this->addOnlineBankTransferType($builder, $options)
84
            ->addBankCountry($builder, $options);
85
    }
86
87
    /**
88
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
89
     *
90
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
91
     */
92
    protected function addBankAccount(FormBuilderInterface $builder)
93
    {
94
        $builder->add(
95
            static::FIELD_BANK_ACCOUNT,
96
            TextType::class,
97
            [
98
                'label' => false,
99
                'required' => true,
100
                'constraints' => [
101
                ],
102
            ]
103
        );
104
105
        return $this;
106
    }
107
108
    /**
109
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
110
     *
111
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
112
     */
113
    protected function addBankCode(FormBuilderInterface $builder)
114
    {
115
        $builder->add(
116
            static::FIELD_BANK_CODE,
117
            TextType::class,
118
            [
119
                'label' => false,
120
                'required' => true,
121
                'constraints' => [
122
                ],
123
            ]
124
        );
125
126
        return $this;
127
    }
128
129
    /**
130
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
131
     *
132
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
133
     */
134
    protected function addBankBranchCode(FormBuilderInterface $builder)
135
    {
136
        $builder->add(
137
            static::FIELD_BANK_BRANCH_CODE,
138
            TextType::class,
139
            [
140
                'label' => false,
141
                'required' => true,
142
                'constraints' => [
143
                ],
144
            ]
145
        );
146
147
        return $this;
148
    }
149
150
    /**
151
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
152
     *
153
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
154
     */
155
    protected function addBankCheckDigit(FormBuilderInterface $builder)
156
    {
157
        $builder->add(
158
            static::FIELD_BANK_CHECK_DIGIT,
159
            TextType::class,
160
            [
161
                'label' => false,
162
                'required' => true,
163
                'constraints' => [
164
                ],
165
            ]
166
        );
167
168
        return $this;
169
    }
170
171
    /**
172
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
173
     *
174
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
175
     */
176
    protected function addIBAN(FormBuilderInterface $builder)
177
    {
178
        $builder->add(
179
            static::FIELD_IBAN,
180
            TextType::class,
181
            [
182
                'label' => false,
183
                'required' => true,
184
                'constraints' => [
185
                ],
186
            ]
187
        );
188
189
        return $this;
190
    }
191
192
    /**
193
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
194
     * @param array $options
195
     *
196
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
197
     */
198
    protected function addBankCountry(FormBuilderInterface $builder, array $options)
199
    {
200
        if (count($options[static::OPTIONS_FIELD_NAME][static::OPTION_BANK_COUNTRIES]) == 1) {
201
            $builder->add(
202
                static::FIELD_BANK_COUNTRY,
203
                HiddenType::class,
204
                [
205
                    'label' => false,
206
                    'data' => array_keys($options[static::OPTIONS_FIELD_NAME][static::OPTION_BANK_COUNTRIES])[0],
207
                ]
208
            );
209
        } else {
210
            $builder->add(
211
                static::FIELD_BANK_COUNTRY,
212
                ChoiceType::class,
213
                [
214
                    'label' => false,
215
                    'required' => true,
216
                    'expanded' => false,
217
                    'multiple' => false,
218
                    'placeholder' => false,
219
                    'choices' => $options[static::OPTIONS_FIELD_NAME][static::OPTION_BANK_COUNTRIES],
220
                    'constraints' => [
221
                    ],
222
                ]
223
            );
224
        }
225
226
        return $this;
227
    }
228
229
    /**
230
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
231
     *
232
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
233
     */
234
    protected function addBIC(FormBuilderInterface $builder)
235
    {
236
        $builder->add(
237
            static::FIELD_BIC,
238
            TextType::class,
239
            [
240
                'label' => false,
241
                'required' => true,
242
                'constraints' => [
243
                ],
244
            ]
245
        );
246
247
        return $this;
248
    }
249
250
    /**
251
     * @param \Generated\Shared\Transfer\PayonePaymentOnlinetransferTransfer $data
252
     * @param \Symfony\Component\Validator\Context\ExecutionContextInterface $context
253
     *
254
     * @return void
255
     */
256
    public function checkBankAccount(PayonePaymentOnlinetransferTransfer $data, ExecutionContextInterface $context)
257
    {
258
        $quoteTransfer = $context->getRoot()->getData();
259
        if ($quoteTransfer->getPayment()->getPaymentSelection() != $this->getPropertyPath()) {
260
            return;
261
        }
262
263
        $bankAccountCheckTransfer = new PayoneBankAccountCheckTransfer();
264
        $bankAccountCheckTransfer->setBankCountry($data->getBankcountry());
265
        $bankAccountCheckTransfer->setBankAccount($data->getBankaccount());
266
        $bankAccountCheckTransfer->setBankCode($data->getBankcode());
267
        $bankAccountCheckTransfer->setBankBranchCode($data->getBankbranchcode());
268
        $bankAccountCheckTransfer->setBankCheckDigit($data->getBankcheckdigit());
269
        $bankAccountCheckTransfer->setIban($data->getIban());
270
        $bankAccountCheckTransfer->setBic($data->getBic());
271
272
        $response = $this->getClient()->bankAccountCheck($bankAccountCheckTransfer);
273
        if ($response->getStatus() == 'ERROR' || $response->getStatus() == 'INVALID') {
274
            $context->addViolation($response->getCustomerErrorMessage());
275
        }
276
    }
277
278
    /**
279
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
280
     * @param array $options
281
     *
282
     * @return \SprykerEco\Yves\Payone\Form\AbstractOnlineTransferSubForm
283
     */
284
    abstract public function addOnlineBankTransferType(FormBuilderInterface $builder, array $options);
285
}
286

src/SprykerEco/Yves/Payone/Form/OnlineTransferSubForm.php 1 location

@@ 22-289 (lines=268) @@
19
use Symfony\Component\OptionsResolver\OptionsResolver;
20
use Symfony\Component\Validator\Context\ExecutionContextInterface;
21
22
abstract class OnlineTransferSubForm extends AbstractPayoneSubForm
23
{
24
    const PAYMENT_METHOD = 'online_transfer';
25
    const FIELD_IBAN = 'iban';
26
    const FIELD_BIC = 'bic';
27
    const FIELD_BANK_COUNTRY = 'bankcountry';
28
    const FIELD_BANK_ACCOUNT = 'bankaccount';
29
    const FIELD_BANK_CODE = 'bankcode';
30
    const FIELD_BANK_BRANCH_CODE = 'bankbranchcode';
31
    const FIELD_BANK_CHECK_DIGIT = 'bankcheckdigit';
32
    const FIELD_ONLINE_BANK_TRANSFER_TYPE = 'onlinebanktransfertype';
33
    const FIELD_BANK_GROUP_TYPE = 'bankgrouptype';
34
    const OPTION_BANK_GROUP_TYPES = 'online bank transfer types';
35
    const OPTION_BANK_COUNTRIES = '';
36
37
    /**
38
     * @return string
39
     */
40
    public function getName()
41
    {
42
        return PaymentTransfer::PAYONE_ONLINE_TRANSFER;
43
    }
44
45
    /**
46
     * @return string
47
     */
48
    public function getTemplatePath()
49
    {
50
        return PayoneConstants::PROVIDER_NAME . '/' . static::PAYMENT_METHOD;
51
    }
52
53
    /**
54
     * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
55
     *
56
     * @return void
57
     */
58
    public function configureOptions(OptionsResolver $resolver)
59
    {
60
        $resolver->setDefaults([
61
            'data_class' => PayonePaymentOnlinetransferTransfer::class,
62
            'constraints' => [
63
                // Add Callback constraint for bank account check in ancestor classes
64
                // new Callback(['methods' => [[$this, 'checkBankAccount']]])
65
            ],
66
        ])->setRequired(SubFormInterface::OPTIONS_FIELD_NAME);
67
    }
68
69
    /**
70
     * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
71
     *
72
     * @return void
73
     */
74
    public function setDefaultOptions(OptionsResolver $resolver)
75
    {
76
        $this->configureOptions($resolver);
77
    }
78
79
    /**
80
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
81
     * @param array $options
82
     *
83
     * @return void
84
     */
85
    public function buildForm(FormBuilderInterface $builder, array $options)
86
    {
87
        $this->addOnlineBankTransferType($builder, $options)
88
            ->addBankCountry($builder, $options);
89
    }
90
91
    /**
92
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
93
     *
94
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
95
     */
96
    protected function addBankAccount(FormBuilderInterface $builder)
97
    {
98
        $builder->add(
99
            static::FIELD_BANK_ACCOUNT,
100
            TextType::class,
101
            [
102
                'label' => false,
103
                'required' => true,
104
                'constraints' => [
105
                ],
106
            ]
107
        );
108
109
        return $this;
110
    }
111
112
    /**
113
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
114
     *
115
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
116
     */
117
    protected function addBankCode(FormBuilderInterface $builder)
118
    {
119
        $builder->add(
120
            static::FIELD_BANK_CODE,
121
            TextType::class,
122
            [
123
                'label' => false,
124
                'required' => true,
125
                'constraints' => [
126
                ],
127
            ]
128
        );
129
130
        return $this;
131
    }
132
133
    /**
134
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
135
     *
136
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
137
     */
138
    protected function addBankBranchCode(FormBuilderInterface $builder)
139
    {
140
        $builder->add(
141
            static::FIELD_BANK_BRANCH_CODE,
142
            TextType::class,
143
            [
144
                'label' => false,
145
                'required' => true,
146
                'constraints' => [
147
                ],
148
            ]
149
        );
150
151
        return $this;
152
    }
153
154
    /**
155
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
156
     *
157
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
158
     */
159
    protected function addBankCheckDigit(FormBuilderInterface $builder)
160
    {
161
        $builder->add(
162
            static::FIELD_BANK_CHECK_DIGIT,
163
            TextType::class,
164
            [
165
                'label' => false,
166
                'required' => true,
167
                'constraints' => [
168
                ],
169
            ]
170
        );
171
172
        return $this;
173
    }
174
175
    /**
176
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
177
     *
178
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
179
     */
180
    protected function addIban(FormBuilderInterface $builder)
181
    {
182
        $builder->add(
183
            static::FIELD_IBAN,
184
            TextType::class,
185
            [
186
                'label' => false,
187
                'required' => true,
188
                'constraints' => [
189
                ],
190
            ]
191
        );
192
193
        return $this;
194
    }
195
196
    /**
197
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
198
     * @param array $options
199
     *
200
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
201
     */
202
    protected function addBankCountry(FormBuilderInterface $builder, array $options)
203
    {
204
        if (count($options[static::OPTIONS_FIELD_NAME][static::OPTION_BANK_COUNTRIES]) == 1) {
205
            $builder->add(
206
                static::FIELD_BANK_COUNTRY,
207
                HiddenType::class,
208
                [
209
                    'label' => false,
210
                    'data' => array_keys($options[static::OPTIONS_FIELD_NAME][static::OPTION_BANK_COUNTRIES])[0],
211
                ]
212
            );
213
        } else {
214
            $builder->add(
215
                static::FIELD_BANK_COUNTRY,
216
                ChoiceType::class,
217
                [
218
                    'label' => false,
219
                    'required' => true,
220
                    'expanded' => false,
221
                    'multiple' => false,
222
                    'placeholder' => false,
223
                    'choices' => $options[static::OPTIONS_FIELD_NAME][static::OPTION_BANK_COUNTRIES],
224
                    'constraints' => [
225
                    ],
226
                ]
227
            );
228
        }
229
230
        return $this;
231
    }
232
233
    /**
234
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
235
     *
236
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
237
     */
238
    protected function addBic(FormBuilderInterface $builder)
239
    {
240
        $builder->add(
241
            static::FIELD_BIC,
242
            TextType::class,
243
            [
244
                'label' => false,
245
                'required' => true,
246
                'constraints' => [
247
                ],
248
            ]
249
        );
250
251
        return $this;
252
    }
253
254
    /**
255
     * @param \Generated\Shared\Transfer\PayonePaymentOnlinetransferTransfer $data
256
     * @param \Symfony\Component\Validator\Context\ExecutionContextInterface $context
257
     *
258
     * @return void
259
     */
260
    public function checkBankAccount(PayonePaymentOnlinetransferTransfer $data, ExecutionContextInterface $context)
261
    {
262
        $quoteTransfer = $context->getRoot()->getData();
263
        if ($quoteTransfer->getPayment()->getPaymentSelection() != $this->getPropertyPath()) {
264
            return;
265
        }
266
267
        $bankAccountCheckTransfer = new PayoneBankAccountCheckTransfer();
268
        $bankAccountCheckTransfer->setBankCountry($data->getBankcountry());
269
        $bankAccountCheckTransfer->setBankAccount($data->getBankaccount());
270
        $bankAccountCheckTransfer->setBankCode($data->getBankcode());
271
        $bankAccountCheckTransfer->setBankBranchCode($data->getBankbranchcode());
272
        $bankAccountCheckTransfer->setBankCheckDigit($data->getBankcheckdigit());
273
        $bankAccountCheckTransfer->setIban($data->getIban());
274
        $bankAccountCheckTransfer->setBic($data->getBic());
275
276
        $response = $this->getClient()->bankAccountCheck($bankAccountCheckTransfer);
277
        if ($response->getStatus() == 'ERROR' || $response->getStatus() == 'INVALID') {
278
            $context->addViolation($response->getCustomerErrorMessage());
279
        }
280
    }
281
282
    /**
283
     * @param \Symfony\Component\Form\FormBuilderInterface $builder
284
     * @param array $options
285
     *
286
     * @return \SprykerEco\Yves\Payone\Form\OnlineTransferSubForm
287
     */
288
    abstract public function addOnlineBankTransferType(FormBuilderInterface $builder, array $options);
289
}
290