2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
/**
* Questa funzione rimuove un articolo dal ddt data e lo riporta in magazzino
* $idarticolo integer codice dell 'articolo da scollegare dall' ordine
* $idordine integer codice dell 'ordine da cui scollegare l' articolo .
*/
function rimuovi_articolo_dapreventivo ( $idarticolo , $idpreventivo , $idriga )
{
global $dir ;
2018-06-22 17:04:37 +02:00
$dbo = Database :: getConnection ();
// Leggo la quantità di questo articolo nell'ordine
2017-08-04 16:28:16 +02:00
$query = 'SELECT qta, subtotale FROM co_righe_preventivi WHERE id=' . prepare ( $idriga );
$rs = $dbo -> fetchArray ( $query );
$qta = floatval ( $rs [ 0 ][ 'qta' ]);
$subtotale = $rs [ 0 ][ 'subtotale' ];
2018-06-22 17:04:37 +02:00
// Elimino la riga dall'ordine
2017-08-04 16:28:16 +02:00
$dbo -> query ( 'DELETE FROM co_righe_preventivi WHERE id=' . prepare ( $idriga ));
}
/**
* Ricalcola i costi aggiuntivi in ordine ( rivalsa inps , ritenuta d ' acconto , marca da bollo )
* Deve essere eseguito ogni volta che si aggiunge o toglie una riga
* $idordine int ID del ordine
* $idrivalsainps int ID della rivalsa inps da applicare . Se omesso viene utilizzata quella impostata di default
* $idritenutaacconto int ID della ritenuta d ' acconto da applicare . Se omesso viene utilizzata quella impostata di default
* $bolli float Costi aggiuntivi delle marche da bollo . Se omesso verrà usata la cifra predefinita .
*/
function ricalcola_costiagg_preventivo ( $idpreventivo , $idrivalsainps = '' , $idritenutaacconto = '' , $bolli = '' )
{
global $dir ;
2018-06-22 17:04:37 +02:00
$dbo = Database :: getConnection ();
// Se ci sono righe nel ordine faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
2017-08-04 16:28:16 +02:00
$query = 'SELECT COUNT(id) AS righe FROM co_righe_preventivi WHERE idpreventivo=' . prepare ( $idpreventivo );
$rs = $dbo -> fetchArray ( $query );
if ( $rs [ 0 ][ 'righe' ] > 0 ) {
$totale_imponibile = get_imponibile_preventivo ( $idpreventivo );
$totale_preventivo = get_totale_preventivo ( $idpreventivo );
2018-06-22 17:04:37 +02:00
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
2017-08-04 16:28:16 +02:00
if ( $dir == 'entrata' ) {
if ( ! empty ( $idrivalsainps )) {
2018-07-08 18:11:17 +02:00
$idrivalsainps = setting ( 'Percentuale rivalsa INPS' );
2017-08-04 16:28:16 +02:00
}
}
$query = 'SELECT percentuale FROM co_rivalsainps WHERE id=' . prepare ( $idrivalsainps );
$rs = $dbo -> fetchArray ( $query );
$rivalsainps = $totale_imponibile / 100 * $rs [ 0 ][ 'percentuale' ];
2018-06-22 17:04:37 +02:00
// Aggiorno la rivalsa inps
// $dbo->query("UPDATE or_ordini SET rivalsainps='$rivalsainps' WHERE id='$idordine'");
2017-08-04 16:28:16 +02:00
2018-06-22 17:04:37 +02:00
// Leggo la ritenuta d'acconto se c'è
2017-08-04 16:28:16 +02:00
$totale_ordine = get_totale_ordine ( $idordine );
2018-06-22 17:04:37 +02:00
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
2017-08-04 16:28:16 +02:00
if ( ! empty ( $idritenutaacconto )) {
if ( $dir == 'entrata' ) {
2018-07-08 18:11:17 +02:00
$idritenutaacconto = setting ( " Percentuale ritenuta d'acconto " );
2017-08-04 16:28:16 +02:00
}
}
$query = 'SELECT percentuale FROM co_ritenutaacconto WHERE id=' . prepare ( $idritenutaacconto );
$rs = $dbo -> fetchArray ( $query );
$ritenutaacconto = $totale_preventivo / 100 * $rs [ 0 ][ 'percentuale' ];
$netto_a_pagare = $totale_preventivo - $ritenutaacconto ;
2018-06-22 17:04:37 +02:00
// Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
2017-08-04 16:28:16 +02:00
$bolli = str_replace ( ',' , '.' , $bolli );
$bolli = floatval ( $bolli );
if ( $dir == 'uscita' ) {
} else {
2018-07-08 18:11:17 +02:00
$bolli = str_replace ( ',' , '.' , setting ( 'Importo marca da bollo' ));
if ( abs ( $bolli ) > 0 && abs ( $netto_a_pagare ) > abs ( setting ( " Soglia minima per l'applicazione della marca da bollo " ))) {
2017-08-04 16:28:16 +02:00
$marca_da_bollo = str_replace ( ',' , '.' , $bolli );
} else {
$marca_da_bollo = 0.00 ;
}
2018-07-05 17:56:38 +02:00
// Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo
2017-08-04 16:28:16 +02:00
if ( $netto_a_pagare < 0 ) {
$marca_da_bollo *= - 1 ;
}
}
2018-06-22 17:04:37 +02:00
// $dbo->query("UPDATE or_ordini SET ritenutaacconto='$ritenutaacconto', bollo='$marca_da_bollo' WHERE id='$idordine'");
2017-08-04 16:28:16 +02:00
} else {
2018-06-22 17:04:37 +02:00
// $dbo->query("UPDATE or_ordini SET ritenutaacconto='0', bollo='0', sconto='0', rivalsainps='0' WHERE id='$idordine'");
2017-08-04 16:28:16 +02:00
}
}
function get_imponibile_preventivo ( $idpreventivo )
{
2018-06-22 17:04:37 +02:00
$dbo = Database :: getConnection ();
2017-08-04 16:28:16 +02:00
$query = 'SELECT SUM(co_righe_preventivi.subtotale - co_righe_preventivi.sconto) AS imponibile FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo=' . prepare ( $idpreventivo );
$rs = $dbo -> fetchArray ( $query );
2018-06-23 18:35:08 +02:00
return isset ( $rs [ 0 ][ 'imponibile' ]) ? $rs [ 0 ][ 'imponibile' ] : 0 ;
2017-08-04 16:28:16 +02:00
}
/**
* Restituisce lo stato dell ' ordine in base alle righe .
*/
function get_stato_preventivo ( $idpreventivo )
{
2018-06-22 17:04:37 +02:00
$dbo = Database :: getConnection ();
2017-08-04 16:28:16 +02:00
$rs = $dbo -> fetchArray ( 'SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo=' . prepare ( $idpreventivo ));
if ( $rs [ 0 ][ 'qta_evasa' ] > 0 ) {
if ( $rs [ 0 ][ 'qta' ] > $rs [ 0 ][ 'qta_evasa' ]) {
return 'Parzialmente evaso' ;
} elseif ( $rs [ 0 ][ 'qta' ] == $rs [ 0 ][ 'qta_evasa' ]) {
return 'Evaso' ;
}
} else {
return 'Non evaso' ;
}
}
/**
* Aggiorna il budget del preventivo leggendo tutte le righe inserite .
2018-02-18 19:53:23 +01:00
*
2017-08-31 12:52:15 +02:00
* @ deprecated 2.3
2017-08-04 16:28:16 +02:00
*/
function update_budget_preventivo ( $idpreventivo )
{
2018-06-22 17:04:37 +02:00
$dbo = Database :: getConnection ();
2017-08-04 16:28:16 +02:00
2018-06-22 17:04:37 +02:00
// Totale articoli
2017-08-04 16:28:16 +02:00
$rs = $dbo -> fetchArray ( 'SELECT SUM(subtotale) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo=' . prepare ( $idpreventivo ));
$totale_articoli = $rs [ 0 ][ 'totale' ];
$rs = $dbo -> fetchArray ( 'SELECT SUM(sconto*qta) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo=' . prepare ( $idpreventivo ));
$totale_sconto = $rs [ 0 ][ 'totale' ];
$rs = $dbo -> fetchArray ( 'SELECT SUM(iva) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo=' . prepare ( $idpreventivo ));
$totale_iva = $rs [ 0 ][ 'totale' ];
2018-06-22 17:04:37 +02:00
// Totale costo ore, km e diritto di chiamata
// $rs = $dbo->fetchArray("SELECT SUM(costo_orario*ore_lavoro + costo_diritto_chiamata) AS totale FROM co_preventivi GROUP BY id HAVING id=\"".$idpreventivo."\"");
// $totale_lavoro = $rs[0]['totale'];
2017-08-04 16:28:16 +02:00
2018-06-22 17:04:37 +02:00
// Aggiorno il budget su co_preventivi
2017-08-04 16:28:16 +02:00
$dbo -> query ( 'UPDATE co_preventivi SET budget=' . prepare (( $totale_articoli - $totale_sconto ) + $totale_iva ) . ' WHERE id=' . prepare ( $idpreventivo ));
}