Merge branch 'master' into 2.4.2

This commit is contained in:
Thomas Zilio 2018-08-03 09:34:06 +02:00
commit 1fb3cc43b2
20 changed files with 359 additions and 181 deletions

View File

@ -325,6 +325,10 @@ if ($read_only || !empty($block_edit)) {
$(".btn-success, button[type=submit]").bind("click", function() {
content_was_modified = false;
});
$( "form" ).bind( "submit", function() {
content_was_modified = false;
})
// questo controllo blocca il modulo vendita al banco, dopo la lettura con barcode, appare il messaggio di conferma
window.onbeforeunload = function(e){

View File

@ -606,7 +606,7 @@ function start_datatables() {
$(win.document.body)
.css('font-size', '10pt')
.append(
'<table class="main-records table table-condensed table-bordered dataTable" ><tfoot><tr><td></td><td class="pull-right" >' + $('#summable').text() + '</td><td></td></tr></tfoot></table>',
'<table class="main-records table table-condensed table-bordered dataTable" ><tfoot><tr><td></td><td class="pull-right" >' + $('#summable').text() + '</td><td></td></tr></tfoot></table>'
);
$(win.document.body).find('table')
.addClass('compact')

View File

@ -158,6 +158,8 @@ echo '
$(this).autocomplete("search", $(this).val())
});;
});
aggiungi_destinatario();
});';
}

View File

@ -37,7 +37,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "required": 0, "value": "$note$" ]}
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
</div>
</div>
</div>

View File

