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:
parent
aaabb18fe6
commit
bc38e8a0c4
72
CHANGELOG.md
72
CHANGELOG.md
|
@ -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)
|
||||||
|
|
|
@ -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'])){
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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.tà').'</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']).' € </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).' €</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>';
|
|
@ -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";
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue