Migliorie solleciti automatici
This commit is contained in:
parent
1bdc71d2b2
commit
53eb644621
|
@ -35,15 +35,7 @@ class SollecitoTask extends Manager
|
||||||
public function needsExecution()
|
public function needsExecution()
|
||||||
{
|
{
|
||||||
if (setting('Invio solleciti in automatico') > 0) {
|
if (setting('Invio solleciti in automatico') > 0) {
|
||||||
$giorni_scadenza = setting('Ritardo in giorni della scadenza della fattura per invio sollecito pagamento');
|
return true;
|
||||||
|
|
||||||
$rs = database()->fetchArray("SELECT `co_scadenziario`.* FROM `co_scadenziario` INNER JOIN `co_documenti` ON `co_scadenziario`.`iddocumento`=`co_documenti`.`id` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` INNER JOIN `zz_segments` ON `co_documenti`.`id_segment`=`zz_segments`.`id` WHERE `co_tipidocumento`.`dir`='entrata' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 AND ABS(`co_scadenziario`.`pagato`) < ABS(`co_scadenziario`.`da_pagare`) AND `scadenza`<DATE_SUB(NOW(), INTERVAL ".prepare($giorni_scadenza).' DAY)');
|
|
||||||
|
|
||||||
if (sizeof($rs) > 0) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -53,51 +45,87 @@ class SollecitoTask extends Manager
|
||||||
{
|
{
|
||||||
if (setting('Invio solleciti in automatico') > 0) {
|
if (setting('Invio solleciti in automatico') > 0) {
|
||||||
$giorni_scadenza = setting('Ritardo in giorni della scadenza della fattura per invio sollecito pagamento');
|
$giorni_scadenza = setting('Ritardo in giorni della scadenza della fattura per invio sollecito pagamento');
|
||||||
$giorni_ultimo_sollecito = setting("Ritardo in giorni dall'ultima email per invio sollecito pagamento");
|
$giorni_prossimo_sollecito = setting("Ritardo in giorni dall'ultima email per invio sollecito pagamento");
|
||||||
$id_template = setting('Template email invio sollecito');
|
$template_1 = setting('Template email primo sollecito');
|
||||||
|
$template_2 = setting('Template email secondo sollecito');
|
||||||
|
$template_3 = setting('Template email terzo sollecito');
|
||||||
|
$template_notifica = setting('Template email mancato pagamento dopo i solleciti');
|
||||||
$id_user = database()->selectOne('zz_users', 'id', ['idgruppo' => 1, 'enabled' => 1])['id'];
|
$id_user = database()->selectOne('zz_users', 'id', ['idgruppo' => 1, 'enabled' => 1])['id'];
|
||||||
$user = User::find($id_user);
|
$user = User::find($id_user);
|
||||||
|
|
||||||
if ($id_template) {
|
$rs = database()->fetchArray("SELECT `co_scadenziario`.* FROM `co_scadenziario` INNER JOIN `co_documenti` ON `co_scadenziario`.`iddocumento`=`co_documenti`.`id` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` INNER JOIN `zz_segments` ON `co_documenti`.`id_segment`=`zz_segments`.`id` WHERE `co_tipidocumento`.`dir`='entrata' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 AND ABS(`co_scadenziario`.`pagato`) < ABS(`co_scadenziario`.`da_pagare`) AND `scadenza` < DATE_SUB(NOW(), INTERVAL ".prepare($giorni_scadenza).' DAY)');
|
||||||
$rs = database()->fetchArray("SELECT `co_scadenziario`.* FROM `co_scadenziario` INNER JOIN `co_documenti` ON `co_scadenziario`.`iddocumento`=`co_documenti`.`id` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` INNER JOIN `zz_segments` ON `co_documenti`.`id_segment`=`zz_segments`.`id` WHERE `co_tipidocumento`.`dir`='entrata' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 AND ABS(`co_scadenziario`.`pagato`) < ABS(`co_scadenziario`.`da_pagare`) AND `scadenza`<DATE_SUB(NOW(), INTERVAL ".prepare($giorni_scadenza).' DAY)');
|
|
||||||
|
|
||||||
foreach ($rs as $r) {
|
|
||||||
$has_inviata = database()->fetchArray('SELECT * FROM em_emails WHERE id_template='.prepare($id_template).' AND id_record='.prepare($r['id']).' AND sent_at>DATE_SUB(NOW(), INTERVAL '.prepare($giorni_ultimo_sollecito).' DAY)');
|
|
||||||
|
|
||||||
|
foreach ($rs as $r) {
|
||||||
|
$da_inviare = false;
|
||||||
|
$destinatario = '';
|
||||||
|
$has_inviata = database()->fetchOne('SELECT * FROM em_emails WHERE sent_at IS NOT NULL AND id_template='.prepare($template_1).' AND id_record='.prepare($r['id']));
|
||||||
|
$data_sollecito_1 = $has_inviata['sent_at'];
|
||||||
|
$id_template = $template_1;
|
||||||
|
if (!$has_inviata) {
|
||||||
|
$da_inviare = date('Y-m-d', strtotime($r['scadenza'].' + '.($giorni_scadenza).' days')) < date('Y-m-d') ? true : false;
|
||||||
|
} else {
|
||||||
|
$has_inviata = database()->fetchOne('SELECT * FROM em_emails WHERE sent_at IS NOT NULL AND id_template='.prepare($template_2).' AND id_record='.prepare($r['id']));
|
||||||
|
$data_sollecito_2 = $has_inviata['sent_at'];
|
||||||
|
$id_template = $template_2;
|
||||||
if (!$has_inviata) {
|
if (!$has_inviata) {
|
||||||
$template = Template::find($id_template);
|
$da_inviare = date('Y-m-d', strtotime($data_sollecito_1.' + '.$giorni_prossimo_sollecito.' days')) < date('Y-m-d') ? true : false;
|
||||||
$id = $r['id'];
|
} else {
|
||||||
|
$has_inviata = database()->fetchOne('SELECT * FROM em_emails WHERE sent_at IS NOT NULL AND id_template='.prepare($template_3).' AND id_record='.prepare($r['id']));
|
||||||
|
$data_sollecito_3 = $has_inviata['sent_at'];
|
||||||
|
$id_template = $template_3;
|
||||||
|
if (!$has_inviata) {
|
||||||
|
$da_inviare = date('Y-m-d', strtotime($data_sollecito_2.' + '.$giorni_prossimo_sollecito.' days')) < date('Y-m-d') ? true : false;
|
||||||
|
} else {
|
||||||
|
$has_inviata = database()->fetchOne('SELECT * FROM em_emails WHERE sent_at IS NOT NULL AND id_template='.prepare($template_notifica).' AND id_record='.prepare($r['id']));
|
||||||
|
$id_template = $template_notifica;
|
||||||
|
if (!$has_inviata) {
|
||||||
|
$destinatario = setting('Indirizzo email mancato pagamento dopo i solleciti');
|
||||||
|
$da_inviare = date('Y-m-d', strtotime($data_sollecito_3.' + '.$giorni_prossimo_sollecito.' days')) < date('Y-m-d') && !empty($destinatario) ? true : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$scadenza = Scadenza::find($id);
|
if ($da_inviare && $id_template) {
|
||||||
$documento = $scadenza->documento;
|
$template = Template::find($id_template);
|
||||||
|
$id = $r['id'];
|
||||||
|
|
||||||
$id_documento = $documento->id;
|
$scadenza = Scadenza::find($id);
|
||||||
$id_anagrafica = $documento->idanagrafica;
|
$documento = $scadenza->documento;
|
||||||
$id_module = Module::where('name', 'Scadenzario')->first()->id;
|
|
||||||
|
$id_documento = $documento->id;
|
||||||
|
$id_anagrafica = $documento->idanagrafica;
|
||||||
|
$id_module = Module::where('name', 'Scadenzario')->first()->id;
|
||||||
|
|
||||||
|
$fattura_allegata = database()->selectOne('zz_files', 'id', ['id_module' => $id_module, 'id_record' => $id, 'original' => 'Fattura di vendita.pdf'])['id'];
|
||||||
|
|
||||||
|
// Allego stampa della fattura se non presente
|
||||||
|
if (empty($fattura_allegata)) {
|
||||||
|
$print_predefined = PrintTemplate::where('predefined', 1)->where('id_module', Module::where('name', 'Fatture di vendita')->first()->id)->first();
|
||||||
|
$print = \Prints::render($print_predefined['id'], $id_documento, null, true);
|
||||||
|
$name = 'Fattura di vendita';
|
||||||
|
$upload = \Uploads::upload($print['pdf'], [
|
||||||
|
'name' => $name,
|
||||||
|
'original_name' => $name.'.pdf',
|
||||||
|
'category' => 'Generale',
|
||||||
|
'id_module' => $id_module,
|
||||||
|
'id_record' => $id,
|
||||||
|
]);
|
||||||
|
|
||||||
$fattura_allegata = database()->selectOne('zz_files', 'id', ['id_module' => $id_module, 'id_record' => $id, 'original' => 'Fattura di vendita.pdf'])['id'];
|
$fattura_allegata = database()->selectOne('zz_files', 'id', ['id_module' => $id_module, 'id_record' => $id, 'original' => 'Fattura di vendita.pdf'])['id'];
|
||||||
|
}
|
||||||
|
|
||||||
// Allego stampa della fattura se non presente
|
// Selezione destinatari e invio mail
|
||||||
if (empty($fattura_allegata)) {
|
if (!empty($template)) {
|
||||||
$print_predefined = PrintTemplate::where('predefined', 1)->where('id_module', Module::where('name', 'Fatture di vendita')->first()->id)->first();
|
$creata_mail = false;
|
||||||
$print = \Prints::render($print_predefined['id'], $id_documento, null, true);
|
$emails = [];
|
||||||
$name = 'Fattura di vendita';
|
|
||||||
$upload = \Uploads::upload($print['pdf'], [
|
|
||||||
'name' => $name,
|
|
||||||
'original_name' => $name.'.pdf',
|
|
||||||
'category' => 'Generale',
|
|
||||||
'id_module' => $id_module,
|
|
||||||
'id_record' => $id,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$fattura_allegata = database()->selectOne('zz_files', 'id', ['id_module' => $id_module, 'id_record' => $id, 'original' => 'Fattura di vendita.pdf'])['id'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Selezione destinatari e invio mail
|
|
||||||
if (!empty($template)) {
|
|
||||||
$creata_mail = false;
|
|
||||||
$emails = [];
|
|
||||||
|
|
||||||
|
if ($destinatario) {
|
||||||
|
$emails[] = $destinatario;
|
||||||
|
$mail = Mail::build($user, $template, $id);
|
||||||
|
$mail->addReceiver($destinatario);
|
||||||
|
$creata_mail = true;
|
||||||
|
} else {
|
||||||
// Aggiungo email anagrafica
|
// Aggiungo email anagrafica
|
||||||
if (!empty($documento->anagrafica->email)) {
|
if (!empty($documento->anagrafica->email)) {
|
||||||
$emails[] = $documento->anagrafica->email;
|
$emails[] = $documento->anagrafica->email;
|
||||||
|
@ -122,17 +150,18 @@ class SollecitoTask extends Manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!empty($emails)) {
|
}
|
||||||
if (!empty($fattura_allegata)) {
|
|
||||||
$mail->addUpload($fattura_allegata);
|
|
||||||
}
|
|
||||||
|
|
||||||
$mail->save();
|
if (!empty($emails)) {
|
||||||
OperationLog::setInfo('id_email', $mail->id);
|
if (!empty($fattura_allegata)) {
|
||||||
OperationLog::setInfo('id_module', $id_module);
|
$mail->addUpload($fattura_allegata);
|
||||||
OperationLog::setInfo('id_record', $id);
|
|
||||||
OperationLog::build('send-email');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$mail->save();
|
||||||
|
OperationLog::setInfo('id_email', $mail->id);
|
||||||
|
OperationLog::setInfo('id_module', $id_module);
|
||||||
|
OperationLog::setInfo('id_record', $id);
|
||||||
|
OperationLog::build('send-email');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,3 +41,28 @@ UPDATE `zz_plugins` SET `options` = '{ \"main_query\": [ { \"type\": \"table\",
|
||||||
|
|
||||||
-- Fix vista sottocategorie in Articoli
|
-- Fix vista sottocategorie in Articoli
|
||||||
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`sottocategorie_lang`.`title`' WHERE `zz_modules`.`name` = 'Articoli' AND `zz_views`.`name` = 'Sottocategoria';
|
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`sottocategorie_lang`.`title`' WHERE `zz_modules`.`name` = 'Articoli' AND `zz_views`.`name` = 'Sottocategoria';
|
||||||
|
|
||||||
|
-- Gestione solleciti automatici
|
||||||
|
INSERT INTO `em_templates` (`id`, `id_module`, `name`, `icon`, `tipo_reply_to`, `reply_to`, `cc`, `bcc`, `read_notify`, `predefined`, `note_aggiuntive`, `deleted_at`, `id_account`, `created_at`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name`='Scadenzario'), 'Secondo sollecito di pagamento', 'fa fa-envelope', '', '', '', '', '0', '1', '', NULL, '1', NULL);
|
||||||
|
INSERT INTO `em_templates_lang` (`id`, `id_lang`, `id_record`, `title`, `subject`, `body`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `em_templates` WHERE `name`='Secondo sollecito di pagamento'), 'Secondo sollecito di pagamento', 'Sollecito di pagamento fattura {numero}', '', NULL);
|
||||||
|
|
||||||
|
INSERT INTO `em_templates` (`id`, `id_module`, `name`, `icon`, `tipo_reply_to`, `reply_to`, `cc`, `bcc`, `read_notify`, `predefined`, `note_aggiuntive`, `deleted_at`, `id_account`, `created_at`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name`='Scadenzario'), 'Terzo sollecito di pagamento', 'fa fa-envelope', '', '', '', '', '0', '1', '', NULL, '1', NULL);
|
||||||
|
INSERT INTO `em_templates_lang` (`id`, `id_lang`, `id_record`, `title`, `subject`, `body`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `em_templates` WHERE `name`='Terzo sollecito di pagamento'), 'Terzo sollecito di pagamento', 'Sollecito di pagamento fattura {numero}', '', NULL);
|
||||||
|
|
||||||
|
INSERT INTO `em_templates` (`id`, `id_module`, `name`, `icon`, `tipo_reply_to`, `reply_to`, `cc`, `bcc`, `read_notify`, `predefined`, `note_aggiuntive`, `deleted_at`, `id_account`, `created_at`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name`='Scadenzario'), 'Notifica interna sollecito di pagamento', 'fa fa-envelope', '', '', '', '', '0', '1', '', NULL, '1', NULL);
|
||||||
|
INSERT INTO `em_templates_lang` (`id`, `id_lang`, `id_record`, `title`, `subject`, `body`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `em_templates` WHERE `name`='Notifica interna sollecito di pagamento'), 'Notifica interna sollecito di pagamento', 'Notifica interna sollecito di pagamento fattura {numero}', '', NULL);
|
||||||
|
|
||||||
|
UPDATE `zz_settings` SET `nome` = 'Template email primo sollecito' WHERE `zz_settings`.`nome` = 'Template email invio sollecito';
|
||||||
|
UPDATE `zz_settings_lang` SET `title` = 'Template email primo sollecito' WHERE `zz_settings_lang`.`id_record` = (SELECT `id` FROM `zz_settings` WHERE `nome`='Template email primo sollecito');
|
||||||
|
|
||||||
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `order`) VALUES (NULL, 'Template email secondo sollecito', (SELECT `id` FROM `em_templates` WHERE `name`='Secondo sollecito di pagamento'), 'query=SELECT `em_templates`.`id`, `name` AS descrizione FROM `em_templates` LEFT JOIN `em_templates_lang` ON (`em_templates_lang`.`id_record` = `em_templates`.`id` AND `em_templates_lang`.`id_lang` = (SELECT `valore` FROM `zz_settings` WHERE `nome` = \"Lingua\"))', '1', 'Scadenzario', NULL, '3');
|
||||||
|
INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `zz_settings` WHERE `nome`='Template email secondo sollecito'), 'Template email secondo sollecito', '', NULL);
|
||||||
|
|
||||||
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `order`) VALUES (NULL, 'Template email terzo sollecito', (SELECT `id` FROM `em_templates` WHERE `name`='Terzo sollecito di pagamento'), 'query=SELECT `em_templates`.`id`, `name` AS descrizione FROM `em_templates` LEFT JOIN `em_templates_lang` ON (`em_templates_lang`.`id_record` = `em_templates`.`id` AND `em_templates_lang`.`id_lang` = (SELECT `valore` FROM `zz_settings` WHERE `nome` = \"Lingua\"))', '1', 'Scadenzario', NULL, '4');
|
||||||
|
INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `zz_settings` WHERE `nome`='Template email terzo sollecito'), 'Template email terzo sollecito', '', NULL);
|
||||||
|
|
||||||
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `order`) VALUES (NULL, 'Template email mancato pagamento dopo i solleciti', (SELECT `id` FROM `em_templates` WHERE `name`='Notifica interna sollecito di pagamento'), 'query=SELECT `em_templates`.`id`, `name` AS descrizione FROM `em_templates` LEFT JOIN `em_templates_lang` ON (`em_templates_lang`.`id_record` = `em_templates`.`id` AND `em_templates_lang`.`id_lang` = (SELECT `valore` FROM `zz_settings` WHERE `nome` = \"Lingua\"))', '1', 'Scadenzario', NULL, '4');
|
||||||
|
INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `zz_settings` WHERE `nome`='Template email mancato pagamento dopo i solleciti'), 'Template email mancato pagamento dopo i solleciti', '', NULL);
|
||||||
|
|
||||||
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `order`) VALUES (NULL, 'Indirizzo email mancato pagamento dopo i solleciti', '', 'string', '1', 'Scadenzario', NULL, '4');
|
||||||
|
INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`, `created_at`) VALUES (NULL, (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), (SELECT `id` FROM `zz_settings` WHERE `nome`='Indirizzo email mancato pagamento dopo i solleciti'), 'Indirizzo email mancato pagamento dopo i solleciti', '', NULL);
|
||||||
|
|
Loading…
Reference in New Issue