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',
|
'dir' => 'entrata',
|
||||||
])['id'];
|
])['id'];
|
||||||
|
|
||||||
|
|
||||||
switch (post('op')) {
|
switch (post('op')) {
|
||||||
case 'crea_fattura':
|
case 'crea_fattura':
|
||||||
$documenti = collect();
|
$documenti = collect();
|
||||||
|
|
|
@ -95,9 +95,9 @@ class EmailHook extends Manager
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invio effettivo
|
// Invio effettivo
|
||||||
foreach ($lista as $lista_account) {
|
foreach ($lista as $mail) {
|
||||||
try {
|
try {
|
||||||
$email = EmailNotification::build($lista_account);
|
$email = EmailNotification::build($mail);
|
||||||
$email->send();
|
$email->send();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,37 +214,37 @@ switch (post('op')) {
|
||||||
'id_tecnico' => $tecnici_assegnati,
|
'id_tecnico' => $tecnici_assegnati,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if(!empty(post('ricorsiva'))){
|
if (!empty(post('ricorsiva'))) {
|
||||||
$periodicita = post('periodicita');
|
$periodicita = post('periodicita');
|
||||||
$data = post('data_inizio_ricorrenza');
|
$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'));
|
$stato = Stato::find(post('idstatoricorrenze'));
|
||||||
|
|
||||||
// Estraggo le date delle ricorrenze
|
// Estraggo le date delle ricorrenze
|
||||||
if (post('metodo_ricorrenza')=='data') {
|
if (post('metodo_ricorrenza') == 'data') {
|
||||||
$data_fine = post('data_fine_ricorrenza');
|
$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)));
|
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
|
||||||
$w = date('w', strtotime($data));
|
$w = date('w', strtotime($data));
|
||||||
//Escludo sabato e domenica
|
//Escludo sabato e domenica
|
||||||
if($w=='6'){
|
if ($w == '6') {
|
||||||
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
|
$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)));
|
$data = date('Y-m-d', strtotime('+1 day', strtotime($data)));
|
||||||
}
|
}
|
||||||
if ($data<=$data_fine) {
|
if ($data <= $data_fine) {
|
||||||
$date_ricorrenze[] = $data;
|
$date_ricorrenze[] = $data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$ricorrenze = post('numero_ricorrenze');
|
$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)));
|
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
|
||||||
$w = date('w', strtotime($data));
|
$w = date('w', strtotime($data));
|
||||||
//Escludo sabato e domenica
|
//Escludo sabato e domenica
|
||||||
if($w=='6'){
|
if ($w == '6') {
|
||||||
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
|
$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)));
|
$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);
|
$intervento = Intervento::find($id_record);
|
||||||
$new = $intervento->replicate();
|
$new = $intervento->replicate();
|
||||||
// Calcolo il nuovo codice
|
// Calcolo il nuovo codice
|
||||||
|
@ -274,16 +274,16 @@ switch (post('op')) {
|
||||||
$diff = strtotime($sessione->orario_inizio) - strtotime($inizio_old);
|
$diff = strtotime($sessione->orario_inizio) - strtotime($inizio_old);
|
||||||
$orario_inizio = date('Y-m-d H:i:s', (strtotime($sessione->orario_inizio) + $diff));
|
$orario_inizio = date('Y-m-d H:i:s', (strtotime($sessione->orario_inizio) + $diff));
|
||||||
}
|
}
|
||||||
|
|
||||||
$diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio);
|
$diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio);
|
||||||
$orario_fine = date('Y-m-d H:i:s', (strtotime($orario_inizio) + $diff_fine));
|
$orario_fine = date('Y-m-d H:i:s', (strtotime($orario_inizio) + $diff_fine));
|
||||||
|
|
||||||
$new_sessione = $sessione->replicate();
|
$new_sessione = $sessione->replicate();
|
||||||
$new_sessione->idintervento = $new->id;
|
$new_sessione->idintervento = $new->id;
|
||||||
$new_sessione->orario_inizio = $orario_inizio;
|
$new_sessione->orario_inizio = $orario_inizio;
|
||||||
$new_sessione->orario_fine = $orario_fine;
|
$new_sessione->orario_fine = $orario_fine;
|
||||||
$new_sessione->save();
|
$new_sessione->save();
|
||||||
|
|
||||||
++$numero_sessione;
|
++$numero_sessione;
|
||||||
$inizio_old = $sessione->orario_inizio;
|
$inizio_old = $sessione->orario_inizio;
|
||||||
}
|
}
|
||||||
|
@ -297,11 +297,11 @@ switch (post('op')) {
|
||||||
'id_tecnico' => $tecnici_assegnati,
|
'id_tecnico' => $tecnici_assegnati,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$n_ricorrenze++;
|
++$n_ricorrenze;
|
||||||
}
|
}
|
||||||
|
|
||||||
flash()->info(tr('Aggiunte _NUM_ nuove ricorrenze!', [
|
flash()->info(tr('Aggiunte _NUM_ nuove ricorrenze!', [
|
||||||
'_NUM_' => $n_ricorrenze,
|
'_NUM_' => $n_ricorrenze,
|
||||||
]));
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,6 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
$fattura = Fattura::find($id_fattura);
|
$fattura = Fattura::find($id_fattura);
|
||||||
$intervento = Intervento::find($id_intervento);
|
$intervento = Intervento::find($id_intervento);
|
||||||
|
|
||||||
|
|
||||||
$data = $intervento->fine;
|
$data = $intervento->fine;
|
||||||
$codice = $intervento->codice;
|
$codice = $intervento->codice;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,8 @@ use Modules\Emails\Mail;
|
||||||
use Modules\Emails\Template;
|
use Modules\Emails\Template;
|
||||||
use Modules\ListeNewsletter\Lista;
|
use Modules\ListeNewsletter\Lista;
|
||||||
use Modules\Newsletter\Newsletter;
|
use Modules\Newsletter\Newsletter;
|
||||||
use Respect\Validation\Validator as v;
|
use Notifications\EmailNotification;
|
||||||
|
use PHPMailer\PHPMailer\Exception;
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
@ -61,42 +62,19 @@ switch (filter('op')) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'send':
|
case 'send':
|
||||||
$template = $newsletter->template;
|
$newsletter = Newsletter::find($id_record);
|
||||||
$uploads = $newsletter->uploads()->pluck('id');
|
|
||||||
|
|
||||||
$destinatari = $newsletter->destinatari();
|
$destinatari = $newsletter->destinatari();
|
||||||
$count = $destinatari->count();
|
$count = $destinatari->count();
|
||||||
for ($i = 0; $i < $count; ++$i) {
|
for ($i = 0; $i < $count; ++$i) {
|
||||||
$destinatario = $destinatari->skip($i)->first();
|
$destinatario = $destinatari->skip($i)->first();
|
||||||
$origine = $destinatario->getOrigine();
|
$mail = $newsletter->inviaDestinatario($destinatario);
|
||||||
|
|
||||||
$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();
|
|
||||||
|
|
||||||
// Aggiornamento riferimento per la newsletter
|
// Aggiornamento riferimento per la newsletter
|
||||||
$destinatario->id_email = $mail->id;
|
if (!empty($mail)) {
|
||||||
$destinatario->save();
|
$destinatario->id_email = $mail->id;
|
||||||
|
$destinatario->save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aggiornamento stato newsletter
|
// Aggiornamento stato newsletter
|
||||||
|
@ -107,6 +85,38 @@ switch (filter('op')) {
|
||||||
|
|
||||||
break;
|
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':
|
case 'block':
|
||||||
$mails = $newsletter->emails;
|
$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>'
|
'<span class="text-warning"><i class="fa fa-exclamation-triangle"></i> '.tr('Disabilitato').'</span>'
|
||||||
).'
|
).'
|
||||||
</div>',
|
</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.'">
|
<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>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</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>';
|
</script>';
|
||||||
|
|
|
@ -29,6 +29,7 @@ use Modules\Anagrafiche\Sede;
|
||||||
use Modules\Emails\Account;
|
use Modules\Emails\Account;
|
||||||
use Modules\Emails\Mail;
|
use Modules\Emails\Mail;
|
||||||
use Modules\Emails\Template;
|
use Modules\Emails\Template;
|
||||||
|
use Respect\Validation\Validator as v;
|
||||||
use Traits\RecordTrait;
|
use Traits\RecordTrait;
|
||||||
|
|
||||||
class Newsletter extends Model
|
class Newsletter extends Model
|
||||||
|
@ -132,6 +133,45 @@ class Newsletter extends Model
|
||||||
->where('record_type', '=', $tipo);
|
->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
|
// Relazione Eloquent
|
||||||
|
|
||||||
public function destinatari()
|
public function destinatari()
|
||||||
|
|
|
@ -44,7 +44,7 @@ switch (post('op')) {
|
||||||
case 'crea_fattura':
|
case 'crea_fattura':
|
||||||
$documenti = collect();
|
$documenti = collect();
|
||||||
$numero_totale = 0;
|
$numero_totale = 0;
|
||||||
|
|
||||||
$tipo_documento = Tipo::where('id', post('idtipodocumento'))->first();
|
$tipo_documento = Tipo::where('id', post('idtipodocumento'))->first();
|
||||||
|
|
||||||
$stato_documenti_accodabili = Stato::where('descrizione', 'Bozza')->first();
|
$stato_documenti_accodabili = Stato::where('descrizione', 'Bozza')->first();
|
||||||
|
|
|
@ -18,19 +18,36 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Carbon\CarbonInterval;
|
use Carbon\CarbonInterval;
|
||||||
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
|
use Modules\Banche\Banca;
|
||||||
|
use Modules\Pagamenti\Pagamento;
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
$anagrafica = Anagrafica::find($documento['idanagrafica']);
|
$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
|
$pagamento = Pagamento::find($documento['idpagamento']);
|
||||||
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));
|
// Banca dell'Azienda corrente impostata come predefinita per il Cliente
|
||||||
} elseif (!empty($pagamento['idconto_vendite'])) {
|
$banca_azienda = Banca::where('id_anagrafica', '=', $anagrafica_azienda->id)
|
||||||
// Altrimenti prendo quella associata la metodo di pagamento selezionato
|
->where('id_pianodeiconti3', '=', $pagamento['idconto_vendite'] ?: 0);
|
||||||
$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');
|
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
|
// Righe documento
|
||||||
|
|
Loading…
Reference in New Issue