Skip to content

Commit c29750c

Browse files
committed
feat: gestione firma GDPR con selezione condizioni
1 parent 707ed25 commit c29750c

8 files changed

Lines changed: 1054 additions & 134 deletions

File tree

modules/anagrafiche/actions.php

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
include_once __DIR__.'/../../core.php';
2222

2323
use Modules\Anagrafiche\Anagrafica;
24+
use Models\PrintTemplate;
25+
use Models\Module;
26+
use Models\Upload;
2427

2528
switch (post('op')) {
2629
case 'restore':
@@ -350,6 +353,99 @@
350353
$anagrafica->fixfornitore($anagrafica);
351354
}
352355

356+
break;
357+
358+
case 'elimina_firma_gdpr':
359+
// Eliminazione della firma GDPR e del file firmato
360+
$uploads_firma = Upload::where('id_record', $id_record)
361+
->where('id_module', $id_module)
362+
->where('key', 'signature_gdpr')
363+
->get();
364+
365+
foreach ($uploads_firma as $upload) {
366+
$upload->delete();
367+
}
368+
369+
$uploads_pdf = Upload::where('id_record', $id_record)
370+
->where('id_module', $id_module)
371+
->where('name', 'GDPR_firmato')
372+
->get();
373+
374+
foreach ($uploads_pdf as $upload) {
375+
$upload->delete();
376+
}
377+
378+
flash()->info(tr('Firma GDPR eliminata correttamente.'));
379+
break;
380+
381+
case 'firma_gdpr':
382+
$anagrafica = Anagrafica::find($id_record);
383+
if (is_writable(Uploads::getDirectory($id_module))) {
384+
if (post('firma_base64') != '') {
385+
// Salvataggio firma
386+
$data = explode(',', post('firma_base64'));
387+
$img = getImageManager()->read(base64_decode($data[1]));
388+
$img->scaleDown(680, 202);
389+
390+
if (setting('Sistema di firma') == 'Tavoletta Wacom') {
391+
$img->brightness((float) setting('Luminosità firma Wacom'));
392+
$img->contrast((float) setting('Contrasto firma Wacom'));
393+
}
394+
$encoded_image = $img->toJpeg();
395+
$file_content = $encoded_image->toString();
396+
397+
// Upload del file della firma in zz_files con categoria "GDPR"
398+
$upload = Uploads::upload($file_content, [
399+
'name' => 'firma_gdpr.jpg',
400+
'category' => 'GDPR',
401+
'id_module' => $id_module,
402+
'id_record' => $id_record,
403+
'key' => 'signature_gdpr',
404+
]);
405+
406+
if (empty($upload)) {
407+
flash()->error(tr('Errore durante il caricamento della firma GDPR!'));
408+
} else {
409+
// Salvataggio del percorso della firma in una variabile globale per il template
410+
$GLOBALS['firma_gdpr_file'] = Uploads::getDirectory($id_module).$upload->filename;
411+
412+
// Salvataggio delle scelte GDPR in variabili globali per il template
413+
$GLOBALS['gdpr_marketing_generico'] = post('marketing_generico') ?? '1';
414+
$GLOBALS['gdpr_profilazione'] = post('profilazione') ?? '1';
415+
416+
// Generazione del PDF della stampa GDPR con la firma
417+
$id_print = PrintTemplate::where('name', 'GDPR')->where('id_module', Module::where('name', 'Anagrafiche')->first()->id)->first()->id;
418+
419+
if (!empty($id_print)) {
420+
$directory = base_dir().'/files/anagrafiche/';
421+
$info = Prints::render($id_print, $id_record, $directory, true);
422+
423+
// Salvataggio del PDF come allegato
424+
$pdf_upload = Uploads::upload($info['pdf'], [
425+
'name' => 'GDPR_firmato.pdf',
426+
'category' => 'GDPR',
427+
'id_module' => $id_module,
428+
'id_record' => $id_record,
429+
]);
430+
431+
if (!empty($pdf_upload)) {
432+
flash()->info(tr('Firma GDPR salvata correttamente.'));
433+
} else {
434+
flash()->warning(tr('Firma salvata ma errore nel salvataggio del PDF GDPR firmato.'));
435+
}
436+
} else {
437+
flash()->warning(tr('Firma salvata ma stampa GDPR non trovata.'));
438+
}
439+
}
440+
} else {
441+
flash()->error(tr('Errore durante il salvataggio della firma GDPR.').'<br>'.tr('La firma risulta vuota.'));
442+
}
443+
} else {
444+
flash()->error(tr("Non è stato possibile creare la cartella _DIRECTORY_ per salvare l'immagine della firma GDPR.", [
445+
'_DIRECTORY_' => '<b>'.Uploads::getDirectory($id_module).'</b>',
446+
]));
447+
}
448+
353449
break;
354450
}
355451

