Skip to content

Commit 91dde6c

Browse files
feat: inversione flag opt-out e azione di gruppo export
1 parent 396f851 commit 91dde6c

12 files changed

Lines changed: 122 additions & 23 deletions

File tree

modules/anagrafiche/actions.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@
4545
$sede->fax = post('fax');
4646
$sede->idzona = post('idzona');
4747
$sede->email = post('email');
48-
49-
$opt_out_newsletter = post('disable_newsletter');
50-
$sede->enable_newsletter = empty($opt_out_newsletter);
48+
$sede->enable_newsletter = post('enable_newsletter');
5149

5250
// Informazioni sull'anagrafica
5351
$anagrafica->codice = post('codice');

modules/anagrafiche/bulk.php

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,97 @@
9494

9595
flash()->info(tr('Listino aggiornato correttamente!'));
9696

97+
break;
98+
99+
case 'export_newsletter_csv':
100+
$tipo_esportazione = post('tipo_esportazione');
101+
$id_records_list = implode(',', array_map('intval', $id_records));
102+
103+
if ($tipo_esportazione == 'anagrafiche') {
104+
// Esportazione email e ragione sociale dalle anagrafiche selezionate
105+
$query = "SELECT DISTINCT email, ragione_sociale, 'Anagrafica' as fonte, '' as sede_referente FROM an_anagrafiche
106+
WHERE idanagrafica IN ($id_records_list)
107+
AND email != ''
108+
AND email IS NOT NULL
109+
AND enable_newsletter = 1
110+
AND deleted_at IS NULL";
111+
} elseif ($tipo_esportazione == 'sedi') {
112+
// Esportazione email, ragione sociale e nome sede dalle sedi delle anagrafiche selezionate
113+
$query = "SELECT DISTINCT s.email, a.ragione_sociale, 'Sede' as fonte, s.nomesede as sede_referente
114+
FROM an_sedi s
115+
LEFT JOIN an_anagrafiche a ON s.idanagrafica = a.idanagrafica
116+
WHERE s.idanagrafica IN ($id_records_list)
117+
AND s.email != ''
118+
AND s.email IS NOT NULL
119+
AND s.enable_newsletter = 1";
120+
} elseif ($tipo_esportazione == 'referenti') {
121+
// Esportazione email, ragione sociale e nome referente dai referenti delle anagrafiche selezionate
122+
$query = "SELECT DISTINCT r.email, a.ragione_sociale, 'Referente' as fonte, r.nome as sede_referente
123+
FROM an_referenti r
124+
LEFT JOIN an_anagrafiche a ON r.idanagrafica = a.idanagrafica
125+
WHERE r.idanagrafica IN ($id_records_list)
126+
AND r.email != ''
127+
AND r.email IS NOT NULL
128+
AND r.enable_newsletter = 1";
129+
} else {
130+
// Esportazione email, ragione sociale e nomi da tutte e tre le fonti delle anagrafiche selezionate
131+
$query = "SELECT DISTINCT email, ragione_sociale, fonte, sede_referente FROM (
132+
SELECT email, ragione_sociale, 'Anagrafica' as fonte, '' as sede_referente FROM an_anagrafiche
133+
WHERE idanagrafica IN ($id_records_list)
134+
AND email != ''
135+
AND email IS NOT NULL
136+
AND enable_newsletter = 1
137+
AND deleted_at IS NULL
138+
UNION
139+
SELECT s.email, a.ragione_sociale, 'Sede' as fonte, s.nomesede as sede_referente
140+
FROM an_sedi s
141+
LEFT JOIN an_anagrafiche a ON s.idanagrafica = a.idanagrafica
142+
WHERE s.idanagrafica IN ($id_records_list)
143+
AND s.email != ''
144+
AND s.email IS NOT NULL
145+
AND s.enable_newsletter = 1
146+
UNION
147+
SELECT r.email, a.ragione_sociale, 'Referente' as fonte, r.nome as sede_referente
148+
FROM an_referenti r
149+
LEFT JOIN an_anagrafiche a ON r.idanagrafica = a.idanagrafica
150+
WHERE r.idanagrafica IN ($id_records_list)
151+
AND r.email != ''
152+
AND r.email IS NOT NULL
153+
AND r.enable_newsletter = 1
154+
) AS all_emails";
155+
}
156+
$results = $dbo->fetchArray($query);
157+
158+
// Creazione del file CSV
159+
$file = temp_file();
160+
$handle = fopen($file, 'w');
161+
162+
// Scrittura dell'intestazione
163+
fputcsv($handle, ['email', 'ragione_sociale', 'fonte', 'sede_referente'], ';');
164+
165+
// Scrittura dei dati
166+
foreach ($results as $row) {
167+
fputcsv($handle, [
168+
$row['email'],
169+
$row['ragione_sociale'],
170+
$row['fonte'],
171+
$row['sede_referente']
172+
], ';');
173+
}
174+
fclose($handle);
175+
176+
// Nome del file basato sul tipo di esportazione
177+
$filename_map = [
178+
'anagrafiche' => 'newsletter_anagrafiche.csv',
179+
'sedi' => 'newsletter_sedi.csv',
180+
'referenti' => 'newsletter_referenti.csv',
181+
'tutti' => 'newsletter_tutti.csv'
182+
];
183+
$filename = $filename_map[$tipo_esportazione] ?? 'newsletter_export.csv';
184+
185+
// Download del file
186+
download($file, $filename);
187+
97188
break;
98189
}
99190

