Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
76.29% covered (warning)
76.29%
74 / 97
33.33% covered (danger)
33.33%
1 / 3
CRAP
n/a
0 / 0
_register_ticketsii_change_activity
75.00% covered (warning)
75.00%
36 / 48
0.00% covered (danger)
0.00%
0 / 1
21.52
_register_tickesii_invceac_activity
73.17% covered (warning)
73.17%
30 / 41
0.00% covered (danger)
0.00%
0 / 1
19.35
register_ticketsii_activity
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2    include_once __DIR__.'/registry.php';
3    require_once __DIR__.'/../legacy/ddbb/conx.php';
4
5    /**
6     * Registra una línea de actividad (e2) para un TICKETSII ligado a un TICKETCHANGE.
7     * Misma idea que TicketBAI/VeriFactu: ConxHelper con tenant ya fijado al local.
8     *
9     * @param \ConxHelper $conx
10     * @param string $session Session objid (mismo uso que en ticketbai).
11     * @param array<string, mixed> $ticketsii Fila TICKETSII (tckchg, error, valid, objid, …).
12     */
13    function _register_ticketsii_change_activity(\ConxHelper $conx, $session, &$ticketsii){
14        $retval = ApplicationError::Success;
15        if ($conx->tenant === null) {
16            addlog(__FILE__, LogLevel::Error, 'Tenant connection not available for _register_ticketsii_change_activity.');
17            $retval = ApplicationError::Database;
18        }
19
20        if (success($retval)){
21            $change = null;
22
23            $results = [];
24            $res = $conx->tenant->query('TICKETCHANGE', [ 'objid' => $ticketsii['tckchg'] ], $results);
25            if ($res){
26                if (count($results) > 0){
27                    $change = $results[0];
28                }
29
30                if (!$change){
31                    addlog(__FILE__, LogLevel::Error, "Cannot find change entry for ticketsii (change objid [".$ticketsii['tckchg']."])");
32                    $retval = ApplicationError::NotFound;
33                }
34            }
35            else {
36                $retval = ApplicationError::Database;
37            }
38        }
39
40        if (success($retval)){
41            $place = $conx->place();
42            if ($place === null || $place === ''){
43                addlog(__FILE__, LogLevel::Error, "No place in connection for ticketsii change '".$change['objid']."'");
44                $retval = ApplicationError::NotFound;
45            }
46        }
47
48        if (success($retval)){
49            $dstpath = AppConstants::RegLogPath();
50            if (!file_exists($dstpath) && !mkdir($dstpath, 0775)){
51                addlog(__FILE__, LogLevel::Error, "Could not create local registry log folder in '".$dstpath."'");
52                $error = error_get_last();
53                if ($error) addlog(__FILE__, LogLevel::Debug, $error['message']);
54            }
55
56            if (is_dir($dstpath)){
57                $dstfile = sprintf('%s/%05d_ticket_activity.csv', $dstpath, $place);
58
59                $lineinfo = [
60                    'objid' => $ticketsii['objid'] ?? null,
61                    'session' => $session,
62                    'change' => 'UPDATE',
63                    'series' => $change['series'],
64                    'invceno' => $change['invoice'],
65                    'price' => $change['total'],
66                    'error' => $ticketsii['error'],
67                ];
68
69                switch($change['reason']){
70                    case 'F':
71                        $lineinfo['change'] = 'INSERT';
72                        break;
73
74                    case 'C':
75                        $lineinfo['change'] = 'DELETE';
76                        break;
77                }
78
79                $chainResult = append_logline($dstfile, $conx->tenant->now(), $place, LogEvent::TicketSII, $lineinfo);
80                if (!success($chainResult)){
81                    addlog(__FILE__, LogLevel::Critical, "Fiscal activity link not written for place '".$place."' (ticketsii change) — write failure details are in an earlier log line.");
82                }
83            }
84        }
85
86        return $retval;
87    }
88
89    /**
90     * Registra actividad e2 para TICKETSII ligado a factura de cuenta (ACCOUNTINVOICE).
91     *
92     * @param \ConxHelper $conx
93     * @param string $session
94     * @param array<string, mixed> $ticketsii
95     */
96    function _register_tickesii_invceac_activity(\ConxHelper $conx, $session, &$ticketsii){
97        $retval = ApplicationError::Success;
98        if ($conx->tenant === null) {
99            addlog(__FILE__, LogLevel::Error, 'Tenant connection not available for _register_tickesii_invceac_activity.');
100            $retval = ApplicationError::Database;
101        }
102
103        if (success($retval)){
104            $invceac = null;
105
106            $results = [];
107            $res = $conx->tenant->query('ACCOUNTINVOICE', [ 'objid' => $ticketsii['invceac'] ], $results);
108            if ($res){
109                if (count($results) > 0){
110                    $invceac = $results[0];
111                }
112
113                if (!$invceac){
114                    addlog(__FILE__, LogLevel::Error, "Cannot find account invoice entry for ticketsii (account invoice objid [".$ticketsii['invceac']."])");
115                    $retval = ApplicationError::NotFound;
116                }
117            }
118            else {
119                $retval = ApplicationError::Database;
120            }
121        }
122
123        if (success($retval)){
124            $place = $conx->place();
125            if ($place === null || $place === ''){
126                addlog(__FILE__, LogLevel::Error, "No place in connection for ticketsii invoice '".$invceac['objid']."'");
127                $retval = ApplicationError::NotFound;
128            }
129        }
130
131        if (success($retval)){
132            $dstpath = AppConstants::RegLogPath();
133            if (!file_exists($dstpath) && !mkdir($dstpath, 0775)){
134                addlog(__FILE__, LogLevel::Error, "Could not create local registry log folder in '".$dstpath."'");
135                $error = error_get_last();
136                if ($error) addlog(__FILE__, LogLevel::Debug, $error['message']);
137            }
138
139            if (is_dir($dstpath)){
140                $dstfile = sprintf('%s/%05d_ticket_activity.csv', $dstpath, $place);
141
142                $lineinfo = [
143                    'objid' => $ticketsii['objid'] ?? null,
144                    'session' => $session,
145                    'change' => 'INSERT',
146                    'series' => $invceac['series'],
147                    'invceno' => $invceac['invoice'],
148                    'price' => $invceac['amount'],
149                    'error' => $ticketsii['error'],
150                ];
151
152                $chainResult = append_logline($dstfile, $conx->tenant->now(), $place, LogEvent::TicketSII, $lineinfo);
153                if (!success($chainResult)){
154                    addlog(__FILE__, LogLevel::Critical, "Fiscal activity link not written for place '".$place."' (ticketsii invceac) — write failure details are in an earlier log line.");
155                }
156            }
157        }
158
159        return $retval;
160    }
161
162    /**
163     * Registra actividad TicketSII (un ticket / factura notificado al SII).
164     *
165     * @param \ConxHelper $conx Tenant ya asignado al local.
166     * @param string $session Session objid.
167     * @param array<string, mixed> $ticketsii Entrada con 'tckchg' o 'invceac'.
168     */
169    function register_ticketsii_activity(\ConxHelper $conx, $session, &$ticketsii){
170        if (($ticketsii['tckchg'] ?? null) != null){
171            return _register_ticketsii_change_activity($conx, $session, $ticketsii);
172        }
173
174        if (($ticketsii['invceac'] ?? null) != null){
175            return _register_tickesii_invceac_activity($conx, $session, $ticketsii);
176        }
177
178        addlog(__FILE__, LogLevel::Error, "TicketSII entry must provide either 'tckchg' or 'invceac' values");
179        return ApplicationError::Invalid;
180    }
181
182?>