mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-01-01 18:49:18 +01:00
Miglioramento procedura invio email
This commit is contained in:
parent
402dca9162
commit
18416674f6
@ -33,12 +33,14 @@ class EmailHook extends Manager
|
|||||||
|
|
||||||
public function needsExecution()
|
public function needsExecution()
|
||||||
{
|
{
|
||||||
|
// Email fallite nelle ultime 4 ore
|
||||||
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
|
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
|
||||||
$failed = function ($query) use ($diff) {
|
$failed = function ($query) use ($diff) {
|
||||||
$query->where('failed_at', '<', $diff)
|
$query->where('failed_at', '<', $diff)
|
||||||
->orWhereNull('failed_at');
|
->orWhereNull('failed_at');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Email da inviare per tutti gli account
|
||||||
$accounts = Account::all();
|
$accounts = Account::all();
|
||||||
$remaining = Mail::whereNull('sent_at')
|
$remaining = Mail::whereNull('sent_at')
|
||||||
->where($failed)
|
->where($failed)
|
||||||
@ -51,15 +53,23 @@ class EmailHook extends Manager
|
|||||||
|
|
||||||
public function execute()
|
public function execute()
|
||||||
{
|
{
|
||||||
|
// Email fallite nelle ultime 4 ore
|
||||||
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
|
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
|
||||||
$failed = function ($query) use ($diff) {
|
$failed = function ($query) use ($diff) {
|
||||||
$query->where('failed_at', '<', $diff)
|
$query->where('failed_at', '<', $diff)
|
||||||
->orWhereNull('failed_at');
|
->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();
|
$accounts = Account::all();
|
||||||
$list = [];
|
$lista = [];
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
|
// Ultima email inviata per l'account
|
||||||
$last_mail = $account->emails()
|
$last_mail = $account->emails()
|
||||||
->whereNotNull('sent_at')
|
->whereNotNull('sent_at')
|
||||||
->orderBy('sent_at')
|
->orderBy('sent_at')
|
||||||
@ -70,31 +80,32 @@ class EmailHook extends Manager
|
|||||||
$now = new Carbon();
|
$now = new Carbon();
|
||||||
$diff_milliseconds = $date->diffInMilliseconds($now);
|
$diff_milliseconds = $date->diffInMilliseconds($now);
|
||||||
|
|
||||||
|
// Timeout per l'uso dell'account email
|
||||||
if (empty($last_mail) || $diff_milliseconds > $account->timeout) {
|
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('id_account', $account->id)
|
||||||
->where($failed)
|
->where($failed)
|
||||||
->where('attempt', '<', setting('Numero massimo di tentativi'))
|
->where('attempt', '<', $numero_tentativi)
|
||||||
->orderBy('created_at')
|
->orderBy('created_at')
|
||||||
->first();
|
->take($numero_email)
|
||||||
|
->get();
|
||||||
|
|
||||||
if (!empty($mail)) {
|
if (!empty($lista_account)) {
|
||||||
$list[] = $mail;
|
$lista = array_merge($lista, $lista_account);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($list as $mail) {
|
// Invio effettivo
|
||||||
$email = EmailNotification::build($mail);
|
foreach ($lista as $lista_account) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Invio mail
|
$email = EmailNotification::build($lista_account);
|
||||||
$email->send();
|
$email->send();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $list;
|
return $lista;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function response()
|
public function response()
|
||||||
@ -102,10 +113,13 @@ class EmailHook extends Manager
|
|||||||
$yesterday = date('Y-m-d', strtotime('-1 days'));
|
$yesterday = date('Y-m-d', strtotime('-1 days'));
|
||||||
$user = auth()->getUser();
|
$user = auth()->getUser();
|
||||||
|
|
||||||
|
// Numero di email inviate
|
||||||
$current = Mail::whereDate('sent_at', '>', $yesterday)
|
$current = Mail::whereDate('sent_at', '>', $yesterday)
|
||||||
->where('attempt', '<', setting('Numero massimo di tentativi'))
|
->where('attempt', '<', setting('Numero massimo di tentativi'))
|
||||||
->where('created_by', $user->id)
|
->where('created_by', $user->id)
|
||||||
->count();
|
->count();
|
||||||
|
|
||||||
|
// Numero totale di email
|
||||||
$total = Mail::where(function ($query) use ($yesterday) {
|
$total = Mail::where(function ($query) use ($yesterday) {
|
||||||
$query->whereDate('sent_at', '>', $yesterday)
|
$query->whereDate('sent_at', '>', $yesterday)
|
||||||
->orWhereNull('sent_at');
|
->orWhereNull('sent_at');
|
||||||
|
@ -1,2 +1,6 @@
|
|||||||
-- Aggiornato widget Contratti in scadenza (sostituito fatturabile con pianificabile)
|
-- 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');
|
||||||
|
Loading…
Reference in New Issue
Block a user