@@ -145,4 +236,14 @@
145236
],
146237
];
147238

239+
$operations['export_newsletter_csv'] = [
240+
'text' => '<span><i class="fa fa-envelope"></i> '.tr('Esporta email newsletter').'</span>',
241+
'data' => [
242+
'msg' => tr('Seleziona il tipo di email da esportare per la newsletter:').'<br><br>{[ "type": "select", "label": "'.tr('Tipo esportazione').'", "name": "tipo_esportazione", "required": 1, "values": "list=\"anagrafiche\":\"Anagrafiche\",\"sedi\":\"Sedi\",\"referenti\":\"Referenti\",\"tutti\":\"Tutti (Anagrafiche, Sedi, Referenti)\"", "value": "tutti" ]}',
243+
'button' => tr('Esporta CSV'),
244+
'class' => 'btn btn-lg btn-warning',
245+
'blank' => true,
246+
],
247+
];
248+
148249
return $operations;

modules/anagrafiche/edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@
238238

239239
<div class="row">
240240
<div class="col-md-4">
241-
{[ "type": "checkbox", "label": "<?php echo tr('Opt-out per newsletter'); ?>", "name": "disable_newsletter", "value": "<?php echo empty($record['enable_newsletter']); ?>", "help": "<?php echo tr('Blocco per l\'invio delle email.'); ?>" ]}
241+
{[ "type": "checkbox", "label": "<?php echo tr('Opt-in per newsletter'); ?>", "name": "enable_newsletter", "value": "<?php echo $record['enable_newsletter']; ?>", "help": "<?php echo tr('Blocco per l\'invio delle email.'); ?>" ]}
242242
</div>
243243
</div>
244244

plugins/contratti_anagrafiche/actions.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424

2525
switch ($operazione) {
2626
case 'updatecontratto':
27-
$opt_out_newsletter = post('disable_newsletter');
28-
2927
if (!empty(post('predefined'))) {
3028
$dbo->update('co_contratti', [
3129
'predefined' => 0,

plugins/pagamenti_anagrafiche/actions.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
break;
4141

4242
case 'updatepagamento':
43-
$opt_out_newsletter = post('disable_newsletter');
44-
4543
$dbo->update('an_pagamenti_anagrafiche', [
4644
'mese' => post('mese'),
4745
'giorno_fisso' => post('giorno_fisso'),

plugins/referenti/actions.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,13 @@
3030
$nome = post('nome');
3131
$idmansione = post('idmansione');
3232
$idsede = post('idsede');
33-
$opt_out_newsletter = post('disable_newsletter_add');
3433

3534
$referente = Referente::build($id_parent, $nome, $idmansione, $idsede);
3635
$id_record = $referente->id;
3736

3837
$referente->telefono = post('telefono');
3938
$referente->email = post('email');
40-
$referente->enable_newsletter = empty($opt_out_newsletter);
41-
39+
$referente->enable_newsletter = post('enable_newsletter_add');
4240
$referente->save();
4341

4442
if (isAjaxRequest() && !empty($id_record)) {
@@ -53,16 +51,14 @@
5351
break;
5452

5553
case 'updatereferente':
56-
$opt_out_newsletter = post('disable_newsletter');
57-
5854
$dbo->update('an_referenti', [
5955
'idanagrafica' => $id_parent,
6056
'nome' => post('nome'),
6157
'idmansione' => post('idmansione'),
6258
'telefono' => post('telefono'),
6359
'email' => post('email'),
6460
'idsede' => post('idsede'),
65-
'enable_newsletter' => empty($opt_out_newsletter),
61+
'enable_newsletter' => post('enable_newsletter'),
6662
], ['id' => $id_record]);
6763

6864
flash()->info(tr('Salvataggio completato!'));

plugins/referenti/add.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@
5555
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede", "values": "query=SELECT 0 AS id, \'Sede legale\' AS descrizione UNION SELECT id, CONCAT_WS(\' - \', nomesede, citta) AS descrizione FROM an_sedi WHERE idanagrafica='.$id_parent.'", "value": "0", "icon-after": "add|'.$id_module.'|id_plugin='.$id_plugin_sedi.'&id_parent='.$id_parent.'" ]}
5656
</div>
5757
58-
<div class="col-md-6">
59-
{[ "type": "checkbox", "label": "'.tr('Opt-out per newsletter').'", "name": "disable_newsletter_add", "id": "disable_newsletter_m", "value": "0", "help": "'.tr("Blocco per l'invio delle email.").'" ]}
58+
<div class="col-md-6">
59+
{[ "type": "checkbox", "label": "'.tr('Opt-in per newsletter').'", "name": "enable_newsletter_add", "id": "enable_newsletter_m", "value": "1", "help": "'.tr("Blocco per l'invio delle email.").'" ]}
6060
</div>
6161
</div>
6262

plugins/referenti/edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
</div>
5656
5757
<div class="col-md-6">
58-
{[ "type": "checkbox", "label": "'.tr('Opt-out per newsletter').'", "name": "disable_newsletter", "id": "disable_newsletter_m", "value": "'.empty($record['enable_newsletter']).'", "help": "'.tr('Blocco per l\'invio delle email.').'" ]}
58+
{[ "type": "checkbox", "label": "'.tr('Opt-in per newsletter').'", "name": "enable_newsletter", "id": "enable_newsletter_m", "value": "'.$record['enable_newsletter'].'", "help": "'.tr('Blocco per l\'invio delle email.').'" ]}
5959
</div>
6060
</div>
6161

plugins/sedi/actions.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
switch ($operazione) {
2929
case 'addsede':
3030
if (!empty(post('nomesede'))) {
31-
$opt_out_newsletter = post('disable_newsletter_add');
3231
$sede = Sede::build(Anagrafica::find($id_parent));
3332

3433
$sede->nomesede = post('nomesede');
@@ -42,7 +41,7 @@
4241
$sede->cellulare = post('cellulare');
4342
$sede->telefono = post('telefono');
4443
$sede->email = post('email');
45-
$sede->enable_newsletter = empty($opt_out_newsletter);
44+
$sede->enable_newsletter = post('enable_newsletter_add');
4645
$sede->codice_destinatario = post('codice_destinatario');
4746
$sede->is_automezzo = post('is_automezzo');
4847
$sede->is_rappresentante_fiscale = post('is_rappresentante_fiscale');
@@ -77,7 +76,6 @@
7776
break;
7877

7978
case 'updatesede':
80-
$opt_out_newsletter = post('disable_newsletter');
8179
$sede = Sede::find($id_record);
8280

8381
$sede->nomesede = post('nomesede');
@@ -89,7 +87,7 @@
8987
$sede->telefono = post('telefono');
9088
$sede->cellulare = post('cellulare');
9189
$sede->email = post('email');
92-
$sede->enable_newsletter = empty($opt_out_newsletter);
90+
$sede->enable_newsletter = post('enable_newsletter');
9391
$sede->codice_destinatario = post('codice_destinatario');
9492
$sede->is_rappresentante_fiscale = post('is_rappresentante_fiscale');
9593
$sede->piva = post('piva');

plugins/sedi/add.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
{[ "type": "email", "label": "'.tr('Indirizzo email').'", "name": "email", "validation": "email" ]}
8383
</div>
8484
<div class="col-md-3">
85-
{[ "type": "checkbox", "label": "'.tr('Opt-out per newsletter').'", "name": "disable_newsletter_add", "id": "disable_newsletter_m", "value": "0", "help": "'.tr("Blocco per l'invio delle email.").'" ]}
85+
{[ "type": "checkbox", "label": "'.tr('Opt-in per newsletter').'", "name": "enable_newsletter_add", "id": "enable_newsletter_m", "value": "1", "help": "'.tr("Blocco per l'invio delle email.").'" ]}
8686
</div>
8787
</div>
8888
<div class="row">

0 commit comments

Comments
 (0)