modules/anagrafiche/buttons.php

Lines changed: 95 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -20,62 +20,89 @@
2020

2121
use Models\Group;
2222
use Models\Module;
23+
use Models\Upload;
2324

2425
if (!$is_anagrafica_deleted) {
2526
if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_anagrafica)) {
2627
echo '
27-
<div class="btn-group">
28-
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
29-
<i class="fa fa-magic"></i>
30-
'.tr('Crea').'...
31-
</button>
32-
<div class="dropdown-menu dropdown-menu-left">';
33-
34-
// Aggiunta utente per i tecnici
35-
if (in_array($id_tecnico, $tipi_anagrafica)) {
36-
echo '
37-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi utente').'" data-widget="modal" data-href="modules/utenti/user.php?id_module='.Module::where('name', 'Utenti e permessi')->first()->id.'&id_record='.Group::where('nome', 'Tecnici')->first()->id.'&idanagrafica='.$record['idanagrafica'].'">
38-
<i class="fa fa-user"></i> '.tr('Nuovo utente').'
39-
</a>';
40-
}
28+
<div class="btn-group">
29+
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
30+
<i class="fa fa-magic"></i>
31+
'.tr('Crea').'...
32+
</button>
33+
<div class="dropdown-menu dropdown-menu-left">';
34+
35+
// Aggiunta utente per i tecnici
36+
if (in_array($id_tecnico, $tipi_anagrafica)) {
37+
echo '
38+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi utente').'" data-widget="modal" data-href="modules/utenti/user.php?id_module='.Module::where('name', 'Utenti e permessi')->first()->id.'&id_record='.Group::where('nome', 'Tecnici')->first()->id.'&idanagrafica='.$record['idanagrafica'].'">
39+
<i class="fa fa-user"></i> '.tr('Nuovo utente').'
40+
</a>';
41+
}
42+
43+
if (in_array($id_cliente, $tipi_anagrafica)) {
44+
echo '
45+
46+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi attività').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Interventi')->first()->id.'&idanagrafica='.$record['idanagrafica'].'">
47+
<i class="fa fa-wrench"></i> '.tr('Nuova attività').'
48+
</a>
49+
50+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi preventivo').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Preventivi')->first()->id.'&idanagrafica='.$record['idanagrafica'].'">
51+
<i class="fa fa-file-text"></i> '.tr('Nuovo preventivo').'
52+
</a>
4153
42-
if (in_array($id_cliente, $tipi_anagrafica)) {
43-
echo '
44-
45-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi attività').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Interventi')->first()->id.'&idanagrafica='.$record['idanagrafica'].'">
46-
<i class="fa fa-wrench"></i> '.tr('Nuova attività').'
47-
</a>
48-
49-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi preventivo').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Preventivi')->first()->id.'&idanagrafica='.$record['idanagrafica'].'">
50-
<i class="fa fa-file-text"></i> '.tr('Nuovo preventivo').'
51-
</a>
54+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi contratto').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Contratti')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-text-o"></i> '.tr('Nuovo contratto').'</a>
5255
53-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi contratto').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Contratti')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-text-o"></i> '.tr('Nuovo contratto').'</a>
56+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ordine cliente').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ordini cliente')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-o"></i> '.tr('Nuovo ordine cliente').'</a>
5457
55-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ordine cliente').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ordini cliente')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-o"></i> '.tr('Nuovo ordine cliente').'</a>
58+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ddt in uscita').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ddt in uscita')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-truck"></i> '.tr('Nuovo ddt in uscita').'</a>
5659
57-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ddt in uscita').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ddt in uscita')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-truck"></i> '.tr('Nuovo ddt in uscita').'</a>
60+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi fattura di vendita').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Fatture di vendita')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file"></i> '.tr('Nuova fattura di vendita').'</a>
5861
59-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi fattura di vendita').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Fatture di vendita')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file"></i> '.tr('Nuova fattura di vendita').'</a>
62+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi registrazione contabile').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Prima nota')->first()->id.'&id_anagrafica='.$record['idanagrafica'].'"><i class="fa fa-euro"></i> '.tr('Nuova registrazione contabile (cliente)').'</a>';
63+
}
6064

