Compare commits
3 Commits
402dca9162
...
3dae3ab81f
Author | SHA1 | Date |
---|---|---|
Dasc3er | 3dae3ab81f | |
Dasc3er | f4b96e57fa | |
Dasc3er | 18416674f6 |
|
@ -33,12 +33,14 @@ class EmailHook extends Manager
|
|||
|
||||
public function needsExecution()
|
||||
{
|
||||
// Email fallite nelle ultime 4 ore
|
||||
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
|
||||
$failed = function ($query) use ($diff) {
|
||||
$query->where('failed_at', '<', $diff)
|
||||
->orWhereNull('failed_at');
|
||||
};
|
||||
|
||||
// Email da inviare per tutti gli account
|
||||
$accounts = Account::all();
|
||||
$remaining = Mail::whereNull('sent_at')
|
||||
->where($failed)
|
||||
|
@ -51,15 +53,23 @@ class EmailHook extends Manager
|
|||
|
||||
public function execute()
|
||||
{
|
||||
// Email fallite nelle ultime 4 ore
|
||||
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
|
||||
$failed = function ($query) use ($diff) {
|
||||
$query->where('failed_at', '<', $diff)
|
||||
->orWhereNull('failed_at');
|
||||
};
|
||||
|
||||
// Parametri per l'invio
|
||||
$numero_tentativi = setting('Numero massimo di tentativi');
|
||||
$numero_email = setting('Numero email da inviare in contemporanea per account');
|
||||
$numero_email = $numero_email < 1 ? 1 : $numero_email;
|
||||
|
||||
// Selezione email per account
|
||||
$accounts = Account::all();
|
||||
$list = [];
|
||||
$lista = [];
|
||||
foreach ($accounts as $account) {
|
||||
// Ultima email inviata per l'account
|
||||
$last_mail = $account->emails()
|
||||
->whereNotNull('sent_at')
|
||||
->orderBy('sent_at')
|
||||
|
@ -70,31 +80,32 @@ class EmailHook extends Manager
|
|||
$now = new Carbon();
|
||||
$diff_milliseconds = $date->diffInMilliseconds($now);
|
||||
|
||||
// Timeout per l'uso dell'account email
|
||||
if (empty($last_mail) || $diff_milliseconds > $account->timeout) {
|
||||
$mail = Mail::whereNull('sent_at')
|
||||
$lista_account = Mail::whereNull('sent_at')
|
||||
->where('id_account', $account->id)
|
||||
->where($failed)
|
||||
->where('attempt', '<', setting('Numero massimo di tentativi'))
|
||||
->where('attempt', '<', $numero_tentativi)
|
||||
->orderBy('created_at')
|
||||
->first();
|
||||
->take($numero_email)
|
||||
->get();
|
||||
|
||||
if (!empty($mail)) {
|
||||
$list[] = $mail;
|
||||
if (!empty($lista_account)) {
|
||||
$lista = array_merge($lista, $lista_account);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($list as $mail) {
|
||||
$email = EmailNotification::build($mail);
|
||||
|
||||
// Invio effettivo
|
||||
foreach ($lista as $lista_account) {
|
||||
try {
|
||||
// Invio mail
|
||||
$email = EmailNotification::build($lista_account);
|
||||
$email->send();
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
}
|
||||
|
||||
return $list;
|
||||
return $lista;
|
||||
}
|
||||
|
||||
public function response()
|
||||
|
@ -102,10 +113,13 @@ class EmailHook extends Manager
|
|||
$yesterday = date('Y-m-d', strtotime('-1 days'));
|
||||
$user = auth()->getUser();
|
||||
|
||||
// Numero di email inviate
|
||||
$current = Mail::whereDate('sent_at', '>', $yesterday)
|
||||
->where('attempt', '<', setting('Numero massimo di tentativi'))
|
||||
->where('created_by', $user->id)
|
||||
->count();
|
||||
|
||||
// Numero totale di email
|
||||
$total = Mail::where(function ($query) use ($yesterday) {
|
||||
$query->whereDate('sent_at', '>', $yesterday)
|
||||
->orWhereNull('sent_at');
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Referente;
|
||||
use Modules\Anagrafiche\Sede;
|
||||
use Modules\Newsletter\Lista;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
@ -53,18 +56,51 @@ switch (filter('op')) {
|
|||
break;
|
||||
|
||||
case 'add_receivers':
|
||||
$receivers = post('receivers');
|
||||
$destinatari = [];
|
||||
|
||||
$lista->anagrafiche()->syncWithoutDetaching($receivers);
|
||||
// Selezione manuale
|
||||
$id_receivers = post('receivers');
|
||||
foreach ($id_receivers as $id_receiver) {
|
||||
list($tipo, $id) = explode('_', $id_receiver);
|
||||
if ($tipo == 'anagrafica') {
|
||||
$type = Anagrafica::class;
|
||||
} elseif ($tipo == 'sede') {
|
||||
$type = Sede::class;
|
||||
} else {
|
||||
$type = Referente::class;
|
||||
}
|
||||
|
||||
$destinatari[] = [
|
||||
'record_type' => $type,
|
||||
'record_id' => $id,
|
||||
];
|
||||
}
|
||||
|
||||
// Aggiornamento destinatari
|
||||
foreach ($destinatari as $destinatario) {
|
||||
$data = array_merge($destinatario, [
|
||||
'id_list' => $lista->id,
|
||||
]);
|
||||
|
||||
$registrato = $database->select('em_list_receiver', '*', $data);
|
||||
if (empty($registrato)) {
|
||||
$database->insert('em_list_receiver', $data);
|
||||
}
|
||||
}
|
||||
|
||||
flash()->info(tr('Aggiunti nuovi destinatari alla lista!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'remove_receiver':
|
||||
$receiver = post('id');
|
||||
$receiver_id = post('id');
|
||||
$receiver_type = post('type');
|
||||
|
||||
$lista->anagrafiche()->detach($receiver);
|
||||
$database->delete('em_list_receiver', [
|
||||
'record_type' => $receiver_type,
|
||||
'record_id' => $receiver_id,
|
||||
'id_list' => $lista->id,
|
||||
]);
|
||||
|
||||
flash()->info(tr('Destinatario rimosso dalla lista!'));
|
||||
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Referente;
|
||||
use Modules\Anagrafiche\Sede;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
echo '
|
||||
|
@ -46,7 +50,7 @@ echo '
|
|||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "'.tr('Query dinamica').'", "name": "query", "required": 0, "value": "$query$", "help": "'.tr("La query SQL deve restituire gli identificativi delle anagrafiche da inserire nella lista, sotto un campo di nome ''id''").'. '.tr('Per esempio: _SQL_', [
|
||||
'_SQL_' => 'SELECT idanagrafica AS id FROM an_anagrafiche',
|
||||
'_SQL_' => 'SELECT idanagrafica AS id, \'anagrafica\' AS tipo FROM an_anagrafiche',
|
||||
]).'" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -67,7 +71,7 @@ echo '
|
|||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "'.tr('Destinatari').'", "name": "receivers[]", "ajax-source": "anagrafiche_newsletter", "multiple": 1, "disabled": '.intval(!empty($lista->query)).' ]}
|
||||
{[ "type": "select", "label": "'.tr('Destinatari').'", "name": "receivers[]", "ajax-source": "destinatari_newsletter", "multiple": 1, "disabled": '.intval(!empty($lista->query)).' ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -82,7 +86,7 @@ echo '
|
|||
</div>
|
||||
</form>';
|
||||
|
||||
$anagrafiche = $lista->anagrafiche;
|
||||
$destinatari = $lista->getDestinatari();
|
||||
|
||||
echo '
|
||||
<!-- Destinatari -->
|
||||
|
@ -90,13 +94,13 @@ echo '
|
|||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
'.tr('Destinatari').'
|
||||
<span class="badge">'.$anagrafiche->count().'</span>
|
||||
<span class="badge">'.$destinatari->count().'</span>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">';
|
||||
|
||||
if (!$anagrafiche->isEmpty()) {
|
||||
if (!$destinatari->isEmpty()) {
|
||||
echo '
|
||||
<table class="table table-hover table-condensed table-bordered">
|
||||
<thead>
|
||||
|
@ -109,13 +113,22 @@ if (!$anagrafiche->isEmpty()) {
|
|||
|
||||
<tbody>';
|
||||
|
||||
foreach ($anagrafiche as $anagrafica) {
|
||||
foreach ($destinatari as $destinatario) {
|
||||
$anagrafica = $destinatario instanceof Anagrafica ? $destinatario : $destinatario->anagrafica;
|
||||
$descrizione = $anagrafica->ragione_sociale;
|
||||
|
||||
if ($destinatario instanceof Sede) {
|
||||
$descrizione .= ' ['.$destinatario->nomesede.']';
|
||||
} elseif ($destinatario instanceof Referente) {
|
||||
$descrizione .= ' ['.$destinatario->nome.']';
|
||||
}
|
||||
|
||||
echo '
|
||||
<tr '.(empty($anagrafica->email) ? 'class="bg-danger"' : '').'>
|
||||
<td>'.Modules::link('Anagrafiche', $anagrafica->id, $anagrafica->ragione_sociale).'</td>
|
||||
<td class="text-center">'.$anagrafica->email.'</td>
|
||||
<tr '.(empty($destinatario->email) ? 'class="bg-danger"' : '').'>
|
||||
<td>'.Modules::link('Anagrafiche', $anagrafica->id, $descrizione).'</td>
|
||||
<td class="text-center">'.$destinatario->email.'</td>
|
||||
<td class="text-center">
|
||||
<a class="btn btn-danger ask btn-sm '.(!empty($lista->query) ? 'disabled' : '').'" data-backto="record-edit" data-op="remove_receiver" data-id="'.$anagrafica->id.'" '.(!empty($lista->query) ? 'disabled' : '').'>
|
||||
<a class="btn btn-danger ask btn-sm '.(!empty($lista->query) ? 'disabled' : '').'" data-backto="record-edit" data-op="remove_receiver" data-type="'.get_class($destinatario).'" data-id="'.$destinatario->id.'" '.(!empty($lista->query) ? 'disabled' : '').'>
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</td>
|
||||
|
@ -127,7 +140,7 @@ if (!$anagrafiche->isEmpty()) {
|
|||
</table>';
|
||||
} else {
|
||||
echo '
|
||||
<p>'.tr('Nessuna anagrafica collegata alla lista').'.</p>';
|
||||
<p>'.tr('Nessun destinatario collegato alla lista').'.</p>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Referente;
|
||||
use Modules\Anagrafiche\Sede;
|
||||
use Modules\Emails\Mail;
|
||||
use Modules\Emails\Template;
|
||||
use Modules\Newsletter\Lista;
|
||||
use Modules\Newsletter\Newsletter;
|
||||
|
@ -66,7 +70,7 @@ switch (filter('op')) {
|
|||
continue;
|
||||
}
|
||||
|
||||
$mail = \Modules\Emails\Mail::build($user, $template, $anagrafica->id);
|
||||
$mail = Mail::build($user, $template, $anagrafica->id);
|
||||
|
||||
$mail->addReceiver($anagrafica['email']);
|
||||
$mail->subject = $newsletter->subject;
|
||||
|
@ -109,17 +113,54 @@ switch (filter('op')) {
|
|||
break;
|
||||
|
||||
case 'add_receivers':
|
||||
$receivers = post('receivers');
|
||||
$destinatari = [];
|
||||
|
||||
// Selezione manuale
|
||||
$id_receivers = post('receivers');
|
||||
foreach ($id_receivers as $id_receiver) {
|
||||
list($tipo, $id) = explode('_', $id_receiver);
|
||||
if ($tipo == 'anagrafica') {
|
||||
$type = Anagrafica::class;
|
||||
} elseif ($tipo == 'sede') {
|
||||
$type = Sede::class;
|
||||
} else {
|
||||
$type = Referente::class;
|
||||
}
|
||||
|
||||
$destinatari[] = [
|
||||
'record_type' => $type,
|
||||
'record_id' => $id,
|
||||
];
|
||||
}
|
||||
|
||||
// Selezione da lista newsletter
|
||||
$id_list = post('id_list');
|
||||
if (!empty($id_list)) {
|
||||
$list = Lista::find($id_list);
|
||||
$receivers = $list->anagrafiche->pluck('idanagrafica');
|
||||
$receivers = $list->getDestinatari();
|
||||
$receivers = $receivers->map(function ($item, $key) {
|
||||
return [
|
||||
'record_type' => get_class($item),
|
||||
'record_id' => $item->id,
|
||||
];
|
||||
});
|
||||
|
||||
$destinatari = $receivers->toArray();
|
||||
}
|
||||
|
||||
$newsletter->anagrafiche()->syncWithoutDetaching($receivers);
|
||||
// Aggiornamento destinatari
|
||||
foreach ($destinatari as $destinatario) {
|
||||
$data = array_merge($destinatario, [
|
||||
'id_newsletter' => $newsletter->id,
|
||||
]);
|
||||
|
||||
//Controllo indirizzo e-mail aggiunto
|
||||
$registrato = $database->select('em_newsletter_receiver', '*', $data);
|
||||
if (empty($registrato)) {
|
||||
$database->insert('em_newsletter_receiver', $data);
|
||||
}
|
||||
}
|
||||
|
||||
// Controllo indirizzo e-mail aggiunto
|
||||
foreach ($newsletter->anagrafiche as $anagrafica) {
|
||||
if (!empty($anagrafica['email'])) {
|
||||
$check = Validate::isValidEmail($anagrafica['email']);
|
||||
|
@ -153,22 +194,23 @@ switch (filter('op')) {
|
|||
break;
|
||||
|
||||
case 'remove_receiver':
|
||||
$receiver = post('id');
|
||||
$receiver_id = post('id');
|
||||
$receiver_type = post('type');
|
||||
|
||||
$newsletter->anagrafiche()->detach($receiver);
|
||||
$database->delete('em_newsletter_receiver', [
|
||||
'record_type' => $receiver_type,
|
||||
'record_id' => $receiver_id,
|
||||
'id_newsletter' => $newsletter->id,
|
||||
]);
|
||||
|
||||
flash()->info(tr('Destinatario rimosso dalla newsletter!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'remove_all_receiver':
|
||||
//$receiver = post('id');
|
||||
|
||||
$anagrafiche = $newsletter->anagrafiche;
|
||||
|
||||
foreach ($anagrafiche as $anagrafica) {
|
||||
$newsletter->anagrafiche()->detach($anagrafica->id);
|
||||
}
|
||||
case 'remove_all_receivers':
|
||||
$database->delete('em_newsletter_receiver', [
|
||||
'id_newsletter' => $newsletter->id,
|
||||
]);
|
||||
|
||||
flash()->info(tr('Tutti i destinatari sono stati rimossi dalla newsletter!'));
|
||||
|
||||
|
|
|
@ -20,53 +20,66 @@
|
|||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
switch ($resource) {
|
||||
case 'anagrafiche_newsletter':
|
||||
$query = "SELECT an_anagrafiche.idanagrafica AS id, CONCAT(ragione_sociale, IF(citta != '' OR provincia != '', CONCAT(' (', citta, IF(provincia != '', provincia, ''), ')'), ''), ' [', email, ']') AS descrizione, `an_tipianagrafiche`.`descrizione` AS optgroup FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica |where| ORDER BY `optgroup` ASC, ragione_sociale ASC";
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'an_anagrafiche.idanagrafica='.prepare($element);
|
||||
}
|
||||
|
||||
if (empty($filter)) {
|
||||
$where[] = 'deleted_at IS NULL';
|
||||
$where[] = 'enable_newsletter = 1';
|
||||
}
|
||||
|
||||
case 'destinatari_newsletter':
|
||||
// Gestione campi di ricerca
|
||||
if (!empty($search)) {
|
||||
$search_fields[] = 'ragione_sociale LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = '|nome| LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = 'citta LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = 'provincia LIKE '.prepare('%'.$search.'%');
|
||||
$search_fields[] = 'email LIKE '.prepare('%'.$search.'%');
|
||||
}
|
||||
|
||||
// Aggiunta filtri di ricerca
|
||||
if (!empty($search_fields)) {
|
||||
$where[] = '('.implode(' OR ', $search_fields).')';
|
||||
}
|
||||
$where = empty($search_fields) ? '1=1' : '('.implode(' OR ', $search_fields).')';
|
||||
|
||||
if (!empty($filter)) {
|
||||
$where[] = '('.implode(' OR ', $filter).')';
|
||||
}
|
||||
$destinatari = collect();
|
||||
|
||||
$query = str_replace('|where|', !empty($where) ? 'WHERE '.implode(' AND ', $where) : '', $query);
|
||||
// Gestione anagrafiche come destinatari
|
||||
$query = "SELECT CONCAT('anagrafica_', an_anagrafiche.idanagrafica) AS id,
|
||||
CONCAT(an_anagrafiche.ragione_sociale, IF(an_anagrafiche.citta != '' OR an_anagrafiche.provincia != '', CONCAT(' (', an_anagrafiche.citta, IF(an_anagrafiche.provincia != '', an_anagrafiche.provincia, ''), ')'), ''), ' [', email, ']') AS text,
|
||||
`an_tipianagrafiche`.`descrizione` AS optgroup
|
||||
FROM an_anagrafiche
|
||||
INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica
|
||||
INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica
|
||||
WHERE an_anagrafiche.deleted_at IS NULL AND an_anagrafiche.enable_newsletter = 1 AND 1=1
|
||||
ORDER BY `optgroup` ASC, ragione_sociale ASC";
|
||||
|
||||
$rs = $dbo->fetchArray($query);
|
||||
foreach ($rs as $r) {
|
||||
if ($prev != $r['optgroup']) {
|
||||
$results[] = ['text' => $r['optgroup'], 'children' => []];
|
||||
$prev = $r['optgroup'];
|
||||
}
|
||||
$query = str_replace('1=1', !empty($where) ? replace($where, ['|nome|' => 'ragione_sociale']) : '', $query);
|
||||
$anagrafiche = $database->fetchArray($query);
|
||||
$destinatari = $destinatari->concat($anagrafiche);
|
||||
|
||||
// Gestione sedi come destinatari
|
||||
$query = "SELECT CONCAT('sede_', an_sedi.id) AS id,
|
||||
CONCAT(an_anagrafiche.ragione_sociale, ' (', an_sedi.nomesede, IF(an_sedi.citta != '' OR an_sedi.provincia != '', CONCAT(' :', an_sedi.citta, IF(an_sedi.provincia != '', an_sedi.provincia, ''), ''), ''), ')', ' [', an_sedi.email, ']') AS text,
|
||||
'Sedi' AS optgroup
|
||||
FROM an_sedi
|
||||
INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = an_sedi.idanagrafica
|
||||
WHERE an_anagrafiche.deleted_at IS NULL AND an_anagrafiche.enable_newsletter = 1 AND 1=1
|
||||
ORDER BY `optgroup` ASC, ragione_sociale ASC";
|
||||
|
||||
$query = str_replace('1=1', !empty($where) ? replace($where, ['|nome|' => 'nomesede LIKE '.prepare('%'.$search.'%').' AND ragione_sociale']) : '', $query);
|
||||
$sedi = $database->fetchArray($query);
|
||||
$destinatari = $destinatari->concat($sedi);
|
||||
|
||||
// Gestione referenti come destinatari
|
||||
$query = "SELECT CONCAT('referente_', an_referenti.id) AS id,
|
||||
CONCAT(an_anagrafiche.ragione_sociale, ' (', an_referenti.nome, ') [', an_referenti.email, ']') AS text,
|
||||
'Referenti' AS optgroup
|
||||
FROM an_referenti
|
||||
INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = an_referenti.idanagrafica
|
||||
WHERE an_anagrafiche.deleted_at IS NULL AND an_anagrafiche.enable_newsletter = 1 AND 1=1
|
||||
ORDER BY `optgroup` ASC, ragione_sociale ASC";
|
||||
|
||||
$query = str_replace('1=1', !empty($where) ? replace($where, ['|nome|' => 'nomesede LIKE '.prepare('%'.$search.'%').' AND ragione_sociale']) : '', $query);
|
||||
$referenti = $database->fetchArray($query);
|
||||
$destinatari = $destinatari->concat($referenti);
|
||||
|
||||
$results = $destinatari->toArray();
|
||||
|
||||
$results[count($results) - 1]['children'][] = [
|
||||
'id' => $r['id'],
|
||||
'text' => $r['descrizione'],
|
||||
'descrizione' => $r['descrizione'],
|
||||
];
|
||||
}
|
||||
break;
|
||||
|
||||
case 'liste_newsletter':
|
||||
$query = "SELECT id, CONCAT(name, ' (', (SELECT COUNT(*) FROM em_list_anagrafica WHERE em_lists.id = em_list_anagrafica.id_list), ' destinatari)') AS descrizione FROM em_lists |where| ORDER BY `name` ASC";
|
||||
$query = "SELECT id, CONCAT(name, ' (', (SELECT COUNT(*) FROM em_list_receiver WHERE em_lists.id = em_list_receiver.id_list), ' destinatari)') AS descrizione FROM em_lists |where| ORDER BY `name` ASC";
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'id='.prepare($element);
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Referente;
|
||||
use Modules\Anagrafiche\Sede;
|
||||
use Modules\Emails\Mail;
|
||||
use Modules\Emails\Template;
|
||||
|
||||
|
@ -25,7 +28,7 @@ include_once __DIR__.'/../../core.php';
|
|||
//Controllo se il template è ancora attivo
|
||||
if (empty($template)) {
|
||||
echo '
|
||||
<div class=" alert alert-danger">'.tr('ATTENZIONE! Questa newsletter risulta collegata ad un template non più presente a sistema').'</div>';
|
||||
<div class="alert alert-danger">'.tr('ATTENZIONE! Questa newsletter risulta collegata ad un template non più presente a sistema').'</div>';
|
||||
}
|
||||
|
||||
$block_edit = $newsletter->state != 'DEV';
|
||||
|
@ -107,7 +110,7 @@ echo '
|
|||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Destinatari').'", "name": "receivers[]", "ajax-source": "anagrafiche_newsletter", "multiple": 1 ]}
|
||||
{[ "type": "select", "label": "'.tr('Destinatari').'", "name": "receivers[]", "ajax-source": "destinatari_newsletter", "multiple": 1 ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
@ -145,7 +148,7 @@ $(document).ready(function() {
|
|||
})
|
||||
</script>';
|
||||
|
||||
$anagrafiche = $newsletter->anagrafiche;
|
||||
$destinatari = $newsletter->getDestinatari();
|
||||
|
||||
echo '
|
||||
<!-- Destinatari -->
|
||||
|
@ -153,15 +156,16 @@ echo '
|
|||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
'.tr('Destinatari').'
|
||||
<span> ('.$anagrafiche->count().')</span> <div class="pull-right" >
|
||||
'.(($anagrafiche->where('email', '')->count() > 0) ? ' <span title="'.tr('Indirizzi e-mail mancanti').'" class="tip label label-danger clickable">'.$anagrafiche->where('email', '')->count().'</span>' : '')
|
||||
.(($anagrafiche->where('enable_newsletter', false)->count() > 0) ? ' <span title="'.tr('Indirizzi e-mail senza consenso per newsletter').'" class="tip label label-warning clickable">'.$anagrafiche->where('enable_newsletter', false)->count().'</span>' : '').'</div>
|
||||
<span> ('.$destinatari->count().')</span> <div class="pull-right" >
|
||||
'.(($destinatari->where('email', '')->count() > 0) ? ' <span title="'.tr('Indirizzi e-mail mancanti').'" class="tip label label-danger clickable">'.$destinatari->where('email', '')->count().'</span>' : '')
|
||||
.'<span title="'.tr('Indirizzi e-mail senza consenso per newsletter').'" class="tip label label-warning clickable" id="numero_consenso_disabilitato"></span></div>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body" style="max-height:700px;overflow-y:auto;">';
|
||||
|
||||
if (!$anagrafiche->isEmpty()) {
|
||||
$senza_consenso = 0;
|
||||
if (!$destinatari->isEmpty()) {
|
||||
echo '
|
||||
<table class="table table-hover table-condensed table-bordered">
|
||||
<thead>
|
||||
|
@ -178,30 +182,50 @@ if (!$anagrafiche->isEmpty()) {
|
|||
|
||||
<tbody>';
|
||||
|
||||
foreach ($anagrafiche as $anagrafica) {
|
||||
$mail_id = $anagrafica->pivot->id_email;
|
||||
$senza_consenso = 0;
|
||||
foreach ($destinatari as $destinatario) {
|
||||
$anagrafica = $destinatario instanceof Anagrafica ? $destinatario : $destinatario->anagrafica;
|
||||
$descrizione = $anagrafica->ragione_sociale;
|
||||
|
||||
if ($destinatario instanceof Sede) {
|
||||
$descrizione .= ' ['.$destinatario->nomesede.']';
|
||||
} elseif ($destinatario instanceof Referente) {
|
||||
$descrizione .= ' ['.$destinatario->nome.']';
|
||||
}
|
||||
|
||||
if (empty($anagrafica->enable_newsletter)){
|
||||
$senza_consenso ++;
|
||||
}
|
||||
|
||||
$mail_id = $destinatario->pivot->id_email;
|
||||
$mail = Mail::find($mail_id);
|
||||
if (!empty($mail) && !empty($mail->sent_at)) {
|
||||
$data = '<span class="fa fa-paper-plane text-success" > '.timestampFormat($mail->sent_at).'</span>';
|
||||
$data = '
|
||||
|
||||
<span class="text-success">
|
||||
<i class="fa fa-paper-plane"></i> '.timestampFormat($mail->sent_at).'
|
||||
</span>';
|
||||
} else {
|
||||
$data = '<span class="fa fa-clock-o text-info" >
|
||||
'.tr('Non ancora inviata').'</span>';
|
||||
$data = '
|
||||
<span class="text-info">
|
||||
<i class="fa fa-clock-o"></i> '.tr('Non ancora inviata').'
|
||||
</span>';
|
||||
}
|
||||
|
||||
echo '
|
||||
<tr '.(empty($anagrafica->email) ? 'class="bg-danger"' : (empty($anagrafica->enable_newsletter) ? 'class="bg-warning"' : '')).'>
|
||||
<td>'.Modules::link('Anagrafiche', $anagrafica->id, $anagrafica->ragione_sociale).'</td>
|
||||
<tr '.(empty($destinatario->email) ? 'class="bg-danger"' : (empty($anagrafica->enable_newsletter) ? 'class="bg-warning"' : '')).'>
|
||||
<td>'.Modules::link('Anagrafiche', $anagrafica->id, $descrizione).'</td>
|
||||
<td class="text-left">'.$database->fetchOne('SELECT GROUP_CONCAT(an_tipianagrafiche.descrizione) AS descrizione FROM an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica = an_tipianagrafiche.idtipoanagrafica WHERE an_tipianagrafiche_anagrafiche.idanagrafica='.prepare($anagrafica->id))['descrizione'].'</td>
|
||||
<td class="text-left">'.$anagrafica->tipo.'</td>
|
||||
<td class="text-left">
|
||||
'.((!empty($anagrafica->email) ? '
|
||||
{[ "type": "text", "name": "email", "id": "email_'.rand(0, 99999).'", "readonly": "1", "class": "email-mask", "value": "'.$anagrafica->email.'", "validation": "email" ]}' : '<span class="fa fa-close text-danger"> '.tr('Indirizzo e-mail mancante').'</span>')).'</td>
|
||||
'.((!empty($destinatario->email) ? '
|
||||
{[ "type": "text", "name": "email", "id": "email_'.rand(0, 99999).'", "readonly": "1", "class": "email-mask", "value": "'.$destinatario->email.'", "validation": "email" ]}' : '<span class="text-danger"><i class="fa fa-close"></i> '.tr('Indirizzo e-mail mancante').'</span>')).'</td>
|
||||
<td class="text-center">'.$data.'</td>
|
||||
<td class="text-left">
|
||||
'.((!empty($anagrafica->enable_newsletter)) ? '<span class="fa fa-check text-success"> '.tr('Abilitato').'</span>' : '<span class="fa fa-exclamation-triangle text-warning"> '.tr('Disabilitato').'</span>').'
|
||||
'.((!empty($anagrafica->enable_newsletter)) ? '<span class="text-success"><i class="fa fa-check"></i> '.tr('Abilitato').'</span>' : '<span class="text-warning"><i class="fa fa-exclamation-triangle"></i> '.tr('Disabilitato').'</span>').'
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a class="btn btn-danger ask btn-xs" data-backto="record-edit" data-op="remove_receiver" data-id="'.$anagrafica->id.'">
|
||||
<a class="btn btn-danger ask btn-xs" data-backto="record-edit" data-op="remove_receiver" data-type="'.get_class($destinatario).'" data-id="'.$destinatario->id.'">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</td>
|
||||
|
@ -211,14 +235,15 @@ if (!$anagrafiche->isEmpty()) {
|
|||
echo '
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a class="btn btn-danger ask pull-right" data-backto="record-edit" data-op="remove_all_receiver">
|
||||
<i class="fa fa-trash"> Elimina tutti</i>
|
||||
</a>
|
||||
|
||||
';
|
||||
|
||||
<a class="btn btn-danger ask pull-right" data-backto="record-edit" data-op="remove_all_receivers">
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina tutti').'
|
||||
</a>';
|
||||
} else {
|
||||
echo '<div class="alert alert-info fa fa-info-circle"> '.tr('Nessuna anagrafica collegata alla campagna').'.</div>';
|
||||
echo '
|
||||
<div class="alert alert-info">
|
||||
<i class="fa fa-info-circle"></i> '.tr('Nessuna anagrafica collegata alla campagna').'.
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -237,6 +262,23 @@ if ($block_edit) {
|
|||
$(document).ready(function() {
|
||||
$("#receivers").parent().hide();
|
||||
$("#receivers-form .btn").hide();
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
else {
|
||||
echo '
|
||||
<script>
|
||||
globals.newsletter = {
|
||||
senza_consenso: "'.$senza_consenso.'",
|
||||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
const senza_consenso = $("#numero_consenso_disabilitato");
|
||||
if (globals.newsletter.senza_consenso > 0) {
|
||||
senza_consenso.text(globals.newsletter.senza_consenso);
|
||||
} else {
|
||||
senza_consenso.hide();
|
||||
}
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@ use Common\SimpleModelTrait;
|
|||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Referente;
|
||||
use Modules\Anagrafiche\Sede;
|
||||
use Traits\RecordTrait;
|
||||
|
||||
class Lista extends Model
|
||||
|
@ -49,10 +51,48 @@ class Lista extends Model
|
|||
|
||||
$query = $this->query;
|
||||
if (!empty($query)) {
|
||||
$results = database()->fetchArray($query);
|
||||
$database = database();
|
||||
|
||||
$anagrafiche = array_column($results, 'id');
|
||||
$this->anagrafiche()->sync($anagrafiche);
|
||||
// Rimozione record precedenti
|
||||
$database->delete('em_list_receiver', [
|
||||
'id_list' => $this->id,
|
||||
]);
|
||||
|
||||
// Ricerca nuovi record
|
||||
$results = $database->fetchArray($query);
|
||||
$gruppi = collect($results)
|
||||
->groupBy('tipo');
|
||||
|
||||
// Preparazione al salvataggio
|
||||
$destinatari = [];
|
||||
foreach ($gruppi as $tipo => $gruppo) {
|
||||
if ($tipo == 'anagrafica') {
|
||||
$type = Anagrafica::class;
|
||||
} elseif ($tipo == 'sede') {
|
||||
$type = Sede::class;
|
||||
} else {
|
||||
$type = Referente::class;
|
||||
}
|
||||
|
||||
foreach ($gruppo as $record) {
|
||||
$destinatari[] = [
|
||||
'record_type' => $type,
|
||||
'record_id' => $record['id'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento destinatari
|
||||
foreach ($destinatari as $destinatario) {
|
||||
$data = array_merge($destinatario, [
|
||||
'id_list' => $this->id,
|
||||
]);
|
||||
|
||||
$registrato = $database->select('em_list_receiver', '*', $data);
|
||||
if (empty($registrato)) {
|
||||
$database->insert('em_list_receiver', $data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
|
@ -60,9 +100,33 @@ class Lista extends Model
|
|||
|
||||
// Relazione Eloquent
|
||||
|
||||
public function getDestinatari()
|
||||
{
|
||||
return $this->anagrafiche
|
||||
->concat($this->sedi)
|
||||
->concat($this->referenti);
|
||||
}
|
||||
|
||||
public function anagrafiche()
|
||||
{
|
||||
return $this->belongsToMany(Anagrafica::class, 'em_list_anagrafica', 'id_list', 'id_anagrafica')->withTrashed();
|
||||
return $this
|
||||
->belongsToMany(Anagrafica::class, 'em_list_receiver', 'id_list', 'record_id')
|
||||
->where('record_type', '=', Anagrafica::class)
|
||||
->withTrashed();
|
||||
}
|
||||
|
||||
public function sedi()
|
||||
{
|
||||
return $this
|
||||
->belongsToMany(Sede::class, 'em_list_receiver', 'id_list', 'record_id')
|
||||
->where('record_type', '=', Sede::class);
|
||||
}
|
||||
|
||||
public function referenti()
|
||||
{
|
||||
return $this
|
||||
->belongsToMany(Referente::class, 'em_list_receiver', 'id_list', 'record_id')
|
||||
->where('record_type', '=', Referente::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,6 +24,8 @@ use Illuminate\Database\Eloquent\Model;
|
|||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Models\User;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Referente;
|
||||
use Modules\Anagrafiche\Sede;
|
||||
use Modules\Emails\Account;
|
||||
use Modules\Emails\Mail;
|
||||
use Modules\Emails\Template;
|
||||
|
@ -84,14 +86,43 @@ class Newsletter extends Model
|
|||
|
||||
// Relazione Eloquent
|
||||
|
||||
public function getDestinatari()
|
||||
{
|
||||
return $this->anagrafiche
|
||||
->concat($this->sedi)
|
||||
->concat($this->referenti);
|
||||
}
|
||||
|
||||
public function anagrafiche()
|
||||
{
|
||||
return $this->belongsToMany(Anagrafica::class, 'em_newsletter_anagrafica', 'id_newsletter', 'id_anagrafica')->orderByRaw('IF(email=\'\',email,enable_newsletter) ASC')->orderBy('ragione_sociale', 'ASC')->withPivot('id_email')->withTrashed();
|
||||
return $this
|
||||
->belongsToMany(Anagrafica::class, 'em_newsletter_receiver', 'id_newsletter', 'record_id')
|
||||
->where('record_type', '=', Anagrafica::class)
|
||||
->withPivot('id_email')
|
||||
->orderByRaw('IF(email=\'\',email,enable_newsletter) ASC')
|
||||
->orderBy('ragione_sociale', 'ASC')
|
||||
->withTrashed();
|
||||
}
|
||||
|
||||
public function sedi()
|
||||
{
|
||||
return $this
|
||||
->belongsToMany(Sede::class, 'em_newsletter_receiver', 'id_newsletter', 'record_id')
|
||||
->where('record_type', '=', Sede::class)
|
||||
->withPivot('id_email');
|
||||
}
|
||||
|
||||
public function referenti()
|
||||
{
|
||||
return $this
|
||||
->belongsToMany(Referente::class, 'em_newsletter_receiver', 'id_newsletter', 'record_id')
|
||||
->where('record_type', '=', Referente::class)
|
||||
->withPivot('id_email');
|
||||
}
|
||||
|
||||
public function emails()
|
||||
{
|
||||
return $this->belongsToMany(Mail::class, 'em_newsletter_anagrafica', 'id_newsletter', 'id_email')->withPivot('id_anagrafica');
|
||||
return $this->belongsToMany(Mail::class, 'em_newsletter_receiver', 'id_newsletter', 'id_email')->withPivot('id_anagrafica');
|
||||
}
|
||||
|
||||
public function account()
|
||||
|
|
|
@ -17,8 +17,6 @@
|
|||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Models\Plugin;
|
||||
use Plugins\ListinoClienti\DettaglioPrezzo;
|
||||
use Plugins\ListinoFornitori\DettaglioFornitore;
|
||||
|
||||
|
|
|
@ -185,8 +185,10 @@ class Prints
|
|||
|
||||
if (self::isOldStandard($print)) {
|
||||
return self::oldLoader($infos['id'], $id_record, $directory, $return_string);
|
||||
} else {
|
||||
} elseif (!self::isCompletelyCustom($print)) {
|
||||
return self::loader($infos['id'], $id_record, $directory, $return_string);
|
||||
} else {
|
||||
return self::customLoader($infos['id'], $id_record, $directory, $return_string);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -327,7 +329,21 @@ class Prints
|
|||
*/
|
||||
protected static function isNewStandard($print)
|
||||
{
|
||||
return !self::isOldStandard($print);
|
||||
return !self::isOldStandard($print) && !self::isCompletelyCustom($print);
|
||||
}
|
||||
|
||||
/**
|
||||
* Controlla se la stampa segue lo standard completamente autonomo.
|
||||
*
|
||||
* @param string|int $print
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected static function isCompletelyCustom($print)
|
||||
{
|
||||
$infos = self::get($print);
|
||||
|
||||
return file_exists($infos['full_directory'].'/stampa.php') || file_exists($infos['full_directory'].'/custom/stampa.php');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -647,4 +663,36 @@ class Prints
|
|||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gestore per il formato di stampa completamente gestito dalla stampa stessa.
|
||||
* Rischiede la compilazione della variabile $file, utilizzata coe return.
|
||||
*
|
||||
* @param $id_print
|
||||
* @param $id_record
|
||||
* @param null $directory
|
||||
* @param false $return_string
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected static function customLoader($id_print, $id_record, $directory = null, $return_string = false)
|
||||
{
|
||||
$infos = self::get($id_print);
|
||||
$options = self::readOptions($infos['options']);
|
||||
|
||||
$dbo = $database = database();
|
||||
$user = Auth::user();
|
||||
|
||||
$file = null;
|
||||
|
||||
// Decido se usare la stampa personalizzata (se esiste) oppure quella standard
|
||||
// La stampa personalizzata deve gestire tutto manualmente
|
||||
if (file_exists($infos['full_directory'].'/custom/stampa.php')) {
|
||||
include $infos['full_directory'].'/custom/stampa.php';
|
||||
} else {
|
||||
include $infos['full_directory'].'/stampa.php';
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,2 +1,24 @@
|
|||
-- Aggiornato widget Contratti in scadenza (sostituito fatturabile con pianificabile)
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(dati.id) AS dato FROM(SELECT id, ((SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.is_completato = 1)), 0) ) AS ore_rimanenti, DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti, data_conclusione, ore_preavviso_rinnovo, giorni_preavviso_rinnovo, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE idstato IN (SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) AND rinnovabile = 1 AND YEAR(data_conclusione) > 1970 AND (SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev = co_contratti.id) IS NULL HAVING (ore_rimanenti < ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) < ABS(giorni_preavviso_rinnovo)) ORDER BY giorni_rimanenti ASC, ore_rimanenti ASC) dati' WHERE `zz_widgets`.`name` = 'Contratti in scadenza';
|
||||
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(dati.id) AS dato FROM(SELECT id, ((SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.is_completato = 1)), 0) ) AS ore_rimanenti, DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti, data_conclusione, ore_preavviso_rinnovo, giorni_preavviso_rinnovo, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE idstato IN (SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) AND rinnovabile = 1 AND YEAR(data_conclusione) > 1970 AND (SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev = co_contratti.id) IS NULL HAVING (ore_rimanenti < ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) < ABS(giorni_preavviso_rinnovo)) ORDER BY giorni_rimanenti ASC, ore_rimanenti ASC) dati' WHERE `zz_widgets`.`name` = 'Contratti in scadenza';
|
||||
|
||||
-- Aggiunto numero di email da inviare in contemporanea
|
||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES
|
||||
(NULL, 'Numero email da inviare in contemporanea per account', '10', 'integer', 1, 'Newsletter', 2, 'Numero di email della Coda di invio da inviare in contemporanea per account email');
|
||||
|
||||
-- Aggiornamento gestione destinatari per newsletter e liste relative
|
||||
ALTER TABLE `em_newsletter_anagrafica` DROP FOREIGN KEY `em_newsletter_anagrafica_ibfk_2`;
|
||||
ALTER TABLE `em_newsletter_anagrafica`
|
||||
ADD `record_type` VARCHAR(255) NOT NULL BEFORE `id_anagrafica`, CHANGE `id_anagrafica` `record_id` INT(11) NOT NULL;
|
||||
UPDATE `em_newsletter_anagrafica`
|
||||
SET `record_type` ='Modules\\Anagrafiche\\Anagrafica';
|
||||
|
||||
ALTER TABLE `em_list_anagrafica` DROP FOREIGN KEY `em_list_anagrafica_ibfk_2`;
|
||||
ALTER TABLE `em_list_anagrafica`
|
||||
ADD `record_type` VARCHAR(255) NOT NULL BEFORE `id_anagrafica`, CHANGE `id_anagrafica` `record_id` INT(11) NOT NULL;
|
||||
UPDATE `em_list_anagrafica`
|
||||
SET `record_type` ='Modules\\Anagrafiche\\Anagrafica';
|
||||
|
||||
ALTER TABLE `em_list_anagrafica` RENAME TO `em_list_receiver`;
|
||||
ALTER TABLE `em_newsletter_anagrafica` RENAME TO `em_newsletter_receiver`;
|
||||
|
||||
UPDATE `zz_views` SET `query` = '(SELECT COUNT(*) FROM `em_newsletter_receiver` WHERE `em_newsletter_receiver`.`id_newsletter` = `em_newsletters`.`id`)' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE name='Newsletter') AND `name` = 'Destinatari';
|
||||
|
|
|
@ -55,12 +55,12 @@ return [
|
|||
'em_templates',
|
||||
'em_newsletters',
|
||||
'em_lists',
|
||||
'em_list_anagrafica',
|
||||
'em_list_receiver',
|
||||
'em_emails',
|
||||
'em_email_receiver',
|
||||
'em_email_upload',
|
||||
'em_email_print',
|
||||
'em_newsletter_anagrafica',
|
||||
'em_newsletter_receiver',
|
||||
'fe_causali_pagamento_ritenuta',
|
||||
'fe_modalita_pagamento',
|
||||
'fe_natura',
|
||||
|
|
Loading…
Reference in New Issue