Gestione tipi destinatari e autocompletamenti destinatari nelle mail in uscita

This commit is contained in:
Beppe 2024-09-09 12:54:54 +02:00
parent ad3b4d9647
commit 40bf2a9cac
5 changed files with 109 additions and 5 deletions

View File

@ -118,14 +118,14 @@ $idx = 0;
foreach ($emails as $email) {
echo '
<div class="col-md-12">
{[ "type": "email", "name": "destinatari['.$idx++.']", "value": "'.$email.'", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari", "required": 0 ]}
{[ "type": "email", "name": "destinatari['.$idx++.']", "value": "'.$email.'", "icon-before": "choice|email|'.$template['type'].'", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari", "required": 0 ]}
</div>';
}
if (empty($emails)) {
echo '
<div class="col-md-12">
{[ "type": "email", "name": "destinatari['.$idx++.']", "value": "", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari", "required": 0 ]}
{[ "type": "email", "name": "destinatari['.$idx++.']", "value": "", "icon-before": "choice|email|'.$template['type'].'", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari", "required": 0 ]}
</div>';
}
echo '
@ -197,7 +197,7 @@ echo '
echo '
<div class="hidden" id="template-destinatario">
<div class="col-md-12">
{[ "type": "email", "name": "destinatari[-id-]", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari" ]}
{[ "type": "email", "name": "destinatari[-id-]", "icon-before": "choice|email|'.$template['type'].'", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari" ]}
</div>
</div>';
@ -226,7 +226,23 @@ echo '
aggiungiDestinatario();
});
}';
if (!empty($template['indirizzi_proposti'])) {
echo '
$(document).load(globals.rootdir + "/modules/emails/ajax/complete.php?op=get_email&indirizzi_proposti='.$template['indirizzi_proposti'].'", function(response) {
emails = JSON.parse(response);
console.log(emails);
$(".destinatari").each(function(){
addAutoComplete(this);
});
aggiungiDestinatario();
});';
}
echo '
});
function inviaEmail() {

View File

@ -56,6 +56,8 @@ switch (post('op')) {
$template->note_aggiuntive = post('note_aggiuntive');
$template->setTranslation('subject', post('subject'));
$template->setTranslation('body', post('body'));
$template->type = post('type');
$template->indirizzi_proposti = post('indirizzi_proposti');
$template->save();
$prints[] = post('prints');

View File

@ -0,0 +1,75 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
* Copyright (C) DevCode s.r.l.
*
* 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/>.
*/
include_once __DIR__.'/../../../core.php';
$resource = ($resource ? $resource : $_GET['op']);
switch ($resource) {
// Elenco e-mail
case 'get_email':
$indirizzi_proposti = $_GET['indirizzi_proposti'];
$where = "";
if( $indirizzi_proposti==1 ) {
$where .= 'AND an_tipianagrafiche_lang.title = "Cliente"';
}elseif( $indirizzi_proposti==2 ) {
$where .= 'AND an_tipianagrafiche_lang.title = "Fornitore"';
}
$results = [];
// Tutte le anagrafiche
$q = "SELECT DISTINCT(an_anagrafiche.email), an_anagrafiche.idanagrafica, an_anagrafiche.ragione_sociale FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche_anagrafiche.idanagrafica=an_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche.id=an_tipianagrafiche_anagrafiche.idtipoanagrafica INNER JOIN an_tipianagrafiche_lang ON (an_tipianagrafiche_lang.id_lang=1 AND an_tipianagrafiche_lang.id_record=an_tipianagrafiche.id) WHERE email != '' ".$where." ORDER BY ragione_sociale";
$rs = $dbo->fetchArray($q);
foreach ($rs as $r) {
if( !empty($r['email']) ){
$results[] = [
'value' => $r['email'],
'label' => $r['ragione_sociale'].' <'.$r['email'].'>',
];
}
}
$q = "SELECT DISTINCT(an_sedi.email), an_sedi.idanagrafica, nomesede AS ragione_sociale FROM an_sedi INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=an_sedi.idanagrafica INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche_anagrafiche.idanagrafica=an_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche.id=an_tipianagrafiche_anagrafiche.idtipoanagrafica INNER JOIN an_tipianagrafiche_lang ON (an_tipianagrafiche_lang.id_lang=1 AND an_tipianagrafiche_lang.id_record=an_tipianagrafiche.id) WHERE an_sedi.email != '' ".$where." ORDER BY ragione_sociale";
$sedi = $dbo->fetchArray($q);
foreach ($sedi as $sede) {
$results[] = [
'value' => $sede['email'],
'label' => $sede['ragione_sociale'].' <'.$sede['email'].'>',
];
}
$q = "SELECT DISTINCT(an_referenti.email), an_referenti.idanagrafica, an_referenti.nome AS ragione_sociale FROM an_referenti INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=an_referenti.idanagrafica INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche_anagrafiche.idanagrafica=an_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche.id=an_tipianagrafiche_anagrafiche.idtipoanagrafica INNER JOIN an_tipianagrafiche_lang ON (an_tipianagrafiche_lang.id_lang=1 AND an_tipianagrafiche_lang.id_record=an_tipianagrafiche.id) WHERE an_referenti.email != '' ".$where." ORDER BY ragione_sociale";
$referenti = $dbo->fetchArray($q);
foreach ($referenti as $referente) {
$results[] = [
'value' => $referente['email'],
'label' => $referente['ragione_sociale'].' <'.$referente['email'].'>',
];
}
echo json_encode($results);
break;
}

View File

@ -60,9 +60,15 @@ if (!$record['predefined']) {
</div>
<div class="row">
<div class="col-md-12">
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Oggetto'); ?>", "name": "subject", "value": "$subject$" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Proponi destinatari'); ?>", "name": "indirizzi_proposti", "value": "$indirizzi_proposti$", "values":"list=\"0\":\"<?php echo tr('Nessuno');?>\", \"1\":\"<?php echo tr('Clienti');?>\", \"2\":\"<?php echo tr('Fornitori');?>\", \"3\":\"<?php echo tr('Tutti');?>\" " ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Tipologia destinatari'); ?>", "name": "type", "value": "$type$", "values":"list=\"a\":\"<?php echo tr('A');?>\", \"cc\":\"<?php echo tr('CC');?>\", \"bcc\":\"<?php echo tr('CCN');?>\" ", "required":1 ]}
</div>
</div>
<div class="row">

View File

@ -25,3 +25,8 @@ INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`) V
-- Fix widget statistiche
UPDATE `zz_widgets` SET `class` = 'col-md-6' WHERE `zz_widgets`.`name` = "Spazio utilizzato";
-- Gestione tipi destinatari e autocompletamenti destinatari nelle mail in uscita
ALTER TABLE `em_templates`
ADD `type` varchar(5) NOT NULL DEFAULT 'a' AFTER `note_aggiuntive`,
ADD `indirizzi_proposti` TINYINT NOT NULL DEFAULT '0' AFTER `type`;