include ("../common/public.php") ;
class Ordine
{
var $idOrdine ;
var $anno ;
var $NomeCliente ;
var $db ;
var $subsconti ;
var $subtot ;
var $subtotiva ;
var $nettoMerce ;
var $totTassaAlcol ;
var $log ;
var $fileLog ;
var $handle ;
var $EsitoOperazione ;
function __construct()
{
$this->db = new FC_SQL ;
$this->dbt = new FC_SQL ;
$this->dQP = new FC_SQL ;
$this->dQPP = new FC_SQL ;
$this->anno = $GLOBALS["anno"] ;
$this->subsconti = 0 ;
$this->subtot = 0 ;
$this->subtotiva = 0 ;
$this->nettoMerce = 0 ;
$this->totTassaAlcol = 0 ;
$this->NumRec = 0 ;
$this->log = false ;
$this->fileLog = "../classi/logClasseOrdini.txt" ;
$this->handle = fopen($this->fileLog, 'a+') ;
$this->EsitoOperazione = true ;
$this->ForAttivo = 1 ;
$this->CliAttivo = 1 ;
$this->ArrayProdottiSM = array() ;
$this->ArrayIdProdotti = array() ;
$this->ArrayDescProdotti = array() ;
$this->ArrayPrzForzato = array() ;
$this->ArrayNumCart = array() ;
$this->ArrayConfDa = array() ;
$this->ArrayScontoPrd = array() ;
$this->ArrayIva = array() ;
$this->ArrayScontoMerce = array() ;
$this->TotaleOrdine = array() ;
if ($this->log) {
fwrite($this->handle, "Anno = $this->anno \n") ;
}
}
function GetDatiOrdine($idordine,$ANNO=false)
{
/************************************************************************
* FAB 22.10.21
* Mi devo portare dietro il fatto che un fornitore o/e un cliente non
* sono più attivi
*************************************************************************/
$dataVuota = "--/--/----" ;
if ($ANNO != false)
$this->anno = $ANNO ;
$qord = "
select
*,
O.bancaordine as BancaOrdini,
A.nome as NomeAgente,
C.idclienti as IdCliente,
C.Nome as NomeCliente,
C.Attivo as ClienteAttivo,
F.Nome as NomeFornitore,
F.idfornitori as IdFornitore,
F.Attivo as FornitoreAttivo,
P.modalita as ModalitaPagamenti,
T.descrizione as Tipologia,
M.Descrizione as ModalitaDiConsegna
from
ordini O
inner join clienti C on O.IdCliente = C.IdClienti
inner join tipologie T on C.IdTipologia = T.IdTipologie
inner join fornitori F on O.IdFornitore = F.IdFornitori
inner join pagamenti P on O.IdPagamento = P.IdPagamenti
left join agenti A on O.IdAgente = A.IdAgenti
inner join modalitadiconsegna M on O.Modalita = M.IdModalita
where
O.Anno = $this->anno and
O.IdOrdini = $idordine
" ;
if ($this->log)
fwrite($this->handle, "$qord\n") ;
list($nord, $dord) = $this->db->RecuperaDati($qord) ;
$this->NumRec = $nord ;
if ($nord > 0)
{
$this->IdFornitore = $dord['IdFornitore'][0] ;
$this->IdCliente = $dord['IdCliente'][0] ;
$this->NomeCliente = $dord['NomeCliente'][0] ;
$this->CliAttivo = $dord['ClienteAttivo'][0] ;
$this->Tipologia = $dord['Tipologia'][0] ;
$this->NomeAgente = $dord['NomeAgente'][0] ;
$this->NomeFornitore = $dord['NomeFornitore'][0] ;
$this->ForAttivo = $dord['FornitoreAttivo'][0] ;
$this->DataOrdine = ItaDate($dord['DataOrdine'][0]) ;
if ($this->log)
fwrite($this->handle, "DATA ORDINE = " . $dord['DataOrdine'][0] . "\n\n") ;
if ($this->log)
fwrite($this->handle, "DATA ORDINE DOPO = " . $this->DataOrdine . "\n\n") ;
$this->DataRichiesta = ItaDate($dord['DataRichiesta'][0]) ;
$this->DataPagamentoFattura = ItaDate($dord['DataRichiesta'][0]) ;
$this->DataSpedizione = (ItaDate($dord['DataSpedizione'][0]) != "" ? ItaDate($dord['DataSpedizione'][0]) : $dataVuota) ;
$this->NumFattura = $dord['NumFattura'][0] ;
$this->DataFattura = ItaDate($dord['DataSpedFattura'][0]) ;
$this->ImportoFattura = nfp($dord['ImportoFattura'][0]) ;
$this->NumNc = ($dord['NumNC'][0] != 0 ? $dord['NumNC'][0] : "-") ;
$this->DataNc = (ItaDate($dord['DataNC'][0]) != "" ? ItaDate($dord['DataNC'][0]) : $dataVuota) ;
$this->ImportoNc = nfp($dord['ImportoNC'][0]) ;
$this->NumNa = ($dord['NumNA'][0] != 0 ? $dord['NumNA'][0] : "-") ;
$this->DataNa = (ItaDate($dord['DataNA'][0]) != "" ? ItaDate($dord['DataNA'][0]) : $dataVuota) ;
$this->ImportoNa = (nfp($dord['ImportoNA'][0]) != "0,00" ? nfp($dord['ImportoNA'][0]) : "-") ;
$this->Banca = $dord['BancaOrdini'][0] ;
$this->NumAssegno = $dord['NumAssegno'][0] ;
$this->ImportoAssegno = nfp($dord['ImpAssegno'][0]) ;
$this->AssegnoSpedito = ($dord['DaSpedire'][0] ? 'No' : 'Si') ;
$this->DataInvioAssegno = (ItaDate($dord['DataInvAss'][0]) != "" ? ItaDate($dord['DataInvAss'][0]) : $dataVuota ) ;
$this->FatturaSaldata = SiNo($dord['SaldoFattura'][0]) ;
$this->SaldoProvvigione = SiNo($dord['SaldoProvvigione'][0]) ;
$this->SaldoProvvigioneAgente = SiNo($dord['SaldoProvvigioneAgente'][0]) ;
$this->ModalitaPagamento = $dord['ModalitaPagamenti'][0] ;
$this->ModalitaConsegna = $dord['ModalitaDiConsegna'][0] ;
$this->EpocaConsegna = $dord['EpocaDiConsegna'][0] ;
$this->OrdineDaInviare = SiNo($dord['DaInviare'][0]) ;
$this->Sconto1 = nfp($dord['Sconto1'][0]) ;
$this->Sconto2 = nfp($dord['Sconto2'][0]) ;
$this->Sconto3 = nfp($dord['Sconto3'][0]) ;
$this->Note = stripslashes($dord['NoteOrdini'][0]) ;
$this->FileFattura = stripslashes($dord['FileFattura'][0]) ;
}
}
function GetDettagliProdottiOrdine($idordine, $sarzi, $ANNO=false)
{
/****************************************************
* FAB 01/11/2021 Modifiche per la versione 3.0
****************************************************/
$totalone = 0 ;
$totSconto = 0 ;
if ($ANNO != false)
$this->anno = $ANNO ;
if ($this->log)
fwrite($this->handle, "In GetDettagliProdottiOrdine this->anno = " . $this->anno . " \n\n") ;
if ($sarzi)
{
$qdett = "
select
*
from
dettagli_$this->anno D
inner join sarzi_$this->anno S on D.IdProdotto = CONCAT('SA',S.IdProdotti)
inner join iva_$this->anno I on S.idivaprd = I.idiva
where
IdOrdine = $id
order by
S.nome
" ;
}
else
{
$qdett = "
select
*
from
dettagli D
inner join ordini O on O.IdOrdini = D.IdOrdine
and O.Anno = $this->anno
inner join prodotti P on D.IdProdotto = P.IdProdotti
inner join iva I on P.IdIvaPrd = I.IdIva
where
P.Anno = $this->anno and
D.Anno = $this->anno and
D.IdOrdine = $idordine
order by
P.nome
" ;
}
list($ndett,$ddett) = $this->db->RecuperaDati($qdett) ;
for($j=0; $j<$ndett; $j++)
{
$accisa = $ddett['Accisa'][$j] ;
$totAccisa = $ddett['NumCartoni'][$j] * $ddett['ConfezioniDa'][$j] * $accisa ;
$prezzoForzato = $ddett['PrezzoForzato'][$j] ;
$prezzoUnitario = $ddett['PrezzoUnitario'][$j] ;
$this->totTassaAlcol += $totAccisa ;
$id_prodotto = $ddett['IdProdotto'][$j] ;
$idProdotto = $ddett['IdProdotto'][$j] ;
if ($ddett['ScontoPrd'][$j] != "")
$sconto_prd = $ddett['ScontoPrd'][$j] . " %" ;
else
$sconto_prd = "" ;
if ($prezzoForzato != '' && $prezzoForzato != '0.00')
{
/* PRIMA ERA
$pp = number_format(($prezzoForzato - $accisa), 2) ;
ADESSO */
$pp = ($prezzoForzato - $accisa) ;
$totp = $ddett['NumCartoni'][$j] * $ddett['ConfezioniDa'][$j] * $pp ;
// $totp = $ddett['NumCartoni'][$j] * $ddett['ConfezioniDa'][$j] * $prezzoUnitario ;
if ($this->log)
{
fwrite($this->handle, "\n\nNUOVO In GetDettagliProdottiOrdine prezzoForzato = " . $prezzoForzato . " \n\n") ;
fwrite($this->handle, "\n\nNUOVO In GetDettagliProdottiOrdine pp = " . $pp . " \n\n") ;
fwrite($this->handle, "\n\nNUOVO In GetDettagliProdottiOrdine totp = " . $totp . " \n\n") ;
}
}
else
$totp = $ddett['NumCartoni'][$j] * $ddett['ConfezioniDa'][$j] * $prezzoUnitario ;
/*****************************************************************************************************************************
* Su questo totale devo andare a considerare se applicare o meno degli sconti in base ai valori di sconto (1, 2 e 3) presenti
* nell'ordine.
*****************************************************************************************************************************/
/*******************************************************************
* Nuovo modo di calocolare lo sconto sul singolo prodotto
*******************************************************************/
if ($sconto_prd != "" )
$totp = CalcolaScontoProdotto($totp, $sconto_prd) ;
$sconto1 = ($totp * $ddett['Sconto1'][0] / 100) ;
$subtotp1 = $totp - $sconto1 ;
$sconto2 = ($subtotp1 * $ddett['Sconto2'][0] / 100) ;
$subtotp2 = $subtotp1 - $sconto2 ;
$sconto3 = ($subtotp2 * $ddett['Sconto3'][0] / 100) ;
$subtotp3 = $subtotp2 - $sconto3 ;
$sconti = $sconto1 + $sconto2 + $sconto3 ;
$totSconto += $sconti ;
$this->nettoMerce += $totp ;
/****************************************************************************
* Considero l'eventuale accisa
* NO, nel prezzo netto non considero l'accisa e la tassa alcol (19.1.23)
****************************************************************************/
if ($prezzoForzato != '' && $prezzoForzato != '0.00')
$prezzoNetto = ($prezzoForzato - $accisa) ;
else
$prezzoNetto = $prezzoUnitario ;
$impprod = $totp - $sconti ;
/**********************************************************
* Prima:
* $totiva = ($impprod * $ddett['Aliquota'][$j] / 100) ;
* Adesso:
************************************************************/
/********************************************************
* ennesima modifica del calcolo dell'iva per considerare
* l'eventuale accisa sui prodotti
**********************************************************/
$impprod += $totAccisa ;
if ($ddett['Iva'][$j] != 0)
$totiva = ($impprod * $ddett['Iva'][$j] / 100) ;
else
{
$totiva = ($impprod * $ddett['Aliquota'][$j] / 100) ;
$ddett['Iva'][$j] = $ddett['Aliquota'][$j] ;
}
$this->subsconti += $sconti ;
$this->subtot += $totp ;
$this->subtotiva += $totiva ;
$totp_vis = nfp($totp) ;
$totalone += $totp ;
if ($ddett['DescDettaglio'][$j] == "")
{
if ($ddett['CodiceProdotto'][$j] != "")
$strCodPrd = $ddett['CodiceProdotto'][$j] . " - " . htmlspecialchars($ddett['Nome'][$j]) ;
else
$strCodPrd = htmlspecialchars($ddett['Nome'][$j]) ;
}
else
$strCodPrd = htmlspecialchars($ddett['DescDettaglio'][$j]) ;
$this->ArrayProdotti[$idProdotto] = array("codiceProdotto" => $strCodPrd,
"annata" => $ddett['Annata'][$j],
"numCartoni" => $ddett['NumCartoni'][$j],
"confezioniDa" => $ddett['ConfezioniDa'][$j],
"scontoPrd" => $sconto_prd,
"prezzoNetto" => nfp($prezzoNetto),
"iva" => $ddett['Iva'][$j],
"totaleParziale" => $totp_vis
) ;
}
/**************************************
* Vediamo se così funziona
*******************************/
$this->subtot = $this->nettoMerce + $this->totTassaAlcol ;
$this->TotaleOrdine[$idordine]['Totalone'] = $totalone ;
$this->TotaleOrdine[$idordine]['TotSconto'] = $totSconto ;
$this->TotaleOrdine[$idordine]['Imponibile'] = round($totalone - $totSconto, 2) ;
}
function GetDettagliProdottiScontoMerceOrdine($idordine, $sarzi, $ANNO = false)
{
if ($ANNO != false)
$this->anno = $ANNO ;
if (!$sarzi) {
$qmerce = "
select
*
from
scontomerce SM
inner join prodotti P on SM.IdProdotto = P.IdProdotti
inner join iva I on P.idivaprd = I.idiva
where
P.Anno = $this->anno and
SM.Anno = $this->anno and
SM.IdOrdine = $idordine
order by
P.nome
" ;
}
else {
$qmerce = "
select
*
from
scontomerce_$this->anno SM
inner join sarzi_$this->anno S on SM.IdProdotto = CONCAT('SA',S.IdProdotti)
inner join iva_$this->anno I on S.idivaprd = I.idiva
where
IdOrdine = $idordine
order by
S.nome
" ;
}
list($nmerce, $dmerce) = $this->db->RecuperaDati($qmerce) ;
if ($nmerce > 0)
{
for ($x=0; $x<$nmerce; $x++)
{
$accisa = $dmerce['Accisa'][$x] ;
if ($accisa != 0)
{
/***********************************************************
* vuol dire che questo prodotto è in sconto merce però
* in ogni caso paga la tassa alcol
***********************************************************/
$sm = "Sconto Merce*" ;
$tassaAlcol = $dmerce['NumCartoni'][$x] * $dmerce['ConfezioniDa'][$x] * $accisa ;
$this->totTassaAlcol += $tassaAlcol ;
$tassaAlcolVis = "(accisa) " . nfe($tassaAlcol) ;
// PRIMA $totiva = ($tassaAlcol * $dmerce['Aliquota'][$x] / 100) ;
$totiva = ($tassaAlcol * $dmerce['Iva'][$x] / 100) ;
$this->subtot += $tassaAlcol ;
$this->subtotiva += $totiva ;
}
else
{
$tassaAlcolVis = "" ;
$sm = "Sconto Merce" ;
}
$idProdotto = $dmerce['IdProdotto'][$x] . "_sm" ;
if ($dmerce['DescDettaglio'][$x] == "")
{
if ($dmerce['CodiceProdotto'][$x] != "")
$strCodPrd = $dmerce['CodiceProdotto'][$j] . " - " . htmlspecialchars($dmerce['Nome'][$x]) ;
else
$strCodPrd = htmlspecialchars($dmerce['Nome'][$x]) ;
}
else
$strCodPrd = htmlspecialchars($dmerce['DescDettaglio'][$x]) ;
$this->ArrayProdottiSM[$idProdotto] = array("codiceProdotto" => $strCodPrd,
"annata" => $dmerce['Annata'][$x],
"numCartoni" => $dmerce['NumCartoni'][$x],
"confezioniDa" => $dmerce['ConfezioniDa'][$x],
"scontoPrd" => $sm,
"prezzoNetto" => "",
"iva" => $dmerce['Iva'][$x],
"totaleParziale" => $tassaAlcolVis
) ;
}
}
}
/**************************************************************************
* ListaOrdini
* restituisce la lista degli ordini secondo le considizioni eespresse dal
* parametro $where e ordinando secondo il parametro $orderby
* La proprietà log mi serve per effettuare eventualmente dei controlli
***************************************************************************/
function ListaOrdini($where, $orderby)
{
$query = "
select distinct
O.*,
F.Nome as NomeFornitore,
AZ.Nome as NomeAzienda,
C.Nome as NomeCliente,
A.Nome as NomeAgente,
P.modalita as ModalitaPagamenti,
RPO.idprovvigione as IdProvv
from
ordini O
inner join clienti C on O.IdCliente = C.IdClienti
inner join fornitori F on O.IdFornitore = F.IdFornitori
inner join pagamenti P on O.IdPagamento = P.IdPagamenti
inner join agenti A on O.IdAgente = A.IdAgenti
inner join dettagli D on O.IdOrdini = D.IdOrdine and D.Anno = $this->anno
inner join prodotti PR on D.IdProdotto = PR.IdProdotti and PR.Anno = $this->anno
left join aziende AZ on PR.AziendaCollegata = AZ.IdAziende
left join relprovvigioneordini RPO on O.IdOrdini = RPO.IdOrdine and
RPO.AnnoOrdine = $this->anno
where
O.anno = $this->anno AND
$where
order by
$orderby
" ;
if ($this->log) {
fwrite($this->handle, "$query \n") ;
}
list($nrowsdati, $dati) = $this->db->RecuperaDati($query) ;
for ($i = 0; $i < $nrowsdati ; $i++ )
{
$this->IdOrdine = $dati['IdOrdini'][$i] ;
$this->NomeFornitore = htmlspecialchars($dati['NomeFornitore'][$i]) ;
if ($dati['NomeAzienda'][0] != '')
$this->NomeFornitore .= " (" . htmlspecialchars($dati['NomeAzienda'][0]) . ")" ;
$this->NomeCliente = htmlspecialchars($dati['NomeCliente'][$i]) ;
$this->NomeAgente = htmlspecialchars($dati['NomeAgente'][$i]) ;
$this->DataOrdine = ItaDate($dati['DataOrdine'][$i]) ;
$this->DataSpedizione = ItaDate($dati['DataSpedizione'][$i]) ;
$this->NumFattura = $dati['NumFattura'][$i] ;
$this->DataFattura = ItaDate($dati['DataSpedFattura'][$i]) ;
$this->DataPagamentoFattura = ItaDate($dati['DataRichiesta'][$i]) ;
$this->ImportoFattura = nfp($dati['ImportoFattura'][$i]) ;
$this->FatturaSaldata = SiNo($dati['SaldoFattura'][$i]) ;
$this->SaldoProvvigione = SiNo($dati['SaldoProvvigione'][$i]) ;
$this->SaldoProvvigioneAgente = SiNo($dati['SaldoProvvigioneAgente'][$i]) ;
$this->ModalitaPagamento = $dati['ModalitaPagamenti'][$i] ;
$this->NumAssegno = $dati['NumAssegno'][$i] ;
$this->Sconto1 = nfp($dati['Sconto1'][$i]) ;
$this->Sconto2 = nfp($dati['Sconto2'][$i]) ;
$this->Sconto3 = nfp($dati['Sconto3'][$i]) ;
$this->sconti = nfp($dati['Sconto1'][$i]) . " - " . nfp($dati['Sconto2'][$i]) . " - " . nfp($dati['Sconto3'][$i]) ;
$this->OrdineDaInviare = SiNo($dati['DaInviare'][$i]) ;
$this->EpocaConsegna = $dati['EpocaDiConsegna'][$i] ;
$this->Note = htmlspecialchars(stripslashes($dati['NoteOrdini'][$i])) ;
$this->ArrayListaOrdini[$this->IdOrdine] =
array("NomeFornitore" => $this->NomeFornitore,
"NomeCliente" => $this->NomeCliente,
"NomeAgente" => $this->NomeAgente,
"DataOrdine" => $this->DataOrdine,
"DataSpedizione" => $this->DataSpedizione,
"NumFattura" => $this->NumFattura,
"DataFattura" => $this->DataFattura,
"DataPagamentoFattura" => $this->DataPagamentoFattura,
"ImportoFattura" => $this->ImportoFattura,
"FatturaSaldata" => $this->FatturaSaldata,
"SaldoProvvigione" => $this->SaldoProvvigione,
"SaldoProvvigioneAgente" => $this->SaldoProvvigioneAgente,
"ModalitaPagamento" => $this->ModalitaPagamento,
"NumAssegno" => $this->NumAssegno,
"Sconto1" => $this->Sconto1,
"Sconto2" => $this->Sconto2,
"Sconto3" => $this->Sconto3,
"OrdineDaInviare" => $this->OrdineDaInviare,
"EpocaConsegna" => $this->EpocaConsegna,
"Note" => $this->Note
) ;
if ($this->log)
fwrite($this->handle, "| $this->IdOrdine | $this->NomeCliente | $this->NomeFornitore | $this->NomeAgente | $this->DataOrdine | $this->DataSpedizione | $this->NumFattura | $this->DataFattura | $this->ImportoFattura | $this->FatturaSaldata | $this->DataPagamentoFattura | $this->SaldoProvvigione | $this->SaldoProvvigioneAgente | $this->ModalitaPagamento | $this->NumAssegno | $this->Sconto1 - $this->Sconto2 - $this->Sconto3 | $this->OrdineDaInviare | $this->EpocaConsegna | $this->Note |
\n") ;
}
if ($this->log) {
fwrite($this->handle, "\n") ;
fclose($this->handle) ;
}
}
function ModificaOrdine_SoloProdotti()
{
/********************************************************
* Funzione che modifica solo i prodotti di un determinato
* ordine
* VERSIONE 3.0 READY
********************************************************/
$this->log = false ;
$this->Logga("Entro nella modifica ordine solo prodotti") ;
try {
$sconto1 = NumToSql($this->sconto1) ;
$sconto2 = NumToSql($this->sconto2) ;
$sconto3 = NumToSql($this->sconto3) ;
$importonc = NumToSql($this->importonc) ;
$this->Logga("SCONTI: $sconto1 -- $sconto2 -- $sconto3 -- NC: $importonc") ;
$this->arrIdProdotti = explode(",", $this->strIdProdotti) ;
$this->arrDescProdotti = explode("!", $this->strDescProdotti) ;
$this->arrPrzForzato = explode("^", $this->strPrzForzato) ;
$this->arrNumCart = explode(",", $this->strNumCart) ;
$this->arrConfDa = explode(",", $this->strConfDa) ;
$this->arrScontoPrd = explode(",", $this->strScontoPrd) ;
$this->arrIva = explode(",", $this->strIva) ;
$this->arrScontoMerce = explode(",", $this->strScontoMerce) ;
/******************************************************************
* Per aggiornare i dettagli faccio la seguente operazione:
* prima elimino tutti i record in dettagli che hanno l'idordine
* uguale a quello che si sta modificando, poi inserisco tutti i
* record nuovi in dettagli con i parametri passati modificati
* Prima di eliminare dai dettagli i record dove l'idordine = a quello
* di modifica, devo aggiornare i valori del campo qutilizzata di
* ogni singolo prodotto dell'ordine. Stessa filosofia per i prodotti
* in sconto merce
*********************************************************************/
$qdett = "
select
*
from
dettagli D,
prodotti P
where
P.anno = $this->anno and
D.anno = $this->anno and
D.idordine = $this->idordine and
P.idprodotti = D.idprodotto" ;
$this->Logga($qdett) ;
$ret = $this->db->query($qdett) ;
while ($this->db->next_record())
{
$id = $this->db->f("IdProdotti") ;
$newuti = $this->db->f("QUtilizzata") - ($this->db->f("NumCartoni") * $this->db->f("ConfezioniDa")) ;
$qmod = "update prodotti set qutilizzata = $newuti where idprodotti = $id" ;
$this->Logga($qmod) ;
$this->dbt->query($qmod) ;
}
/*****************************************
* operiamo sulla tabella quantitaprodotti
*****************************************/
$qdett = "
select
QP.*
from
dettagli D,
quantitaprodotti QP
where
D.anno = $this->anno and
D.idordine = $this->idordine and
QP.anno = $this->anno and
QP.idprodotto = D.idprodotto" ;
$this->Logga($qdett) ;
$ret = $this->db->query($qdett) ;
while ($this->db->next_record())
{
$id = $this->db->f("IdProdotto") ;
$newuti = $this->db->f("QUtilizzata") - ($this->db->f("NumCartoni") * $this->db->f("ConfezioniDa")) ;
$qmod = "update quantitaprodotti set qutilizzata = $newuti where Anno = $this->anno and idprodotto = $id" ;
$this->Logga($qmod) ;
$this->dbt->query($qmod) ;
}
$qscme = "
select
*
from
scontomerce SM,
prodotti P
where
P.anno = $this->anno and
SM.anno = $this->anno and
SM.idordine = $this->idordine and
P.idprodotti = SM.idprodotto" ;
$this->Logga($qscme) ;
$this->db->query($qscme) ;
while ($this->db->next_record())
{
$id = $this->db->f("IdProdotti") ;
$newuti = $this->db->f("QUtilizzata") - ($this->db->f("NumCartoni") * $this->db->f("ConfezioniDa")) ;
$qmod = "update prodotti set qutilizzata = $newuti where idprodotti = $id" ;
$this->Logga($qmod) ;
$ret = $this->dbt->query($qmod) ;
}
/*****************************************************
* anche qui operiamo sulla tabella quantitaprodotti
******************************************************/
$qscme = "
select
QP.*
from
scontomerce SM,
quantitaprodotti QP
where
SM.anno = $this->anno and
SM.idordine = $this->idordine and
QP.Anno = $this->anno and
QP.idprodotto = SM.idprodotto" ;
$this->Logga($qscme) ;
$this->db->query($qscme) ;
while ($this->db->next_record())
{
$id = $this->db->f("IdProdotto") ;
$newuti = $this->db->f("QUtilizzata") - ($this->db->f("NumCartoni") * $this->db->f("ConfezioniDa")) ;
$qmod = "update quantitaprodotti set QUtilizzataSM = $newuti where Anno = $this->anno and idprodotto = $id" ;
$this->Logga($qmod) ;
$ret = $this->dbt->query($qmod) ;
}
$qdel = "delete from dettagli where anno = $this->anno and idordine = $this->idordine" ;
$this->Logga($qdel) ;
$ret = $this->db->query($qdel) ;
$qdelscme = "delete from scontomerce where anno = $this->anno and idordine = $this->idordine" ;
$this->Logga($qdelscme) ;
$ret = $this->db->query($qdelscme) ;
for($i=0 ; $iarrIdProdotti) - 1; $i++)
{
$NumBottSM = 0 ;
$NumBott = 0 ;
/***********************************
* controllo se il prezzo è forzato
***********************************/
$tmpPrzForzato = $this->arrPrzForzato[$i] ;
if ($tmpPrzForzato != '' && $tmpPrzForzato != '0,00')
$przForzato = str_replace(",", ".", $tmpPrzForzato) ;
else
$przForzato = '' ;
$desc = addslashes($this->arrDescProdotti[$i]) ;
$cart = $this->arrNumCart[$i] ;
$conf = $this->arrConfDa[$i] ;
$codprod = $this->arrIdProdotti[$i] ;
$scontoprd = $this->arrScontoPrd[$i] ;
$iva = $this->arrIva[$i] ;
$scontomerce = $this->arrScontoMerce[$i] ;
$this->Logga("DESCRIZIONE = $desc") ;
if ($conf != 0 and $cart != 0)
{
if ($scontomerce == 1)
{
$sm = 1;
/***********************************************************************************
* devo inserire nella tabella scontomerce questo prodotto con i relativi parametri
************************************************************************************/
$NumBottSM = $cart * $conf ;
$qscme = "
insert into scontomerce
(Anno, IdOrdine, IdProdotto, DescDettaglio, NumCartoni, ConfezioniDa, Iva)
VALUES
($this->anno, $this->idordine, '$codprod', '$desc', $cart, $conf, $iva)
" ;
$this->Logga($qscme) ;
$ret = $this->db->query($qscme) ;
/**************************************************************
* Aggiorno la tabella dei prodotti con le nuove quantita
************************************************************/
$qprod = "select * from prodotti where idprodotti = $codprod" ;
$this->dbt->query($qprod) ;
while ($this->dbt->next_record())
$qut = $this->dbt->f("QUtilizzata") ;
$newqut = $qut + ($cart * $conf) ;
$qupd = "update prodotti set qutilizzata = $newqut where idprodotti = $codprod" ;
$this->Logga($qupd) ;
$ret = $this->dbt->query($qupd) ;
/**************************************************************
* Aggiorno la tabella quantitaprodotti con le nuove quantita
* solo per le bottiglie in sconto merce
************************************************************/
$qprod = "select * from quantitaprodotti where anno = $this->anno and idprodotto = $codprod" ;
$this->Logga($qprod) ;
$this->dbt->query($qprod) ;
while ($this->dbt->next_record())
$qutSM = $this->dbt->f("QUtilizzataSM") ;
$newqutSM = $qutSM + $NumBottSM ;
$qupd = "
update quantitaprodotti set
QUtilizzataSM = $newqutSM
where
anno = $this->anno and
idprodotto = $codprod" ;
$this->Logga($qupd) ;
$ret = $this->dbt->query($qupd) ;
}
else
{
/*******************************************************************************
* devo inserire nella tabella dettagli questo prodotto con i relativi parametri
*******************************************************************************/
$NumBott = $cart * $conf ;
$qdett = "
insert into dettagli
(Anno, IdOrdine, IdProdotto, DescDettaglio, PrezzoForzato, NumCartoni, ConfezioniDa, ScontoPrd, Iva)
VALUES
($this->anno, $this->idordine, '$codprod', '$desc', '$przForzato', $cart, $conf, '$scontoprd', $iva)" ;
$this->Logga($qdett) ;
$ret = $this->db->query($qdett) ;
/**************************************************************
* Aggiorno la tabella dei prodotti con le nuove quantita
************************************************************/
$qprod = "select * from prodotti where idprodotti = $codprod" ;
$this->dbt->query($qprod) ;
while ($this->dbt->next_record())
$qut = $this->dbt->f("QUtilizzata") ;
$newqut = $qut + ($cart * $conf) ;
$qupd = "update prodotti set qutilizzata = $newqut where idprodotti = $codprod" ;
$this->Logga($qupd) ;
$ret = $this->dbt->query($qupd) ;
/**************************************************************
* Aggiorno la tabella quantitaprodotti con le nuove quantita
* solo per le bottiglie NON in sconto merce
************************************************************/
$qprod = "select * from quantitaprodotti where anno = $this->anno and idprodotto = $codprod" ;
$this->Logga($qprod) ;
$this->dbt->query($qprod) ;
while ($this->dbt->next_record())
$qut = $this->dbt->f("QUtilizzata") ;
$newqut = $qut + $NumBott ;
$qupd = "
update quantitaprodotti set
QUtilizzata = $newqut
where
anno = $this->anno and
idprodotto = $codprod" ;
$this->Logga($qupd) ;
$ret = $this->dbt->query($qupd) ;
/***
* al fine di aggiornare il record in AmmontareVariOrdini devo effettuare le seguenti operazioni
* Devo in ogni caso andare a recuperare qualche dato dai dati generali dell'ordine
***/
$qpro = "
select
P.*,
I.Aliquota
from
prodotti P
inner join iva I on I.idIva = P.IdIvaPrd
where
P.Anno = $this->anno and
P.IdProdotti = '$codprod'
" ;
list($n, $d) = $this->db->RecuperaDati($qpro) ;
if ($n > 0)
{
if ($przForzato != '')
$tt = ($cart * $conf * $przForzato) ;
else
$tt = ($cart * $conf * $d['PrezzoUnitario'][0]) ;
if ($scontoprd != "")
$tt = CalcolaScontoProdotto($tt, $scontoprd) ;
// Prima: $impIva = ($tt * $d["Aliquota"][0] / 100) ;
$impIva = ($tt * $iva / 100) ;
$ammontareOrdineSenzaIva += $tt ;
$ammontareOrdineConIva += $tt + $impIva ;
}
}
}
}
/***
* per aggiornare il record nella tabella AmmontareVariOrdini
* per i valori senza IVA
***/
$scn1 = ($ammontareOrdineSenzaIva * $sconto1 / 100) ;
$subtotp1 = $ammontareOrdineSenzaIva - $scn1 ;
$scn2 = ($subtotp1 * $sconto2 / 100) ;
$subtotp2 = $subtotp1 - $scn2 ;
$sconti = $scn1 + $scn2 ;
$baseprov = $ammontareOrdineSenzaIva - $sconti ;
$scn3 = ($subtotp2 * $sconto3 / 100) ;
$ncSenzaIva = $importonc - ($importonc * $iva / 100) ;
$ammontareOrdineSenzaIva = $subtotp2 - $scn3 - $ncSenzaIva ;
/***
* per i valori con iva
***/
$sconto1ConIva = ($ammontareOrdineConIva * $sconto1 / 100) ;
$subtotp1ConIva = $ammontareOrdineConIva - $sconto1ConIva ;
$sconto2ConIva = ($subtotp1ConIva * $sconto2 / 100) ;
$subtotp2ConIva = $subtotp1ConIva - $sconto2ConIva ;
$sconto3ConIva = ($subtotp2ConIva * $sconto3 / 100) ;
$subtotp3ConIva = $subtotp2ConIva - $sconto3ConIva ;
$scontiConIva = $sconto1ConIva + $sconto2ConIva + $sconto3ConIva;
/********************************************************************************
// Da ricordare che in questa fase NON può essere aggiornata la nota di credito
/* NO ERRORE. Devo anche in questa fase considerare evetuali note di credito
* perchè mi vanno ad impattare sulle cifre finali
*********************************************************************************/
$ammontareOrdineConIva = $ammontareOrdineConIva - $scontiConIva - $importonc ;
/***
* dall'idagente e dall'idfornitore mi ricavo la provvigione eventuale dell'agente e la provvigione
* dell'agenzia verso il fornitore
***/
$qper = "
select
F.Provvigione as PercentualeProvvAgenzia,
case
when (AFP.percentuale <> 0) then AFP.percentuale
else A.percentuale
end as PercentualeProvvAgente
from
agenti A
left join ageforper AFP on AFP.idagente = A.idagenti
and AFP.idfornitore = $this->fornitore,
fornitori F
where
A.idagenti = $this->idagente and
F.idfornitori = $this->fornitore
" ;
$this->Logga($qper) ;
list($nper, $dper) = $this->db->RecuperaDati($qper) ;
if ($nper > 0)
{
$percentualeProvvAgenzia = $dper['PercentualeProvvAgenzia'][0] ;
$percentualeProvvAgente = $dper['PercentualeProvvAgente'][0] ;
}
$ammontareProvvAgenzia = ($baseprov * $percentualeProvvAgenzia / 100) ;
$ammontareProvvAgente = ($baseprov * $percentualeProvvAgente / 100) ;
/***
* a questo punto dovrei averci tutti i dati che mi occorrono
***/
$qAmm = "
update AmmontareVariOrdini
set
AmmontareOrdineSenzaIva = $ammontareOrdineSenzaIva,
AmmontareOrdineConIva = $ammontareOrdineConIva,
ScontiFineProvvigioni = $sconti,
BaseProvvigionale = $baseprov,
PercentualeProvvAgente = $percentualeProvvAgente,
AmmontareProvvAgente = $ammontareProvvAgente,
PercentualeProvvAgenzia = $percentualeProvvAgenzia,
AmmontareProvvAgenzia = $ammontareProvvAgenzia
where
Anno = $this->anno and
IdOrdine = $this->idordine
" ;
$this->Logga($qAmm) ;
$this->db->EseguiQuery($qAmm) ;
}
catch (Exception $e) {
$this->EsitoOperazione = false ;
echo "Problemi nella Modifica Prodotti di un Ordine" ;
}
if ($this->log)
fclose($this->handle) ;
return $this->EsitoOperazione ;
}
function SalvaOrdine()
{
/*************************************************************************
* FAB 24.10.2021. Siamo nella versione 3.0
* Per definire il numero dell'ordine da assegnare vado a controllare se
* questo è il primo ordine dell'anno oppure no. Se è il primo allora
* l'id = 1 altrimenti trovo il massimo e ci aggiungo uno.
*************************************************************************/
$this->log = false ;
$NumBottSM = 0 ;
$ammontareOrdineSenzaIva = 0 ;
$this->Logga("Entro nella Salva Ordine") ;
try {
$qmax = "select
max(IdOrdini) as MAX
from
ordini O
where
O.Anno = $this->anno
" ;
$this->db->query($qmax) ;
while ($this->db->next_record())
$idordine = $max = $this->db->f("MAX") + 1 ;
$this->Logga("ID ORDINE = $idordine") ;
$confronto = 0 ;
if (isset($this->Prenotazione) and ($this->Prenotazione != ""))
$this->Epoca = "Prenotazione" ;
$this->Sconto1 = NumToSql($this->Sconto1) ;
$this->Sconto2 = NumToSql($this->Sconto2) ;
$this->Sconto3 = NumToSql($this->Sconto3) ;
/***************************************************
* trasformo le date nel formato accettato da
* MySql
****************************************************/
$this->DataOrdine = MySqlDate($this->DataOrdine) ;
$this->DataRichiesta = MySqlDate($this->DataRichiesta) ;
$this->DataSpedizione = MySqlDate($this->DataSpedizione) ;
$this->DataFattura = MySqlDate($this->DataFattura) ;
$this->DataNc = MySqlDate($this->DataNc) ;
$this->DataNa = MySqlDate($this->DataNa) ;
/***************************************************
* Recupero l'id dell'agente responsabile dell'ordine.
* Se l'id agente passato = 0 allora vuol dire che
* devo recuperare l'id dell'agente in base al cliente
* selezionato.
****************************************************/
if ($this->IdAgente == 0) {
$q = "select idagente from clienti where idclienti = $this->IdCliente" ;
$this->Logga($q) ;
$this->db->query($q) ;
while ($this->db->next_record())
$this->IdAgente = $this->db->f("idagente") ;
}
$arrIdProdotti = explode(",", $this->StrIdProdotti) ;
$arrDescProdotto = explode("!", $this->StrDescProdotto) ;
$arrPrzForzato = explode("^", $this->StrPrzForzato) ;
$arrNumCart = explode(",", $this->StrNumCart) ;
$arrConfDa = explode(",", $this->StrConfDa) ;
$arrScontoPrd = explode(",", $this->StrScontoPrd) ;
$arrIva = explode(",", $this->StrIva) ;
$arrScontoMerce = explode(",", $this->StrScontoMerce) ;
/*******************************************************
* Devo recuperare i dati passati:
****************************************************/
/******************************************************
* Inserisco i dati dell'ordine
******************************************************/
$qordini = "
insert into ordini
(Anno, IdOrdini, IdCliente, IdAgente, IdFornitore, DataOrdine, DataRichiesta, DataSpedizione, IdPagamento, NoteOrdini, Sconto1, Sconto2, Sconto3, EpocaDiConsegna, DaInviare)
VALUES
($this->anno, '$idordine', '$this->IdCliente', '$this->IdAgente', '$this->IdFornitore', '$this->DataOrdine', '$this->DataRichiesta', '$this->DataSpedizione', '$this->Pagamento', '$this->Note', '$this->Sconto1', '$this->Sconto2', '$this->Sconto3', '$this->Epoca', 1)" ;
$this->Logga($qordini) ;
$ret = $this->db->query($qordini) ;
/*****************************************************
* Inserisco i dati relativo al dettaglio dell'ordine
*****************************************************/
for($i=0 ; $ianno, $max, '$codprod', '$desc', $cart, $conf, $iva)
" ;
$this->Logga($qscme) ;
$ret = $this->db->query($qscme) ;
/****************************
* Opero sullo sconto merce
****************************/
$q1 = "
select
qutilizzata
from
prodotti
where
idprodotti = $codprod
" ;
$this->Logga($q1) ;
$ret = $this->db->query($q1) ;
while ($this->db->next_record())
$quti = $this->db->f("qutilizzata") ;
$newuti = $quti + $NumBottSM ;
$q2 = "
update
prodotti
set
qutilizzata = $newuti
where
idprodotti = $codprod
" ;
$this->Logga($q2) ;
$ret = $this->db->query($q2) ;
$q3 = "
select
QUtilizzataSM
from
quantitaprodotti
where
Anno = $this->anno and
idprodotto = $codprod
" ;
$this->Logga($q3) ;
$ret = $this->db->query($q3) ;
while ($this->db->next_record())
$qUtiSM = $this->db->f("QUtilizzataSM") ;
$newutiSM = $qUtiSM + $NumBottSM ;
$qUpd = "
update quantitaprodotti set
QUtilizzataSM = $newutiSM
where
Anno = $this->anno and
idprodotto = $codprod
" ;
$this->Logga($qUpd) ;
$ret = $this->db->query($qUpd) ;
}
else
{
/********************************************************************************
* devo inserire nella tabella dettagli questo prodotto con i relativi parametri
* La quantità venduta per questo prodotto deve andare ad incrementare
* la quantita utilizzata sempre per questo prodotto nella tabella QuantitaProdotti
********************************************************************************/
$NumBott = $cart * $conf ;
$qdett = "
insert into dettagli
(Anno, IdOrdine, IdProdotto, DescDettaglio, PrezzoForzato, NumCartoni, ConfezioniDa, ScontoPrd, Iva)
VALUES
($this->anno, $max, '$codprod', '$desc', '$przForzato', $cart, $conf, '$scontoprd', $iva)
" ;
$this->Logga($qdett) ;
$ret = $this->db->query($qdett) ;
/*****************************************
* Opero sui prodotti NON in sconto merce
*****************************************/
$q1 = "
select
qutilizzata
from
prodotti
where
idprodotti = $codprod
" ;
$this->Logga($q1) ;
$ret = $this->db->query($q1) ;
while ($this->db->next_record())
$quti = $this->db->f("qutilizzata") ;
$newuti = $quti + $NumBott ;
$q2 = "
update
prodotti
set
qutilizzata = $newuti
where
idprodotti = $codprod
" ;
$this->Logga($q2) ;
$ret = $this->db->query($q2) ;
$q3 = "
select
QUtilizzata
from
quantitaprodotti
where
Anno = $this->anno and
idprodotto = $codprod
" ;
$this->Logga($q3) ;
$ret = $this->db->query($q3) ;
while ($this->db->next_record())
$qUti = $this->db->f("QUtilizzata") ;
$newuti = $qUti + $NumBott ;
$qUpd = "
update quantitaprodotti set
QUtilizzata = $newuti
where
Anno = $this->anno and
idprodotto = $codprod
" ;
$this->Logga($qUpd) ;
$this->Logga($qUpd) ;
$ret = $this->db->query($qUpd) ;
/*************************************************************************************************
* al fine di memorizzare il record in AmmontareVariOrdini devo effettuare le seguenti operazioni
**************************************************************************************************/
// $ammontareOrdineSenzaIva = 0 ;
if ($this->IdFornitore == $idsarzi)
{
$tprodotti = "sarzi_$this->anno" ;
$codprod = substr($codprod, -2, 2) ;
}
else
$tprodotti = "prodotti" ;
$qpro = "
select
P.*,
I.Aliquota
from
$tprodotti P
inner join iva I on I.idIva = P.IdIvaPrd
where
P.IdProdotti = '$codprod'
" ;
$this->Logga($qpro) ;
list($n, $d) = $this->db->RecuperaDati($qpro) ;
if ($n > 0)
{
if ($przForzato != '')
$ammontareOrdineSenzaIva += ($cart * $conf * $przForzato) ;
else
$ammontareOrdineSenzaIva += ($cart * $conf * $d['PrezzoUnitario'][0]) ;
if ($scontoprd != "")
$ammontareOrdineSenzaIva = CalcolaScontoProdotto($ammontareOrdineSenzaIva, $scontoprd) ;
/***********************************************************
* Una volta calcolato l'eventuale sconto prodotto,
* devo andare a vedere se per questo prodotto ci sono delle
* accise e, in caso positivo, considerarle nell'ammontare
***********************************************************/
$ammontareOrdineSenzaIva += ($cart * $conf * $d['Accisa'][0]) ;
// Prima: $impIva = ($ammontareOrdineSenzaIva * $d["Aliquota"][0] / 100) ;
$impIva = ($ammontareOrdineSenzaIva * $iva / 100) ;
$ammontareOrdineConIva = $ammontareOrdineSenzaIva + $impIva ;
$this->Logga("AMMONTAREORDINESENZAIVA = $ammontareOrdineSenzaIva ; AMMOCONIVA = $ammontareOrdineConIva") ;
}
}
/* NON SERVE PIU ?
$NumBottTot = $NumBottSM + $NumBott ;
/************************************************************
* Aggiorno la tabella dei prodotti incrementando la quantita
* utilizzata per questo prodotto se non si tratta di SARZI
* La stessa cosa la devo fare per la tabella quantitaprodotti
**************************************************************
if ($this->IdFornitore != $idsarzi)
{
$ret = $this->db->query("select qutilizzata from prodotti where idprodotti = $codprod") ;
while ($this->db->next_record())
$quti = $this->db->f("qutilizzata") ;
// PRIMA $newuti = $quti + ($cart * $conf) ;
$newuti = $quti + $NumBott ;
$this->Logga("update prodotti set qutilizzata = $newuti where idprodotti = $codprod") ;
$ret = $this->db->query("update prodotti set qutilizzata = $newuti where idprodotti = $codprod") ;
$this->Logga("select qutilizzata from quantitaprodotti where Anno = $this->anno and idprodotto = $codprod") ;
$ret = $this->db->query("select qutilizzata from quantitaprodotti where Anno = $this->anno and idprodotto = $codprod") ;
while ($this->db->next_record())
{
$quti = $this->db->f("qutilizzata") ;
$qUtiSM = $this->db->f("QUtilizzataSM") ;
}
// PRIMA $newuti = $quti + ($cart * $conf) ;
$newuti = $quti + $NumBott ;
$newutiSM = $qUtiSM + $NumBottSM ;
$qUpd = "
update quantitaprodotti set
qutilizzata = $newuti,
QUtilizzataSM = $NumBottSM
where
Anno = $this->anno and
idprodotto = $codprod
" ;
$this->Logga($qUpd) ;
$ret = $this->db->query($qUpd) ;
}
*/
}
}
/***
* inserisco il record nella tabella AmmontareVariOrdini
* NOTE: in fase di inserimento di un ordine non si può inserire la nota di credito
***/
/***
* per i valori senza IVA
***/
$scn1 = ($ammontareOrdineSenzaIva * (float) $this->Sconto1 / 100) ;
$subtotp1 = $ammontareOrdineSenzaIva - $scn1 ;
$scn2 = ($subtotp1 * (float) $this->Sconto2 / 100) ;
$sconti = $scn1 + $scn2 ;
$baseprov = $ammontareOrdineSenzaIva - $sconti ;
/***
* per i valori con iva
***/
$sconto1ConIva = ($ammontareOrdineConIva * (float) $this->Sconto1 / 100) ;
$subtotp1ConIva = $ammontareOrdineConIva - $sconto1ConIva ;
$sconto2ConIva = ($subtotp1ConIva * (float) $this->Sconto2 / 100) ;
$subtotp2ConIva = $subtotp1ConIva - $sconto2ConIva ;
$sconto3ConIva = ($subtotp2ConIva * (float) $this->Sconto3 / 100) ;
$subtotp3ConIva = $subtotp2ConIva - $sconto3ConIva ;
$scontiConIva = $sconto1ConIva + $sconto2ConIva + $sconto3ConIva;
// Da ricordare che in questa fase NON può essere inserita la nota di credito
$ammontareOrdineConIva = $ammontareOrdineConIva - $scontiConIva ;
/***
* dall'idagente e dall'idfornitore mi ricavo la provvigione eventuale dell'agente e la provvigione
* dell'agenzia verso il fornitore
***/
$qper = "
select
F.Provvigione as PercentualeProvvAgenzia,
case
when (AFP.percentuale <> 0) then AFP.percentuale
else A.percentuale
end as PercentualeProvvAgente
from
agenti A
left join ageforper AFP on AFP.idagente = A.idagenti
and AFP.idfornitore = $this->IdFornitore,
fornitori F
where
A.idagenti = $this->IdAgente and
F.idfornitori = $this->IdFornitore
" ;
$this->Logga($qper) ;
debug (0, $qper) ;
list($nper, $dper) = $this->db->RecuperaDati($qper) ;
if ($nper > 0)
{
$percentualeProvvAgenzia = $dper['PercentualeProvvAgenzia'][0] ;
$percentualeProvvAgente = $dper['PercentualeProvvAgente'][0] ;
}
$ammontareProvvAgenzia = ($baseprov * $percentualeProvvAgenzia / 100) ;
$ammontareProvvAgente = ($baseprov * $percentualeProvvAgente / 100) ;
/***
* a questo punto dovrei averci tutti i dati che mi occorrono
***/
$qAmm = "
insert into AmmontareVariOrdini
(Anno, IdOrdine, AmmontareOrdineSenzaIva, AmmontareOrdineConIva, ScontiFineProvvigioni, BaseProvvigionale, PercentualeProvvAgente, AmmontareProvvAgente, PercentualeProvvAgenzia, AmmontareProvvAgenzia)
values
($this->anno, $max, $ammontareOrdineSenzaIva, $ammontareOrdineConIva, $sconti, $baseprov, $percentualeProvvAgente, $ammontareProvvAgente, $percentualeProvvAgenzia, $ammontareProvvAgenzia)
" ;
$this->Logga($qAmm) ;
$this->db->EseguiQuery($qAmm) ;
}
catch (Exception $e) {
$this->EsitoOperazione = false ;
}
return $this->EsitoOperazione ;
}
function SalvaOrdine_OLD()
{
/*************************************************************************
* 14.10.2021: se siamo prima del 2021 allora si utilizzano ancora le tabelle
* xxxx_anno mentre da dopo il 2021 in poi allora si cerca di utilizzare
* le tabelle senza anno.
* L'anno viene memorizzato solo all'interno della tabella ordini
*************************************************************************/
try {
if ($this->IdFornitore == $idsarzi)
$confronto = "" ;
else
$confronto = 0 ;
if (isset($this->Prenotazione) and ($this->Prenotazione != ""))
$this->Epoca = "Prenotazione" ;
$this->Sconto1 = NumToSql($this->Sconto1) ;
$this->Sconto2 = NumToSql($this->Sconto2) ;
$this->Sconto3 = NumToSql($this->Sconto3) ;
/***************************************************
* trasformo le date nel formato accettato da
* MySql
****************************************************/
$this->DataOrdine = MySqlDate($this->DataOrdine) ;
$this->DataRichiesta = MySqlDate($this->DataRichiesta) ;
$this->DataSpedizione = MySqlDate($this->DataSpedizione) ;
$this->DataFattura = MySqlDate($this->DataFattura) ;
$this->DataNc = MySqlDate($this->DataNc) ;
$this->DataNa = MySqlDate($this->DataNa) ;
/***************************************************
* Recupero l'id dell'agente responsabile dell'ordine.
* Se l'id agente passato = 0 allora vuol dire che
* devo recuperare l'id dell'agente in base al cliente
* selezionato.
****************************************************/
if ($this->IdAgente == 0) {
$q = "select idagente from clienti_$this->anno where idclienti = $this->IdCliente" ;
debug (0, $q) ;
$this->db->query($q) ;
while ($this->db->next_record())
$this->IdAgente = $this->db->f("idagente") ;
}
$arrIdProdotti = explode(",", $this->StrIdProdotti) ;
$arrPrzForzato = explode("£", $this->StrPrzForzato) ;
$arrNumCart = explode(",", $this->StrNumCart) ;
$arrConfDa = explode(",", $this->StrConfDa) ;
$arrScontoPrd = explode(",", $this->StrScontoPrd) ;
$arrIva = explode(",", $this->StrIva) ;
$arrScontoMerce = explode(",", $this->StrScontoMerce) ;
/*******************************************************
* Devo recuperare i dati passati:
*
* Prima di inserire l'ordine devo recuperare l'ID
* da assegnare a questa inserzione
****************************************************/
$qmax = "select max(IdOrdini) as MAX from ordini_$this->anno" ;
$this->db->query($qmax) ;
while ($this->db->next_record())
$idordine = $max = $this->db->f("MAX") + 1 ;
debug (0, $idordine) ;
/******************************************************
* Inserisco i dati dell'ordine
******************************************************/
$qordini = "
insert into ordini_$this->anno
(IdCliente, IdAgente, IdFornitore, DataOrdine, DataRichiesta, DataSpedizione, IdPagamento, NoteOrdini, Sconto1, Sconto2, Sconto3, EpocaDiConsegna, DaInviare)
VALUES
('$this->IdCliente', '$this->IdAgente', '$this->IdFornitore', '$this->DataOrdine', '$this->DataRichiesta', '$this->DataSpedizione', '$this->Pagamento', '$this->Note', '$this->Sconto1', '$this->Sconto2', '$this->Sconto3', '$this->Epoca', 1)" ;
$ret = $this->db->query($qordini) ;
debug (0, $qordini) ;
/*****************************************************
* Inserisco i dati relativo al dettaglio dell'ordine
*****************************************************/
for($i=0 ; $ianno
(IdOrdine, IdProdotto, NumCartoni, ConfezioniDa, Iva)
VALUES
($max, '$codprod', $cart, $conf, $iva)
" ;
$ret = $this->db->query($qscme) ;
debug (0, $qscme) ;
}
else
{
/********************************************************************************
* devo inserire nella tabella dettagli questo prodotto con i relativi parametri
********************************************************************************/
$qdett = "
insert into dettagli_$this->anno
(IdOrdine, IdProdotto, PrezzoForzato, NumCartoni, ConfezioniDa, ScontoPrd, Iva)
VALUES
($max, '$codprod', '$przForzato', $cart, $conf, '$scontoprd', $iva)
" ;
$ret = $this->db->query($qdett) ;
debug (0, $qdett) ;
/*************************************************************************************************
* al fine di memorizzare il record in AmmontareVariOrdini devo effettuare le seguenti operazioni
**************************************************************************************************/
if ($this->IdFornitore == $idsarzi)
{
$tprodotti = "sarzi_$this->anno" ;
$codprod = substr($codprod, -2, 2) ;
}
else
$tprodotti = "prodotti_$this->anno" ;
$qpro = "
select
P.*,
I.Aliquota
from
$tprodotti P
inner join iva_$this->anno I on I.idIva = P.IdIvaPrd
where
P.IdProdotti = '$codprod'
" ;
debug (0, $qpro) ;
list($n, $d) = $this->db->RecuperaDati($qpro) ;
if ($n > 0)
{
if ($przForzato != '')
$ammontareOrdineSenzaIva += ($cart * $conf * $przForzato) ;
else
$ammontareOrdineSenzaIva += ($cart * $conf * $d['PrezzoUnitario'][0]) ;
if ($scontoprd != "")
$ammontareOrdineSenzaIva = CalcolaScontoProdotto($ammontareOrdineSenzaIva, $scontoprd) ;
/***********************************************************
* Una volta calcolato l'eventuale sconto prodotto,
* devo andare a vedere se per questo prodotto ci sono delle
* accise e, in caso positivo, considerarle nell'ammontare
***********************************************************/
$ammontareOrdineSenzaIva += ($cart * $conf * $d['Accisa'][0]) ;
// Prima: $impIva = ($ammontareOrdineSenzaIva * $d["Aliquota"][0] / 100) ;
$impIva = ($ammontareOrdineSenzaIva * $iva / 100) ;
$ammontareOrdineConIva = $ammontareOrdineSenzaIva + $impIva ;
debug (0, "$ammontareOrdineSenzaIva ; $ammontareOrdineConIva") ;
}
}
/************************************************************
* Aggiorno la tabella dei prodotti incrementando la quantita
* utilizzata per questo prodotto se non si tratta di SARZI
**************************************************************/
if ($this->IdFornitore != $idsarzi)
{
$ret = $this->db->query("select qutilizzata from prodotti_$this->anno where idprodotti = $codprod") ;
while ($this->db->next_record())
$quti = $this->db->f("qutilizzata") ;
$newuti = $quti + ($cart * $conf) ;
$ret = $this->db->query("update prodotti_$this->anno set qutilizzata = $newuti where idprodotti = $codprod") ;
debug (0, "update prodotti_$this->anno set qutilizzata = $newuti where idprodotti = $codprod") ;
}
}
}
/***
* inserisco il record nella tabella AmmontareVariOrdini
* NOTE: in fase di inserimento di un ordine non si può inserire la nota di credito
***/
/***
* per i valori senza IVA
***/
$scn1 = ($ammontareOrdineSenzaIva * $this->Sconto1 / 100) ;
$subtotp1 = $ammontareOrdineSenzaIva - $scn1 ;
$scn2 = ($subtotp1 * $this->Sconto2 / 100) ;
$sconti = $scn1 + $scn2 ;
$baseprov = $ammontareOrdineSenzaIva - $sconti ;
/***
* per i valori con iva
***/
$sconto1ConIva = ($ammontareOrdineConIva * $this->Sconto1 / 100) ;
$subtotp1ConIva = $ammontareOrdineConIva - $sconto1ConIva ;
$sconto2ConIva = ($subtotp1ConIva * $this->Sconto2 / 100) ;
$subtotp2ConIva = $subtotp1ConIva - $sconto2ConIva ;
$sconto3ConIva = ($subtotp2ConIva * $this->Sconto3 / 100) ;
$subtotp3ConIva = $subtotp2ConIva - $sconto3ConIva ;
$scontiConIva = $sconto1ConIva + $sconto2ConIva + $sconto3ConIva;
// Da ricordare che in questa fase NON può essere inserita la nota di credito
$ammontareOrdineConIva = $ammontareOrdineConIva - $scontiConIva ;
/***
* dall'idagente e dall'idfornitore mi ricavo la provvigione eventuale dell'agente e la provvigione
* dell'agenzia verso il fornitore
***/
$qper = "
select
F.Provvigione as PercentualeProvvAgenzia,
case
when (AFP.percentuale <> 0) then AFP.percentuale
else A.percentuale
end as PercentualeProvvAgente
from
agenti_$this->anno A
left join ageforper_$this->anno AFP on AFP.idagente = A.idagenti
and AFP.idfornitore = $this->IdFornitore,
fornitori_$this->anno F
where
A.idagenti = $this->IdAgente and
F.idfornitori = $this->IdFornitore
" ;
debug (0, $qper) ;
list($nper, $dper) = $this->db->RecuperaDati($qper) ;
if ($nper > 0)
{
$percentualeProvvAgenzia = $dper['PercentualeProvvAgenzia'][0] ;
$percentualeProvvAgente = $dper['PercentualeProvvAgente'][0] ;
}
$ammontareProvvAgenzia = ($baseprov * $percentualeProvvAgenzia / 100) ;
$ammontareProvvAgente = ($baseprov * $percentualeProvvAgente / 100) ;
/***
* a questo punto dovrei averci tutti i dati che mi occorrono
***/
$qAmm = "
insert into AmmontareVariOrdini_$this->anno
(IdOrdine, AmmontareOrdineSenzaIva, AmmontareOrdineConIva, ScontiFineProvvigioni, BaseProvvigionale, PercentualeProvvAgente, AmmontareProvvAgente, PercentualeProvvAgenzia, AmmontareProvvAgenzia)
values
($max, $ammontareOrdineSenzaIva, $ammontareOrdineConIva, $sconti, $baseprov, $percentualeProvvAgente, $ammontareProvvAgente, $percentualeProvvAgenzia, $ammontareProvvAgenzia)
" ;
$this->db->EseguiQuery($qAmm) ;
debug (0, $qAmm) ;
}
catch (Exception $e) {
$this->EsitoOperazione = false ;
echo "Problemi nella Salva Ordine" ;
}
return $this->EsitoOperazione ;
}
function EliminaOrdine($idOrdine)
{
$this->log = false ;
$NumBottSM = 0 ;
$this->Logga("Entro nella Elimina Ordine") ;
try {
/**************************************************
* Dall'id dell'ordine recupero l'id del fornitore
* MI seve? Mah....
***************************************************/
$qord = "
select
*
from
ordini
where
Anno = $this->anno and
idordini = $idOrdine" ;
$this->Logga($qord) ;
$this->db->query($qord) ;
while ($this->db->next_record())
$IdFornitore = $this->db->f("IdFornitore") ;
/*************************************************************
* recupero i dettagli dell'ordine da cancellare
* Le referenze qui recuperate NON sono quelle in sconto merce
*************************************************************/
$qdett = "
select
*
from
dettagli
where
Anno = $this->anno and
idordine = $idOrdine" ;
$this->Logga($qdett) ;
$this->db->query($qdett) ;
while ($this->db->next_record())
{
$idprodotto = $this->db->f("IdProdotto") ;
$numcartoni = $this->db->f("NumCartoni") ;
$confezionida = $this->db->f("ConfezioniDa") ;
$totbott = $numcartoni * $confezionida ;
if ($IdFornitore != $idsarzi)
{
$qpro = "
select
qutilizzata
from
prodotti
where
idprodotti = $idprodotto" ;
$this->Logga($qpro) ;
$ret = $this->dbt->query($qpro) ;
while ($this->dbt->next_record())
$quti = $this->dbt->f("qutilizzata") ;
$newuti = $quti - $totbott ;
$qpro = "
update
prodotti
set
qutilizzata = $newuti
where
idprodotti = $idprodotto" ;
$this->Logga($qpro) ;
$ret = $this->dbt->query($qpro) ;
/****************************************
* Lavoro sulla tabella quantitaprodotti
****************************************/
$qquapro = "
select
qutilizzata
from
quantitaprodotti
where
Anno = $this->anno and
idprodotto = $idprodotto" ;
$this->Logga($qquapro) ;
$ret = $this->dbt->query($qquapro) ;
while ($this->dbt->next_record())
$quti = $this->dbt->f("qutilizzata") ;
$newuti = $quti - $totbott ;
$qquapro = "
update
quantitaprodotti
set
qutilizzata = $newuti
where
Anno = $this->anno and
idprodotto = $idprodotto" ;
$this->Logga($qquapro) ;
$ret = $this->dbt->query($qquapro) ;
}
}
/***********************************************
* Le stesse operazioni vanno fatte per quanto
* riguarda lo sconto merce
***********************************************/
$qdett = "
select
*
from
scontomerce
where
Anno = $this->anno and
idordine = $idOrdine" ;
$this->Logga($qdett) ;
$this->db->query($qdett) ;
while ($this->db->next_record())
{
$idprodotto = $this->db->f("IdProdotto") ;
$numcartoni = $this->db->f("NumCartoni") ;
$confezionida = $this->db->f("ConfezioniDa") ;
$totbott = $numcartoni * $confezionida ;
if ($IdFornitore != $idsarzi)
{
$qpro = "
select
qutilizzata
from
prodotti
where
idprodotti = $idprodotto" ;
$this->Logga($qpro) ;
$ret = $this->dbt->query($qpro) ;
while ($this->dbt->next_record())
$quti = $this->dbt->f("qutilizzata") ;
$newuti = $quti - $totbott ;
$qpro = "
update
prodotti
set
qutilizzata = $newuti
where
idprodotti = $idprodotto" ;
$this->Logga($qpro) ;
$ret = $this->dbt->query($qpro) ;
/****************************************
* Lavoro sulla tabella quantitaprodotti
****************************************/
$qquapro = "
select
qutilizzataSM
from
quantitaprodotti
where
Anno = $this->anno and
idprodotto = $idprodotto" ;
$this->Logga($qquapro) ;
$ret = $this->dbt->query($qquapro) ;
while ($this->dbt->next_record())
$quti = $this->dbt->f("qutilizzataSM") ;
$newuti = $quti - $totbott ;
$qquapro = "
update
quantitaprodotti
set
qutilizzataSM = $newuti
where
Anno = $this->anno and
idprodotto = $idprodotto" ;
$this->Logga($qquapro) ;
$ret = $this->dbt->query($qquapro) ;
}
} // FINE Sconto Merce
/****************************************************************
* Dopo aver aggiornato i dati relativi alle quantità utilizzate
* dei singoli prodotti, posso eliminare i record della tabella
* dei dettagli che si riferiscono all'ordine in esame
*****************************************************************/
$qeli = "
delete from
dettagli
where
Anno = $this->anno and
idordine = $idOrdine" ;
$this->Logga($qeli) ;
$this->db->query($qeli) ;
/****************************************************************
* Devo eliminare anche eventuali record nella tabella sconto merce
*****************************************************************/
$qeli = "
delete from
scontomerce
where
Anno = $this->anno and
idordine = $idOrdine" ;
$this->Logga($qeli) ;
$this->db->query($qeli) ;
/*******************************************************************
* Elimino dalla tabella $tordini il record che si riferisce
* all'ordine in esame
********************************************************************/
$qeli = "
delete from
ordini
where
Anno = $this->anno and
idordini = $idOrdine" ;
$this->Logga($qeli) ;
$this->db->query($qeli) ;
/*******************************************************************
* Infine elimino dalla tabella $AmmontareVariOrdini il record che si riferisce
* all'ordine in esame
********************************************************************/
$qeli = "
delete from
AmmontareVariOrdini
where
Anno = $this->anno and
idordine = $idOrdine" ;
$this->Logga($qeli) ;
$this->db->query($qeli) ;
} // FINE Try
catch (Exception $e) {
$this->EsitoOperazione = false ;
// echo "Problemi nella Elimina Ordine" ;
}
return $this->EsitoOperazione ;
} // FINE Function
function Logga($str)
{
if ($this->log)
{
fwrite($this->handle, "\r\n$str\r\n") ;
}
}
} // Fine Classe
?>