. */ namespace Modules\Scadenzario; use Models\OperationLog; use Models\User; use Modules; use Modules\Emails\Mail; use Modules\Emails\Template; use Modules\Scadenzario\Scadenza; use Prints; use Tasks\Manager; use Uploads; /** * Task dedicato alla gestione del backup giornaliero automatico, se abilitato da Impostazioni. */ class SollecitoTask extends Manager { public function needsExecution() { if (setting('Invio solleciti in automatico')>0) { $giorni_scadenza = setting("Ritardo in giorni della scadenza della fattura per invio sollecito pagamento"); $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 scadenza0){ return true; } else { return false; } } else { return false; } } public function execute() { if(setting('Invio solleciti in automatico')>0){ $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"); $id_template = setting("Template email invio sollecito"); $id_user = database()->selectOne('zz_users', 'id', ['idgruppo' => 1, 'enabled' => 1])['id']; $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 scadenzafetchArray("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)"); if (!$has_inviata) { $template = Template::find($id_template); $id = $r['id']; $scadenza = Scadenza::find($id); $documento = $scadenza->documento; $id_documento = $documento->id; $id_anagrafica = $documento->idanagrafica; $id_module = Modules::get('Scadenzario')->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 = database()->selectOne('zz_prints', '*', ['predefined' => 1, 'id_module' => Modules::get('Fatture di vendita')['id']]); $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']; } // Selezione destinatari e invio mail if (!empty($template)) { $creata_mail = false; $emails = []; // Aggiungo email anagrafica if (!empty($documento->anagrafica->email)) { $emails[] = $documento->anagrafica->email; $mail = Mail::build($user, $template, $id); $mail->addReceiver($documento->anagrafica->email); $creata_mail = true; } // Aggiungo email referenti in base alla mansione impostata nel template $mansioni = database()->select('em_mansioni_template', 'idmansione', ['id_template' => $template->id]); foreach ($mansioni as $mansione) { $referenti = database()->table('an_referenti')->where('idmansione', $mansione['idmansione'])->where('idanagrafica', $id_anagrafica)->where('email', '!=', '')->get(); if (!$referenti->isEmpty() && $creata_mail == false) { $mail = Mail::build($user, $template, $id); $creata_mail = true; } foreach ($referenti as $referente) { if (!in_array($referente->email, $emails)) { $emails[] = $referente->email; $mail->addReceiver($referente->email); } } } if (!empty($emails)) { if (!empty($fattura_allegata)) { $mail->addUpload($fattura_allegata); } $mail->save(); OperationLog::setInfo('id_email', $mail->id); OperationLog::setInfo('id_module', $id_module); OperationLog::setInfo('id_record', $id); OperationLog::build('send-email'); } } } } } } } }