Merge branch 'master' into 2.4

This commit is contained in:
Thomas Zilio 2018-02-15 17:41:09 +01:00
commit 21f65192c1
27 changed files with 2888 additions and 7714 deletions

View File

@ -288,8 +288,8 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
<div id="steps">
<div id="step-1">
<p>'.tr('Un benvenuto da OpenSTAManager!').'</p>
<p>'.tr("Prima di procedere alla configurazione e all'installazione del software, sono necessari alcuni accorgimenti per garantire il corretto funzionamento del gestionale").'.</p>
<p>'.tr('Benvenuto in <strong>OpenSTAManager</strong>!').'</p>
<p>'.tr("Prima di procedere alla configurazione e all'installazione del software, sono necessari alcuni accorgimenti per garantire il corretto funzionamento del gestionale. Stai utilizzando la versione PHP ".phpversion()."").'.</p>
<hr>';
// Estensioni di PHP
@ -483,7 +483,7 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
// db_host
echo '
<div class="col-xs-12">
{[ "type": "text", "label": "'.tr('Host del database').'", "name": "db_host", "placeholder": "'.tr("Indirizzo dell'host del database").'", "value": "'.$host.'", "help": "'.tr('Esempio').': <i>localhost</i>", "show-help": 1, "required": 1 ]}
{[ "type": "text", "label": "'.tr('Host del database').'", "name": "db_host", "placeholder": "'.tr("Indirizzo dell'host del database").'", "value": "'.$host.'", "help": "'.tr('Esempio').': localhost", "show-help": 1, "required": 1 ]}
</div>
</div>
@ -492,19 +492,19 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
// db_username
echo '
<div class="col-xs-12 col-md-4">
{[ "type": "text", "label": "'.tr("Username dell'utente MySQL").'", "name": "db_username", "placeholder": "'.tr("Username dell'utente MySQL").'", "value": "'.$username.'", "help": "'.tr('Esempio').': <i>root</i>", "show-help": 1, "required": 1 ]}
{[ "type": "text", "label": "'.tr("Username dell'utente MySQL").'", "name": "db_username", "placeholder": "'.tr("Username dell'utente MySQL").'", "value": "'.$username.'", "help": "'.tr('Esempio').': root", "show-help": 1, "required": 1 ]}
</div>';
// db_password
echo '
<div class="col-xs-12 col-md-4">
{[ "type": "password", "label": "'.tr("Password dell'utente MySQL").'", "name": "db_password", "placeholder": "'.tr("Password dell'utente MySQL").'", "value": "'.$password.'", "help": "'.tr('Esempio').': <i>mysql</i>", "show-help": 1 ]}
{[ "type": "password", "label": "'.tr("Password dell'utente MySQL").'", "name": "db_password", "placeholder": "'.tr("Password dell'utente MySQL").'", "value": "'.$password.'", "help": "'.tr('Esempio').': mysql", "show-help": 1 ]}
</div>';
// db_name
echo '
<div class="col-xs-12 col-md-4">
{[ "type": "text", "label": "'.tr('Nome del database').'", "name": "db_name", "placeholder": "'.tr('Nome del database').'", "value": "'.$name.'", "help": "'.tr('Esempio').': <i>openstamanager</i>", "show-help": 1, "required": 1 ]}
{[ "type": "text", "label": "'.tr('Nome del database').'", "name": "db_name", "placeholder": "'.tr('Nome del database').'", "value": "'.$name.'", "help": "'.tr('Esempio').': openstamanager", "show-help": 1, "required": 1 ]}
</div>
</div>
@ -513,7 +513,7 @@ if (empty($creation) && (!file_exists('config.inc.php') || !$valid_config)) {
// Password utente admin
echo '
<div class="col-xs-12 col-md-6">
{[ "type": "password", "label": "'.tr("Password dell'amministratore").'", "name": "osm_password", "placeholder": "'.tr('Scegli la password di amministratore').'", "value": "'.$osm_password.'", "help": "'.tr('Valore di default').': <i>admin</i>", "show-help": 1 ]}
{[ "type": "password", "label": "'.tr("Password dell'amministratore").'", "name": "osm_password", "placeholder": "'.tr('Scegli la password di amministratore').'", "value": "'.$osm_password.'", "help": "'.tr('Valore di default').': admin", "show-help": 1 ]}
</div>';
// Email utente admin

View File

@ -113,14 +113,6 @@ if (!empty($module_options) && $module_options != 'menu' && $module_options != '
</tfoot>
</table>';
$bulk = null;
if (file_exists($docroot.$directory.'/custom/bulk.php')) {
$bulk = include $docroot.$directory.'/custom/bulk.php';
} elseif (file_exists($docroot.$directory.'/bulk.php')) {
$bulk = include $docroot.$directory.'/bulk.php';
}
$bulk = (array) $bulk;
echo '
<div class="row" data-target="'.$table_id.'">
<div class="col-xs-12 col-md-5">

View File

@ -46,7 +46,7 @@ if (filter('action') == 'do_update') {
$rate = $scriptValue;
}
// Aumento della percentuale di completameno totale
// Aumento della percentuale di completamento totale
if (!empty($rate)) {
echo '
<script>
@ -171,7 +171,7 @@ if (filter('action') == 'do_update') {
<p>'.tr("E' necessario aggiornare il database a una nuova versione").'.</p>';
}
echo '
<p>'.tr("Premi il tasto _BUTTON_ per procedere con l'aggiornamento!", [
<p>'.tr("Premi il tasto _BUTTON_ per procedere con l'".(!$dbo->isInstalled() ? tr('installazione') : tr('aggiornamento'))."!", [
'_BUTTON_' => '<b>"'.$button.'"</b>',
]).'</p>
<input type="button" class="btn btn-primary" value="'.$button.'" onclick="continue_update()" id="contine_button">
@ -179,8 +179,8 @@ if (filter('action') == 'do_update') {
<script>
function continue_update(){
swal({
title: "'.tr('Sei sicuro?').'",
text: "'.tr("Continuare con l'aggiornamento?").'",
title: "'.(!$dbo->isInstalled() ? tr('Procedere con l\'installazione?') : tr('Procedere l\'aggiornamento?')).'",
text: "",
type: "warning",
showCancelButton: true,
confirmButtonClass: "btn btn-lg btn-success",

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

4
locale/it/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -57,7 +57,7 @@ echo '
?>
<div class="col-xs-12 col-md-7">
{[ "type": "select", "label": "<?php echo tr('Inizio pianificazione') ?>", "name": "parti_da_oggi", "values": "list= \"0\":\"<?php echo tr('Pianificare dal ').$data_richiesta ?>\", \"1\":\"<?php echo tr('Pianificare a partire da oggi ').date('d/m/Y') ?>\"", "value": "" ]}
{[ "type": "select", "label": "<?php echo tr('Inizio pianificazione') ?>", "name": "parti_da_oggi", "values": "list= \"0\":\"<?php echo tr('Pianificare a partire da questo promemoria ').$data_richiesta ?>\", \"1\":\"<?php echo tr('Pianificare a partire da oggi ').date('d/m/Y') ?>\"", "value": "" ]}
</div>
<?php
@ -75,7 +75,7 @@ echo '
<div class="row">
<div class="col-xs-12 col-md-4">
{[ "type": "checkbox", "label": "'.tr('Pianifica intervento').'", "name": "pianifica_intervento", "value": "0", "help": "", "placeholder": "'.tr('Pianificare anche gli interventi ').'" ]}
{[ "type": "checkbox", "label": "'.tr('Pianifica anche l\'intervento').'", "name": "pianifica_intervento", "value": "0", "help": "", "placeholder": "'.tr('Pianificare già l\'intervento ').'" ]}
</div>
<div class="col-xs-12 col-md-4">

View File

@ -21,7 +21,7 @@ switch (filter('op')) {
}
break;
// Eliminazione intervento
// Eliminazione pianificazione
case 'depianifica':
$id = filter('id');
@ -30,6 +30,16 @@ switch (filter('op')) {
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
break;
//Eliminazione tutti i promemoria di questo contratto con non hanno l'intervento associato
case 'delete-promemoria':
$dbo->query('DELETE FROM `co_righe_contratti` WHERE idcontratto = '.$id_record.' AND idintervento IS NULL');
$_SESSION['errors'][] = tr('Tutti i promemoria non associati sono stati eliminati!');
redirect($rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'#tab_'.$id_plugin);
break;
//pianificazione
@ -39,7 +49,7 @@ switch (filter('op')) {
$intervallo = filter('intervallo');
$parti_da_oggi = post('parti_da_oggi');
if (!empty($idcontratto_riga) && !empty($intervallo)) {
if (!empty($idcontratto_riga) and !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_righe_contratti.idtipointervento) AS tipointervento FROM co_righe_contratti WHERE id = '.$idcontratto_riga;
$rsp = $dbo->fetchArray($qp);
@ -62,14 +72,14 @@ 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) and (date('Y-m-d', strtotime($min_date)) < date('Y-m-d', strtotime($data_conclusione)))) {
//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'));
//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)))) {
if ((date('Y-m-d', strtotime($data_richiesta)) >= $min_date) and (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione)))) {
//Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta.
if (count($dbo->fetchArray("SELECT id FROM co_righe_contratti WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_record."' ")) == 0) {
$query = 'INSERT INTO `co_righe_contratti`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`) VALUES('.prepare($id_record).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).')';
@ -164,13 +174,14 @@ $pianificabile = $dbo->fetchNum('SELECT id FROM co_staticontratti WHERE pianific
echo '
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Pianificazione interventi').'</h3>
<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"</b> degli interventi da effettuare entro determinate scadenze').'</p>
<p>'.tr('Questi promemoria serviranno per semplificare la pianificazione del giorno esatto di intervento nel caso, ad esempio, di interventi mensili e verranno visualizzati nella dashboard').'.</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 attivo e la data di conclusione definita').'.</p>';
// Nessun intervento pianificato
if (count($rsp) != 0) {
echo '<br><h5>'.tr('Lista promemoria ed eventuali interventi associati').':</h5>';
echo '
<table class="table table-condensed table-striped table-hover">
<thead>
@ -185,7 +196,7 @@ if (count($rsp) != 0) {
</thead>
<tbody>';
// Elenco interventi
// Elenco promemoria
for ($i = 0; $i < sizeof($rsp); ++$i) {
// Sede
if ($rsp[$i]['idsede'] == '-1') {
@ -226,7 +237,7 @@ if (count($rsp) != 0) {
<td align="right">';
echo '
<button type="button" class="btn btn-warning btn-sm" title="Pianifica altri promemoria..." data-toggle="tooltip" onclick="launch_modal(\'Pianifica altri promemoria\', \''.$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($records[0]['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) and strtotime($records[0]['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>';
@ -243,13 +254,19 @@ if (count($rsp) != 0) {
echo '
</tbody>
</table>';
if (count($rsp) > 0) {
echo '<br><div class="pull-right"><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" >
<i class="fa fa-trash"></i> '.tr('Elimina promemoria').'
</button></div>';
}
}
/*
Nuovo intervento
*/
echo '
<p>'.tr('Pianifica promemoria per un nuovo intervento').':</p>
<br><h5>'.tr('Pianifica un nuovo promemoria per un intervento').':</h5>
<form action="" method="post">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="pianifica">

View File

@ -17,7 +17,7 @@ switch (get('op')) {
$tipi = (array) $_SESSION['dashboard']['idtipiintervento'];
$query = 'SELECT in_interventi_tecnici.idintervento, colore, in_interventi_tecnici.id, idtecnico, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, (SELECT colore FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS colore_tecnico, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente FROM in_interventi_tecnici INNER JOIN (in_interventi LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento) ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi_tecnici.orario_inizio >= '.prepare($start).' AND in_interventi_tecnici.orario_fine <= '.prepare($end).' AND idtecnico IN('.implode(',', $_SESSION['dashboard']['idtecnici']).') AND in_interventi.idstatointervento IN('.implode(',', $stati).') AND in_interventi_tecnici.idtipointervento IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi');
$query = 'SELECT in_interventi_tecnici.idintervento, colore, in_interventi_tecnici.id, idtecnico, orario_inizio, orario_fine, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS nome_tecnico, (SELECT colore FROM an_anagrafiche WHERE idanagrafica=idtecnico) AS colore_tecnico, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS idzona FROM in_interventi_tecnici INNER JOIN (in_interventi LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento) ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi_tecnici.orario_inizio >= '.prepare($start).' AND in_interventi_tecnici.orario_fine <= '.prepare($end).' AND idtecnico IN('.implode(',', $_SESSION['dashboard']['idtecnici']).') AND in_interventi.idstatointervento IN('.implode(',', $stati).') AND in_interventi_tecnici.idtipointervento IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi').' HAVING idzona IN ('.implode(',', $_SESSION['dashboard']['idzone']).')';
$rs = $dbo->fetchArray($query);
$results = [];

View File

@ -155,7 +155,9 @@ $count = 0;
$total = 0;
$totale_tecnici = 0; // conteggia tecnici eliminati e non
$rs = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale 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 deleted=0 AND descrizione='Tecnico' ORDER BY ragione_sociale ASC");
$rs = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale 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
LEFT OUTER JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id
WHERE an_anagrafiche.deleted=0 AND an_tipianagrafiche.descrizione='Tecnico' ".Modules::getAdditionalsQuery('Interventi')." GROUP BY an_anagrafiche.idanagrafica ORDER BY ragione_sociale ASC");
$total = count($rs);
$totale_tecnici += $total;

View File

@ -296,64 +296,66 @@ switch (post('op')) {
//Fatturo le ore di lavoro raggruppate per costo orario
$rst = $dbo->fetchArray('SELECT SUM( ROUND( TIMESTAMPDIFF( MINUTE, orario_inizio, orario_fine ) / 60, '.get_var('Cifre decimali per quantità').' ) ) AS tot_ore, SUM(prezzo_ore_consuntivo) AS tot_prezzo_ore_consuntivo, prezzo_ore_unitario FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' GROUP BY prezzo_ore_unitario');
//Aggiunta riga intervento sul documento
for ($i = 0; $i < sizeof($rst); ++$i) {
$ore = $rst[$i]['tot_ore'];
if( sizeof($rst) == 0 ){
$_SESSION['warnings'][] = tr('L\'intervento _NUM_ non ha sessioni di lavoro!', [
'_NUM_' => $idintervento,
]);
} else {
for( $i=0; $i<sizeof($rst); $i++ ){
$ore = $rst[$i]['tot_ore'];
// Calcolo iva
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
$rs = $dbo->fetchArray($query);
// Calcolo iva
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
$rs = $dbo->fetchArray($query);
$sconto = $rst[$i]['sconto'];
$subtot = $rst[$i]['tot_prezzo_ore_consuntivo'];
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
$desc_iva = $rs[0]['descrizione'];
$sconto = $rst[$i]['sconto'];
$subtot = $rst[$i]['tot_prezzo_ore_consuntivo'];
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
$desc_iva = $rs[0]['descrizione'];
// Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
$rs = $dbo->fetchArray($query);
$rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
// Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
$rs = $dbo->fetchArray($query);
$rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query);
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
$dbo->query($query);
// Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query);
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
$dbo->query($query);
}
}
$costi_intervento = get_costi_intervento($idintervento);
// Aggiunta diritto di chiamata (se presente) come riga a parte
$diritto_chiamata = $costi_intervento['dirittochiamata_addebito'];
//Fatturo i diritti di chiamata raggruppati per costo
$rst = $dbo->fetchArray('SELECT COUNT(id) AS qta, SUM(prezzo_dirittochiamata) AS tot_prezzo_dirittochiamata FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).' AND prezzo_dirittochiamata > 0 GROUP BY prezzo_dirittochiamata');
// Aggiunta riga intervento sul documento
$ore = get_ore_intervento($idintervento);
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto).", 'UNT', 'ore', ".prepare($ore).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
$dbo->query($query);
// Aggiunta diritto di chiamata se >0
if ($diritto_chiamata > 0) {
// Aggiunta diritto di chiamata se esiste
for( $i=0; $i<sizeof($rst); $i++ ){
// Calcolo iva
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
$rs = $dbo->fetchArray($query);
$iva = $diritto_chiamata / 100 * $rs[0]['percentuale'];
$iva = $rst[$i]['tot_prezzo_dirittochiamata'] / 100 * $rs[0]['percentuale'];
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
$desc_iva = $rs[0]['descrizione'];
// Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
$rs = $dbo->fetchArray($query);
$rivalsainps = $diritto_chiamata / 100 * $rs[0]['percentuale'];
$rivalsainps = $rst[$i]['tot_prezzo_dirittochiamata'] / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query);
$ritenutaacconto = $diritto_chiamata / 100 * $rs[0]['percentuale'];
$ritenutaacconto = $rst[$i]['tot_prezzo_dirittochiamata'] / 100 * $rs[0]['percentuale'];
$query = 'INSERT INTO co_righe_documenti(
iddocumento,
@ -384,12 +386,12 @@ switch (post('op')) {
'.prepare($iva).',
'.prepare($iva_indetraibile).',
"Diritto di chiamata",
'.prepare($diritto_chiamata).',
'.prepare($rst[$i]['tot_prezzo_dirittochiamata']).',
0,
0,
"UNT",
"-",
1,
'.$rst[$i]['qta'].',
'.prepare(get_var('Percentuale rivalsa INPS')).',
'.prepare($rivalsainps).',
'.prepare(get_var("Percentuale ritenuta d'acconto")).',

View File

@ -68,103 +68,104 @@ switch (post('op')) {
// Aggiorna tutte le sessioni di lavoro
$lista = (array) post('id_');
// Limitazione delle azioni dei tecnici
if ($user['gruppo'] == 'Tecnici') {
$lista = get_var('Mostra i prezzi al tecnico') && !empty($user['idanagrafica']) ? [$user['idanagrafica']] : [];
}
foreach ($lista as $idriga) {
// Lettura delle date di inizio e fine intervento
$orario_inizio = post('orario_inizio')[$idriga];
$orario_fine = post('orario_fine')[$idriga];
//Lettura del tecnico proprietario della riga
$rst = $dbo->fetchArray('SELECT idtecnico FROM in_interventi_tecnici WHERE id='.prepare($idriga));
// Limitazione delle azioni dei tecnici
if ( ($user['gruppo'] == 'Tecnici' && $user['idanagrafica'] == $rst[0]['idtecnico'] ) || $user['gruppo'] == 'Amministratori') {
// Lettura delle date di inizio e fine intervento
$orario_inizio = post('orario_inizio')[$idriga];
$orario_fine = post('orario_fine')[$idriga];
$km = post('km')[$idriga];
$ore = post('ore')[$idriga];
$km = post('km')[$idriga];
$ore = post('ore')[$idriga];
// Lettura tariffe in base al tipo di intervento ed al tecnico
$idtipointervento_tecnico = $post['idtipointerventot'][$idriga];
$rs = $dbo->fetchArray('SELECT * FROM in_interventi_tecnici WHERE idtecnico='.prepare($post['idtecnico'][$idriga]).' AND idintervento='.prepare($id_record));
// Lettura tariffe in base al tipo di intervento ed al tecnico
$idtipointervento_tecnico = $post['idtipointerventot'][$idriga];
$rs = $dbo->fetchArray('SELECT * FROM in_interventi_tecnici WHERE idtecnico='.prepare($post['idtecnico'][$idriga]).' AND idintervento='.prepare($id_record));
if ($idtipointervento_tecnico != $rs[0]['idtipointervento']) {
$rsc = $dbo->fetchArray('SELECT * FROM in_tariffe WHERE idtecnico='.prepare($post['idtecnico'][$idriga]).' AND idtipointervento='.prepare($idtipointervento_tecnico));
if ($idtipointervento_tecnico != $rs[0]['idtipointervento']) {
$rsc = $dbo->fetchArray('SELECT * FROM in_tariffe WHERE idtecnico='.prepare($post['idtecnico'][$idriga]).' AND idtipointervento='.prepare($idtipointervento_tecnico));
if ($rsc[0]['costo_ore'] != 0 || $rsc[0]['costo_km'] != 0 || $rsc[0]['costo_dirittochiamata'] != 0 || $rsc[0]['costo_ore_tecnico'] != 0 || $rsc[0]['costo_km_tecnico'] != 0 || $rsc[0]['costo_dirittochiamata_tecnico'] != 0) {
$prezzo_ore_unitario = $rsc[0]['costo_ore'];
$prezzo_km_unitario = $rsc[0]['costo_km'];
$prezzo_dirittochiamata = $rsc[0]['costo_dirittochiamata'];
if ($rsc[0]['costo_ore'] != 0 || $rsc[0]['costo_km'] != 0 || $rsc[0]['costo_dirittochiamata'] != 0 || $rsc[0]['costo_ore_tecnico'] != 0 || $rsc[0]['costo_km_tecnico'] != 0 || $rsc[0]['costo_dirittochiamata_tecnico'] != 0) {
$prezzo_ore_unitario = $rsc[0]['costo_ore'];
$prezzo_km_unitario = $rsc[0]['costo_km'];
$prezzo_dirittochiamata = $rsc[0]['costo_dirittochiamata'];
$prezzo_ore_unitario_tecnico = $rsc[0]['costo_ore_tecnico'];
$prezzo_km_unitario_tecnico = $rsc[0]['costo_km_tecnico'];
$prezzo_dirittochiamata_tecnico = $rsc[0]['costo_dirittochiamata_tecnico'];
$prezzo_ore_unitario_tecnico = $rsc[0]['costo_ore_tecnico'];
$prezzo_km_unitario_tecnico = $rsc[0]['costo_km_tecnico'];
$prezzo_dirittochiamata_tecnico = $rsc[0]['costo_dirittochiamata_tecnico'];
}
// ...altrimenti se non c'è una tariffa per il tecnico leggo i costi globali
else {
$rsc = $dbo->fetchArray('SELECT * FROM in_tipiintervento WHERE idtipointervento='.prepare($idtipointervento_tecnico));
$prezzo_ore_unitario = $rsc[0]['costo_orario'];
$prezzo_km_unitario = $rsc[0]['costo_km'];
$prezzo_dirittochiamata = $rsc[0]['costo_diritto_chiamata'];
$prezzo_ore_unitario_tecnico = $rsc[0]['costo_orario_tecnico'];
$prezzo_km_unitario_tecnico = $rsc[0]['costo_km_tecnico'];
$prezzo_dirittochiamata_tecnico = $rsc[0]['costo_diritto_chiamata_tecnico'];
}
} else {
$prezzo_ore_unitario = $rs[0]['prezzo_ore_unitario'];
$prezzo_km_unitario = $rs[0]['prezzo_km_unitario'];
$prezzo_dirittochiamata = $rs[0]['prezzo_dirittochiamata'];
$prezzo_ore_unitario_tecnico = $rs[0]['prezzo_ore_unitario_tecnico'];
$prezzo_km_unitario_tecnico = $rs[0]['prezzo_km_unitario_tecnico'];
$prezzo_dirittochiamata_tecnico = $rs[0]['prezzo_dirittochiamata_tecnico'];
}
// ...altrimenti se non c'è una tariffa per il tecnico leggo i costi globali
else {
$rsc = $dbo->fetchArray('SELECT * FROM in_tipiintervento WHERE idtipointervento='.prepare($idtipointervento_tecnico));
// Totali
$prezzo_ore_consuntivo = $prezzo_ore_unitario * $ore;
$prezzo_km_consuntivo = $prezzo_km_unitario * $km;
$prezzo_ore_unitario = $rsc[0]['costo_orario'];
$prezzo_km_unitario = $rsc[0]['costo_km'];
$prezzo_dirittochiamata = $rsc[0]['costo_diritto_chiamata'];
$prezzo_ore_consuntivo_tecnico = $prezzo_ore_unitario_tecnico * $ore;
$prezzo_km_consuntivo_tecnico = $prezzo_km_unitario_tecnico * $km;
$prezzo_ore_unitario_tecnico = $rsc[0]['costo_orario_tecnico'];
$prezzo_km_unitario_tecnico = $rsc[0]['costo_km_tecnico'];
$prezzo_dirittochiamata_tecnico = $rsc[0]['costo_diritto_chiamata_tecnico'];
}
} else {
$prezzo_ore_unitario = $rs[0]['prezzo_ore_unitario'];
$prezzo_km_unitario = $rs[0]['prezzo_km_unitario'];
$prezzo_dirittochiamata = $rs[0]['prezzo_dirittochiamata'];
$prezzo_ore_unitario_tecnico = $rs[0]['prezzo_ore_unitario_tecnico'];
$prezzo_km_unitario_tecnico = $rs[0]['prezzo_km_unitario_tecnico'];
$prezzo_dirittochiamata_tecnico = $rs[0]['prezzo_dirittochiamata_tecnico'];
// Sconti
$sconto_unitario = post('sconto')[$idriga];
$tipo_sconto = post('tipo_sconto')[$idriga];
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo_ore_consuntivo * $sconto_unitario) / 100 : $sconto_unitario;
$scontokm_unitario = post('scontokm')[$idriga];
$tipo_scontokm = post('tipo_scontokm')[$idriga];
$scontokm = ($tipo_scontokm == 'PRC') ? ($prezzo_km_consuntivo * $scontokm_unitario) / 100 : $scontokm_unitario;
$dbo->update('in_interventi_tecnici', [
'idintervento' => $id_record,
'idtipointervento' => $idtipointervento_tecnico,
'idtecnico' => post('idtecnico')[$idriga],
'orario_inizio' => $orario_inizio,
'orario_fine' => $orario_fine,
'ore' => $ore,
'km' => $km,
'prezzo_ore_unitario' => $prezzo_ore_unitario,
'prezzo_km_unitario' => $prezzo_km_unitario,
'prezzo_dirittochiamata' => $prezzo_dirittochiamata,
'prezzo_ore_unitario_tecnico' => $prezzo_ore_unitario_tecnico,
'prezzo_km_unitario_tecnico' => $prezzo_km_unitario_tecnico,
'prezzo_dirittochiamata_tecnico' => $prezzo_dirittochiamata_tecnico,
'prezzo_ore_consuntivo' => $prezzo_ore_consuntivo,
'prezzo_km_consuntivo' => $prezzo_km_consuntivo,
'prezzo_ore_consuntivo_tecnico' => $prezzo_ore_consuntivo_tecnico,
'prezzo_km_consuntivo_tecnico' => $prezzo_km_consuntivo_tecnico,
'sconto' => $sconto,
'sconto_unitario' => $sconto_unitario,
'tipo_sconto' => $tipo_sconto,
'scontokm' => $scontokm,
'scontokm_unitario' => $scontokm_unitario,
'tipo_scontokm' => $tipo_scontokm,
], ['id' => $idriga]);
}
// Totali
$prezzo_ore_consuntivo = $prezzo_ore_unitario * $ore;
$prezzo_km_consuntivo = $prezzo_km_unitario * $km;
$prezzo_ore_consuntivo_tecnico = $prezzo_ore_unitario_tecnico * $ore;
$prezzo_km_consuntivo_tecnico = $prezzo_km_unitario_tecnico * $km;
// Sconti
$sconto_unitario = post('sconto')[$idriga];
$tipo_sconto = post('tipo_sconto')[$idriga];
$sconto = ($tipo_sconto == 'PRC') ? ($prezzo_ore_consuntivo * $sconto_unitario) / 100 : $sconto_unitario;
$scontokm_unitario = post('scontokm')[$idriga];
$tipo_scontokm = post('tipo_scontokm')[$idriga];
$scontokm = ($tipo_scontokm == 'PRC') ? ($prezzo_km_consuntivo * $scontokm_unitario) / 100 : $scontokm_unitario;
$dbo->update('in_interventi_tecnici', [
'idintervento' => $id_record,
'idtipointervento' => $idtipointervento_tecnico,
'idtecnico' => post('idtecnico')[$idriga],
'orario_inizio' => $orario_inizio,
'orario_fine' => $orario_fine,
'ore' => $ore,
'km' => $km,
'prezzo_ore_unitario' => $prezzo_ore_unitario,
'prezzo_km_unitario' => $prezzo_km_unitario,
'prezzo_dirittochiamata' => $prezzo_dirittochiamata,
'prezzo_ore_unitario_tecnico' => $prezzo_ore_unitario_tecnico,
'prezzo_km_unitario_tecnico' => $prezzo_km_unitario_tecnico,
'prezzo_dirittochiamata_tecnico' => $prezzo_dirittochiamata_tecnico,
'prezzo_ore_consuntivo' => $prezzo_ore_consuntivo,
'prezzo_km_consuntivo' => $prezzo_km_consuntivo,
'prezzo_ore_consuntivo_tecnico' => $prezzo_ore_consuntivo_tecnico,
'prezzo_km_consuntivo_tecnico' => $prezzo_km_consuntivo_tecnico,
'sconto' => $sconto,
'sconto_unitario' => $sconto_unitario,
'tipo_sconto' => $tipo_sconto,
'scontokm' => $scontokm,
'scontokm_unitario' => $scontokm_unitario,
'tipo_scontokm' => $tipo_scontokm,
], ['id' => $idriga]);
}
$tipo_sconto = $post['tipo_sconto_globale'];

View File

@ -173,7 +173,7 @@ if (empty($new_codice)) {
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, nome AS descrizione FROM an_zone ORDER BY nome", "value": "<?php echo $idzona; ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "<?php echo $idzona; ?>", "extra": "readonly" ]}
</div>
</div>
@ -270,11 +270,34 @@ if (empty($new_codice)) {
$("#idimpianti").prop("disabled", value);
$("#idimpianti").selectReset();
if (($(this).val())) {
if (($(this).selectData().idzona)){
$('#idzona').val($(this).selectData().idzona).change();
}else{
$('#idzona').val('').change();
}
//session_set('superselect,idzona', $(this).selectData().idzona, 0);
}
});
$('#idsede').change( function(){
session_set('superselect,idsede', $(this).val(), 0);
$("#idimpianti").selectReset();
if (($(this).val())) {
if (($(this).selectData().idzona)){
$('#idzona').val($(this).selectData().idzona).change();
}else{
$('#idzona').val('').change();
}
//session_set('superselect,idzona', $(this).selectData().idzona, 0);
}
});
$('#idpreventivo').change( function(){

View File

@ -129,6 +129,13 @@ if (empty($records[0]['firma_file'])) {
<div class="col-md-3">
{[ "type": "date", "label": "<?php echo tr('Data richiesta'); ?>", "name": "data_richiesta", "required": 1, "value": "$data_richiesta$" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "$idzona$" ,"extra": "readonly" ]}
</div>
</div>
@ -276,6 +283,17 @@ if (empty($records[0]['firma_file'])) {
$("#idsede").selectReset();
$("#idpreventivo").selectReset();
$("#idcontratto").selectReset();
if (($(this).val())) {
if (($(this).selectData().idzona)){
$('#idzona').val($(this).selectData().idzona).change();
}else{
$('#idzona').val('').change();
}
//session_set('superselect,idzona', $(this).selectData().idzona, 0);
}
});
$('#idpreventivo').change( function(){
@ -294,6 +312,19 @@ if (empty($records[0]['firma_file'])) {
$('#matricola').change( function(){
session_set('superselect,marticola', $(this).val(), 0);
});
$('#idsede').change( function(){
if (($(this).val())) {
if (($(this).selectData().idzona)){
$('#idzona').val($(this).selectData().idzona).change();
}else{
$('#idzona').val('').change();
}
//session_set('superselect,idzona', $(this).selectData().idzona, 0);
}
});
</script>

View File

@ -3,7 +3,7 @@
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
$records = $dbo->fetchArray('SELECT *, (SELECT colore FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS colore, (SELECT idpreventivo FROM co_preventivi_interventi WHERE idintervento=in_interventi.id LIMIT 0,1) AS idpreventivo FROM in_interventi WHERE id='.prepare($id_record).Modules::getAdditionalsQuery($id_module));
$records = $dbo->fetchArray('SELECT *, IF((in_interventi.idsede = 0), (SELECT idzona FROM an_anagrafiche WHERE idanagrafica = in_interventi.idanagrafica), (SELECT idzona FROM an_sedi WHERE id = in_interventi.idsede)) AS idzona, (SELECT colore FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS colore, (SELECT idpreventivo FROM co_preventivi_interventi WHERE idintervento=in_interventi.id LIMIT 0,1) AS idpreventivo FROM in_interventi WHERE id='.prepare($id_record).Modules::getAdditionalsQuery($id_module));
}
$jscript_modules[] = $rootdir.'/modules/interventi/js/interventi_helperjs.js';

View File

@ -193,7 +193,13 @@ switch (post('op')) {
$rs = $dbo->fetchArray($query);
// Aggiorno lo stato della fattura
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Pagato') WHERE id=".prepare($iddocumento));
if( $rs[0]['tot_pagato'] == $rs[0]['tot_da_pagare'] ){
$stato = 'Pagato';
} else {
$stato = 'Parzialmente pagato';
}
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione=".prepare($stato).") WHERE id=".prepare($iddocumento));
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
$query2 = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';

View File

@ -38,7 +38,13 @@ if ($options['pricing']) {
<tbody>';
// Righe
$rs_gen = $dbo->fetchArray('SELECT *, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva, IFNULL((SELECT peso_lordo FROM mg_articoli WHERE id=idarticolo),0) * qta AS peso_lordo, IFNULL((SELECT volume FROM mg_articoli WHERE id=idarticolo),0) * qta AS volume FROM `dt_righe_ddt` WHERE idddt='.prepare($id_record));
$rs_gen = $dbo->fetchArray("SELECT *,
IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `dt_righe_ddt`.`idarticolo`), '') AS codice_articolo,
(SELECT GROUP_CONCAT(`serial` SEPARATOR ', ') FROM `mg_prodotti` WHERE `id_riga_ddt` = `dt_righe_ddt`.`id`) AS seriali,
(SELECT `percentuale` FROM `co_iva` WHERE `id` = `dt_righe_ddt`.`idiva`) AS perc_iva,
IFNULL((SELECT peso_lordo FROM mg_articoli WHERE id=idarticolo),0) * qta AS peso_lordo,
IFNULL((SELECT volume FROM mg_articoli WHERE id=idarticolo),0) * qta AS volume
FROM `dt_righe_ddt` WHERE idddt=".prepare($id_record));
foreach ($rs_gen as $r) {
$count = 0;
$count += ceil(strlen($r['descrizione']) / $autofill['words']);
@ -49,6 +55,28 @@ foreach ($rs_gen as $r) {
<td>
'.nl2br($r['descrizione']);
// Codice articolo
if (!empty($r['codice_articolo'])) {
echo '
<br><small>'.tr('COD. _COD_', [
'_COD_' => $r['codice_articolo'],
]).'</small>';
if ($count <= 1) {
$count += 0.4;
}
}
// Seriali
if (!empty($r['seriali'])) {
echo '
<br><small>'.tr('SN').': '.$r['seriali'].'</small>';
if ($count <= 1) {
$count += 0.4;
}
}
// Aggiunta riferimento a ordine
if (!empty($r['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine']));
@ -71,8 +99,8 @@ foreach ($rs_gen as $r) {
echo '
<td class="text-center">';
if (empty($r['is_descrizione'])) {
echo
Translator::numberToLocale($r['qta']).' '.$r['um'];
echo '
'.Translator::numberToLocale($r['qta']).' '.$r['um'];
}
echo '
</td>';
@ -92,18 +120,18 @@ foreach ($rs_gen as $r) {
echo "
<td class='text-right'>";
if (empty($r['is_descrizione'])) {
echo
Translator::numberToLocale($r['subtotale']).' &euro;';
echo '
'.Translator::numberToLocale($r['subtotale']).' &euro;';
if ($r['sconto'] > 0) {
if ($count <= 1) {
$count += 0.4;
}
echo '
<br><small class="help-block">- '.tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '&euro;'),
]).'</small>';
<br><small class="help-block">- '.tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '&euro;'),
]).'</small>';
}
}
echo '
@ -113,8 +141,8 @@ foreach ($rs_gen as $r) {
echo "
<td class='text-center'>";
if (empty($r['is_descrizione'])) {
echo
Translator::numberToLocale($r['perc_iva']);
echo '
'.Translator::numberToLocale($r['perc_iva']);
}
echo '
</td>';

View File

@ -35,7 +35,11 @@ echo "
<tbody>';
// RIGHE FATTURA CON ORDINAMENTO UNICO
$righe = $dbo->fetchArray("SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice_articolo, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `co_righe_documenti` WHERE iddocumento=".prepare($id_record).' ORDER BY `order`');
$righe = $dbo->fetchArray("SELECT *,
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`');
foreach ($righe as $r) {
$count = 0;
$count += ceil(strlen($r['descrizione']) / $autofill['words']);
@ -46,6 +50,7 @@ foreach ($righe as $r) {
<td>
'.nl2br($r['descrizione']);
// Codice articolo
if (!empty($r['codice_articolo'])) {
echo '
<br><small>'.tr('COD. _COD_', [
@ -57,6 +62,16 @@ foreach ($righe as $r) {
}
}
// Seriali
if (!empty($r['seriali'])) {
echo '
<br><small>'.tr('SN').': '.$r['seriali'].'</small>';
if ($count <= 1) {
$count += 0.4;
}
}
// Aggiunta dei riferimenti ai documenti
$ref_modulo = null;
$ref_id = null;
@ -124,45 +139,7 @@ foreach ($righe as $r) {
}
}
// Aggiunta riferimento a ordine
if (!empty($r['idordine'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
if (!empty($rso)) {
$descrizione = tr('Rif. ordine num. _NUM_ del _DATE_', [
'_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($rso[0]['data']),
]);
}
}
// Aggiunta riferimento a ddt
elseif (!empty($r['idddt'])) {
$rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM dt_ddt WHERE id='.prepare($r['idddt']));
$numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero'];
if (!empty($rso)) {
$descrizione = tr('Rif. ddt num. _NUM_ del _DATE_', [
'_NUM_' => $numero,
'_DATE_' => Translator::dateToLocale($rso[0]['data']),
]);
}
}
// Aggiunta riferimento al preventivo
elseif (!empty($r['idpreventivo'])) {
$rso = $dbo->fetchArray('SELECT numero, data_bozza FROM co_preventivi WHERE id='.prepare($r['idpreventivo']));
if (!empty($rso)) {
$descrizione = tr('Rif. preventivo num. _NUM_ del _DATE_', [
'_NUM_' => $rso[0]['numero'],
'_DATE_' => Translator::dateToLocale($rso[0]['data_bozza']),
]);
}
}
// Aumento del conteggio
// Stampa dei riferimenti
if (!empty($descrizione)) {
echo '
<br><small>'.$descrizione.'</small>';
@ -177,8 +154,8 @@ foreach ($righe as $r) {
echo '
<td class="text-center">';
if (empty($r['is_descrizione'])) {
echo
Translator::numberToLocale($r['qta']).' '.$r['um'];
echo '
'.Translator::numberToLocale($r['qta']).' '.$r['um'];
}
echo '
</td>';
@ -187,14 +164,15 @@ 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 "
<br><small class='text-muted'>- ".tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '&euro;'),
]).'</small>';
<br><small class='text-muted'>- ".tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '&euro;'),
]).'</small>';
if ($count <= 1) {
$count += 0.4;
@ -209,14 +187,15 @@ 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 "
<br><small class='text-muted'>".tr('sconto di _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto']),
'_TYPE_' => '&euro;',
]).'</small>';
<br><small class='text-muted'>".tr('sconto di _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto']),
'_TYPE_' => '&euro;',
]).'</small>';
if ($count <= 1) {
$count += 0.4;
@ -230,8 +209,8 @@ foreach ($righe as $r) {
echo '
<td class="text-center">';
if (empty($r['is_descrizione'])) {
echo
Translator::numberToLocale($r['perc_iva']);
echo '
'.Translator::numberToLocale($r['perc_iva']);
}
echo '
</td>

View File

@ -32,7 +32,11 @@ echo "
<tbody>';
// RIGHE PREVENTIVO CON ORDINAMENTO UNICO
$righe = $dbo->fetchArray("SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice_articolo, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `or_righe_ordini` WHERE idordine=".prepare($id_record).' ORDER BY `order`');
$righe = $dbo->fetchArray("SELECT *,
IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS codice_articolo,
(SELECT GROUP_CONCAT(`serial` SEPARATOR ', ') FROM `mg_prodotti` WHERE `id_riga_ordine` = `or_righe_ordini`.`id`) AS seriali,
(SELECT `percentuale` FROM `co_iva` WHERE `id` = `or_righe_ordini`.`idiva`) AS perc_iva
FROM `or_righe_ordini` WHERE idordine=".prepare($id_record).' ORDER BY `order`');
foreach ($righe as $r) {
$count = 0;
$count += ceil(strlen($r['descrizione']) / $autofill['words']);
@ -43,6 +47,7 @@ foreach ($righe as $r) {
<td>
'.nl2br($r['descrizione']);
// Codice articolo
if (!empty($r['codice_articolo'])) {
echo '
<br><small>'.tr('COD. _COD_', [
@ -54,14 +59,24 @@ foreach ($righe as $r) {
}
}
// Seriali
if (!empty($r['seriali'])) {
echo '
<br><small>'.tr('SN').': '.$r['seriali'].'</small>';
if ($count <= 1) {
$count += 0.4;
}
}
echo '
</td>';
echo "
<td class='text-center'>";
if($r['is_descrizione']==0){
echo
(empty($r['qta']) ? '' : Translator::numberToLocale($r['qta'])).' '.$r['um'];
if (empty($r['is_descrizione'])) {
echo '
'.(empty($r['qta']) ? '' : Translator::numberToLocale($r['qta'])).' '.$r['um'];
}
echo '
</td>';
@ -70,16 +85,16 @@ foreach ($righe as $r) {
// Prezzo unitario
echo "
<td class='text-right'>";
if($r['is_descrizione']==0){
echo
(empty($r['qta']) || empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'] / $r['qta'])).' &euro;';
if (empty($r['is_descrizione'])) {
echo '
'.(empty($r['qta']) || empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'] / $r['qta'])).' &euro;';
if ($r['sconto'] > 0) {
echo "
<br><small class='text-muted'>- ".tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '&euro;'),
]).'</small>';
<br><small class='text-muted'>- ".tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto_unitario']),
'_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : '&euro;'),
]).'</small>';
if ($count <= 1) {
$count += 0.4;
@ -92,16 +107,16 @@ foreach ($righe as $r) {
// Imponibile
echo "
<td class='text-right'>";
if($r['is_descrizione']==0){
echo
(empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'])).' &euro;';
if (empty($r['is_descrizione'])) {
echo '
'.(empty($r['subtotale']) ? '' : Translator::numberToLocale($r['subtotale'])).' &euro;';
if ($r['sconto'] > 0) {
echo "
<br><small class='text-muted'>- ".tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto']),
'_TYPE_' => '&euro;',
]).'</small>';
<br><small class='text-muted'>- ".tr('sconto _TOT_ _TYPE_', [
'_TOT_' => Translator::numberToLocale($r['sconto']),
'_TYPE_' => '&euro;',
]).'</small>';
if ($count <= 1) {
$count += 0.4;
@ -119,9 +134,9 @@ foreach ($righe as $r) {
// Iva
echo '
<td class="text-center">';
if($r['is_descrizione']==0){
echo
Translator::numberToLocale($r['perc_iva']);
if (empty($r['is_descrizione'])) {
echo '
'.Translator::numberToLocale($r['perc_iva']);
}
echo '
</td>
@ -210,7 +225,7 @@ if ($options['pricing']) {
</tr>';
}
echo'
echo '
</table>';
if (!empty($records[0]['note'])) {

View File

@ -1,7 +1,7 @@
<?php
if (file_exists($docroot.'/lib/jscripts/fullcalendar.min.js')) {
delete($docroot.'/lib/jscripts/fullcalendar.min.js');
if (file_exists(DOCROOT.'/lib/jscripts/fullcalendar.min.js')) {
delete(DOCROOT.'/lib/jscripts/fullcalendar.min.js');
}
// Riporto su ogni riga della fattura la relativa rivalsa inps e ritenuta d'acconto se impostate

View File

@ -1,8 +1,8 @@
<?php
/**
* Verifico se serve creare un conto per eventuali nuovi clienti o fornitori.
*/
* Verifico se serve creare un conto per eventuali nuovi clienti o fornitori.
*/
$rs = $dbo->fetchArray('SELECT idanagrafica, ragione_sociale, (SELECT GROUP_CONCAT(an_tipianagrafiche.descrizione) FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica=an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica=an_anagrafiche.idanagrafica) AS idtipianagrafica FROM an_anagrafiche WHERE idconto_cliente=0 OR idconto_fornitore=0');
for ($i = 0; $i < sizeof($rs); ++$i) {
@ -88,8 +88,8 @@ for ($i = 0; $i < sizeof($rs); ++$i) {
// Eliminazione vecchi file
$files = [
$docroot.'/share/themes/default/css/font-awesome.css',
$docroot.'/modules/preventivi/js/'
DOCROOT.'/share/themes/default/css/font-awesome.css',
DOCROOT.'/modules/preventivi/js/',
];
delete($files);

View File

@ -56,114 +56,5 @@ $database->query('UPDATE `zz_files` SET `created_at` = `data`');
$database->query('ALTER TABLE `zz_files` DROP `data`');
/*
* Rimozione file e cartelle deprecati
* Rimozione file e cartelle deprecati [in 2.3.1 per risolvere un problema sui percorsi]
*/
// File e cartelle deprecate
$files = [
'lib/jscripts',
'lib/html2pdf',
'widgets',
'share',
'lib/class.phpmailer.php',
'lib/class.pop3.php',
'lib/class.smtp.php',
'lib/PHPMailerAutoload.php',
'lib/dbo.class.php',
'lib/html-helpers.class.php',
'lib/photo.class.php',
'lib/widgets.class.php',
'modules/anagrafiche/plugins/sedi.php',
'modules/anagrafiche/plugins/referenti.php',
'modules/ddt/plugins/ddt.anagrafiche.php',
'modules/my_impianti/plugins/my_impianti.anagrafiche.php',
'templates/pdfgen.php',
'templates/interventi/intervento_body.html',
'templates/interventi/intervento.html',
'templates/interventi/pdfgen.interventiphp',
'templates/ddt/ddt_body.html',
'templates/ddt/ddt.html',
'templates/ddt/pdfgen.ddt',
'templates/ordini/ordini_body.html',
'templates/ordini/ordini.html',
'templates/ordini/pdfgen.ordini',
'templates/fatture/fatture_body.html',
'templates/fatture/fatture.html',
'templates/fatture/pdfgen.fatture.php',
'templates/contratti/contratti_body.html',
'templates/contratti/contratti.html',
'templates/contratti/pdfgen.contratti.php',
'templates/preventivi/preventivi_body.html',
'templates/preventivi/preventivi.html',
'templates/preventivi/pdfgen.preventivi.php',
'templates/preventivi_cons/preventivo_body.html',
'templates/preventivi_cons/preventivo.html',
'templates/preventivi_cons/pdfgen.preventivi_cons.php',
'templates/contratti_cons/contratto_body.html',
'templates/contratti_cons/contratto.html',
'templates/contratti_cons/pdfgen.contratti_cons.php',
'update/install_2.0.sql',
'update/update_2.1.sql',
'update/update_2.1.php',
'update/update_2.2.sql',
'update/update_2.2.php',
'update/update_checker.php',
'permissions.php',
'settings.php',
'addgroup.php',
'adduser.php',
'change_pwd.php',
'README',
];
foreach ($files as $key => $value) {
$files[$key] = realpath($docroot.'/'.$value);
}
delete($files);
// File .html dei moduli di default
// Per un problema sulla lunghezza massima del path su glob è necessario dividere le cartelle dei moduli di default da pulire
$dirs = [
'aggiornamenti',
'anagrafiche',
'articoli',
'automezzi',
'backup',
'beni',
'categorie',
'causali',
'contratti',
'dashboard',
'ddt',
'fatture',
'gestione_componenti',
'interventi',
'iva',
'listini',
'misure',
'my_impianti',
'opzioni',
'ordini',
'pagamenti',
'partitario',
'porti',
'preventivi',
'primanota',
'scadenzario',
'stati_intervento',
'tecnici_tariffe',
'tipi_anagrafiche',
'tipi_intervento',
'utenti',
'viste',
'voci_servizio',
'zone',
];
$pieces = array_chunk($dirs, 5);
foreach ($pieces as $piece) {
$files = glob($docroot.'/modules/{'.implode(',', $piece).'}/*.html', GLOB_BRACE);
delete($files);
}

130
update/2_3_1.php Normal file
View File

@ -0,0 +1,130 @@
<?php
/*
* Rimozione file e cartelle deprecati [da 2.3]
*/
// File e cartelle deprecate
$files = [
'permissions.php',
'settings.php',
'addgroup.php',
'adduser.php',
'change_pwd.php',
'README',
'widgets',
'share',
'lib/jscripts',
'lib/html2pdf',
'lib/class.phpmailer.php',
'lib/class.pop3.php',
'lib/class.smtp.php',
'lib/PHPMailerAutoload.php',
'lib/dbo.class.php',
'lib/html-helpers.class.php',
'lib/photo.class.php',
'lib/widgets.class.php',
'modules/anagrafiche/plugins/sedi.php',
'modules/anagrafiche/plugins/referenti.php',
'modules/ddt/plugins/ddt.anagrafiche.php',
'modules/my_impianti/plugins/my_impianti.anagrafiche.php',
'templates/pdfgen.php',
'templates/interventi/intervento_body.html',
'templates/interventi/intervento.html',
'templates/ddt/ddt_body.html',
'templates/ddt/ddt.html',
'templates/ordini/ordini_body.html',
'templates/ordini/ordini.html',
'templates/fatture/pdfgen.fatture.php',
'templates/contratti/pdfgen.contratti.php',
'templates/preventivi/pdfgen.preventivi.php',
'templates/preventivi_cons/preventivo_body.html',
'templates/preventivi_cons/preventivo.html',
'templates/preventivi_cons/pdfgen.preventivi_cons.php',
'templates/contratti_cons/contratto_body.html',
'templates/contratti_cons/contratto.html',
'templates/contratti_cons/pdfgen.contratti_cons.php',
'update/install_2.0.sql',
'update/update_2.1.sql',
'update/update_2.1.php',
'update/update_2.2.sql',
'update/update_2.2.php',
'update/update_checker.php',
];
foreach ($files as $key => $value) {
$files[$key] = realpath(DOCROOT.'/'.$value);
}
delete($files);
// File .html dei moduli di default
// Per un problema sulla lunghezza massima del path su glob è necessario dividere le cartelle dei moduli di default da pulire
$dirs = [
'aggiornamenti',
'anagrafiche',
'articoli',
'automezzi',
'backup',
'beni',
'categorie',
'causali',
'contratti',
'dashboard',
'ddt',
'fatture',
'gestione_componenti',
'interventi',
'iva',
'listini',
'misure',
'my_impianti',
'opzioni',
'ordini',
'pagamenti',
'partitario',
'porti',
'preventivi',
'primanota',
'scadenzario',
'stati_intervento',
'tecnici_tariffe',
'tipi_anagrafiche',
'tipi_intervento',
'utenti',
'viste',
'voci_servizio',
'zone',
];
$pieces = array_chunk($dirs, 5);
foreach ($pieces as $piece) {
$files = glob(DOCROOT.'/modules/{'.implode(',', $piece).'}/*.html', GLOB_BRACE);
delete($files);
}
/*
* Rimozione file e cartelle deprecati [2.3.1]
*/
// File e cartelle deprecate
$files = [
'templates/interventi/pdfgen.interventi.php',
'templates/ddt/pdfgen.ddt.php',
'templates/ordini/pdfgen.ordini.php',
'templates/fatture/fattura_body.html',
'templates/fatture/fattura.html',
'templates/contratti/contratto_body.html',
'templates/contratti/contratto.html',
'templates/preventivo/preventivo_body.html',
'templates/preventivo/preventivo.html',
'locale/it/it.po',
'locale/it/it.mo',
];
foreach ($files as $key => $value) {
$files[$key] = realpath(DOCROOT.'/'.$value);
}
delete($files);

View File

@ -17,3 +17,13 @@ UPDATE `zz_views` SET `order_by` = 'CAST(numero AS UNSIGNED)' WHERE `name` = 'Nu
-- Query per ignorare i punti nella ricerca in Ragione sociale
-- UPDATE `zz_views` SET `search_inside` = CONCAT('REPLACE(', `query`, ', ''.'', '''') LIKE |search|') WHERE `name` = 'Ragione sociale';
-- Aggiornate le viste standard, separando i simboli < e > per non dare errore nell'aggiornamento
UPDATE `zz_views` SET `query` = 'IF(scadenza < NOW(), \'#ff7777\', \'\')' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario') AND `name` = '_bg_';
UPDATE `zz_views` SET `query` = 'CONCAT(co_tipidocumento.descrizione, CONCAT(\' numero \', IF(numero_esterno <> \'\', numero_esterno, numero)))' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario') AND `name` = 'Data emissione';
UPDATE `zz_views` SET `query` = 'GROUP_CONCAT(CASE WHEN totale > 0 THEN co_pianodeiconti3.descrizione ELSE NULL END)' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Prima nota') AND `name` = 'Conto avere';
UPDATE `zz_views` SET `query` = 'GROUP_CONCAT(CASE WHEN totale < 0 THEN co_pianodeiconti3.descrizione ELSE NULL END)' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Prima nota') AND `name` = 'Conto dare';
-- Aggiungo 1=1 nel WHERE per il widget clienti in anagrafica
UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(an_anagrafiche.idanagrafica) AS dato 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 1=1 AND descrizione="Cliente" AND deleted=0' WHERE `zz_widgets`.`name` = 'Numero di clienti';