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 ; $iLogga($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 ; $idb->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 ?>