-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathFacturaParser.php
118 lines (109 loc) · 3.55 KB
/
FacturaParser.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php require_once 'XmlParser.php' ?>
<?php
class FacturaParser extends XmlParser{
public function __construct(DOMDocument $dom)
{
parent::__construct($dom);
}
//////////////////
// INFO FACTURA //
//////////////////
public function getInfoFactura(){
$infoFacturaContent = [
'fechaEmision', 'dirEstablecimiento',
'contribuyenteEspecial', 'obligadoContabilidad',
'tipoIdentificacionComprador', 'razonSocialComprador',
'identificacionComprador', 'totalSinImpuestos',
'totalSubsidio', 'totalDescuento',
'propina', 'importeTotal',
'moneda', 'placa',
'totalConImpuestos', 'pagos'
];
$infoFactura = $this->getNode($this->dom, 'infoFactura', 0);
$infoFacturaData = [];
foreach ($infoFacturaContent as $content) {
$infoFacturaData[$content] = $this->getNodeData($infoFactura, $content, 0);
}
$infoFacturaData['totalConImpuestos'] = $this->getInfoFacturaImpuestos();
$infoFacturaData['pagos'] = $this->getInfoFacturaPagos();
return $infoFacturaData;
}
//////////////
// DETALLES //
//////////////
public function getDetalles(){
$detalles = $this->getNode($this->dom, 'detalles', 0);
$detalle = $this->getNodes($this->dom, 'detalle');
$detalleHeaders = [
'codigoPrincipal', 'descripcion', 'cantidad', 'precioUnitario', 'precioSinSubsidio', 'descuento', 'precioTotalSinImpuesto',
'impuestos'
];
$detallesContent = [];
foreach ($detalle as $index => $d) {
$rowDetalle = [];
foreach ($detalleHeaders as $header) {
$rowDetalle[$header] = $this->getNodeData($d, $header, 0);
}
$rowDetalle['impuestos'] = $this->getDetallesImpuestos($index);
$detallesContent[$index] = $rowDetalle;
}
return $detallesContent;
}
////////////////////////////////////////
// INFO FACTURA - TOTAL CON IMPUESTOS //
////////////////////////////////////////
private function getInfoFacturaImpuestos(){
$totalConImpuestos = $this->getNode($this->dom, 'totalConImpuestos', 0);
$totalImpuestos = $this->getNodes($this->dom, 'totalImpuesto');
$totalImpuestoHeaders = [
'codigo', 'codigoPorcentaje', 'baseImponible', 'valor'
];
$totalImpuestoContent = [];
foreach ($totalImpuestos as $index => $totalImpuesto) {
$rowImpuesto = [];
foreach ($totalImpuestoHeaders as $header) {
$rowImpuesto[$header] = $this->getNodeData($totalImpuesto, $header, 0);
}
$totalImpuestoContent[$index] = $rowImpuesto;
}
return $totalImpuestoContent;
}
//////////////////////////
// INFO FACTURA - PAGOS //
//////////////////////////
private function getInfoFacturaPagos(){
$pagos = $this->getNode($this->dom, 'pagos', 0);
$pago = $this->getNodes($this->dom, 'pago');
$pagoHeaders = [
'formaPago', 'total', 'plazo', 'unidadTiempo'
];
$pagosContent = [];
foreach ($pago as $index => $p) {
$rowPago = [];
foreach ($pagoHeaders as $header) {
$rowPago[$header] = $this->getNodeData($p, $header, 0);
}
$pagosContent[$index] = $rowPago;
}
return $pagosContent;
}
//////////////////////////
// DETALLES - IMPUESTOS //
//////////////////////////
private function getDetallesImpuestos($position){
$impuestos = $this->getNode($this->dom, 'impuestos', $position);
$impuesto = $this->getNodes($this->dom, 'impuesto');
$impuestoHeaders = [
'codigo', 'codigoPorcentaje', 'tarifa', 'baseImponible', 'valor'
];
$impuestoContent = [];
foreach ($impuesto as $index => $i) {
$rowImpuesto = [];
foreach ($impuestoHeaders as $header) {
$rowImpuesto[$header] = $this->getNodeData($i, $header, 0);
}
$impuestoContent[$index] = $rowImpuesto;
}
return $impuestoContent;
}
}