Fix fino alla revisione 1538

Aggiornamento del changelog per la versione 2.3 e ripristino dei fix da Sourceforge fino alla revisione 1538.
This commit is contained in:
Thomas Zilio 2017-08-31 12:52:15 +02:00
parent aaabb18fe6
commit bc38e8a0c4
8 changed files with 96 additions and 79 deletions

View File

@ -4,11 +4,8 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release. Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
## Tabella dei contenuti
<!-- TOC depthFrom:2 depthTo:2 orderedList:false updateOnSave:true withLinks:true --> <!-- TOC depthFrom:2 depthTo:2 orderedList:false updateOnSave:true withLinks:true -->
- [Tabella dei contenuti](#tabella-dei-contenuti)
- [2.3 (In sviluppo)](#23-in-sviluppo) - [2.3 (In sviluppo)](#23-in-sviluppo)
- [2.2 (2016-11-10)](#22-2016-11-10) - [2.2 (2016-11-10)](#22-2016-11-10)
- [2.1 (2015-04-02)](#21-2015-04-02) - [2.1 (2015-04-02)](#21-2015-04-02)
@ -21,55 +18,26 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
- Creazione della documentazione ufficiale per sviluppatori (disponibile nel Wiki e in `docs/`) - Creazione della documentazione ufficiale per sviluppatori (disponibile nel Wiki e in `docs/`)
- Creazione di un sistema API ufficiale - Creazione di un sistema API ufficiale
- Creazione di un sistema per controllare gli accessi degli utenti - Creazione di sistemi centralizzati per la gestione della connessione al database, dell'autenticazione, degli input degli utenti, dei permessi, delle impostazioni, delle traduzioni e degli aggiornamenti (secondo una logica ad oggetti)
- Nuovi moduli _Viste_, _Utenti e permessi_, _Opzioni_, con ulteriori moduli per la gestione di tabelle secondarie (_IVA_, _Pagamenti_, ...)
- Nuova struttura per permettere il richiamo via AJAX delle procedure per la creazione di nuovi elementi all'esterno del modulo specifico (tramite il file `add.php`)
- Possibilità di vedere se ci sono altri utenti che stanno visualizzando lo stesso record (opzione "Sessione avanzata" nel modulo _Opzioni_)
- Nuove funzioni PHP (con commenti) in `lib/functions.php`
- getRevision
- str\_replace\_once
- filter
- post
- get
- readSQLFile
- array\_pluck
- starts_with
- ends_with
- slashes
- prepare
- tr (con aggiunta della funzione di gettext nel caso questi non sia abilitato - `_`)
- safe\_truncate (in sostituzione a cut\_text)
- secure\_random\_string
- random\_string
- safe\_truncate
- force\_download
- isHTTPS
- Nuovi oggetti per la gestione delle operazioni di base (posizionati in `lib/classes/`)
- Auth
- Database
- Filter (in sostituzione a HTMLHelper, ora deprecato ma ancora presente)
- HTMLBuilder
- Modules
- Options
- Permissions
- Translator (per la futura internazionalizzazione e traduzione del progetto, inoltre disponibile in `locale/it/`)
- Update
- Widgtes (modificati per lavorare secondo una metodologia statica)
- Nuova gestione delle operazioni di debugging e logging - Nuova gestione delle operazioni di debugging e logging
- Nuovi plugins e widgets
- Nuovi moduli _Viste_, _Utenti e permessi_, _Opzioni_, con ulteriori moduli per la gestione di tabelle secondarie (_IVA_, _Pagamenti_, ...)
- Possibilità di vedere se ci sono altri utenti che stanno visualizzando lo stesso record (opzione "Sessione avanzata" nel modulo _Opzioni_)
- Possibilità di creare nuovi elementi dei moduli all'interno del record (oltre che dalla visualizzazione generale del modulo)
- Nuova struttura per permettere il richiamo via AJAX delle procedure per la creazione di nuovi elementi all'esterno del modulo specifico (tramite il file `add.php`)
- Miglioramento della documentazione integrata delle funzioni PHP in `lib/functions.php`
- Nuovo file `lib/init.js` per permettere una rapida inizializzazione dei componenti JS - Nuovo file `lib/init.js` per permettere una rapida inizializzazione dei componenti JS
- Creazione di cartelle di default per i backup (`backup/`) e i log (`logs/`) - Creazione di cartelle di default per i backup (`backup/`) e i log (`logs/`)
- Nuovo pulsante per resettare i filtri di ricerca (nella sezione generica dei moduli) - Nuovo pulsante per resettare i filtri di ricerca (nella sezione generica dei moduli)
- Nuovo modulo per gestire i file `.ini` dei componenti degli impianti - Nuovo modulo per gestire i file `.ini` dei componenti degli impianti
- Nuovi plugins e widgets
- Nuova gestione generalizzata degli upload - Nuova gestione generalizzata degli upload
- Nuove funzioni relative ai diversi moduli - Nuove funzioni relative ai diversi moduli
- Possibilità di inserire in fattura un range di serial number
- Possibilità di individuare i componenti dell'impianto su cui l'intervento viene effettuato - Possibilità di individuare i componenti dell'impianto su cui l'intervento viene effettuato
- Possibilità di gestire le ritenute d'acconto - Possibilità di gestire le ritenute d'acconto
- Firma degli interventi - Firma degli interventi
- Selezione della tipologia di attività per ogni sessione di lavoro - Selezione della tipologia di attività per ogni sessione di lavoro
- Tabella riepilogativa più completa dei costi - Tabella riepilogativa più completa dei costi
- Sconto incondizionato in _Interventi_ - Sconto globale in _Interventi_, _Fatture_, _DDT_, _Ordini_, _Preventivi_
### Modificato (Changed) ### Modificato (Changed)
@ -80,16 +48,16 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
- Miglioramenti delle informazioni disponibili sul progetto e della procedura di segnalazione dei bug - Miglioramenti delle informazioni disponibili sul progetto e della procedura di segnalazione dei bug
- Impianti ora identificati tramite numerazione univoca (non più tramite matricola) - Impianti ora identificati tramite numerazione univoca (non più tramite matricola)
- Sostituzione di Chosen con Select2 - Sostituzione di Chosen con Select2
- Miglioramento dell'interpretazione del template per la generazione degli input (`lib/htmlbuilder.php`), ora inoltre disponibile ovunque all'interno del progetto - Miglioramento dell'interpretazione del template per la generazione degli input, ora disponibile ovunque all'interno del progetto
- Miglioramento generale sull'identificazione del modulo attualmente in uso e sull'inclusione dei file necessari per il funzionamento - Miglioramento generale sull'identificazione del modulo attualmente in uso e sull'inclusione dei file necessari per il funzionamento
- Miglioramento della gestione dei permessi - Miglioramento della gestione dei permessi
- Gestione della connessione al database tramite Medoo (possibile futuro ampliamento dei DMBS supportati) - Gestione della connessione al database tramite PDO (con possibile futuro ampliamento dei DMBS supportati)
- Gestione delle tabelle ora completamente basata su Datatables - Gestione delle tabelle ora completamente basata su Datatables
- Ottimizzazione della schermata per aggiunta dell'intervento - Ottimizzazione della schermata per aggiunta dell'intervento
- Miglioramento dei riquadri delle spese aggiuntive e degli articoli - Miglioramento dei riquadri delle spese aggiuntive e degli articoli
- La prima anagrafica di tipo Azienda caricata viene impostata come Azienda predefinita - La prima anagrafica di tipo Azienda caricata viene impostata come Azienda predefinita
- Passaggio completo all'estensione `.php` per tutti i file dei moduli - Passaggio completo all'estensione `.php` per tutti i file dei moduli
- Miglioramento dei permessi di visione per il modulo _MyImpianti_, per cui ora ogni cliente vede solo i propri impianti - Miglioramento dei permessi di visione per il modulo _MyImpianti_ (ora ogni cliente vede solo i propri impianti)
- Miglioramento della procedura di aggiornamento del gestionale - Miglioramento della procedura di aggiornamento del gestionale
- Aggiunto sistema di ripresa dell'aggiornamento (se questi è stato bloccato in una fase intermedia tra i singoli aggiornamenti) - Aggiunto sistema di ripresa dell'aggiornamento (se questi è stato bloccato in una fase intermedia tra i singoli aggiornamenti)
- Aggiunto sistema di bloccaggio dell'aggiornamento, per evitare problemi nel caso molteplici richieste di update - Aggiunto sistema di bloccaggio dell'aggiornamento, per evitare problemi nel caso molteplici richieste di update
@ -99,20 +67,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
### Deprecato (Deprecated) ### Deprecato (Deprecated)
- Classe HTMLHelper, a favore della nuova classe Filter - Classe HTMLHelper, a favore della nuova classe Filter
- Funzioni PHP - Funzioni PHP (`lib/deprecated.php`)
- readDateTime
- readDateTimePrint
- get\_permessi
- saveDateTime
- saveDate
- fix\_str
- clean
- makeid
- read
- readTime
- readDate
- build\_html\_element
### Rimosso (Removed) ### Rimosso (Removed)
@ -148,8 +103,9 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
### Sicurezza (Security) ### Sicurezza (Security)
- Aggiunta protezione contro l'XSS - Aggiunta protezione contro attacchi di tipo XSS
- Aggiunta base per contrastare l'SQL Injection - Aggiunta base per contrastare l'SQL Injection
- Aggiunta protezione (temporaneamente disabilitata) contro attacchi CSRF
- Passaggio della codifica della password con algoritmo di hashing BCrypt - Passaggio della codifica della password con algoritmo di hashing BCrypt
## 2.2 (2016-11-10) ## 2.2 (2016-11-10)

View File

@ -68,14 +68,8 @@ switch (post('op')) {
$dbo->query('UPDATE an_anagrafiche SET codice='.prepare($post['codice']).' WHERE idanagrafica='.prepare($id_record)); $dbo->query('UPDATE an_anagrafiche SET codice='.prepare($post['codice']).' WHERE idanagrafica='.prepare($id_record));
} }
// Aggiorno gli agenti secondari collegati // Aggiorno gli agenti collegati
$dbo->query('DELETE FROM an_anagrafiche_agenti WHERE idanagrafica='.prepare($id_record)); $dbo->sync('an_anagrafiche_agenti', ['idanagrafica' => $id_record], ['idagente' => (array) $post['idagenti']]);
if (!empty($post['idagenti'])) {
foreach ($post['idagenti'] as $idagente) {
$dbo->query('INSERT INTO an_anagrafiche_agenti(idanagrafica, idagente) VALUES ('.prepare($id_record).', '.prepare($idagente).')');
}
}
// Se l'agente di default è stato elencato anche tra gli agenti secondari lo rimuovo // Se l'agente di default è stato elencato anche tra gli agenti secondari lo rimuovo
if(!empty($post['idagente'])){ if(!empty($post['idagente'])){

View File

@ -186,9 +186,6 @@ if ($fornitore) {
{[ "type": "select", "label": "<?php echo _('Tipo attività'); ?>", "name": "idtipointervento_default", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "$idtipointervento_default$" ]} {[ "type": "select", "label": "<?php echo _('Tipo attività'); ?>", "name": "idtipointervento_default", "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC", "value": "$idtipointervento_default$" ]}
</div> </div>
<!--div class="col-md-3">
{[ "type": "select", "label": "<?php echo _('Agente principale'); ?>", "name": "idagente", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN an_anagrafiche_agenti ON an_anagrafiche.idanagrafica=an_anagrafiche_agenti.idagente WHERE an_anagrafiche_agenti.idanagrafica='<?php echo $id_record ?>' AND deleted=0 ORDER BY ragione_sociale", "value": "$idagente$" ]}
</div-->
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "select", "label": "Agente principale", "name": "idagente", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted=1, CONCAT(ragione_sociale, ' (Eliminato)'), 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='Agente' AND deleted=0)<?php echo isset($records[0]['idagente']) ? 'OR (an_anagrafiche.idanagrafica = '.prepare($records[0]['idagente']).'AND deleted=1) ' : ''; ?>ORDER BY ragione_sociale", "value": "$idagente$" ]} {[ "type": "select", "label": "Agente principale", "name": "idagente", "values": "query=SELECT an_anagrafiche.idanagrafica AS id, IF(deleted=1, CONCAT(ragione_sociale, ' (Eliminato)'), 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='Agente' AND deleted=0)<?php echo isset($records[0]['idagente']) ? 'OR (an_anagrafiche.idanagrafica = '.prepare($records[0]['idagente']).'AND deleted=1) ' : ''; ?>ORDER BY ragione_sociale", "value": "$idagente$" ]}
</div> </div>

View File

@ -170,6 +170,7 @@ function get_stato_preventivo($idpreventivo)
/** /**
* Aggiorna il budget del preventivo leggendo tutte le righe inserite. * Aggiorna il budget del preventivo leggendo tutte le righe inserite.
* @deprecated 2.3
*/ */
function update_budget_preventivo($idpreventivo) function update_budget_preventivo($idpreventivo)
{ {

View File

@ -197,6 +197,18 @@ switch (post('op')) {
rimuovi_articolo_dafattura($rs[$i]['idarticolo'], $id_record, $rs[$i]['id']); rimuovi_articolo_dafattura($rs[$i]['idarticolo'], $id_record, $rs[$i]['id']);
} }
// Se delle righe sono state create da un ordine, devo riportare la quantità evasa nella tabella degli ordini al valore di prima, riaggiungendo la quantità che sto togliendo
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idordine, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento));
foreach ($rs as $r) {
$dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$r['qta'].' WHERE descrizione='.prepare($r['descrizione']).' AND idarticolo='.prepare($r['idarticolo']).' AND idordine='.prepare($r['idordine']).' AND idiva='.prepare($r['idiva']));
}
// Se delle righe sono state create da un ddt, devo riportare la quantità evasa nella tabella dei ddt al valore di prima, riaggiungendo la quantità che sto togliendo
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento));
foreach ($rs as $r) {
$dbo->query('UPDATE dt_righe_ddt SET qta_evasa=qta_evasa-'.$r['qta'].' WHERE descrizione='.prepare($r['descrizione']).' AND idarticolo='.prepare($r['idarticolo']).' AND idddt='.prepare($r['idddt']).' AND idiva='.prepare($r['idiva']));
}
$dbo->query('DELETE FROM co_documenti WHERE id='.prepare($id_record)); $dbo->query('DELETE FROM co_documenti WHERE id='.prepare($id_record));
$dbo->query('DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id_record)); $dbo->query('DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
$dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id_record)); $dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id_record));
@ -321,12 +333,12 @@ switch (post('op')) {
// Calcolo rivalsa inps // Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$rivalsainps = $subtot / 100 * $rs[0]['percentuale']; $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto // Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale']; $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
$query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).", 'km' ".prepare($km).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).", 'km' ".prepare($km).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
$dbo->query($query); $dbo->query($query);
@ -377,12 +389,12 @@ switch (post('op')) {
// Calcolo rivalsa inps // Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$rivalsainps = $subtot / 100 * $rs[0]['percentuale']; $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto // Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale']; $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
// Aggiunta riga intervento sul documento // Aggiunta riga intervento sul documento
$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, idgruppo, `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_unitario).', '.prepare($tipo_sconto).", '-', ".prepare($qta).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $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, idgruppo, `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_unitario).', '.prepare($tipo_sconto).", '-', ".prepare($qta).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
@ -542,12 +554,12 @@ switch (post('op')) {
// Calcolo rivalsa inps // Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS'));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$rivalsainps = $prezzo / 100 * $rs[0]['percentuale']; $rivalsainps = ($prezzo - $sconto) / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto // Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto"));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$ritenutaacconto = ($prezzo) / 100 * $rs[0]['percentuale']; $ritenutaacconto = ($prezzo - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
// Aggiunta riga contratto sul documento // Aggiunta riga contratto sul documento
$query = 'INSERT INTO co_righe_documenti(iddocumento, idcontratto, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $query = 'INSERT INTO co_righe_documenti(iddocumento, idcontratto, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, idgruppo, `order`) VALUES('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
@ -627,7 +639,7 @@ switch (post('op')) {
// Calcolo rivalsa inps // Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(post('idrivalsainps')); $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(post('idrivalsainps'));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$rivalsainps = $prezzo * $qta / 100 * $rs[0]['percentuale']; $rivalsainps = ($prezzo * $qta - $sconto) / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto // Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(post('idritenutaacconto')); $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(post('idritenutaacconto'));
@ -692,12 +704,12 @@ switch (post('op')) {
// Calcolo rivalsa inps // Calcolo rivalsa inps
$query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(post('idrivalsainps')); $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(post('idrivalsainps'));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$rivalsainps = $prezzo * $qta / 100 * $rs[0]['percentuale']; $rivalsainps = ($prezzo * $qta - $sconto) / 100 * $rs[0]['percentuale'];
// Calcolo ritenuta d'acconto // Calcolo ritenuta d'acconto
$query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(post('idritenutaacconto')); $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(post('idritenutaacconto'));
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$ritenutaacconto = (($prezzo * $qta) + $rivalsainps) / 100 * $rs[0]['percentuale']; $ritenutaacconto = (($prezzo * $qta) - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
// Modifica riga generica sul documento // Modifica riga generica sul documento
$query = 'UPDATE co_righe_documenti SET idconto='.prepare($idconto).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', idritenutaacconto='.prepare(post('idritenutaacconto')).', ritenutaacconto='.prepare($ritenutaacconto).', idrivalsainps='.prepare(post('idrivalsainps')).', rivalsainps='.prepare($rivalsainps).' WHERE idgruppo='.prepare($idgruppo).' AND iddocumento='.prepare($iddocumento); $query = 'UPDATE co_righe_documenti SET idconto='.prepare($idconto).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', idritenutaacconto='.prepare(post('idritenutaacconto')).', ritenutaacconto='.prepare($ritenutaacconto).', idrivalsainps='.prepare(post('idrivalsainps')).', rivalsainps='.prepare($rivalsainps).' WHERE idgruppo='.prepare($idgruppo).' AND iddocumento='.prepare($iddocumento);

View File

@ -0,0 +1,55 @@
<?php
include_once __DIR__.'/../../core.php';
$id_movimento = $get['id_movimento'];
$id_conto = $get['id_conto'];
$query = 'SELECT *, (subtotale-sconto) AS imponibile, (co_movimenti.descrizione) AS desc_fatt, (co_righe_documenti.descrizione) AS desc_riga FROM co_movimenti INNER JOIN co_righe_documenti ON co_movimenti.iddocumento = co_righe_documenti.iddocumento WHERE co_movimenti.id = '.prepare($id_movimento).' AND co_movimenti.idconto = '.prepare($id_conto);
$rs = $dbo->fetchArray($query);
echo '
<table class="table table-striped table-hover table-condensed table-bordered">
<tr>
<th>'._('Descrizione riga').'</th>
<th width="100">'._('Imponibile').'</th>
<th width="100">'._('Q.').'</th
<th width="100">'._('Um').'</th>
</tr>';
$totale_imponibile = 0;
for ($i = 0; $i < sizeof($rs); ++$i) {
echo '
<tr>
<td>
<span>'.$rs[$i]['desc_riga'].'</span>
</td>
<td>
<span>'.Translator::numberToLocale($rs[$i]['imponibile']).' &euro; </span>
</td>
<td
<span>'.Translator::numberToLocale($rs[$i]['qta']).'</span>
</td>
<td>
<span>'.$rs[$i]['um'].'</span>
</td>
</tr>';
$totale_imponibile += $rs[$i]['imponibile'];
$totale_qta += $rs[$i]['qta'];
}
echo '
<tr>
<th>'._('Totali').': </th>
<th width="100"><span>'.Translator::numberToLocale($totale_imponibile).' &euro;</span></th>
<th width="100"><span>'.Translator::numberToLocale($totale_qta).'</span></th>
<th width="100"></th>
</tr>
</table>
<br><a class="btn btn-info btn-block" target="_blank" href="'.$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[0]['iddocumento'].'">'.$rs[0]['desc_fatt'].'</a>';

View File

@ -104,7 +104,8 @@ for ($x = 0; $x < $n1; ++$x) {
if ($rs[$i]['iddocumento'] != '') { if ($rs[$i]['iddocumento'] != '') {
($rs[$i]['dir'] == 'entrata') ? $id_module = Modules::getModule('Fatture di vendita')['id'] : $id_module = Modules::getModule('Fatture di acquisto')['id']; ($rs[$i]['dir'] == 'entrata') ? $id_module = Modules::getModule('Fatture di vendita')['id'] : $id_module = Modules::getModule('Fatture di acquisto')['id'];
echo " <a href='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$i]['iddocumento']."'>".$rs[$i]['descrizione']."</a>\n"; echo "<a data-toggle='modal' data-title='Dettagli movimento...' data-target='#bs-popup' class='clickable' data-href='".$rootdir."/modules/partitario/dettagli_movimento.php?id_movimento=".$rs[$i]['id']."&id_conto=".$rs[$i]['idconto']."&id_module=".$id_module."' >".$rs[$i]['descrizione']."</a>\n";
//echo " <a href='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$rs[$i]['iddocumento']."'>".$rs[$i]['descrizione']."</a>\n";
} else { } else {
echo ' <span>'.$rs[$i]['descrizione']."</span>\n"; echo ' <span>'.$rs[$i]['descrizione']."</span>\n";
} }

View File

@ -180,6 +180,7 @@ function get_stato_preventivo($idpreventivo)
/** /**
* Aggiorna il budget del preventivo leggendo tutte le righe inserite. * Aggiorna il budget del preventivo leggendo tutte le righe inserite.
* @deprecated 2.3
*/ */
function update_budget_preventivo($idpreventivo) function update_budget_preventivo($idpreventivo)
{ {