1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-20 04:06:34 +01:00

Miglioramento procedura invio email

This commit is contained in:
Dasc3er 2021-08-02 15:42:08 +02:00
parent 402dca9162
commit 18416674f6
2 changed files with 30 additions and 12 deletions

View File

@ -33,12 +33,14 @@ class EmailHook extends Manager
public function needsExecution()
{
// Email fallite nelle ultime 4 ore
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
$failed = function ($query) use ($diff) {
$query->where('failed_at', '<', $diff)
->orWhereNull('failed_at');
};
// Email da inviare per tutti gli account
$accounts = Account::all();
$remaining = Mail::whereNull('sent_at')
->where($failed)
@ -51,15 +53,23 @@ class EmailHook extends Manager
public function execute()
{
// Email fallite nelle ultime 4 ore
$diff = date('Y-m-d H:i:s', strtotime('-4 hours'));
$failed = function ($query) use ($diff) {
$query->where('failed_at', '<', $diff)
->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();
$list = [];
$lista = [];
foreach ($accounts as $account) {
// Ultima email inviata per l'account
$last_mail = $account->emails()
->whereNotNull('sent_at')
->orderBy('sent_at')
@ -70,31 +80,32 @@ class EmailHook extends Manager
$now = new Carbon();
$diff_milliseconds = $date->diffInMilliseconds($now);
// Timeout per l'uso dell'account email
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($failed)
->where('attempt', '<', setting('Numero massimo di tentativi'))
->where('attempt', '<', $numero_tentativi)
->orderBy('created_at')
->first();
->take($numero_email)
->get();
if (!empty($mail)) {
$list[] = $mail;
if (!empty($lista_account)) {
$lista = array_merge($lista, $lista_account);
}
}
}
foreach ($list as $mail) {
$email = EmailNotification::build($mail);
// Invio effettivo
foreach ($lista as $lista_account) {
try {
// Invio mail
$email = EmailNotification::build($lista_account);
$email->send();
} catch (Exception $e) {
}
}
return $list;
return $lista;
}
public function response()
@ -102,10 +113,13 @@ class EmailHook extends Manager
$yesterday = date('Y-m-d', strtotime('-1 days'));
$user = auth()->getUser();
// Numero di email inviate
$current = Mail::whereDate('sent_at', '>', $yesterday)
->where('attempt', '<', setting('Numero massimo di tentativi'))
->where('created_by', $user->id)
->count();
// Numero totale di email
$total = Mail::where(function ($query) use ($yesterday) {
$query->whereDate('sent_at', '>', $yesterday)
->orWhereNull('sent_at');

View File

@ -1,2 +1,6 @@
-- 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');