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'] ; ?>