343 lines
13 KiB
PHP
343 lines
13 KiB
PHP
<?php
|
|
include_once(__DIR__."/../../core.php");
|
|
|
|
/**
|
|
* Funzione per generare un nuovo numero per la fattura
|
|
*/
|
|
function get_new_numeroordine( $data ){
|
|
global $dbo;
|
|
global $dir;
|
|
|
|
$query = "SELECT numero AS max_numeroordine FROM or_ordini WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."' AND idtipoordine IN(SELECT id FROM or_tipiordine WHERE dir='".$dir."') ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1";
|
|
$rs = $dbo->fetchArray($query);
|
|
$numero = $rs[0]['max_numeroordine']+1;
|
|
|
|
return $numero;
|
|
}
|
|
|
|
|
|
/**
|
|
* Funzione per calcolare il numero secondario successivo utilizzando la maschera dalle impostazioni
|
|
*/
|
|
function get_new_numerosecondarioordine( $data ){
|
|
global $dbo;
|
|
global $dir;
|
|
|
|
|
|
// $query = "SELECT numero_esterno FROM or_ordini WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime ( '+3 month' , strtotime ( $data) ))."' ORDER BY CAST(numero_esterno AS UNSIGNED) DESC LIMIT 0,1";
|
|
$query = "SELECT numero_esterno FROM or_ordini WHERE DATE_FORMAT( data, '%Y' ) = '".date("Y", strtotime($data))."' ORDER BY (numero_esterno) DESC LIMIT 0,1";
|
|
|
|
$rs = $dbo->fetchArray($query);
|
|
$numero_secondario = $rs[0]['numero_esterno'];
|
|
|
|
//Calcolo il numero secondario se stabilito dalle impostazioni e se documento di vendita
|
|
$formato_numero_secondario = get_var("Formato numero secondario ordine");
|
|
|
|
if( $numero_secondario=='' )
|
|
$numero_secondario = $formato_numero_secondario;
|
|
|
|
|
|
if( $formato_numero_secondario!='' )
|
|
$numero_esterno = get_next_code( $numero_secondario, 1, $formato_numero_secondario );
|
|
else
|
|
$numero_esterno = '';
|
|
|
|
return $numero_esterno;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Calcolo imponibile ordine (totale_righe - sconto)
|
|
*/
|
|
function get_imponibile_ordine($idordine){
|
|
global $dbo;
|
|
|
|
$query = "SELECT SUM(subtotale-sconto) AS imponibile FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
return $rs[0]['imponibile'];
|
|
}
|
|
|
|
|
|
/**
|
|
* Calcolo totale ordine (imponibile + iva)
|
|
*/
|
|
function get_totale_ordine($idordine){
|
|
global $dbo;
|
|
|
|
//Sommo l'iva di ogni riga al totale
|
|
$query = "SELECT SUM(iva) AS iva FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
//Aggiungo la rivalsa inps se c'è
|
|
$query2 = "SELECT rivalsainps FROM or_ordini WHERE id='".$idordine."'";
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
return get_imponibile_ordine($idordine)+$rs[0]['iva']+$rs2[0]['rivalsainps'];
|
|
}
|
|
|
|
|
|
/**
|
|
* Calcolo netto a pagare ordine (totale - iva)
|
|
*/
|
|
function get_netto_ordine($idordine){
|
|
global $dbo;
|
|
|
|
$query = "SELECT ritenutaacconto,bollo FROM or_ordini WHERE id='".$idordine."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
return get_totale_ordine($idordine)-$rs[0]['ritenutaacconto']+$rs[0]['bollo'];
|
|
}
|
|
|
|
|
|
/**
|
|
* Calcolo iva detraibile ordine
|
|
*/
|
|
function get_ivadetraibile_ordine($idordine){
|
|
global $dbo;
|
|
|
|
$query = "SELECT SUM(iva)-SUM(iva_indetraibile) AS iva_detraibile FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
return $rs[0]['iva_detraibile'];
|
|
}
|
|
|
|
|
|
/**
|
|
* Calcolo iva indetraibile ordine
|
|
*/
|
|
function get_ivaindetraibile_ordine($idordine){
|
|
global $dbo;
|
|
|
|
$query = "SELECT SUM(iva_indetraibile) AS iva_indetraibile FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
return $rs[0]['iva_indetraibile'];
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Questa funzione aggiunge un articolo nell'ordine. E' comoda quando si devono inserire
|
|
* degli interventi con articoli collegati o preventivi che hanno interventi con articoli collegati!
|
|
* $iddocumento integer id dell'ordine
|
|
* $idarticolo integer id dell'articolo da inserire nell'ordine
|
|
* $idiva integer id del codice iva associato all'articolo
|
|
* $qta float quantità dell'articolo nell'ordine
|
|
* $prezzo float prezzo totale degli articoli (prezzounitario*qtà)
|
|
*/
|
|
function add_articolo_inordine( $idordine, $idarticolo, $descrizione, $idiva, $qta, $prezzo, $sconto=0, $lotto='', $serial='', $altro='' , $tipo_sconto ,$sconto_prc,$sconto_extra,$sconto_extra1 ){
|
|
global $dbo;
|
|
global $dir;
|
|
|
|
|
|
//Lettura unità di misura dell'articolo
|
|
//$query = "SELECT valore FROM mg_unitamisura WHERE id=(SELECT idum FROM mg_articoli WHERE id='".$idarticolo."')";
|
|
//$rs = $dbo->fetchArray($query);
|
|
//$um = $rs[0]['valore'];
|
|
|
|
|
|
$query = "SELECT um FROM mg_articoli WHERE id='".$idarticolo."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
$um = $rs[0]['um'];
|
|
|
|
|
|
if( $dir=='uscita' ){
|
|
//Lettura iva dell'articolo
|
|
$rs2 = $dbo->fetchArray("SELECT percentuale, indetraibile FROM co_iva WHERE id='".$idiva."'");
|
|
$iva = ($prezzo-$sconto)/100*$rs2[0]['percentuale'];
|
|
$iva_indetraibile = $iva/100*$rs2[0]['indetraibile'];
|
|
|
|
|
|
//Verifico se nell'ordine c'è già questo articolo allo stesso prezzo unitario
|
|
$rs = $dbo->fetchArray("SELECT id, qta FROM or_righe_ordini WHERE idarticolo='".$idarticolo."' AND idordine='".$idordine."' AND lotto=\"".$lotto."\" AND serial=\"".$serial."\" AND altro=\"".$altro."\" AND sconto=\"".$sconto."\"");
|
|
|
|
|
|
//Inserisco la riga nell'ordine: se nell'ordine c'è già questo articolo incremento la quantità e l'iva...
|
|
if( sizeof($rs) > 0 ){
|
|
$dbo->query("UPDATE or_righe_ordini SET qta=qta+".$qta.", subtotale=subtotale+".$prezzo.", iva=iva+".$iva.", iva_indetraibile=iva_indetraibile+".$iva_indetraibile." WHERE id='".$rs[0]['id']."'");
|
|
}
|
|
|
|
//...altrimenti inserisco la scorta nell'ordine da zero
|
|
else{
|
|
$dbo->query("INSERT INTO or_righe_ordini( idordine, idarticolo, idiva, iva, iva_indetraibile, descrizione, subtotale, sconto, um, qta, lotto, serial, altro ,tipo_sconto , sconto_primo,sconto_extra,sconto_extra1 ) VALUES
|
|
( '".$idordine."', '".$idarticolo."', '".$idiva."', '".$iva."', '".$iva_indetraibile."', \"".$descrizione."\", '".$prezzo."', \"".$sconto."\", '".$um."', '".$qta."', \"".$lotto."\", \"".$serial."\", \"".$altro."\"
|
|
,\"".$tipo_sconto."\",\"".$sconto_prc."\" ,\"".$sconto_extra."\", \"".$sconto_extra1."\")");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Questa funzione rimuove un articolo dall'ordine
|
|
* $idarticolo integer codice dell'articolo da scollegare dall'ordine
|
|
* $idordine integer codice dell'ordine da cui scollegare l'articolo
|
|
* $idrigaordine integer id della riga ordine da rimuovere
|
|
*/
|
|
function rimuovi_articolo_daordine( $idarticolo, $idordine, $idrigaordine ){
|
|
global $dbo;
|
|
global $dir;
|
|
// ricerco eventuali collegamenti con ordine cliente
|
|
$query = "SELECT idriga_doc FROM or_righe_ordini WHERE id='".$idrigaordine."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
if($rs[0]['idriga_doc'] != '0' ){
|
|
$dbo->query("UPDATE co_righe_documenti SET idordine='0' WHERE id='".$rs[0]['idriga_doc']."'");
|
|
}
|
|
//Elimino la riga dall'ordine
|
|
$dbo->query("DELETE FROM `or_righe_ordini` WHERE id=\"".$idrigaordine."\"");
|
|
}
|
|
|
|
|
|
/**
|
|
* 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_ordine( $idordine, $idrivalsainps='', $idritenutaacconto='', $bolli='' ){
|
|
global $dbo;
|
|
global $dir;
|
|
|
|
//Se ci sono righe nel ordine faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
|
|
$query = "SELECT COUNT(id) AS righe FROM or_righe_ordini WHERE idordine='$idordine'";
|
|
$rs = $dbo->fetchArray($query);
|
|
if( $rs[0]['righe']>0 ){
|
|
$totale_imponibile = get_imponibile_ordine($idordine);
|
|
$totale_ordine = get_totale_ordine($idordine);
|
|
|
|
//Leggo gli id dei costi aggiuntivi
|
|
if( $dir=='uscita' ){
|
|
$query2 = "SELECT idrivalsainps, idritenutaacconto, bollo FROM or_ordini WHERE id='$idordine'";
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
$idrivalsainps = $rs2[0]['idrivalsainps'];
|
|
$idritenutaacconto = $rs2[0]['idritenutaacconto'];
|
|
$bollo = $rs2[0]['bollo'];
|
|
}
|
|
|
|
//Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
|
if( $dir=='entrata' ){
|
|
if( $idrivalsainps!='0' )
|
|
$idrivalsainps = get_var("Percentuale rivalsa INPS");
|
|
}
|
|
|
|
$query = "SELECT percentuale FROM co_rivalsainps WHERE id='".$idrivalsainps."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
$rivalsainps = $totale_imponibile/100*$rs[0]['percentuale'];
|
|
|
|
//Aggiorno la rivalsa inps
|
|
$dbo->query("UPDATE or_ordini SET rivalsainps='$rivalsainps' WHERE id='$idordine'");
|
|
|
|
|
|
//Leggo la ritenuta d'acconto se c'è
|
|
$totale_ordine = get_totale_ordine($idordine);
|
|
|
|
//Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
|
if( $idritenutaacconto!='0' ){
|
|
if( $dir=='entrata' ){
|
|
$idritenutaacconto = get_var("Percentuale ritenuta d'acconto");
|
|
}
|
|
}
|
|
|
|
|
|
$query = "SELECT percentuale FROM co_ritenutaacconto WHERE id='".$idritenutaacconto."'";
|
|
$rs = $dbo->fetchArray($query);
|
|
$ritenutaacconto = $totale_ordine/100*$rs[0]['percentuale'];
|
|
$netto_a_pagare = $totale_ordine-$ritenutaacconto;
|
|
|
|
//Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
|
|
$bolli = str_replace( ",", ".", $bolli);
|
|
$bolli = floatval($bolli);
|
|
if( $dir=='uscita' ){
|
|
if( $bolli!=0.00 ){
|
|
$bolli = str_replace( ",", ".", $bolli );
|
|
if( abs($bolli)>0 && abs($netto_a_pagare>get_var("Soglia minima per l'applicazione della marca da bollo")) )
|
|
$marca_da_bollo = str_replace( ",", ".", $bolli );
|
|
else
|
|
$marca_da_bollo = 0.00;
|
|
}
|
|
}
|
|
else{
|
|
$bolli = str_replace( ",", ".", get_var("Importo marca da bollo") );
|
|
if( abs($bolli)>0 && abs($netto_a_pagare)>abs(get_var("Soglia minima per l'applicazione della marca da bollo")) )
|
|
$marca_da_bollo = str_replace( ",", ".", $bolli );
|
|
else
|
|
$marca_da_bollo = 0.00;
|
|
|
|
//Se l'importo è negativo può essere una nota di accredito, quindi cambio segno alla marca da bollo
|
|
if( $netto_a_pagare<0 )
|
|
$marca_da_bollo *= -1;
|
|
}
|
|
|
|
|
|
//Leggo l'iva predefinita per calcolare l'iva aggiuntiva sulla rivalsa inps
|
|
$qi = "SELECT percentuale FROM co_iva WHERE id='".get_var("Iva predefinita")."'";
|
|
$rsi = $dbo->fetchArray($qi);
|
|
$iva_rivalsainps = $rivalsainps/100*$rsi[0]['percentuale'];
|
|
|
|
|
|
|
|
$dbo->query("UPDATE or_ordini SET ritenutaacconto='$ritenutaacconto', bollo='$marca_da_bollo', iva_rivalsainps='".$iva_rivalsainps."' WHERE id='$idordine'");
|
|
}
|
|
else{
|
|
$dbo->query("UPDATE or_ordini SET ritenutaacconto='0', bollo='0', rivalsainps='0' WHERE id='$idordine'");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Restituisce lo stato dell'ordine in base alle righe
|
|
*/
|
|
function get_stato_ordine( $idordine ){
|
|
global $dbo;
|
|
|
|
$rs = $dbo->fetchArray("SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM or_righe_ordini GROUP BY idordine HAVING idordine='".$idordine."'");
|
|
|
|
if( $rs[0]['qta_evasa'] > 0 ){
|
|
if( $rs[0]['qta'] > $rs[0]['qta_evasa'] )
|
|
return "Parzialmente evaso";
|
|
|
|
else if( $rs[0]['qta'] == $rs[0]['qta_evasa'] )
|
|
return "Evaso";
|
|
}
|
|
|
|
else
|
|
return "Non evaso";
|
|
}
|
|
|
|
function storico_transazioni($iddocumento){
|
|
global $dbo;
|
|
$rw = $dbo->fetchArray( "select * from or_ordini_transazioni where idpadre='".$iddocumento."'");
|
|
for($i = 0; $i < sizeof($rw); $i ++) {
|
|
$sale_id=$rw[$i][idfiglio];
|
|
$data_transazione=$rw[$i][data_transazione];
|
|
$data_transazione=date("d/m/Y H:i:s", strtotime($data_transazione));
|
|
$rw_transazione = $dbo->fetchArray( "select * from co_documenti where id='".$sale_id."' ");
|
|
$rw_tot = $dbo->fetchArray( "select SUM(subtotale - sconto + iva + rivalsainps - ritenutaacconto) as totale FROM co_righe_documenti where iddocumento = $sale_id ");
|
|
$customer_name=username_name($_SESSION['idutente'],"username");
|
|
$descrizione=get_var_tipodoc2($sale_id,"descrizione");
|
|
$num_cod=$rw_transazione[0]['numero_documento'];
|
|
$date_added=$rw_transazione[0]['data'];
|
|
|
|
list($date,$hora)=explode(" ",$date_added);
|
|
list($Y,$m,$d)=explode("-",$date);
|
|
$data=$d."/".$m."/".$Y;
|
|
$total=$rw_tot[0]['totale'] +$rw_transazione[$i]['bollo'] + $rw_transazione[$i]['iva_rivalsainps'] ;
|
|
|
|
?>
|
|
<tr>
|
|
<td><a class='btn btn-sm btn-info' href="editor.php?id_module=14&id_record=<?php echo $sale_id;?>"><i class='fa fa-search'></a></td>
|
|
<td><?php echo $customer_name;?></td>
|
|
<td><?php echo $data_transazione;?></td>
|
|
<td><?php echo $num_cod;?></td>
|
|
<td><?php echo $descrizione;?></td>
|
|
<td><?php echo $data;?></td>
|
|
|
|
<td class='text-right'><?php echo number_format($total,2);?></td>
|
|
</tr>
|
|
<?php
|
|
;
|
|
}
|
|
}
|
|
|
|
|
|
?>
|