mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-06-05 22:09:38 +02:00
Miglioramento gestione destinatari per Newsletter e Liste relative
This commit is contained in:
136
modules/newsletter/ajax/table.php
Normal file
136
modules/newsletter/ajax/table.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Referente;
|
||||
use Modules\Anagrafiche\Sede;
|
||||
use Modules\Emails\Mail;
|
||||
use Modules\ListeNewsletter\Lista;
|
||||
use Modules\Newsletter\Newsletter;
|
||||
|
||||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
$id_newsletter = filter('id_newsletter');
|
||||
$id_list = filter('id_list');
|
||||
|
||||
$newsletter = Newsletter::find($id_newsletter);
|
||||
$lista = Lista::find($id_list);
|
||||
$riferimento = $newsletter ?: $lista;
|
||||
|
||||
$search = filter('search') ? filter('search')['value'] : null;
|
||||
|
||||
// Utilizzo della risorsa destinatari_newsletter per gestire la ricerca
|
||||
if (!empty($search)) {
|
||||
$resource = 'destinatari_newsletter';
|
||||
include_once __DIR__.'/select.php';
|
||||
|
||||
$results = collect($results)->mapToGroups(function ($item, $key) {
|
||||
list($tipo, $id) = explode('_', $item['id']);
|
||||
|
||||
return [$tipo => $id];
|
||||
});
|
||||
|
||||
$destinatari = $riferimento->destinatari()
|
||||
->where(function ($query) use ($results) {
|
||||
$query->where('record_type', '=', Anagrafica::class)
|
||||
->whereIn('record_id', $results['anagrafica']);
|
||||
})
|
||||
->orWhere(function ($query) use ($results) {
|
||||
$query->where('record_type', '=', Sede::class)
|
||||
->whereIn('record_id', $results['sede']);
|
||||
})
|
||||
->orWhere(function ($query) use ($results) {
|
||||
$query->where('record_type', '=', Referente::class)
|
||||
->whereIn('record_id', $results['referente']);
|
||||
});
|
||||
}
|
||||
// Elenco di tutti i destinatari
|
||||
else {
|
||||
$destinatari = $riferimento->destinatari();
|
||||
}
|
||||
|
||||
$start = filter('start');
|
||||
$length = filter('length');
|
||||
|
||||
// Filtro dei record richiesti
|
||||
$destinatari_filtrati = (clone $destinatari)
|
||||
->skip($start)->take($length)
|
||||
->get();
|
||||
|
||||
$righe = [];
|
||||
foreach ($destinatari_filtrati as $destinatario) {
|
||||
$origine = $destinatario->getOrigine();
|
||||
|
||||
$anagrafica = $origine instanceof Anagrafica ? $origine : $origine->anagrafica;
|
||||
$descrizione = $anagrafica->ragione_sociale;
|
||||
|
||||
if ($origine instanceof Sede) {
|
||||
$descrizione .= ' ['.$origine->nomesede.']';
|
||||
} elseif ($origine instanceof Referente) {
|
||||
$descrizione .= ' ['.$origine->nome.']';
|
||||
}
|
||||
|
||||
$tipo_anagrafica = $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'];
|
||||
|
||||
$riga = [
|
||||
Modules::link('Anagrafiche', $anagrafica->id, $descrizione),
|
||||
$tipo_anagrafica,
|
||||
$anagrafica->tipo,
|
||||
'<div class="text-center">'.
|
||||
(!empty($origine->email) ?
|
||||
input([
|
||||
'type' => 'text',
|
||||
'name' => 'email',
|
||||
'id' => 'email_'.rand(0, 99999),
|
||||
'readonly' => '1',
|
||||
'class' => 'email-mask',
|
||||
'value' => $origine->email,
|
||||
'validation' => 'email',
|
||||
]) :
|
||||
'<span class="text-danger"><i class="fa fa-close"></i> '.tr('Indirizzo e-mail mancante').'</span>'
|
||||
).'
|
||||
</div>',
|
||||
];
|
||||
|
||||
// Informazioni di invio
|
||||
if (empty($lista)) {
|
||||
$mail_id = $origine->pivot->id_email;
|
||||
$mail = Mail::find($mail_id);
|
||||
if (!empty($mail) && !empty($mail->sent_at)) {
|
||||
$info_invio = '
|
||||
<span class="text-success">
|
||||
<i class="fa fa-paper-plane"></i> '.timestampFormat($mail->sent_at).'
|
||||
</span>';
|
||||
} else {
|
||||
$info_invio = '
|
||||
<span class="text-info">
|
||||
<i class="fa fa-clock-o"></i> '.tr('Non ancora inviata').'
|
||||
</span>';
|
||||
}
|
||||
|
||||
$riga[] = '<div class="text-center">'.$info_invio.'</div>';
|
||||
}
|
||||
|
||||
$riga = array_merge($riga, [
|
||||
'<div class="text-center">'.
|
||||
(!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>'
|
||||
).'
|
||||
</div>',
|
||||
'<div class="text-center">
|
||||
<a class="btn btn-danger ask btn-xs" data-backto="record-edit" data-op="remove_receiver" data-type="'.get_class($origine).'" data-id="'.$origine->id.'">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</div>',
|
||||
]);
|
||||
|
||||
$righe[] = $riga;
|
||||
}
|
||||
|
||||
// Formattazione dei dati
|
||||
echo json_encode([
|
||||
'data' => $righe,
|
||||
'recordsTotal' => $riferimento->destinatari()->count(),
|
||||
'recordsFiltered' => $destinatari->count(),
|
||||
'draw' => intval(filter('draw')),
|
||||
]);
|
Reference in New Issue
Block a user