Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
50.00% covered (danger)
50.00%
10 / 20
28.57% covered (danger)
28.57%
2 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
RegstService
50.00% covered (danger)
50.00%
10 / 20
28.57% covered (danger)
28.57%
2 / 7
22.50
0.00% covered (danger)
0.00%
0 / 1
 ensureLoaded
75.00% covered (warning)
75.00%
6 / 8
0.00% covered (danger)
0.00%
0 / 1
4.25
 registerLoginEvent
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 registerGuestEvent
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 registerDrawerEvent
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 registerReceiptEvent
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 registerTicketActivity
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 registerTicketbaiActivity
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace UppServices;
6
7/**
8 * Registry (regstr) service: adds log entries for tickets, drawer, login/guest events, TicketBAI, TicketSII.
9 * Delegates to scripts in App/Services/regstr/ (registry, login, drawer, ticket, ticketbai).
10 * Callers pass ConxHelper; the service does not create or release connections.
11 *
12 * Scripts are loaded lazily on first use so DI of ClientsService / ConnectionService
13 * does not require fiscal files until an actual register* call.
14 */
15class RegstService
16{
17    private const REGSTR_DIR = __DIR__.'/regstr';
18
19    private const REGSTR_SCRIPTS = [
20        'registry.php',
21        'login.php',
22        'drawer.php',
23        'printer.php',
24        'ticket.php',
25        'ticketbai.php',
26    ];
27
28    private bool $loaded = false;
29
30    /**
31     * Load regstr scripts once. Missing files throw without PHP Warnings (checked first).
32     */
33    private function ensureLoaded(): void
34    {
35        if ($this->loaded) {
36            return;
37        }
38
39        foreach (self::REGSTR_SCRIPTS as $script) {
40            $path = self::REGSTR_DIR.'/'.$script;
41            if (!is_file($path)) {
42                throw new \RuntimeException('Regstr script missing: '.$path);
43            }
44            require_once $path;
45        }
46
47        $this->loaded = true;
48    }
49
50    /**
51     * Register user login/logout event. Uses central DB.
52     *
53     * @param \ConxHelper $conx Connection helper (->global used).
54     * @param string $session Session objid.
55     * @param array $event Event with 'place', 'login', 'created'.
56     * @return int ApplicationError code.
57     */
58    public function registerLoginEvent(\ConxHelper $conx, string $session, array &$event): int
59    {
60        $this->ensureLoaded();
61        return \register_login_event($conx, $session, $event);
62    }
63
64    /**
65     * Register guest login/logout event. Uses central DB.
66     *
67     * @param \ConxHelper $conx Connection helper (->global used).
68     * @param string $session Session objid.
69     * @param array $event Event with 'qrcode', 'login', 'created'.
70     * @return int ApplicationError code.
71     */
72    public function registerGuestEvent(\ConxHelper $conx, string $session, array &$event): int
73    {
74        $this->ensureLoaded();
75        return \register_guest_event($conx, $session, $event);
76    }
77
78    /**
79     * Register drawer event. Uses tenant (PRINTER, RASPPI) and global (PLACE).
80     *
81     * @param \ConxHelper $conx Connection helper (->tenant must be set for device's place).
82     * @param string $session Session objid.
83     * @param array $event Event with 'printer', 'created'.
84     * @return int ApplicationError code.
85     */
86    public function registerDrawerEvent(\ConxHelper $conx, string $session, array &$event): int
87    {
88        $this->ensureLoaded();
89        return \register_drawer_event($conx, $session, $event);
90    }
91
92    /**
93     * Register ticket receipt print event. Uses central DB for place lookup and local file regstr.
94     *
95     * @param \ConxHelper $conx Connection helper.
96     * @param string $session Session objid.
97     * @param array $event Event with 'place', 'charge', 'custom', 'created'.
98     * @return int ApplicationError code.
99     */
100    public function registerReceiptEvent(\ConxHelper $conx, string $session, array &$event): int
101    {
102        $this->ensureLoaded();
103        return \register_receipt_event($conx, $session, $event);
104    }
105
106    /**
107     * Register ticket activity. Uses tenant DB.
108     *
109     * @param \ConxHelper $conx Connection helper (->tenant must be set).
110     * @param string $session Session objid.
111     * @param array $entrynfo Ticket entry info with 'place' and optionally 'objid'.
112     * @return int ApplicationError code.
113     */
114    public function registerTicketActivity(\ConxHelper $conx, string $session, array $entrynfo): int
115    {
116        $this->ensureLoaded();
117        return \register_ticket_activity($conx, $session, $entrynfo);
118    }
119
120    /**
121     * Register TicketBAI activity. Uses tenant DB.
122     *
123     * @param \ConxHelper $conx Connection helper (->tenant must be set).
124     * @param string $session Session objid.
125     * @param array $ticketbai Entry with 'tckchg' or 'invceac'.
126     * @return int ApplicationError code.
127     */
128    public function registerTicketbaiActivity(\ConxHelper $conx, string $session, array &$ticketbai): int
129    {
130        $this->ensureLoaded();
131        return \register_ticketbai_activity($conx, $session, $ticketbai);
132    }
133
134}