Passed
Push — master ( f39060...11ca94 )
by Joe Nilson
02:13
created

documentos_residentes::crearFacturaDetallada()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 10
1
<?php
2
/*
3
 * Copyright (C) 2018 Joe Nilson <joenilson at gmail.com>
4
 *
5
 * This program is free software: you can redistribute it and/or modify
6
 * it under the terms of the GNU Lesser General Public License as published by
7
 * the Free Software Foundation, either version 3 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU Lesser General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU Lesser General Public License
16
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
 */
18
require_once 'plugins/residentes/extras/residentesFacturaDetallada.php';
19
require_once 'plugins/residentes/extras/residentesEstadoCuenta.php';
20
require_once 'plugins/residentes/extras/residentesEnviarMail.php';
21
22
require_once 'plugins/residentes/extras/residentes_controller.php';
23
24
/**
25
 * Class Controller to manage all the documents to be printed, showed or emailed
26
 * in the Residentes plugin for FS_2017
27
 * @author Joe Nilson <joenilson at gmail.com>
28
 */
29
class documentos_residentes extends residentes_controller
30
{
31
    public $archivo;
32
    public $cliente_residente;
33
    public $documento;
34
    public $pagado;
35
    public $pendiente;
36
    public $tipo_accion;
37
    public $idprogramacion;
38
    public $idfactura;
39
    public $envio_masivo;
40
    public $factura;
41
    public $facturas;
42
    public $contador_facturas;
43
    public function __construct()
44
    {
45
        parent::__construct(__CLASS__, 'Documentos Residentes', 'admin', false, false, false);
46
    }
47
48
    protected function private_core()
49
    {
50
        parent::private_core();
51
        $this->init();
52
        $cod = $this->filter_request('codcliente');
53
        if ($cod) {
54
            $this->obtenerInformacionResidente($cod);
0 ignored issues
show
Bug introduced by
It seems like $cod can also be of type true; however, parameter $cod of documentos_residentes::o...rInformacionResidente() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

54
            $this->obtenerInformacionResidente(/** @scrutinizer ignore-type */ $cod);
Loading history...
55
        }
56
        $info_accion = $this->filter_request('info_accion');
57
        $tipo_documento = $this->filter_request('tipo_documento');
58
        $this->idprogramacion = $this->filter_request('idprogramacion');
59
        $this->envio_masivo = !(($this->filter_request('envio_masivo') === 'false'));
60
        $this->tipo_accion = $tipo_documento;
61
        $this->verificarCantidadFacturas();
62
        $this->archivo = $tipo_documento.'_'.\date('dmYhis') . '.pdf';
63
        if ($this->cliente_residente && $info_accion) {
64
            switch ($info_accion) {
65
                case 'imprimir':
66
                    $this->template = false;
1 ignored issue
show
Bug Best Practice introduced by
The property template does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
67
                    $this->imprimir_documento($tipo_documento);
68
                    break;
69
                case 'enviar':
70
                    $this->enviar_documento($tipo_documento);
71
                    break;
72
                default:
73
                    break;
74
            }
75
        }
76
    }
77
78
    /**
79
     * @param string $cod
80
     */
81
    public function obtenerInformacionResidente($cod)
82
    {
83
        $cliente = new cliente();
84
        $this->cliente_residente = $cliente->get($cod);
85
        $residenteInformacion = new residentes_informacion();
86
        $informacion = $residenteInformacion->get($cod);
87
        $residenteEdificacion = new residentes_edificaciones();
88
        $residente = $residenteEdificacion->get_by_field('codcliente', $cod);
89
        $this->cliente_residente->inmueble = $residente[0];
90
        $this->cliente_residente->informacion = $informacion;
91
    }
92
93
    public function crear_documento($tipo_documento)
94
    {
95
        switch ($tipo_documento) {
96
            case 'informacion_cobros':
97
                $this->crearEstadoCuenta();
98
                break;
99
            case 'factura_residente_detallada':
100
                $this->crearFacturaDetallada();
101
                break;
102
            default:
103
                $this->documento = false;
104
                break;
105
        }
106
    }
107
108
    private function verificarCantidadFacturas()
109
    {
110
111
        $facturas = $this->filter_request('idfactura');
112
        if ($facturas !== null) {
0 ignored issues
show
introduced by
The condition $facturas !== null is always true.
Loading history...
113
            $this->getFacturaProgramadaPendiente($facturas);
114
        }
115
    }
116
117
    /**
118
     * @param array|string $facturas
119
     */
120
    private function getFacturaProgramadaPendiente($facturas)
121
    {
122
        $lista_facturas = explode(',', $facturas);
0 ignored issues
show
Bug introduced by
It seems like $facturas can also be of type array; however, parameter $string of explode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

122
        $lista_facturas = explode(',', /** @scrutinizer ignore-type */ $facturas);
Loading history...
123
        $this->idfactura = (is_array($lista_facturas)) ? $lista_facturas[0] : $facturas;
0 ignored issues
show
introduced by
The condition is_array($lista_facturas) is always true.
Loading history...
124
        if (is_array($lista_facturas)) {
0 ignored issues
show
introduced by
The condition is_array($lista_facturas) is always true.
Loading history...
125
            unset($lista_facturas[0]);
126
            $this->contador_facturas = count($lista_facturas);
127
            $this->facturas = implode(',', $lista_facturas);
128
        } else {
129
            $this->contador_facturas = 0;
130
            $this->facturas = '';
131
        }
132
        $facturasCliente = new factura_cliente();
133
        $f = $facturasCliente->get($this->idfactura);
134
        $this->factura = $f;
135
        $this->obtenerInformacionResidente($f->codcliente);
136
    }
137
138
    public function crearEstadoCuenta()
139
    {
140
        $info_accion = $this->filter_request('info_accion');
141
        $estadoCuentaGenerador = new ResidentesEstadoCuenta(
142
            $this->empresa,
143
            $this->cliente_residente,
144
            $this->user,
145
            $this->archivo,
146
            $info_accion
147
        );
148
        $pendientes = $this->pagosFactura();
149
        $pagado = $this->pagosFactura(true);
150
        $estadoCuentaGenerador->crearEstadoCuenta($pendientes, $pagado);
151
    }
152
153
    public function crearFacturaDetallada()
154
    {
155
        $infoAccion = $this->filter_request('info_accion');
156
        $this->documento = new residentesFacturaDetallada('L', 'mm', 'A5', $infoAccion, $this->archivo, $this->user);
157
        $this->documento->crearFactura($this->empresa, $this->factura, $this->cliente_residente);
158
    }
159
160
    /**
161
     * @throws phpmailerException
162
     */
163
    public function enviar_documento($tipo_documento)
164
    {
165
        $this->crear_documento($tipo_documento);
166
//        $tipo_doc = $this->generar_tipo_doc($tipo_documento);
167
//        if (file_exists('tmp/'.FS_TMP_NAME.'enviar/'.$this->archivo) && (1 === 2)) {
168
//            $mail = $this->empresa->new_mail();
169
//            $mail->FromName = $this->user->get_agente_fullname();
170
//            $email = (trim($this->filter_request('email')) !== '')
171
//                ? $this->filter_request('email')
172
//                : $this->cliente_residente->email;
173
//            $this->new_message('Enviando factura a: '.$email);
174
//            $mail->addAddress($email, $this->cliente_residente->nombre);
175
//            $elSubject = ($tipo_documento === 'informacion_cobros')
176
//                ? ': Su Estado de cuenta al '. \date('d-m-Y')
177
//                : ': Su Factura ' . $this->factura->codigo . ' ' . $this->factura->numero2;
178
//            $mail->Subject = fs_fix_html($this->empresa->nombre) . $elSubject;
179
//            $mail->AltBody = ($tipo_documento === 'informacion_cobros')
180
//                ? strip_tags($_POST['mensaje'])
181
//                : plantilla_email(
182
//                    'factura',
183
//                    $this->factura->codigo . ' ' . $this->factura->numero2,
184
//                    $this->empresa->email_config['mail_firma']
185
//                );
186
//            if (trim($this->filter_request('email_copia')) !== '') {
187
//                if ($this->filter_request('cco') !== null) {
188
//                    $mail->addBCC(
189
//                        trim($this->filter_request('email_copia')),
190
//                        $this->cliente_residente->nombre
191
//                    );
192
//                } else {
193
//                    $mail->addCC(
194
//                        trim($this->filter_request('email_copia')),
195
//                        $this->cliente_residente->nombre
196
//                    );
197
//                }
198
//            }
199
//            $mail->msgHTML(nl2br($mail->AltBody));
200
//            $mail->isHTML(true);
201
//            $mail->addAttachment('tmp/' . FS_TMP_NAME . 'enviar/' . $this->archivo);
202
//
203
//            if (isset($_FILES['adjunto']) && is_uploaded_file($_FILES['adjunto']['tmp_name'])) {
204
//                $mail->aºddAttachment($_FILES['adjunto']['tmp_name'], $_FILES['adjunto']['name']);
205
//            }
206
//            if ($this->empresa->mail_connect($mail) && $mail->send()) {
207
//                $this->factura->femail = $this->today();
208
//                $this->factura->save();
209
//
210
//                $this->empresa->save_mail($mail);
211
//                $done = true;
212
//            } else {
213
//                $this->new_error_msg("Error al enviar el email: " . $mail->ErrorInfo);
214
//            }
215
//            unlink('tmp/' . FS_TMP_NAME . 'enviar/' . $this->archivo);
216
//        } else {
217
//            //$this->new_error_msg('Imposible generar el PDF.');
218
//        }
219
    }
220
221
    public function imprimir_documento($tipo_documento)
222
    {
223
        $this->template = false;
1 ignored issue
show
Bug Best Practice introduced by
The property template does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
224
        $this->crear_documento($tipo_documento);
225
    }
226
227
    public function init()
228
    {
229
        $this->envio_masivo = false;
230
        $this->existe_tesoreria();
231
        $this->cliente_residente = false;
232
        if (!file_exists('tmp/' . FS_TMP_NAME . 'enviar') &&
233
            !mkdir($concurrentDirectory = 'tmp/' . FS_TMP_NAME . 'enviar') &&
234
            !is_dir($concurrentDirectory)) {
235
            throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
236
        }
237
    }
238
239
    public function is_html($txt)
240
    {
241
        return $txt !== strip_tags($txt);
242
    }
243
}
244