61-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi registrazione contabile').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Prima nota')->first()->id.'&id_anagrafica='.$record['idanagrafica'].'"><i class="fa fa-euro"></i> '.tr('Nuova registrazione contabile (cliente)').'</a>';
62-
}
65+
if (in_array($id_fornitore, $tipi_anagrafica)) {
66+
echo '
67+
68+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ordine fornitore').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ordini fornitore')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-o fa-flip-horizontal"></i> '.tr('Nuovo ordine fornitore').'</a>
69+
70+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ddt in entrata').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ddt in entrata')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-truck fa-flip-horizontal"></i> '.tr('Nuovo ddt in entrata').'</a>
71+
72+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi fattura di acquisto').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Fatture di acquisto')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file fa-flip-horizontal"></i> '.tr('Nuova fattura di acquisto').'</a>
73+
74+
<a class="btn dropdown-item" data-title="'.tr('Aggiungi registrazione contabile').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Prima nota')->first()->id.'&id_anagrafica='.$record['idanagrafica'].'"><i class="fa fa-euro"></i> '.tr('Nuova registrazione contabile (fornitore)').'</a>';
75+
}
6376

64-
if (in_array($id_fornitore, $tipi_anagrafica)) {
6577
echo '
66-
67-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ordine fornitore').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ordini fornitore')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file-o fa-flip-horizontal"></i> '.tr('Nuovo ordine fornitore').'</a>
78+
</div>
79+
</div>';
6880

69-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi ddt in entrata').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Ddt in entrata')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-truck fa-flip-horizontal"></i> '.tr('Nuovo ddt in entrata').'</a>
81+
// Verifica se GDPR è già firmato
82+
$gdpr_firmato = Upload::where('id_record', $id_record)
83+
->where('id_module', $id_module)
84+
->where('name', 'GDPR_firmato')
85+
->first();
7086

71-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi fattura di acquisto').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Fatture di acquisto')->first()->id.'&idanagrafica='.$record['idanagrafica'].'"><i class="fa fa-file fa-flip-horizontal"></i> '.tr('Nuova fattura di acquisto').'</a>
87+
$btn_class = !empty($gdpr_firmato) ? 'btn-warning' : 'btn-primary';
88+
$btn_text = !empty($gdpr_firmato) ? tr('Elimina firma GDPR') : tr('Firma GDPR');
89+
$badge_html = !empty($gdpr_firmato) ? ' <span class="badge badge-success" style="margin-left:5px;">'.tr('GDPR già firmato').'</span>' : '';
7290

73-
<a class="btn dropdown-item" data-title="'.tr('Aggiungi registrazione contabile').'" data-widget="modal" data-href="add.php?id_module='.Module::where('name', 'Prima nota')->first()->id.'&id_anagrafica='.$record['idanagrafica'].'"><i class="fa fa-euro"></i> '.tr('Nuova registrazione contabile (fornitore)').'</a>';
74-
}
91+
if (!empty($gdpr_firmato)) {
92+
// Pulsante per eliminare la firma
93+
echo '
94+
95+
'.$badge_html.' <button type="button" class="btn '.$btn_class.'" data-action="elimina_firma_gdpr" id="btn_elimina_firma_gdpr">
96+
<i class="fa fa-print"></i> '.$btn_text.'
97+
</button>';
98+
} else {
99+
// Pulsante per firmare - apre prima la modal delle scelte GDPR
100+
echo '
75101
76-
echo '
77-
</div>
78-
</div>';
102+
<button type="button" class="btn '.$btn_class.'" data-title="'.tr('Firma GDPR').'" data-widget="modal" data-href="'.$module->fileurl('modals/scelte_gdpr.php').'?id_module='.$id_module.'&id_record='.$id_record.'">
103+
<i class="fa fa-print"></i> '.$btn_text.'
104+
</button>';
105+
}
79106
}
80107
}
81108

@@ -86,3 +113,31 @@
86113
<i class="fa fa-print"></i> '.tr('Liquida Provvigioni').'
87114
</button>';
88115
}
116+
117+
// Script per gestire l'eliminazione della firma GDPR
118+
echo '
119+
<script>
120+
$(document).ready(function() {
121+
$(document).on("click", "button[data-action=\"elimina_firma_gdpr\"]", function(e) {
122+
e.preventDefault();
123+
124+
if (confirm("'.tr('Sei sicuro di voler eliminare la firma GDPR e il file firmato? Dovrai firmare di nuovo.').'")) {
125+
$.ajax({
126+
url: "actions.php",
127+
type: "POST",
128+
data: {
129+
op: "elimina_firma_gdpr",
130+
id_module: '.$id_module.',
131+
id_record: '.$id_record.'
132+
},
133+
success: function(response) {
134+
location.reload();
135+
},
136+
error: function() {
137+
alert("'.tr('Errore durante l\'eliminazione della firma GDPR.').'");
138+
}
139+
});
140+
}
141+
});
142+
});
143+
</script>';

0 commit comments

Comments
 (0)