2018-02-20 17:57:16 +01:00
< ? php
2020-09-07 15:04:06 +02:00
/*
* OpenSTAManager : il software gestionale open source per l ' assistenza tecnica e la fatturazione
2021-01-20 15:08:51 +01:00
* Copyright ( C ) DevCode s . r . l .
2020-09-07 15:04:06 +02:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*/
2018-02-20 17:57:16 +01:00
2019-08-29 10:25:14 +02:00
use Modules\Emails\Template ;
2024-03-05 16:01:45 +01:00
use Models\Module ;
2019-08-26 18:02:05 +02:00
2018-02-20 17:57:16 +01:00
include_once __DIR__ . '/core.php' ;
2019-08-29 10:25:14 +02:00
$template = Template :: find ( get ( 'id' ));
2019-08-26 18:02:05 +02:00
$module = $template -> module ;
$smtp = $template -> account ;
2018-02-20 17:57:16 +01:00
2021-01-28 21:13:48 +01:00
$placeholder_options = [
'is_pec' => intval ( $smtp [ 'pec' ]),
];
$body = $module -> replacePlaceholders ( $id_record , $template [ 'body' ], $placeholder_options );
$subject = $module -> replacePlaceholders ( $id_record , $template [ 'subject' ], $placeholder_options );
2018-02-21 17:47:43 +01:00
2022-02-28 11:38:04 +01:00
$emails = [];
if ( $module -> replacePlaceholders ( $id_record , '{email}' )) {
2021-01-28 21:13:48 +01:00
$emails = explode ( ';' , $module -> replacePlaceholders ( $id_record , '{email}' , $placeholder_options ));
2023-08-04 14:54:28 +02:00
}
2022-02-28 11:38:04 +01:00
2021-01-28 21:13:48 +01:00
$id_anagrafica = $module -> replacePlaceholders ( $id_record , '{id_anagrafica}' , $placeholder_options );
2019-07-24 17:54:50 +02:00
2021-11-22 11:35:20 +01:00
// Aggiungo email referenti in base alla mansione impostata nel template
2023-09-15 18:06:15 +02:00
$mansioni = $dbo -> select ( 'em_mansioni_template' , 'idmansione' , [], [ 'id_template' => $template -> id ]);
2021-11-22 11:35:20 +01:00
foreach ( $mansioni as $mansione ) {
2022-02-28 11:38:04 +01:00
$referenti = $dbo -> table ( 'an_referenti' ) -> where ( 'idmansione' , $mansione [ 'idmansione' ]) -> where ( 'idanagrafica' , $id_anagrafica ) -> where ( 'email' , '!=' , '' ) -> get ();
2021-11-22 11:35:20 +01:00
foreach ( $referenti as $referente ) {
2022-02-28 11:38:04 +01:00
if ( ! in_array ( $referente -> email , $emails )) {
$emails [] = $referente -> email ;
2021-11-22 11:35:20 +01:00
}
}
}
2022-11-28 20:14:28 +01:00
// Aggiungo email tecnici assegnati quando sono sul template Notifica intervento
2023-08-04 14:54:28 +02:00
if ( $template -> name == 'Notifica intervento' ) {
2023-09-15 18:06:15 +02:00
$tecnici = $dbo -> select ( 'in_interventi_tecnici_assegnati' , 'id_tecnico' , [], [ 'id_intervento' => $id_record ]);
2022-11-28 20:14:28 +01:00
foreach ( $tecnici as $tecnico ) {
$anagrafica = $dbo -> table ( 'an_anagrafiche' ) -> where ( 'idanagrafica' , $tecnico [ 'id_tecnico' ]) -> where ( 'email' , '!=' , '' ) -> first ();
if ( ! in_array ( $anagrafica -> email , $emails )) {
$emails [] = $anagrafica -> email ;
2023-08-04 14:54:28 +02:00
}
2022-11-28 20:14:28 +01:00
}
}
2018-04-15 14:46:33 +02:00
// Campi mancanti
2018-04-03 15:15:15 +02:00
$campi_mancanti = [];
2018-04-15 14:46:33 +02:00
if ( empty ( $smtp [ 'from_address' ])) {
$campi_mancanti [] = tr ( 'Mittente' );
2018-04-03 15:15:15 +02:00
}
2018-04-15 14:46:33 +02:00
if ( empty ( $smtp [ 'server' ])) {
$campi_mancanti [] = tr ( 'Server SMTP' );
2018-04-03 15:15:15 +02:00
}
2018-04-15 14:46:33 +02:00
if ( empty ( $smtp [ 'port' ])) {
$campi_mancanti [] = tr ( 'Porta' );
2018-04-03 15:15:15 +02:00
}
2018-04-15 14:46:33 +02:00
2018-04-03 15:15:15 +02:00
if ( sizeof ( $campi_mancanti ) > 0 ) {
2018-07-10 17:07:27 +02:00
echo '
< div class = " alert alert-warning " >
< i class = " fa fa-warning " ></ i > '.tr("Prima di procedere all' invio completa : _VALUES_ " , [
'_VALUES_' => '<b>' . implode ( ', ' , $campi_mancanti ) . '</b>' ,
]) . ' < br />
'.Modules::link(' Account email ', $smtp[' id '], tr(' Vai alla scheda account email '), null).'
</ div > ' ;
2018-04-03 15:15:15 +02:00
}
2018-02-21 17:47:43 +01:00
// Form
2018-02-20 17:57:16 +01:00
echo '
2018-02-21 17:47:43 +01:00
< form action = " " method = " post " id = " email-form " >
2018-02-20 17:57:16 +01:00
< input type = " hidden " name = " op " value = " send-email " >
2019-09-11 18:11:19 +02:00
< input type = " hidden " name = " backto " value = " '.(get('back') ? get('back') : 'record-edit').' " >
2020-03-30 18:48:43 +02:00
2019-09-11 18:11:19 +02:00
< input type = " hidden " name = " id_module " value = " '. $id_module .' " >
< input type = " hidden " name = " id_record " value = " '. $id_record .' " >
2018-02-20 17:57:16 +01:00
< input type = " hidden " name = " template " value = " '. $template['id'] .' " >
2018-02-21 17:47:43 +01:00
< p >< b > '.tr(' Mittente ').' </ b >: '.$smtp[' from_name '].' & lt ; '.$smtp[' from_address '].' & gt ; </ p > ' ;
2018-02-20 17:57:16 +01:00
2018-07-10 16:50:23 +02:00
if ( ! empty ( $template [ 'cc' ])) {
2018-02-21 17:47:43 +01:00
echo '
2018-07-10 16:50:23 +02:00
< p >< b > '.tr(' CC ').' </ b >: '.$template[' cc '].' </ p > ' ;
2018-02-21 17:47:43 +01:00
}
2018-02-20 17:57:16 +01:00
2018-07-10 16:50:23 +02:00
if ( ! empty ( $template [ 'bcc' ])) {
2018-02-20 17:57:16 +01:00
echo '
2018-07-10 16:50:23 +02:00
< p >< b > '.tr(' CCN ').' </ b >: '.$template[' bcc '].' </ p > ' ;
2018-02-20 17:57:16 +01:00
}
echo '
2020-01-22 10:49:44 +01:00
< b > '.tr(' Destinatari ').' < span class = " tip " title = " '.tr('Email delle sedi, dei referenti o agente collegato all \ 'anagrafica.').' " >< i class = " fa fa-question-circle-o " ></ i ></ span ></ b >
2021-07-15 15:38:01 +02:00
< div class = " row " id = " lista-destinatari " > ' ;
2024-01-15 15:30:45 +01:00
$idx = 0 ;
2021-07-15 15:38:01 +02:00
2024-01-15 15:30:45 +01:00
foreach ( $emails as $email ) {
echo '
2021-07-15 15:38:01 +02:00
< div class = " col-md-12 " >
2021-11-05 16:13:29 +01:00
{[ " type " : " email " , " name " : " destinatari['. $idx ++.'] " , " value " : " '. $email .' " , " icon-before " : " choice|email " , " extra " : " onkeyup= \ 'aggiungiDestinatario(); \ ' " , " class " : " destinatari " , " required " : 0 ]}
2021-07-15 15:38:01 +02:00
</ div > ' ;
2024-01-15 15:30:45 +01:00
}
2022-02-28 11:38:04 +01:00
2024-01-15 15:30:45 +01:00
if ( empty ( $emails )) {
echo '
2022-02-28 11:38:04 +01:00
< div class = " col-md-12 " >
{[ " type " : " email " , " name " : " destinatari['. $idx ++.'] " , " value " : " " , " icon-before " : " choice|email " , " extra " : " onkeyup= \ 'aggiungiDestinatario(); \ ' " , " class " : " destinatari " , " required " : 0 ]}
</ div > ' ;
2024-01-15 15:30:45 +01:00
}
2021-07-15 15:38:01 +02:00
echo '
2018-02-21 17:47:43 +01:00
</ div >
2018-02-20 17:57:16 +01:00
2018-02-21 17:47:43 +01:00
< br >
2018-02-20 17:57:16 +01:00
2018-02-21 17:47:43 +01:00
< div class = " row " >
< div class = " col-md-8 " >
{[ " type " : " text " , " label " : " '.tr('Oggetto').' " , " name " : " subject " , " value " : " '. $subject .' " , " required " : 1 ]}
2018-02-20 17:57:16 +01:00
</ div >
< div class = " col-md-4 " >
2018-12-28 00:04:41 +01:00
{[ " type " : " checkbox " , " label " : " '.tr('Richiedi notifica di lettura').' " , " name " : " read_notify " , " value " : " '. $template['read_notify'] .' " ]}
2018-02-21 17:47:43 +01:00
</ div >
</ div > ' ;
2018-02-20 17:57:16 +01:00
2018-02-21 17:47:43 +01:00
// Stampe
2019-08-29 10:25:14 +02:00
$selected_prints = $dbo -> fetchArray ( 'SELECT id_print FROM em_print_template WHERE id_template = ' . prepare ( $template [ 'id' ]));
2018-02-21 17:47:43 +01:00
$selected = array_column ( $selected_prints , 'id_print' );
2018-02-20 17:57:16 +01:00
2018-02-21 17:47:43 +01:00
echo '
2018-02-20 17:57:16 +01:00
2018-02-21 17:47:43 +01:00
< div class = " row " >
< div class = " col-md-6 " >
2024-03-12 12:31:49 +01:00
{[ " type " : " select " , " multiple " : " 1 " , " label " : " '.tr('Stampe').' " , " name " : " prints[] " , " value " : " '.implode(',', $selected ).' " , " values " : " query=SELECT `zz_prints`.`id`, `title` AS text FROM `zz_prints` LEFT JOIN `zz_prints_lang` ON (`zz_prints`.`id` = `zz_prints_lang`.`id_record` AND `zz_prints_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `id_module` = '.prepare( $id_module ).' AND `enabled`=1 AND `is_record`=1 " , " link " : " stampa " ]}
2018-02-21 17:47:43 +01:00
</ div > ' ;
2018-02-20 17:57:16 +01:00
2019-08-29 10:25:14 +02:00
$uploads = [];
2021-07-07 07:57:10 +02:00
if ( $smtp [ 'pec' ] == 1 && $module [ 'name' ] == 'Fatture di vendita' ) {
2019-08-29 10:25:14 +02:00
$uploads = $dbo -> fetchArray ( 'SELECT id FROM zz_files WHERE id_module = ' . prepare ( $module [ 'id' ]) . ' AND id_record = ' . prepare ( $id_record ) . ' AND category = \'Fattura Elettronica\'' );
$uploads = array_column ( $uploads , 'id' );
2018-07-10 12:07:48 +02:00
}
2018-02-21 17:47:43 +01:00
// Allegati
echo '
< div class = " col-md-6 " >
2024-03-11 16:15:49 +01:00
{[ " type " : " select " , " multiple " : " 1 " , " label " : " '.tr('Allegati').' " , " name " : " uploads[] " , " value " : " '.implode(',', $uploads ).' " , " help " : " '.tr('Allegati del documento o caricati nell \ 'anagrafica dell \ 'azienda.').' " , " values " : " query=SELECT `id`, `name` AS text FROM `zz_files` WHERE `id_module` = '.prepare( $id_module ).' AND `id_record` = '.prepare( $id_record ).' UNION SELECT `id`, CONCAT(`name`, \ ' (Azienda) \ ') AS text FROM `zz_files` WHERE `id_module` = '.(new Module())->getByName('Anagrafiche')->id_record.' AND `id_record` = (SELECT `valore` FROM `zz_settings` WHERE `name` = \ 'Azienda predefinita \ ') " , " link " : " allegato " ]}
2018-02-21 17:47:43 +01:00
</ div >
2023-09-15 14:25:05 +02:00
</ div > ' ;
2018-02-20 17:57:16 +01:00
echo '
2018-02-21 17:47:43 +01:00
< div class = " row " >
2023-02-24 13:36:37 +01:00
< div class = " col-md-12 " > ' ;
2024-01-15 15:30:45 +01:00
echo input ([
'type' => 'ckeditor' ,
'use_full_ckeditor' => 1 ,
'label' => tr ( 'Contenuto' ),
'name' => 'body' ,
'id' => 'body_' . rand ( 0 , 999 ),
'value' => $body ,
]);
echo '
2023-02-24 13:36:37 +01:00
</ div >
2018-02-21 17:47:43 +01:00
</ div > ' ;
2018-02-20 17:57:16 +01:00
2018-02-21 17:47:43 +01:00
echo '
2018-02-20 17:57:16 +01:00
<!-- PULSANTI -->
< div class = " row " >
< div class = " col-md-12 text-right " >
2021-04-26 09:53:41 +02:00
< button type = " button " class = " btn btn-primary " onclick = " inviaEmail() " >< i class = " fa fa-envelope " ></ i > '.tr(' Invia ').' </ button >
2018-02-20 17:57:16 +01:00
</ div >
</ div >
</ form > ' ;
2018-02-21 17:47:43 +01:00
echo '
2021-01-08 14:41:17 +01:00
< div class = " hidden " id = " template-destinatario " >
2018-02-21 17:47:43 +01:00
< div class = " col-md-12 " >
2021-04-26 09:53:41 +02:00
{[ " type " : " email " , " name " : " destinatari[-id-] " , " icon-before " : " choice|email " , " extra " : " onkeyup= \ 'aggiungiDestinatario(); \ ' " , " class " : " destinatari " ]}
2018-02-21 17:47:43 +01:00
</ div >
</ div > ' ;
2018-02-20 17:57:16 +01:00
echo '
< script >
2018-02-21 17:47:43 +01:00
var emails = [];
2021-07-20 15:23:39 +02:00
var id_anagrafica = " '. $id_anagrafica .' " ;
2021-07-27 11:37:04 +02:00
var pec = " '. $smtp['pec'] .' " ;
2018-02-21 17:47:43 +01:00
2022-11-28 20:14:28 +01:00
var id_record = " '. $id_record .' " ;
var id_module = " '. $id_module .' " ;
var id_template = " '. $template->id .' " ;
2021-07-20 15:23:39 +02:00
$ ( document ) . ready ( function () {
// Auto-completamento destinatario
if ( id_anagrafica ) {
2022-11-28 20:14:28 +01:00
$ ( document ) . load ( globals . rootdir + " /ajax_complete.php?module=Anagrafiche&op=get_email&id_anagrafica= " + id_anagrafica + " &id_record= " + id_record + " &id_module= " + id_module + " &id_template= " + id_template + ( pec ? " &type=pec " : " " ), function ( response ) {
2021-07-20 15:23:39 +02:00
emails = JSON . parse ( response );
2021-11-05 16:13:29 +01:00
let num = 0 ;
2021-07-20 15:23:39 +02:00
$ ( " .destinatari " ) . each ( function (){
addAutoComplete ( this );
2021-11-05 16:13:29 +01:00
if ( num ++== 0 ) {
$ ( this ) . prop ( " required " , true );
}
2021-07-20 15:23:39 +02:00
});
2018-02-21 17:47:43 +01:00
2021-07-20 15:23:39 +02:00
aggiungiDestinatario ();
2018-02-21 17:47:43 +01:00
});
2018-06-23 15:41:32 +02:00
}
2018-02-20 17:57:16 +01:00
});
2018-02-21 17:47:43 +01:00
2021-04-26 09:53:41 +02:00
function inviaEmail () {
2021-07-20 15:23:39 +02:00
const form = $ ( " #email-form " );
if ( form . parsley () . validate () && confirm ( " Inviare e-mail? " )) {
form . submit ();
2018-02-21 17:47:43 +01:00
}
}
2021-07-20 15:23:39 +02:00
function addAutoComplete ( input ) {
autocomplete ({
2021-04-26 09:53:41 +02:00
minLength : 0 ,
2021-07-20 15:23:39 +02:00
input : input ,
emptyMsg : globals . translations . noResults ,
fetch : function ( text , update ) {
text = text . toLowerCase ();
const suggestions = emails . filter ( n => n . value . toLowerCase () . startsWith ( text ));
update ( suggestions );
},
onSelect : function ( item ) {
input . value = item . value ;
2021-04-26 09:53:41 +02:00
aggiungiDestinatario ();
},
});
}
function aggiungiDestinatario () {
2021-07-20 15:23:39 +02:00
const last = $ ( " #lista-destinatari input " ) . last ();
2018-02-21 17:47:43 +01:00
2019-07-26 17:40:52 +02:00
if ( last . val ()) {
2023-07-11 10:10:35 +02:00
const nuovaRiga = aggiungiContenuto ( " #lista-destinatari > div:last-of-type " , " #template-destinatario " , { " -id- " : $ ( " #lista-destinatari > div " ) . length });
2018-02-21 17:47:43 +01:00
2021-07-20 15:23:39 +02:00
nuovaRiga . find ( " .destinatari " ) . each ( function (){
2021-04-26 09:53:41 +02:00
addAutoComplete ( this );
2018-02-21 17:47:43 +01:00
});
}
}
2018-02-20 17:57:16 +01:00
</ script > ' ;
echo '
2019-07-26 17:40:52 +02:00
< script > $ ( document ) . ready ( init ) </ script > ' ;