@ -12,6 +12,16 @@ $op = 'edit-pianifica';
$data_conclusione = $dbo->fetchArray('SELECT `data_conclusione` FROM `co_contratti` WHERE `id` = '.prepare($id_record))[0]['data_conclusione'];
$idanagrafica = $dbo->fetchArray('SELECT `idanagrafica` FROM `co_contratti` WHERE `id` = '.prepare($id_record))[0]['idanagrafica'];
//tutti gli impianti a contratto
$idimpianti = $dbo->fetchArray('SELECT GROUP_CONCAT(`idimpianto`) AS idimpianti FROM `my_impianti_contratti` WHERE `idcontratto` = '.prepare($id_record))[0]['idimpianti'];
$idimpianto = explode(',', $idimpianti);
//solo se ho selezionato un solo impianto nel contratto, altrimenti non so quale sede e tecnico prendere
if (count($idimpianto) < 2) {
$idsede = $dbo->fetchArray('SELECT idsede FROM my_impianti WHERE id = '.prepare($idimpianto[0]))[0]['idsede'];
$idtecnico = $dbo->fetchArray('SELECT idtecnico FROM my_impianti WHERE id = '.prepare($idimpianto[0]))[0]['idtecnico'];
}
$list = '\"1\":\"'.tr('Pianificare a partire da oggi ').date('d/m/Y').'\"';
//promemoria esistente
@ -20,13 +30,20 @@ if (!empty(get('idcontratto_riga'))) {
$qp = 'SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento, (SELECT tempo_standard FROM in_tipiintervento WHERE idtipointervento = co_contratti_promemoria.idtipointervento) AS tempo_standard FROM co_contratti_promemoria WHERE id = '.$idcontratto_riga;
$rsp = $dbo->fetchArray($qp);
$data_richiesta = $rsp[0]['data_richiesta'];
$matricoleimpianti = trim($rsp[0]['idimpianti']);
$data_richiesta = Translator::dateToLocale($rsp[0]['data_richiesta']);
//sede nel promemoria
$idsede = $rsp[0]['idsede'];
$tempo_standard = $rsp[0]['tempo_standard'];
//if (!empty($rsp[0]['idtipointervento']))
$readonly = 'readonly';
$idtipointervento = $rsp[0]['idtipointervento'];
if (!empty($idsede)) {
//if (!empty($rsp[0]['idimpianti']))
$idimpianti = trim($rsp[0]['idimpianti']);
$readonly = 'readonly';
}
$hide = '';
$list .= ', \"0\":\"'.tr('Pianificare a partire da questo promemoria ').$data_richiesta.'\"';
@ -64,7 +81,7 @@ echo '
</div>
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "required": 1, "id": "idtipointervento_", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'", "extra": "'.$readonly.'" ]}
{[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "required": 1, "id": "idtipointervento_", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "'.$rsp[0]['idtipointervento'].'", "extra": "'.$readonly.'", "ajax-source": "tipiintervento", "value": "'.$idtipointervento.'" ]}
</div>
</div>
@ -74,12 +91,12 @@ echo '
<div class="row">
<div class="col-md-6">
{[ "type": "select", "multiple": "1", "label": "'.tr('Impianti a contratto').'", "name": "idimpianti[]", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_record.' ORDER BY descrizione", "value": "'.$matricoleimpianti.'", "extra":"'.$readonly.'" ]}
</div>
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede_c", "values": "query=SELECT 0 AS id, \'Sede legale\' AS descrizione UNION SELECT id, CONCAT( CONCAT_WS( \' (\', CONCAT_WS(\', \', `nomesede`, `citta`), `indirizzo` ), \')\') AS descrizione FROM an_sedi WHERE idanagrafica='.$idanagrafica.'", "value": "'.$idsede.'", "extra":"'.$readonly.'", "required" : "1" ]}
</div>
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede_c", "values": "query=SELECT 0 AS id, \'Sede legale\' AS descrizione UNION SELECT id, CONCAT( CONCAT_WS( \' (\', CONCAT_WS(\', \', `nomesede`, `citta`), `indirizzo` ), \')\') AS descrizione FROM an_sedi WHERE idanagrafica='.$idanagrafica.'", "value": "'.$idsede.'", "extra":"'.$readonly.'" ]}
</div>
{[ "type": "select", "multiple": "1", "label": "'.tr('Impianti a contratto').'", "name": "idimpianti[]", "help": "'.tr('Impianti sede selezionata').'", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_record.' ORDER BY descrizione", "value": "'.$idimpianti.'", "extra":"'.$readonly.'" ]}
</div>
</div>
@ -113,9 +130,6 @@ echo '
</div>
</div>
<!-- SPESE AGGIUNTIVE -->
<div class="panel panel-primary">
<div class="panel-heading">
@ -203,16 +217,16 @@ echo '
</div>
<div class="col-md-4">
{[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "required": 0, "ajax-source": "tecnici", "extra": "disabled" ]}
{[ "type": "select", "label": "'.tr('Tecnici').'", "multiple": "1", "name": "idtecnico[]", "ajax-source": "tecnici", "extra": "disabled", "value": "'.$idtecnico.'" ]}
</div>
<div class="col-xs-6 col-md-2">
{[ "type": "time", "label": "'.tr('Orario inizio').'", "name": "orario_inizio", "required": 0, "value": "'.$orario_inizio.'", "extra": "disabled" ]}
{[ "type": "time", "label": "'.tr('Orario inizio').'", "name": "orario_inizio", "value": "'.$orario_inizio.'", "extra": "disabled" ]}
</div>
<div class="col-xs-6 col-md-2">
{[ "type": "time", "label": "'.tr('Orario fine').'", "name": "orario_fine", "required": 0, "value": "'.$orario_fine.'", "extra": "disabled" ]}
{[ "type": "time", "label": "'.tr('Orario fine').'", "name": "orario_fine", "value": "'.$orario_fine.'", "extra": "disabled" ]}
</div>
</div>
@ -237,12 +251,11 @@ echo '
<script>
$(document).ready(function() {
if ($("#idtipointervento_").val()==""){
if (!$("#idtipointervento_").val()){
$("#add_form .panel-primary .panel-primary").hide();
$("#bs-popup .btn-primary").hide();
};
$("#idtipointervento_").change(function(){
if (($(this).val()!="")){
$("#add_form .panel-primary .panel-primary").show();

View File

@ -9,12 +9,19 @@ switch (filter('op')) {
case 'add-pianifica':
$data_richiesta = filter('data_richiesta');
$query = 'INSERT INTO `co_contratti_promemoria` ( `idcontratto`, `data_richiesta` ) VALUES ('.prepare($id_record).', '.prepare($data_richiesta).')';
$idtipointervento = filter('idtipointervento');
$query = 'INSERT INTO `co_contratti_promemoria` ( `idcontratto`, `data_richiesta`, idtipointervento ) VALUES ('.prepare($id_record).', '.prepare($data_richiesta).', '.prepare($idtipointervento).' )';
if ($dbo->query($query)) {
} else {
flash()->error(tr("Errore durante l'aggiunta del promemoria!"));
}
//$are_duplicated = $dbo->fetchNum('SELECT id FROM co_contratti_promemoria WHERE data_richiesta = '.prepare($data_richiesta).' AND idtipointervento = '.prepare($idtipointervento).' AND idcontratto = '.prepare($id_record) );
//if (empty($are_duplicated)){
if ($dbo->query($query)) {
} else {
flash()->error(tr("Errore durante l'aggiunta del promemoria!"));
}
//}else{
//$_SESSION['warnings'][] = tr('Promemoria non inserito perché esiste già per questa data e per questo tipo intervento.');
//}
break;
case 'edit-pianifica':
@ -77,6 +84,7 @@ switch (filter('op')) {
$intervallo = filter('intervallo');
$parti_da_oggi = post('parti_da_oggi');
//if principale
if (!empty($idcontratto_riga) && !empty($intervallo)) {
$qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_record.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_record.' ) AS data_conclusione, '.
'(SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria '.
@ -105,14 +113,25 @@ switch (filter('op')) {
}
//inizio controllo data_conclusione, data valida e maggiore della $min_date
if ((date('Y', strtotime($data_conclusione)) > 1970) && (date('Y-m-d', strtotime($min_date)) < date('Y-m-d', strtotime($data_conclusione)))) {
if ((date('Y', strtotime($data_conclusione)) > 1970) && (date('Y-m-d', strtotime($min_date)) <= date('Y-m-d', strtotime($data_conclusione)))) {
//$_SESSION['errors'][] = '1';
$i = 0;
//Ciclo partendo dalla data_richiesta fino all data conclusione del contratto
while (date('Y-m-d', strtotime($data_richiesta)) < date('Y-m-d', strtotime($data_conclusione))) {
//calcolo nuova data richiesta
$data_richiesta = date('Y-m-d', strtotime($data_richiesta.' + '.intval($intervallo).' days'));
while (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione))) {
//$_SESSION['errors'][] = '2';
//calcolo nuova data richiesta, non considero l'intervallo al primo ciclo
$data_richiesta = date('Y-m-d', strtotime($data_richiesta.' + '.(($i == 0) ? 0 : $intervallo).' days'));
++$i;
//$_SESSION['errors'][] = 'data_richiesta: '.date('Y-m-d', strtotime($data_richiesta));
//$_SESSION['errors'][] = 'data_conclusione: '.date('Y-m-d', strtotime($data_conclusione));
//$_SESSION['errors'][] = 'min_date: '.$min_date;
//controllo nuova data richiesta --> solo date maggiori o uguali di [oggi o data richiesta iniziale] ma che non superano la data di fine del contratto
if ((date('Y-m-d', strtotime($data_richiesta)) >= $min_date) && (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione)))) {
//$_SESSION['errors'][] = '3';
//Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta.
if (count($dbo->fetchArray("SELECT id FROM co_contratti_promemoria WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0) {
//inserisco il nuovo promemoria
@ -128,102 +147,111 @@ switch (filter('op')) {
$dbo->query('INSERT INTO co_righe_contratti_articoli (idarticolo, id_riga_contratto,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idriga.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' ');
flash()->info(tr('Promemoria intervento pianificato!'));
//pianificare anche l' intervento?
if (post('pianifica_intervento')) {
/*$orario_inizio = post('orario_inizio');
$orario_fine = post('orario_fine');*/
//$idanagrafica = 2;
//intervento sempre nello stato "In programmazione"
$idstatointervento = 'WIP';
//calcolo codice intervento
$formato = setting('Formato codice intervento');
$template = str_replace('#', '%', $formato);
$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1');
if (!empty($rs[0]['codice'])) {
$codice = Util\Generator::generate($formato, $rs[0]['codice']);
}
if (empty($codice)) {
$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1');
$codice = Util\Generator::generate($formato, $rs[0]['codice']);
}
// Creo intervento
$dbo->insert('in_interventi', [
'idanagrafica' => $idanagrafica,
'idclientefinale' => post('idclientefinale') ?: 0,
'idstatointervento' => $idstatointervento,
'idtipointervento' => $idtipointervento,
'idsede' => $idsede ?: 0,
'idautomezzo' => $idautomezzo ?: 0,
'codice' => $codice,
'data_richiesta' => $data_richiesta,
'richiesta' => $richiesta,
]);
$idintervento = $dbo->lastInsertedID();
$idtecnici = post('idtecnico');
//aggiungo i tecnici
foreach ($idtecnici as $idtecnico) {
add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_record);
}
//collego l'intervento ai promemoria
$dbo->query('UPDATE co_contratti_promemoria SET idintervento='.prepare($idintervento).' WHERE id='.prepare($idriga));
//copio le righe dal promemoria all'intervento
$dbo->query('INSERT INTO in_righe_interventi (descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,idintervento,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$idintervento.',sconto,sconto_unitario,tipo_sconto FROM co_righe_contratti_materiali WHERE id_riga_contratto = '.$idcontratto_riga.' ');
//copio gli articoli dal promemoria all'intervento
$dbo->query('INSERT INTO mg_articoli_interventi (idarticolo, idintervento,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idintervento.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' ');
//copio gli allegati dal promemoria all'intervento
$dbo->query('INSERT INTO zz_files (nome,filename,original,category,id_module,id_record) SELECT t.nome, t.filename, t.original, t.category, '.Modules::get('Interventi')['id'].', '.$idintervento.' FROM zz_files t WHERE t.id_record = '.$idcontratto_riga.' AND t.id_plugin = '.$id_plugin.'');
// Decremento la quantità per ogni articolo copiato
$rs_articoli = $dbo->fetchArray('SELECT * FROM mg_articoli_interventi WHERE idintervento = '.$idintervento.' ');
foreach ($rs_articoli as $rs_articolo) {
add_movimento_magazzino($rs_articolo['idarticolo'], -force_decimal($rs_articolo['qta']), ['idautomezzo' => $rs_articolo['idautomezzo'], 'idintervento' => $idintervento]);
}
// Collego gli impianti del promemoria all' intervento appena inserito
if (!empty($idimpianti)) {
$rs_idimpianti = explode(',', $idimpianti);
foreach ($rs_idimpianti as $idimpianto) {
$dbo->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.$idintervento.', '.prepare($idimpianto).' )');
}
}
// flash()->info(tr('Intervento '.$codice.' pianificato correttamente.'));
flash()->info(tr('Interventi pianificati correttamente.'));
}
//fine if pianificazione intervento
} else {
flash()->error(tr('Errore durante esecuzione query di pianificazione. #'.$idcontratto_riga));
}
} else {
flash()->warning(tr('Esiste già un promemoria pianificato per il '.Translator::dateToLocale($data_richiesta).'.'));
}
//Controllo che non esista già un intervento collegato a questo promemoria e, se ho spuntato di creare l'intervento, creo già anche quello
if ((empty($dbo->fetchArray("SELECT idintervento FROM co_contratti_promemoria WHERE id = '".((empty($idriga)) ? $idcontratto_riga : $idriga)."'")[0]['idintervento'])) && (post('pianifica_intervento'))) {
//pianificare anche l' intervento?
//if (post('pianifica_intervento')) {
/*$orario_inizio = post('orario_inizio');
$orario_fine = post('orario_fine');*/
//$idanagrafica = 2;
//intervento sempre nello stato "In programmazione"
$idstatointervento = 'WIP';
//calcolo codice intervento
$formato = get_var('Formato codice intervento');
$template = str_replace('#', '%', $formato);
$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice=(SELECT MAX(CAST(codice AS SIGNED)) FROM in_interventi) AND codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1');
if (!empty($rs[0]['codice'])) {
$codice = Util\Generator::generate($formato, $rs[0]['codice']);
}
if (empty($codice)) {
$rs = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE codice LIKE '.prepare($template).' ORDER BY codice DESC LIMIT 0,1');
$codice = Util\Generator::generate($formato, $rs[0]['codice']);
}
// Creo intervento
$dbo->insert('in_interventi', [
'idanagrafica' => $idanagrafica,
'idclientefinale' => post('idclientefinale') ?: 0,
'idstatointervento' => $idstatointervento,
'idtipointervento' => $idtipointervento,
'idsede' => $idsede ?: 0,
'idautomezzo' => $idautomezzo ?: 0,
'codice' => $codice,
'data_richiesta' => $data_richiesta,
'richiesta' => $richiesta,
]);
$idintervento = $dbo->lastInsertedID();
$idtecnici = post('idtecnico');
//aggiungo i tecnici
foreach ($idtecnici as $idtecnico) {
add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_record);
}
//collego l'intervento ai promemoria
$dbo->query('UPDATE co_contratti_promemoria SET idintervento='.prepare($idintervento).' WHERE id='.prepare(((empty($idriga)) ? $idcontratto_riga : $idriga)));
//copio le righe dal promemoria all'intervento
$dbo->query('INSERT INTO in_righe_interventi (descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,idintervento,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$idintervento.',sconto,sconto_unitario,tipo_sconto FROM co_righe_contratti_materiali WHERE id_riga_contratto = '.$idcontratto_riga.' ');
//copio gli articoli dal promemoria all'intervento
$dbo->query('INSERT INTO mg_articoli_interventi (idarticolo, idintervento,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idintervento.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva,idautomezzo, qta, um, abilita_serial, idimpianto FROM co_righe_contratti_articoli WHERE id_riga_contratto = '.$idcontratto_riga.' ');
//copio gli allegati dal promemoria all'intervento
$dbo->query('INSERT INTO zz_files (nome,filename,original,category,id_module,id_record) SELECT t.nome, t.filename, t.original, t.category, '.Modules::get('Interventi')['id'].', '.$idintervento.' FROM zz_files t WHERE t.id_record = '.$idcontratto_riga.' AND t.id_plugin = '.$id_plugin.'');
// Decremento la quantità per ogni articolo copiato
$rs_articoli = $dbo->fetchArray('SELECT * FROM mg_articoli_interventi WHERE idintervento = '.$idintervento.' ');
foreach ($rs_articoli as $rs_articolo) {
add_movimento_magazzino($rs_articolo['idarticolo'], -force_decimal($rs_articolo['qta']), ['idautomezzo' => $rs_articolo['idautomezzo'], 'idintervento' => $idintervento]);
}
// Collego gli impianti del promemoria all' intervento appena inserito
if (!empty($idimpianti)) {
$rs_idimpianti = explode(',', $idimpianti);
foreach ($rs_idimpianti as $idimpianto) {
$dbo->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.$idintervento.', '.prepare($idimpianto).' )');
}
}
// $_SESSION['infos'][] = tr('Intervento '.$codice.' pianificato correttamente.');
flash()->info(tr('Interventi pianificati correttamente'));
//fine if pianificazione intervento
//}
} elseif (post('pianifica_intervento')) {
flash()->warning(tr('Esiste già un intervento pianificato per il '.Translator::dateToLocale($data_richiesta).'.'));
}
}
//fine controllo nuova data richiesta
/*}else {
$_SESSION['errors'][] = tr('Errore durante esecuzione query di pianificazione. #'.$idcontratto_riga);
}*/
}
//fine ciclo while
} else {
flash()->error(tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria.'.$qp));
flash()->error(tr('Nessuna data di conclusione del contratto oppure quest\'ultima è già trascorsa, impossibile pianificare nuovi promemoria'));
}
//fine controllo data_conclusione
} else {
flash()->error(tr('Errore durante la pianificazione. #'.$idcontratto_riga));
}
//fine if principale
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
break;
@ -233,15 +261,18 @@ switch (filter('op')) {
$qp = 'SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_contratti_promemoria.idtipointervento) AS tipointervento FROM co_contratti_promemoria WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC';
$rsp = $dbo->fetchArray($qp);
//intervento/promemoria pianificabile
$pianificabile = $dbo->fetchNum('SELECT id FROM co_staticontratti WHERE pianificabile = 1 AND descrizione = '.prepare($record['stato']));
$stati_pianificabili = $dbo->fetchArray('SELECT GROUP_CONCAT(`descrizione`) AS stati_pianificabili FROM `co_staticontratti` WHERE `pianificabile` = 1')[0]['stati_pianificabili'];
echo '
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><span class="tip" title="'.tr('I promemoria verranno visualizzati sulla \'Dashboard\' e serviranno per semplificare la pianificazione del giorno dell\'intervento, ad esempio nel caso di interventi con cadenza mensile.').'"" >'.tr('Pianificazione interventi').' <i class="fa fa-question-circle-o"></i></span> </h3>
</div>
<div class="box-body">
<p>'.tr('Puoi <b>pianificare dei "promemoria" o direttamente gli interventi</b> da effettuare entro determinate scadenze. Per poter pianificare i promemoria il contratto deve essere <b>attivo</b> e la <b>data di conclusione</b> definita').'.</p>';
<p>'.tr('Puoi <b>pianificare dei "promemoria" o direttamente gli interventi</b> da effettuare entro determinate scadenze. Per poter pianificare i promemoria il contratto deve essere in uno dei seguenti stati: <b>'.$stati_pianificabili.'</b> e la <b>data di conclusione</b> definita').'.</p>';
// Nessun intervento pianificato
if (count($rsp) != 0) {
@ -286,9 +317,11 @@ if (count($rsp) != 0) {
]));
$disabled = 'disabled';
$title = 'Per eliminare il promemoria, eliminare prima l\'intervento associato.';
} else {
$info_intervento = '- '.('Nessuno').' -';
$disabled = '';
$title = 'Elimina promemoria...';
}
//data_conclusione contratto
@ -352,13 +385,13 @@ if (count($rsp) != 0) {
<td align="right">';
echo '
<button type="button" class="btn btn-warning btn-sm" title="Pianifica..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica\', \''.$rootdir.'/modules/contratti/plugins/addpianficazione.php?id_module='.Modules::get('Contratti')['id'].'&id_plugin='.Plugins::get('Pianificazione interventi')['id'].'&ref=interventi_contratti&id_record='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.((!empty($pianificabile) && strtotime($record['data_conclusione'])) ? '' : ' disabled').'><i class="fa fa-clock-o"></i></button>';
<button type="button" class="btn btn-warning btn-sm" title="Pianifica..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica\', \''.$rootdir.'/modules/contratti/plugins/addpianficazione.php?id_module='.Modules::get('Contratti')['id'].'&id_plugin='.Plugins::get('Pianificazione interventi')['id'].'&ref=interventi_contratti&id_record='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.((!empty($pianificabile) && strtotime($record['data_conclusione'])) ? '' : ' disabled').'><i class="fa fa-clock-o"></i></button>';
echo '
<button type="button" '.$disabled.' class="btn btn-primary btn-sm '.$disabled.' " title="Pianifica intervento ora..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica intervento\', \''.$rootdir.'/add.php?id_module='.Modules::get('Interventi')['id'].'&ref=interventi_contratti&idcontratto='.$id_record.'&idcontratto_riga='.$rsp[$i]['id'].'\');"'.(!empty($pianificabile) ? '' : ' disabled').'><i class="fa fa-calendar"></i></button>';
echo '
<button type="button" '.$disabled.' title="Elimina promemoria..." class="btn btn-danger btn-sm ask '.$disabled.' " data-op="depianifica" data-id="'.$rsp[$i]['id'].'">
<button type="button" '.$disabled.' title="'.$title.'" class="btn btn-danger btn-sm ask '.$disabled.' " data-op="depianifica" data-id="'.$rsp[$i]['id'].'">
<i class="fa fa-trash"></i>
</button>';
@ -373,7 +406,7 @@ if (count($rsp) != 0) {
echo '<br><div class="pull-right">';
if (count($rsp) > 0) {
echo ' <button type="button" title="Elimina tutti i promemoria per questo contratto che non sono associati ad intervento." class="btn btn-danger ask tip" data-op="delete-promemoria" >
echo ' <button type="button" title="Elimina tutti i promemoria non associati ad intervento." class="btn btn-danger ask tip" data-op="delete-promemoria" >
<i class="fa fa-trash"></i> '.tr('Elimina promemoria').'
</button>';
}
@ -431,36 +464,68 @@ echo '
</div>
</div>';
$inputOptions = $dbo->fetchArray('SELECT GROUP_CONCAT(CONCAT(\'"\', idtipointervento, \'"\',\':\', \'"\', descrizione, \'"\')) AS inputOptions FROM `in_tipiintervento`')[0]['inputOptions'];
?>
<script type="text/javascript">
function askTipoIntervento () {
swal({
title: '<?php echo tr('Aggiungere un nuovo promemoria?'); ?>',
type: "info",
showCancelButton: true,
confirmButtonText: '<?php echo tr('Aggiungi'); ?>',
confirmButtonClass: 'btn btn-lg btn-success',
input: 'select',
inputOptions: {<?php echo $inputOptions; ?>},
inputPlaceholder: '<?php echo tr('Tipo intervento'); ?>',
inputValidator: (value) => {
return new Promise((resolve) => {
if (value === '') {
alert ('Seleziona un tipo intervento');
$('.swal2-select').attr('disabled', false);
$('.swal2-confirm').attr('disabled', false);
$('.swal2-cancel').attr('disabled', false);
} else {
resolve()
}
})
}
}).then(
function (result) {
prev_html = $("#add_promemoria").html();
$("#add_promemoria").html("<i class='fa fa-spinner fa-pulse fa-fw'></i> <?php echo tr('Attendere...'); ?>");
$("#add_promemoria").prop('disabled', true);
$.post( "<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get('Contratti')['id']; ?>&id_record=<?php echo $id_record; ?>", { backto: "record-edit", op: "add-pianifica", data_richiesta: '<?php echo date('Y-m-d'); ?>', idtipointervento: $('.swal2-select').val() })
.done(function( data ) {
launch_modal('Nuovo promemoria', '<?php echo $rootdir; ?>/modules/contratti/plugins/addpianficazione.php?id_module=<?php echo Modules::get('Contratti')['id']; ?>&id_plugin=<?php echo Plugins::get('Pianificazione interventi')['id']; ?>&ref=interventi_contratti&id_record=<?php echo $id_record; ?>&idcontratto_riga='+data+'', 1, '#bs-popup');
$("#add_promemoria").html(prev_html);
$("#add_promemoria").prop('disabled', false);
});
},
function (dismiss) {}
);
}
$( "#add_promemoria" ).click(function() {
swal({
title: '<?php echo tr('Aggiungere un nuovo promemoria?'); ?>',
type: "info",
showCancelButton: true,
confirmButtonText: '<?php echo tr('Aggiungi'); ?>',
confirmButtonClass: 'btn btn-lg btn-success',
}).then(
function (result) {
prev_html = $("#add_promemoria").html();
$("#add_promemoria").html("<i class='fa fa-spinner fa-pulse fa-fw'></i> <?php echo tr('Attendere...'); ?>");
$("#add_promemoria").prop('disabled', true);
$.post( "<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get('Contratti')['id']; ?>&id_record=<?php echo $id_record; ?>", { backto: "record-edit", op: "add-pianifica", data_richiesta: '<?php echo date('Y-m-d'); ?>' })
.done(function( data ) {
launch_modal('Nuovo promemoria', '<?php echo $rootdir; ?>/modules/contratti/plugins/addpianficazione.php?id_module=<?php echo Modules::get('Contratti')['id']; ?>&id_plugin=<?php echo Plugins::get('Pianificazione interventi')['id']; ?>&ref=interventi_contratti&id_record=<?php echo $id_record; ?>', 1, '#bs-popup');
$("#add_promemoria").html(prev_html);
$("#add_promemoria").prop('disabled', false);
});
},
function (dismiss) {}
);
askTipoIntervento();
});
</script>

View File

@ -60,7 +60,7 @@ echo '
</div>
<div class="col-md-6">
{[ "type": "checkbox", "label": "'.tr('Copia descrizione').'", "name": "copia_descrizione", "required": 0, "placeholder": "'.tr('In fase di selezione copia la descrizione dell\'intervento').'." ]}
{[ "type": "checkbox", "label": "'.tr('Copia descrizione').'", "name": "copia_descrizione", "placeholder": "'.tr('In fase di selezione copia la descrizione dell\'intervento').'." ]}
</div>
</div>';

View File

@ -147,7 +147,7 @@ if ($dir == 'entrata') {
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Banca'); ?>", "name": "idbanca", "required": 0, "values": "query=SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche WHERE deleted_at IS NULL ORDER BY nome ASC", "value": "$idbanca$" ]}
{[ "type": "select", "label": "<?php echo tr('Banca'); ?>", "name": "idbanca", "values": "query=SELECT id, CONCAT (nome, ' - ' , iban) AS descrizione FROM co_banche WHERE deleted_at IS NULL ORDER BY nome ASC", "value": "$idbanca$" ]}
</div>
</div>
@ -306,7 +306,7 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
}
// Lettura ddt
$ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
$ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="Aggiungi ddt" data-target="#bs-popup">

View File

@ -90,6 +90,9 @@ elseif (!empty($idcontratto) && !empty($idcontratto_riga)) {
$idimpianto = implode(',', array_column($rs, 'idimpianto'));
} else {
$idimpianto = $idimpianti;
// Spunto il tecnico di default assegnato all'impianto
$rs = $dbo->fetchArray('SELECT idtecnico FROM my_impianti WHERE id='.prepare($idimpianto));
$idtecnico = $rs[0]['idtecnico'] ?: '';
}
// Seleziono "In programmazione" come stato
@ -185,7 +188,7 @@ if (empty($new_codice)) {
<!-- RIGA 3 -->
<div class="row">
<!--div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Codice intervento'); ?>", "name": "codice", "required": 1, "class": "text-center", "value": "<?php echo $new_codice; ?>" ]}
{[ "type": "text", "label": "<?php echo tr('Codice attività'); ?>", "name": "codice", "required": 1, "class": "text-center", "value": "<?php echo $new_codice; ?>" ]}
</div-->
<div class="col-md-4">
@ -193,7 +196,7 @@ if (empty($new_codice)) {
</div>
<div class="col-md-4">
{[ "type": "date", "label": "<?php echo tr('Data intervento'); ?>", "name": "data", "required": <?php echo get('ref') ? 1 : 0; ?>, "value": "<?php echo $data; ?>" ]}
{[ "type": "date", "label": "<?php echo tr('Data attività'); ?>", "name": "data", "required": <?php echo get('ref') ? 1 : 0; ?>, "value": "<?php echo $data; ?>" ]}
</div>
<div class="col-md-4">
@ -204,11 +207,11 @@ if (empty($new_codice)) {
<!-- RIGA 4 -->
<div class="row">
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Tipo intervento'); ?>", "name": "idtipointervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "<?php echo $idtipointervento; ?>", "ajax-source": "tipiintervento" ]}
{[ "type": "select", "label": "<?php echo tr('Tipo attività'); ?>", "name": "idtipointervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "<?php echo $idtipointervento; ?>", "ajax-source": "tipiintervento" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Stato intervento'); ?>", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL", "value": "<?php echo $idstatointervento; ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Stato'); ?>", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL", "value": "<?php echo $idstatointervento; ?>" ]}
</div>
<div class="col-md-2">

View File

@ -2,6 +2,10 @@
include_once __DIR__.'/../../core.php';
//unset($_SESSION['superselect']['idanagrafica']);
//unset($_SESSION['superselect']['idsede']);
$source = get('source');
$idanagrafica = null;
@ -23,11 +27,15 @@ if ($source == 'Attività') {
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1 ]}
</div>
<div class="col-md-6">
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Cliente' AND deleted_at IS NULL ORDER BY ragione_sociale", "value": "<?php echo $idanagrafica; ?>", "ajax-source": "clienti" ]}
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Sede'); ?>", "name": "idsede", "values": "query=SELECT 0 AS id, 'Sede legale' AS descrizione UNION SELECT id, CONCAT_WS( ' - ', nomesede, citta ) AS descrizione FROM an_sedi WHERE idanagrafica='$idanagrafica$'", "value": "$idsede$", "required": "1", "ajax-source": "sedi" ]}
</div>
<div class="col-md-6">
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Tecnico'); ?>", "name": "idtecnico", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Tecnico' AND deleted_at IS NULL ORDER BY ragione_sociale" ]}
</div>
</div>
@ -39,3 +47,25 @@ if ($source == 'Attività') {
</div>
</div>
</form>
<script type="text/javascript">
$(document).ready(function(){
$('#idanagrafica').change( function(){
session_set('superselect,idanagrafica', $(this).val(), 0);
var value = !$(this).val() ? true : false;
$("#idsede").prop("disabled", value);
$("#idsede").selectReset();
});
$('#idsede').change( function(){
//session_set('superselect,idsede', $(this).val(), 0);
});
});
</script>

View File

@ -25,7 +25,8 @@ switch ($resource) {
}
$where[] = 'idanagrafica='.prepare($superselect['idanagrafica']);
$where[] = 'idsede='.prepare($superselect['idsede']);
if (!empty($superselect['idsede']))
$where[] = 'idsede='.prepare($superselect['idsede']);
if (!empty($search)) {
$search_fields[] = 'nome LIKE '.prepare('%'.$search.'%');

View File

@ -2,6 +2,10 @@
include_once __DIR__.'/../../core.php';
//unset($_SESSION['superselect']['idanagrafica']);
//unset($_SESSION['superselect']['idsede']);
$img = null;
if (!empty($record['immagine'])) {
$fileinfo = Uploads::fileInfo($record['immagine']);
@ -40,7 +44,7 @@ if (!empty($record['immagine'])) {
<div class="clearfix"></div>
<div class="col-md-12">
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Cliente' AND deleted_at IS NULL ORDER BY ragione_sociale", "value": "$idanagrafica$", "extra": "onchange=\"load_preventivi( this.value ); load_contratti( this.value ); $('#idsede').load( '<?php echo $rootdir; ?>/ajax_complete.php?module=Anagrafiche&op=get_sedi_select&idanagrafica='+$('#idanagrafica option:selected').val() ); load_impianti( $('#idanagrafica option:selected').val(), $('#idsede option:selected').val() );\"", "ajax-source": "clienti" ]}
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "name": "idanagrafica", "required": 1, "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE descrizione='Cliente' AND deleted_at IS NULL ORDER BY ragione_sociale", "value": "$idanagrafica$", "extra": "", "ajax-source": "clienti" ]}
</div>
</div>
</div>
@ -56,7 +60,7 @@ if (!empty($record['immagine'])) {
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Sede'); ?>", "name": "idsede", "values": "query=SELECT 0 AS id, 'Sede legale' AS descrizione UNION SELECT id, CONCAT_WS( ' - ', nomesede, citta ) AS descrizione FROM an_sedi WHERE idanagrafica='$idanagrafica$'", "value": "$idsede$" ]}
{[ "type": "select", "label": "<?php echo tr('Sede'); ?>", "name": "idsede", "values": "query=SELECT 0 AS id, 'Sede legale' AS descrizione UNION SELECT id, CONCAT_WS( ' - ', nomesede, citta ) AS descrizione FROM an_sedi WHERE idanagrafica='$idanagrafica$'", "value": "$idsede$", "required": "1", "ajax-source": "sedi" ]}
</div>
</div>
@ -110,3 +114,25 @@ if (!empty($record['immagine'])) {
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
</a>
<script type="text/javascript">
$(document).ready(function(){
$('#idanagrafica').change( function(){
session_set('superselect,idanagrafica', $(this).val(), 0);
var value = !$(this).val() ? true : false;
$("#idsede").prop("disabled", value);
$("#idsede").selectReset();
});
$('#idsede').change( function(){
//session_set('superselect,idsede', $(this).val(), 0);
});
});
</script>

View File

@ -2,7 +2,7 @@
include_once __DIR__.'/../../core.php';
if (!in_array($record['stato'], ['Bozza', 'Evaso', 'Fatturato'])) {
if (!in_array($record['stato'], ['Evaso', 'Fatturato'])) {
echo '
<div class="dropdown">
<button class="btn btn-info dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
@ -11,16 +11,16 @@ if (!in_array($record['stato'], ['Bozza', 'Evaso', 'Fatturato'])) {
</button>
<ul class="dropdown-menu dropdown-menu-right">';
if (in_array($records[0]['stato'], ['Parzialmente evaso'])) {
echo '
if (in_array($record['stato'], ['Bozza', 'Parzialmente evaso'])){
echo '
<li>
<a data-href="'.$rootdir.'/modules/fatture/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&documento=ddt" data-toggle="modal" data-title="'.tr('Crea ddt').'" data-target="#bs-popup"><i class="fa fa-file-o"></i>&nbsp;'.tr('ddt').'
</a>
</li>';
}
}
if (in_array($records[0]['stato'], ['Parzialmente fatturato'])) {
echo '
if (in_array($record['stato'], ['Bozza', 'Parzialmente fatturato'])){
echo '
<li>
<a data-href="'.$rootdir.'/modules/fatture/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea fattura').'" data-target="#bs-popup"><i class="fa fa-file"></i>&nbsp;'.tr('fattura').'
</a>

View File

@ -118,7 +118,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "<?php echo tr('Modello primanota'); ?>", "id": "modello_primanota", "required": 0, "values": "query=SELECT idmastrino AS id, descrizione FROM co_movimenti_modelli GROUP BY idmastrino" ]}
{[ "type": "select", "label": "<?php echo tr('Modello primanota'); ?>", "id": "modello_primanota", "values": "query=SELECT idmastrino AS id, descrizione FROM co_movimenti_modelli GROUP BY idmastrino" ]}
</div>
</div>

View File

@ -12,7 +12,7 @@ include_once __DIR__.'/../../core.php';
</div>
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Maschera'); ?>", "name": "pattern", "required": 0, "class": "alphanumeric-mask", "value": "$pattern$", "maxlength": 25, "placeholder":"####/yy" ]}
{[ "type": "text", "label": "<?php echo tr('Maschera'); ?>", "name": "pattern", "class": "alphanumeric-mask", "value": "$pattern$", "maxlength": 25, "placeholder":"####/yy" ]}
</div>
</div>
@ -31,7 +31,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "Note", "name": "note", "required": 0 ]}
{[ "type": "textarea", "label": "Note", "name": "note" ]}
</div>
</div>

View File

@ -47,7 +47,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "required": 0, "value": "$note$" ]}
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}
</div>
</div>
</div>
@ -71,7 +71,7 @@ if (strpos($table[0], 'co_documenti') !== false) {
?>
<div class="col-md-3">
{[ "type": "text", "label": "<?php echo tr('Maschera'); ?>", "name": "pattern", "required": 0, "class": "alphanumeric-mask", "value": "$pattern$", "maxlength": 25, "placeholder":"####/YY", "extra": "<?php echo ($tot > 0) ? 'readonly' : ''; ?>" ]}
{[ "type": "text", "label": "<?php echo tr('Maschera'); ?>", "name": "pattern", "class": "alphanumeric-mask", "value": "$pattern$", "maxlength": 25, "placeholder":"####/YY", "extra": "<?php echo ($tot > 0) ? 'readonly' : ''; ?>" ]}
</div>
</div>

View File

@ -14,7 +14,7 @@ echo '
</div>
<div class="col-md-4">
{[ "type": "text", "label": "'.tr('Indirizzo').'", "name": "indirizzo", "required": 1 ]}
{[ "type": "text", "label": "'.tr('Indirizzo').'", "name": "indirizzo", "required": 0 ]}
</div>
<div class="col-md-4">
@ -24,7 +24,7 @@ echo '
<div class="row">
<div class="col-md-3">
{[ "type": "text", "label": "'.tr('Città').'", "name": "citta" ]}
{[ "type": "text", "label": "'.tr('Città').'", "name": "citta", "required": 1 ]}
</div>
<div class="col-md-3">

View File

@ -48,7 +48,7 @@ echo "
// RIGHE FATTURA CON ORDINAMENTO UNICO
$righe = $dbo->fetchArray("SELECT *,
IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `co_righe_documenti`.`idarticolo`), '') AS codice_articolo,
IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `co_righe_documenti`.`idarticolo`), '') AS codice_articolo,
(SELECT GROUP_CONCAT(`serial` SEPARATOR ', ') FROM `mg_prodotti` WHERE `id_riga_documento` = `co_righe_documenti`.`id`) AS seriali,
(SELECT `percentuale` FROM `co_iva` WHERE `id` = `co_righe_documenti`.`idiva`) AS perc_iva
FROM `co_righe_documenti` WHERE `iddocumento` = ".prepare($id_record).' ORDER BY `order`');
@ -59,10 +59,16 @@ foreach ($righe as $r) {
// Valori assoluti
$r['qta'] = abs($r['qta']);
$r['subtotale'] = abs($r['subtotale']);
if (empty($r['sconto_globale']))
$r['subtotale'] = abs($r['subtotale']);
else
$r['subtotale'] = ($r['subtotale']);
$r['sconto_unitario'] = abs($r['sconto_unitario']);
$r['sconto'] = abs($r['sconto']);
$r['iva'] = abs($r['iva']);
if (empty($r['sconto_globale']))
$r['iva'] = abs($r['iva']);
else
$r['iva'] = ($r['iva']);
echo '
<tr>
@ -135,8 +141,8 @@ foreach ($righe as $r) {
echo "
<td class='text-right'>";
if (empty($r['is_descrizione'])) {
echo '
'.(empty($r['qta']) || empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'] / $r['qta'])).' &euro;';
echo '
'.(empty($r['qta']) || empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'] / $r['qta'])).' &euro;';
if ($r['sconto'] > 0) {
echo "
@ -158,8 +164,8 @@ foreach ($righe as $r) {
echo "
<td class='text-right'>";
if (empty($r['is_descrizione'])) {
echo '
'.(empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'] - $r['sconto'])).' &euro;';
echo '
'.(empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'] - $r['sconto'])).' &euro;';
if ($r['sconto'] > 0) {
/*echo "
@ -188,11 +194,6 @@ foreach ($righe as $r) {
</tr>';
$autofill['count'] += $count;
$imponibile[] = $r['subtotale'];
$iva[] = $r['iva'];
$sconto[] = $r['sconto'];
$v_iva[$r['desc_iva']] = sum($v_iva[$r['desc_iva']], $r['iva']);
$v_totale[$r['desc_iva']] = sum($v_totale[$r['desc_iva']], [
$r['subtotale'], -$r['sconto'],
@ -272,9 +273,32 @@ echo '
echo '
</table>';
// Info per il footer
$imponibile = sum($imponibile);
$iva = sum($iva, 0) + $records[0]['iva_rivalsainps'];
$sconto = sum($sconto);
$totale = $imponibile + $iva - $sconto + $records[0]['rivalsainps'];
// Calcoli
$imponibile = sum(array_column($righe, 'subtotale'));
$sconto = sum(array_column($righe, 'sconto'));
$iva = sum(array_column($righe, 'iva'));
$imponibile_scontato = sum($imponibile, -$sconto);
$totale_iva = sum($iva, $records[0]['iva_rivalsainps']);
$totale = sum([
$imponibile_scontato,
$records[0]['rivalsainps'],
$totale_iva,
]);
$netto_a_pagare = sum([
$totale,
$records[0]['bollo'],
-$records[0]['ritenutaacconto'],
]);
$imponibile = abs($imponibile);
$sconto = abs($sconto);
$iva = abs($iva);
$imponibile_scontato = abs($imponibile_scontato);
$totale_iva = abs($totale_iva);
$totale = abs($totale);
$netto_a_pagare = abs($netto_a_pagare);

View File

@ -149,7 +149,7 @@ if (!empty($sconto)) {
echo "
<td class='cell-padded text-center'>
".Translator::numberToLocale($iva)." &euro;
".Translator::numberToLocale($totale_iva)." &euro;
</td>
<td class='cell-padded text-center'>

View File

@ -464,3 +464,13 @@ UPDATE `zz_views` SET `enabled` = 0 WHERE `id_module` = (SELECT `id` FROM `zz_mo
-- Aggiunta campi per specificare se la riga importata è un import unico di pù righe
ALTER TABLE `co_righe_documenti` ADD `is_preventivo` TINYINT(1) NOT NULL AFTER `is_descrizione`, ADD `is_contratto` TINYINT(1) NOT NULL AFTER `is_preventivo`;
-- Aggiunta colonna 'Sede' per MyImpianti
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `enabled`, `summable`, `default` ) VALUES
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'MyImpianti'), 'Sede', 'IF(my_impianti.idsede = 0, \'Sede legale\', (SELECT CONCAT_WS( '' - '', nomesede, citta ) AS descrizione FROM an_sedi WHERE id = my_impianti.idsede))', 4, 1, 0, 0, '', '', 0, 0, 0);
-- Aggiunta colonna 'Tempo standard' per Tipi di intervento
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `enabled`, `summable`, `default` ) VALUES
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi di intervento'), 'Tempo standard', 'in_tipiintervento.tempo_standard', 10, 1, 0, 1, '', '', 0, 0, 0);