Aggiunto test invio email per Newsletter

This commit is contained in:
Dasc3er 2021-09-23 10:04:44 +02:00
parent 66bd810f24
commit ae82b8b1c1
9 changed files with 146 additions and 52 deletions

View File

@ -40,7 +40,6 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
'dir' => 'entrata',
])['id'];
switch (post('op')) {
case 'crea_fattura':
$documenti = collect();

View File

@ -95,9 +95,9 @@ class EmailHook extends Manager
}
// Invio effettivo
foreach ($lista as $lista_account) {
foreach ($lista as $mail) {
try {
$email = EmailNotification::build($lista_account);
$email = EmailNotification::build($mail);
$email->send();
} catch (Exception $e) {
}

View File

@ -214,37 +214,37 @@ switch (post('op')) {
'id_tecnico' => $tecnici_assegnati,
]);
if(!empty(post('ricorsiva'))){
if (!empty(post('ricorsiva'))) {
$periodicita = post('periodicita');
$data = post('data_inizio_ricorrenza');
$interval = post('tipo_periodicita')!='manual' ? post('tipo_periodicita') : 'days';
$interval = post('tipo_periodicita') != 'manual' ? post('tipo_periodicita') : 'days';
$stato = Stato::find(post('idstatoricorrenze'));
// Estraggo le date delle ricorrenze
if (post('metodo_ricorrenza')=='data') {
if (post('metodo_ricorrenza') == 'data') {
$data_fine = post('data_fine_ricorrenza');
while(strtotime($data)<=strtotime($data_fine)){
while (strtotime($data) <= strtotime($data_fine)) {
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
$w = date('w', strtotime($data));
//Escludo sabato e domenica
if($w=='6'){
if ($w == '6') {
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
}else if($w=='0'){
} elseif ($w == '0') {
$data = date('Y-m-d', strtotime('+1 day', strtotime($data)));
}
if ($data<=$data_fine) {
if ($data <= $data_fine) {
$date_ricorrenze[] = $data;
}
}
} else {
$ricorrenze = post('numero_ricorrenze');
for($i=0; $i<$ricorrenze; $i++){
for ($i = 0; $i < $ricorrenze; ++$i) {
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
$w = date('w', strtotime($data));
//Escludo sabato e domenica
if($w=='6'){
if ($w == '6') {
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
}else if($w=='0'){
} elseif ($w == '0') {
$data = date('Y-m-d', strtotime('+1 day', strtotime($data)));
}
@ -252,7 +252,7 @@ switch (post('op')) {
}
}
foreach($date_ricorrenze as $data_ricorrenza){
foreach ($date_ricorrenze as $data_ricorrenza) {
$intervento = Intervento::find($id_record);
$new = $intervento->replicate();
// Calcolo il nuovo codice
@ -274,16 +274,16 @@ switch (post('op')) {
$diff = strtotime($sessione->orario_inizio) - strtotime($inizio_old);
$orario_inizio = date('Y-m-d H:i:s', (strtotime($sessione->orario_inizio) + $diff));
}
$diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio);
$orario_fine = date('Y-m-d H:i:s', (strtotime($orario_inizio) + $diff_fine));
$new_sessione = $sessione->replicate();
$new_sessione->idintervento = $new->id;
$new_sessione->orario_inizio = $orario_inizio;
$new_sessione->orario_fine = $orario_fine;
$new_sessione->save();
++$numero_sessione;
$inizio_old = $sessione->orario_inizio;
}
@ -297,11 +297,11 @@ switch (post('op')) {
'id_tecnico' => $tecnici_assegnati,
]);
$n_ricorrenze++;
++$n_ricorrenze;
}
flash()->info(tr('Aggiunte _NUM_ nuove ricorrenze!', [
'_NUM_' => $n_ricorrenze,
'_NUM_' => $n_ricorrenze,
]));
}

View File

@ -143,7 +143,6 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
$fattura = Fattura::find($id_fattura);
$intervento = Intervento::find($id_intervento);
$data = $intervento->fine;
$codice = $intervento->codice;

View File

@ -24,7 +24,8 @@ use Modules\Emails\Mail;
use Modules\Emails\Template;
use Modules\ListeNewsletter\Lista;
use Modules\Newsletter\Newsletter;
use Respect\Validation\Validator as v;
use Notifications\EmailNotification;
use PHPMailer\PHPMailer\Exception;
include_once __DIR__.'/../../core.php';
@ -61,42 +62,19 @@ switch (filter('op')) {
break;
case 'send':
$template = $newsletter->template;
$uploads = $newsletter->uploads()->pluck('id');
$newsletter = Newsletter::find($id_record);
$destinatari = $newsletter->destinatari();
$count = $destinatari->count();
for ($i = 0; $i < $count; ++$i) {
$destinatario = $destinatari->skip($i)->first();
$origine = $destinatario->getOrigine();
$anagrafica = $origine instanceof Anagrafica ? $origine : $origine->anagrafica;
$abilita_newsletter = $anagrafica->enable_newsletter;
$email = $destinatario->email;
if (empty($email) || empty($abilita_newsletter) || !v::email()->validate($email)) {
continue;
}
// Inizializzazione email
$mail = Mail::build($user, $template, $anagrafica->id);
// Completamento informazioni
$mail->addReceiver($email);
$mail->subject = $newsletter->subject;
$mail->content = $newsletter->content;
$mail->id_newsletter = $newsletter->id;
// Registrazione allegati
foreach ($uploads as $upload) {
$mail->addUpload($upload);
}
$mail->save();
$mail = $newsletter->inviaDestinatario($destinatario);
// Aggiornamento riferimento per la newsletter
$destinatario->id_email = $mail->id;
$destinatario->save();
if (!empty($mail)) {
$destinatario->id_email = $mail->id;
$destinatario->save();
}
}
// Aggiornamento stato newsletter
@ -107,6 +85,38 @@ switch (filter('op')) {
break;
case 'test':
$receiver_id = post('id');
$receiver_type = post('type');
// Individuazione destinatario interessato
$newsletter = Newsletter::find($id_record);
$destinatario = $newsletter->destinatari()
->where('record_type', '=', $receiver_type)
->where('record_id', '=', $receiver_id)
->first();
// Generazione email e tentativo di invio
$inviata = false;
if (!empty($destinatario)) {
$mail = $newsletter->inviaDestinatario($destinatario, true);
try {
$email = EmailNotification::build($mail, true);
$email->send();
$inviata = true;
} catch (Exception $e) {
// $mail->delete();
}
}
echo json_encode([
'result' => $inviata,
]);
break;
case 'block':
$mails = $newsletter->emails;

View File

@ -119,7 +119,10 @@ foreach ($destinatari_filtrati as $destinatario) {
'<span class="text-warning"><i class="fa fa-exclamation-triangle"></i> '.tr('Disabilitato').'</span>'
).'
</div>',
'<div class="text-center">
'<div class="text-center">'.(empty($lista) && !empty($origine->email) && !empty($anagrafica->enable_newsletter) ? '
<a class="btn btn-warning btn-xs" data-type="'.get_class($origine).'" data-id="'.$origine->id.'" data-email="'.$origine->email.'" onclick="testInvio(this)">
<i class="fa fa-paper-plane "></i>
</a>' : '').'
<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>

View File

@ -240,4 +240,47 @@ $(document).ready(function() {
}
});
});
function testInvio(button) {
const destinatario_id = $(button).data("id");
const destinatario_type = $(button).data("type");
const email = $(button).data("email");
swal({
title: "'.tr('Invio di test?').'",
html: `'.tr("Vuoi effettuare un invio di test all'indirizzo _EMAIL_?", ['_EMAIL_' => '${email}']).' '.tr("L'email non sarà registrata come inviata, e l'invio della newsletter non escluderà questo indirizzo").'.`,
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Invia').'",
confirmButtonClass: "btn btn-lg btn-success",
}).then(function() {
const restore = buttonLoading(button);
$.ajax({
url: globals.rootdir + "/actions.php",
type: "POST",
dataType: "JSON",
data: {
id_module: globals.id_module,
id_record: globals.id_record,
op: "test",
id: destinatario_id,
type: destinatario_type,
},
success: function (response) {
buttonRestore(button, restore);
if (response.result) {
swal("'.tr('Invio completato').'", "", "success");
} else {
swal("'.tr('Invio fallito').'", "", "error");
}
},
error: function() {
buttonRestore(button, restore);
swal("'.tr('Errore').'", "'.tr("Errore durante l'invio dell'email").'", "error");
}
});
});
}
</script>';

View File

@ -29,6 +29,7 @@ use Modules\Anagrafiche\Sede;
use Modules\Emails\Account;
use Modules\Emails\Mail;
use Modules\Emails\Template;
use Respect\Validation\Validator as v;
use Traits\RecordTrait;
class Newsletter extends Model
@ -132,6 +133,45 @@ class Newsletter extends Model
->where('record_type', '=', $tipo);
}
/**
* Metodo per inviare l'email della newsletter a uno specifico destinatario.
*
* @return Mail|null
*/
public function inviaDestinatario(Destinatario $destinatario, $test = false)
{
$template = $this->template;
$uploads = $this->uploads()->pluck('id');
$origine = $destinatario->getOrigine();
$anagrafica = $origine instanceof Anagrafica ? $origine : $origine->anagrafica;
$abilita_newsletter = $anagrafica->enable_newsletter;
$email = $destinatario->email;
if (empty($email) || empty($abilita_newsletter) || !v::email()->validate($email)) {
return null;
}
// Inizializzazione email
$mail = Mail::build(auth()->getUser(), $template, $anagrafica->id);
// Completamento informazioni
$mail->addReceiver($email);
$mail->subject = ($test ? '[Test] ' : '').$this->subject;
$mail->content = $this->content;
$mail->id_newsletter = $this->id;
// Registrazione allegati
foreach ($uploads as $upload) {
$mail->addUpload($upload);
}
$mail->save();
return $mail;
}
// Relazione Eloquent
public function destinatari()

View File

@ -44,7 +44,7 @@ switch (post('op')) {
case 'crea_fattura':
$documenti = collect();
$numero_totale = 0;
$tipo_documento = Tipo::where('id', post('idtipodocumento'))->first();
$stato_documenti_accodabili = Stato::where('descrizione', 'Bozza')->first();