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:
parent
402dca9162
commit
18416674f6
@ -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');
|
||||
|
@ -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');
|
||||
|
Loading…
Reference in New Issue
Block a user