Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
87516087d9
|
@ -40,7 +40,6 @@ $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [
|
|||
'dir' => 'entrata',
|
||||
])['id'];
|
||||
|
||||
|
||||
switch (post('op')) {
|
||||
case 'crea_fattura':
|
||||
$documenti = collect();
|
||||
|
|
|
@ -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) {
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
@ -297,7 +297,7 @@ switch (post('op')) {
|
|||
'id_tecnico' => $tecnici_assegnati,
|
||||
]);
|
||||
|
||||
$n_ricorrenze++;
|
||||
++$n_ricorrenze;
|
||||
}
|
||||
|
||||
flash()->info(tr('Aggiunte _NUM_ nuove ricorrenze!', [
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,43 +62,20 @@ 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
|
||||
if (!empty($mail)) {
|
||||
$destinatario->id_email = $mail->id;
|
||||
$destinatario->save();
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento stato newsletter
|
||||
$newsletter->state = 'WAIT';
|
||||
|
@ -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;
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>';
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -18,19 +18,36 @@
|
|||
*/
|
||||
|
||||
use Carbon\CarbonInterval;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Banche\Banca;
|
||||
use Modules\Pagamenti\Pagamento;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$anagrafica = Anagrafica::find($documento['idanagrafica']);
|
||||
$pagamento = $dbo->fetchOne('SELECT * FROM co_pagamenti WHERE id = '.prepare($documento['idpagamento']));
|
||||
$anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita'));
|
||||
|
||||
// Verifico se c'è una banca predefinita per il mio cliente
|
||||
if (!empty($anagrafica->idbanca_vendite)) {
|
||||
$banca = $dbo->fetchOne('SELECT co_banche.nome, co_banche.iban, co_banche.bic FROM co_banche WHERE co_banche.id_pianodeiconti3 = '.prepare($pagamento['idconto_vendite']).' AND co_banche.id_anagrafica = '.prepare($anagrafica->id).' AND co_banche.id ='.prepare($anagrafica->idbanca_vendite));
|
||||
} elseif (!empty($pagamento['idconto_vendite'])) {
|
||||
// Altrimenti prendo quella associata la metodo di pagamento selezionato
|
||||
$banca = $dbo->fetchOne('SELECT co_banche.nome, co_banche.iban, co_banche.bic FROM co_banche WHERE co_banche.id_pianodeiconti3 = '.prepare($pagamento['idconto_vendite']).' AND co_banche.id_anagrafica = '.prepare($anagrafica->id).' AND co_banche.deleted_at IS NULL');
|
||||
$pagamento = Pagamento::find($documento['idpagamento']);
|
||||
|
||||
// Banca dell'Azienda corrente impostata come predefinita per il Cliente
|
||||
$banca_azienda = Banca::where('id_anagrafica', '=', $anagrafica_azienda->id)
|
||||
->where('id_pianodeiconti3', '=', $pagamento['idconto_vendite'] ?: 0);
|
||||
try {
|
||||
$banca = (clone $banca_azienda)
|
||||
->findOrFail($anagrafica->idbanca_vendite);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
// Ricerca prima banca dell'Azienda con Conto corrispondente
|
||||
$banca = (clone $banca_azienda)
|
||||
->orderBy('predefined', 'DESC')
|
||||
->first();
|
||||
}
|
||||
|
||||
// Ri.Ba: Banca predefinita *del Cliente* piuttosto che dell'Azienda
|
||||
if ($pagamento->isRiBa()) {
|
||||
$banca = Banca::where('id_anagrafica', $anagrafica->id)
|
||||
->where('predefined', 1)
|
||||
->first();
|
||||
}
|
||||
|
||||
// Righe documento
|
||||
|
|
Loading…
Reference in New Issue