gest366/modules/ordini/modutil.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
;
}
}
?>