Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
82.35% covered (warning)
82.35%
14 / 17
50.00% covered (danger)
50.00%
2 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
OriginTransactionCodeResolver
82.35% covered (warning)
82.35%
14 / 17
50.00% covered (danger)
50.00%
2 / 4
9.45
0.00% covered (danger)
0.00%
0 / 1
 forRequest
66.67% covered (warning)
66.67%
4 / 6
0.00% covered (danger)
0.00%
0 / 1
3.33
 forDevolution
83.33% covered (warning)
83.33%
5 / 6
0.00% covered (danger)
0.00%
0 / 1
3.04
 forPurchaseSolicitationWarehouse
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 usesSpecialTransactionCodes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Domain\Request\Support;
4
5use App\Models\Category\Origin;
6
7final class OriginTransactionCodeResolver
8{
9    private const SPECIAL_TRANSACTION_ORIGIN_CODES = ['57', '66', '67'];
10    private const SPECIAL_REQUEST_TRANSACTION_CODE = '90254';
11    private const DEFAULT_REQUEST_TRANSACTION_CODE = '90250';
12    private const SPECIAL_DEVOLUTION_TRANSACTION_CODE = '90204';
13    private const DEFAULT_DEVOLUTION_TRANSACTION_CODE = '90202';
14    private const SPECIAL_PURCHASE_SOLICITATION_WAREHOUSE_CODE = '701';
15    private const DEFAULT_PURCHASE_SOLICITATION_WAREHOUSE_CODE = '001';
16
17    public function forRequest(Origin $origin): string
18    {
19        $parameters = $origin->integration?->parameters ?? [];
20        if (isset($parameters['request_transaction_code'])) {
21            return (string) $parameters['request_transaction_code'];
22        }
23
24        return $this->usesSpecialTransactionCodes((string) ($parameters['integration_code'] ?? ''))
25            ? self::SPECIAL_REQUEST_TRANSACTION_CODE
26            : self::DEFAULT_REQUEST_TRANSACTION_CODE;
27    }
28
29    public function forDevolution(Origin $origin): string
30    {
31        $parameters = $origin->integration?->parameters ?? [];
32        if (isset($parameters['devolution_transaction_code'])) {
33            return (string) $parameters['devolution_transaction_code'];
34        }
35
36        return $this->usesSpecialTransactionCodes((string) ($parameters['integration_code'] ?? ''))
37            ? self::SPECIAL_DEVOLUTION_TRANSACTION_CODE
38            : self::DEFAULT_DEVOLUTION_TRANSACTION_CODE;
39    }
40
41    public function forPurchaseSolicitationWarehouse(Origin $origin): string
42    {
43        $parameters = $origin->integration?->parameters ?? [];
44
45        return $this->usesSpecialTransactionCodes((string) ($parameters['integration_code'] ?? ''))
46            ? self::SPECIAL_PURCHASE_SOLICITATION_WAREHOUSE_CODE
47            : self::DEFAULT_PURCHASE_SOLICITATION_WAREHOUSE_CODE;
48    }
49
50    private function usesSpecialTransactionCodes(string $integrationCode): bool
51    {
52        return in_array($integrationCode, self::SPECIAL_TRANSACTION_ORIGIN_CODES, true);
53    }
54}