Issues (41)

src/Sunat/Document/AbstractPerRet.php (2 issues)

Labels
Severity
1
<?php
2
3
/**
4
 * MÓDULO DE EMISIÓN ELECTRÓNICA F72X
5
 * UBL 2.1
6
 * Version 1.0
7
 * 
8
 * Copyright 2019, Jaime Cruz
9
 */
10
11
namespace F72X\Sunat\Document;
12
13
use F72X\Sunat\Operations;
14
use F72X\Sunat\Catalogo;
15
16
/**
17
 * AbstractSummary
18
 * 
19
 * Base class for Resumen Diario y Comunicación de baja.
20
 */
21
abstract class AbstractPerRet extends AbstractDocument {
22
23
    protected $isPercepcion = false;
24
    protected $isRetencion = false;
25
26
    /**
27
     * The catalog number of Retencion or Retencion Regime
28
     * 
29
     * Use:
30
     *  22: Percepción
31
     *  23: Retención
32
     * 
33
     * @var string 
34
     */
35
    protected $regimeCatNumber;
36
37
    protected function parseInput(array $in) {
38
        $out = $in;
39
        $lines  = $this->parseInputLines($in['lines']);
40
        $out['percent'] = Catalogo::getCatItemFieldValue($this->regimeCatNumber, $in['systemCode'], 'tasa');
0 ignored issues
show
$this->regimeCatNumber of type string is incompatible with the type integer expected by parameter $catNumber of F72X\Sunat\Catalogo::getCatItemFieldValue(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

40
        $out['percent'] = Catalogo::getCatItemFieldValue(/** @scrutinizer ignore-type */ $this->regimeCatNumber, $in['systemCode'], 'tasa');
Loading history...
41
        $out['lines'] = $lines;
42
        // Calculate totals
43
        $totalInvoiceAmount = 0;
44
        $totalCashed = 0;
45
        foreach ($lines as $line) {
46
            $totalInvoiceAmount += $line['operationAmount'];
47
            $totalCashed += $line['netTotal'];
48
        }
49
        $out['totalInvoiceAmount'] = $totalInvoiceAmount;
50
        $out['total'] = $totalCashed;
51
        return $out;
52
    }
53
    public function parseInputLine(array $in) {
54
        $bodyInput = $this->getRawData();
55
        $percent = Catalogo::getCatItemFieldValue($this->regimeCatNumber, $bodyInput['systemCode'], 'tasa');
0 ignored issues
show
$this->regimeCatNumber of type string is incompatible with the type integer expected by parameter $catNumber of F72X\Sunat\Catalogo::getCatItemFieldValue(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

55
        $percent = Catalogo::getCatItemFieldValue(/** @scrutinizer ignore-type */ $this->regimeCatNumber, $bodyInput['systemCode'], 'tasa');
Loading history...
56
        $out = $in;
57
        // Set amount and netTotalCashed
58
        $exchangeCalculationRate = ($out['currencyCode'] == self::LOCAL_CURRENCY_CODE) ? 1 : $out['exchangeRate'];
59
        $paymentBase = $out['payment']['paidAmount'] * $exchangeCalculationRate;
60
        $opAmount = ($paymentBase * $percent)/100;
61
        // Percepcion base + amount
62
        // Retencion  base - amount
63
        $operator = $this->isPercepcion ? 1 : -1;
64
        $out['operationAmount'] = $opAmount;
65
        $out['netTotal'] = $paymentBase + ($operator * $opAmount);
66
        return $out;
67
    }
68
    public function setBodyFields() {
69
        $data = $this->getParsedData();
70
        // Lines
71
        $this->lines = $data['lines'];
72
    }
73
74
    public function getDataForXml() {
75
        $in = $this->getParsedData();
76
        // Get base fields
77
        $baseFields = $this->getBaseFieldsForXml();
78
        $fields = [
79
            // Regimén
80
            'systemCode'         => $in['systemCode'],
81
            'percent'            => Operations::formatAmount($in['percent']),
82
            'totalInvoiceAmount' => Operations::formatAmount($in['totalInvoiceAmount']),
83
            'total'              => Operations::formatAmount($in['total']),
84
            'note'               => $in['note'],
85
            'customer'           => $in['customer']
86
        ];
87
        return array_merge($baseFields, $fields);
88
    }
89
90
    protected function getLineForXml(array $in) {
91
        $out = $in;
92
        // Parse payment
93
        $payment = $out['payment'];
94
        $out['payment']['paidAmount'] = Operations::formatAmount($payment['paidAmount']);
95
        $out['totalInvoiceAmount'] = Operations::formatAmount($in['totalInvoiceAmount']);
96
        $out['netTotal'] = Operations::formatAmount($in['netTotal']);
97
        // Per Ret information
98
        
99
        return $out;
100
    }
101
}
102