<?php
/**
* Progetto e3g - Equogest/GestiGAS
* Software gestionali per l'economia solidale
* <http://www.progettoe3g.org>
*
* Copyright (C) 2003-2009
* Andrea Piazza <http://www.andreapiazza.it>
* Marco Munari <http://www.marcomunari.it>
*
* @package Progetto e3g - Equogest/GestiGAS
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*
* Questo programma e' software libero; e' lecito redistribuirlo o
* modificarlo secondo i termini della Licenza Pubblica Generica GNU
* come pubblicata dalla Free Software Foundation; o la versione 2
* della licenza o (a propria scelta) una versione successiva.
*
* Questo programma e' distribuito nella speranza che sia utile, ma
* SENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di
* NEGOZIABILITA' o di APPLICABILITA' PER UN PARTICOLARE SCOPO. Si
* veda la Licenza Pubblica Generica GNU per avere maggiori dettagli.
*
* Questo programma deve essere distribuito assieme ad una copia
* della Licenza Pubblica Generica GNU.
*/
require_once( dirname(__FILE__) . '/../libraries/e3g_doc_routines.php' );
class doc_estrazione_gg extends P4A_Mask
{
// Variabile per definire il tipo Anagrafica Cliente / Fornitore
var $codicetipodoc = '';
// -------------------------------------------------------------------------
function doc_estrazione_gg()
// -------------------------------------------------------------------------
{
$this->p4a_mask();
$this->addCss(E3G_TEMPLATE_DIR . 'css/style.css');
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
$this->SetTitle( "Estrazione Ordini per Fornitore" );
// Toolbar
$this->build("p4a_quit_toolbar", "toolbar");
// Message
$message =& $this->build("p4a_message", "message");
$message->setWidth( 700 );
// COMBO FORNITORI
$this->build( "p4a_db_source", "ds_forn" );
$this->ds_forn->setSelect( "a.idanag, a.codice, CONCAT_WS( ' / ', a.descrizione, a.desc_agg ) AS descrizione" );
$this->ds_forn->setTable( $p4a->e3g_prefix . "anagrafiche a" );
if ( $p4a->e3g_utente_tipo == "R" )
$this->ds_forn->setWhere( "a.tipocfa = 'F' AND " . str_replace("#CAMPOCODICE#", "a.codice", $p4a->e3g_where_referente) );
else
$this->ds_forn->setWhere( "a.tipocfa = 'F'" );
$this->ds_forn->addJoin( $p4a->e3g_prefix . "carrello c", "c.codfornitore = a.codice AND c.stato='A' " );
$this->ds_forn->addGroup( "a.idanag, a.codice, a.descrizione" );
$this->ds_forn->addOrder( "a.descrizione" );
$this->ds_forn->setPk( "a.idanag" );
$this->ds_forn->load();
$this->ds_forn->firstRow();
$this->build("p4a_field", "fld_fornitore");
$this->fld_fornitore->setLabel( "Fornitore" );
$this->fld_fornitore->label->setWidth( 120 );
$this->fld_fornitore->setWidth( 300 );
$this->fld_fornitore->setType( "select" );
$this->fld_fornitore->setSource( $this->ds_forn );
$this->fld_fornitore->setSourceValueField( "codice" );
$this->fld_fornitore->setSourceDescriptionField( "descrizione" );
$this->fld_fornitore->setNewValue( $this->ds_forn->fields->codice->getNewValue() );
$this->fld_fornitore->addAction( "onChange" );
$this->intercept( $this->fld_fornitore, "onChange","fld_fornitoreChange" );
// PULSANTE Estrazione ordine per fornitore
$this->build("p4a_button", "bu_estrai_ordine");
$this->bu_estrai_ordine->setLabel("Estrai ordine fornitore");
$this->bu_estrai_ordine->setIcon("execute");
$this->bu_estrai_ordine->addAction("onClick");
$this->intercept($this->bu_estrai_ordine, "onClick", "bu_estrai_ordineClick");
$this->bu_estrai_ordine->setWidth(300);
$this->update_message();
// PULSANTE esportazione PDF ordine appena estratto
$this->build("p4a_button", "bu_esporta_ordine");
$this->bu_esporta_ordine->setLabel("Esporta ordine come PDF...");
$this->bu_esporta_ordine->setIcon("pdf");
$this->bu_esporta_ordine->addAction("onClick");
$this->intercept($this->bu_esporta_ordine, "onClick", "bu_esporta_ordine");
$this->bu_esporta_ordine->setWidth(300);
$this->bu_esporta_ordine->setInvisible();
// Data documento ordine
$this->build( "p4a_field", "fld_data_doc" );
$this->fld_data_doc->setLabel( "Data doc. ordine" );
$this->fld_data_doc->setValue( date("d/m/Y") );
$this->fld_data_doc->setType( "date" );
$this->fld_data_doc->label->setWidth( 120 );
$this->fld_data_doc->setWidth( 100 );
// Etichetta descrittiva dell'ordine
$this->build("p4a_label", "lbl_desc_ordine");
$this->lbl_desc_ordine->setWidth( 900 );
// ----------------------- Griglia spesa dettaglio (articoli per utente)
// Data source
$this->build("p4a_db_source", "ds_doct");
$this->ds_doct->setSelect(
"idriga, data, codarticolo, descrizione, qta, qta_agg, qtaconsegnata, prezzoven, " .
"((qta + qta_agg) * prezzoven) AS importo, username, codcaumov, carscar, sconto, " .
"codiva, idsessione, codfornitore, stato, um, codutente " );
$this->ds_doct->setTable($p4a->e3g_prefix."carrello");
$this->ds_doct->setWhere("stato='A' AND codfornitore='".$this->ds_forn->fields->codice->getNewValue()."'");
//$this->ds_doct->addOrder("codfornitore, descrizione");
$this->ds_doct->addOrder("codfornitore"); // perchè così quando estraggo faccio il sum degli articoli
$this->ds_doct->addOrder("codarticolo"); // perchè così quando estraggo faccio il sum degli articoli
$this->ds_doct->setPk("idriga");
$this->ds_doct->load();
$this->ds_doct->firstRow();
$this->setSource($this->ds_doct);
$this->build("p4a_db_source", "ds_anagc");
$this->ds_anagc->setTable($p4a->e3g_prefix."anagrafiche");
$this->ds_anagc->setWhere("tipocfa='C'");
$this->ds_anagc->setPk("codice");
$this->ds_anagc->load();
// Tabella
$tab_dettaglio =& $this->build("p4a_table", "tab_dettaglio");
$this->tab_dettaglio->setWidth(E3G_TABLE_IN_TAB_PANE_WIDTH);
$this->tab_dettaglio->setSource($this->ds_doct);
$this->tab_dettaglio->setVisibleCols(array("codutente", "descrizione","qta", "qta_agg","prezzoven","importo"));
$this->tab_dettaglio->showNavigationBar();
$this->tab_dettaglio->cols->codutente->setLabel("Utente");
$this->tab_dettaglio->cols->qta->setLabel("Q.ta");
$this->tab_dettaglio->cols->qta_agg->setLabel("Q.ta' aggiunta");
$this->tab_dettaglio->cols->prezzoven->setLabel('Prezzo');
$this->tab_dettaglio->cols->codutente->setSourceValueField('codice');
$this->tab_dettaglio->cols->codutente->setSourceDescriptionField('descrizione');
$this->tab_dettaglio->cols->codutente->setSource($this->ds_anagc);
$this->tab_dettaglio->cols->qta_agg ->setWidth(50);
$this->tab_dettaglio->cols->importo->setOrderable( false );
// ------------------------------------------ Griglia spesa per articolo
// Data source
$this->build("p4a_db_source", "ds_spesa_articolo");
$this->ds_spesa_articolo->setSelect(
"c.stato, c.codfornitore, c.codarticolo, c.descrizione, " .
"art.qtaminordine AS pezzi_per_cartone, " .
"SUM( c.qta ) AS pezzi_in_ordine_orig, " .
"SUM( c.qta_agg ) AS pezzi_in_ordine_agg, " .
"SUM( c.qta + c.qta_agg ) AS pezzi_in_ordine_tot, " .
"CEILING( SUM(c.qta+c.qta_agg) / art.qtaminordine ) AS cartoni, " .
"( CEILING(SUM(c.qta+c.qta_agg) / art.qtaminordine) * art.qtaminordine ) - SUM(c.qta+c.qta_agg) AS surplus_pezzi, " .
"FORMAT( c.prezzoven, $p4a->e3g_azienda_n_decimali_prezzi ) AS prezzoven, " .
"FORMAT(SUM(c.prezzoven * (c.qta+c.qta_agg)), $p4a->e3g_azienda_n_decimali_prezzi) AS importo " );
$this->ds_spesa_articolo->setTable( $p4a->e3g_prefix."carrello c, " . $p4a->e3g_prefix . "articoli art" );
$this->where_ds_spesa_articolo = "c.stato='A' AND c.codfornitore='".$this->ds_forn->fields->codice->getNewValue()."' AND c.codarticolo = art.codice " .
( $p4a->e3g_utente_tipo == 'R' ? "AND " . str_replace("#CAMPOCODICE#", "c.codfornitore", $p4a->e3g_where_referente) : "" );
$this->ds_spesa_articolo->setWhere( $this->where_ds_spesa_articolo );
$this->ds_spesa_articolo->addGroup( "c.codarticolo" );
$this->ds_spesa_articolo->addOrder("c.codfornitore");
$this->ds_spesa_articolo->addOrder("c.descrizione");
$this->ds_spesa_articolo->setPk("c.codarticolo");
$this->ds_spesa_articolo->setPageLimit(10);
$this->ds_spesa_articolo->load();
$this->ds_spesa_articolo->firstRow();
// Tabella
$this->build("p4a_table", "tab_articolo");
$this->tab_articolo->setWidth(E3G_TABLE_IN_TAB_PANE_WIDTH);
$this->tab_articolo->setSource($this->ds_spesa_articolo);
$this->tab_articolo->setVisibleCols( array(
"descrizione","pezzi_per_cartone",
"pezzi_in_ordine_orig", "pezzi_in_ordine_agg", "pezzi_in_ordine_tot", "cartoni", "surplus_pezzi", "prezzoven","importo") );
$this->tab_articolo->showNavigationBar();
$this->tab_articolo->cols->descrizione->setLabel("Articolo");
$this->tab_articolo->cols->pezzi_per_cartone->setLabel("Pezzi per cartone");
$this->tab_articolo->cols->pezzi_in_ordine_orig->setLabel("Pezzi in ordine (orig.)");
$this->tab_articolo->cols->pezzi_in_ordine_agg->setLabel("Pezzi aggiunti");
$this->tab_articolo->cols->pezzi_in_ordine_tot->setLabel("Pezzi in ordine (TOT)");
$this->tab_articolo->cols->cartoni->setLabel("N. cartoni");
$this->tab_articolo->cols->surplus_pezzi->setLabel("Surplus [pezzi]");
$this->tab_articolo->cols->prezzoven->setLabel("Prezzo");
$this->tab_articolo->cols->importo->setLabel("Importo");
$this->tab_articolo->data->fields->prezzoven->setType("float");
$this->tab_articolo->data->fields->importo->setType("float");
// $this->tab_articolo->cols->descrizione->setWidth(160); per differenza
$this->tab_articolo->cols->pezzi_per_cartone->setWidth(50);
$this->tab_articolo->cols->pezzi_in_ordine_orig->setWidth(50);
$this->tab_articolo->cols->pezzi_in_ordine_agg->setWidth(50);
$this->tab_articolo->cols->pezzi_in_ordine_tot->setWidth(50);
$this->tab_articolo->cols->cartoni->setWidth(50);
$this->tab_articolo->cols->surplus_pezzi->setWidth(50);
$this->tab_articolo->cols->prezzoven->setWidth(50);
$this->tab_articolo->cols->importo->setWidth(50);
$this->tab_articolo->cols->pezzi_per_cartone->setOrderable( false );
$this->tab_articolo->cols->pezzi_in_ordine_orig->setOrderable( false );
$this->tab_articolo->cols->pezzi_in_ordine_agg->setOrderable( false );
$this->tab_articolo->cols->pezzi_in_ordine_tot->setOrderable( false );
$this->tab_articolo->cols->cartoni->setOrderable( false );
$this->tab_articolo->cols->surplus_pezzi->setOrderable( false );
$this->tab_articolo->cols->prezzoven->setOrderable( false );
$this->tab_articolo->cols->importo->setOrderable( false );
// ------------------------------------------------------------ Pannelli
$this->build("p4a_tab_pane", "tab_pane");
$this->tab_pane->pages->build("p4a_frame", "tabframe1");
$this->tab_pane->pages->build("p4a_frame", "tabframe2");
$this->tab_pane->pages->tabframe1->setLabel("Spesa dettaglio (articoli per utente)");
$this->tab_pane->pages->tabframe1->anchor( $this->tab_dettaglio);
$this->tab_pane->pages->tabframe2->setLabel("Spesa per articolo");
$this->tab_pane->pages->tabframe2->anchor( $this->tab_articolo);
// ----------------------------------------- Campi invisibili per stampa
$this->build("p4a_field", "fldcodtipo");
$this->fldcodtipo->setNewValue("");
$this->build("p4a_field", "flddatadoc");
$this->flddatadoc->setNewValue("");
$this->build("p4a_field", "fldfornitore");
$this->fldfornitore->setNewValue("");
$this->build("p4a_field", "fldiddoc");
$this->fldiddoc->setNewValue("");
$this->build("p4a_field", "fldnumdocum");
$this->fldnumdocum->setNewValue("");
// -------------------------------------------------- Ancoraggio oggetti
$frm=& $this->build("p4a_frame", "frm");
$frm->setWidth( E3G_MAIN_FRAME_WIDTH );
$frm->anchor( $this->message );
$frm->anchor( $this->fld_fornitore );
$frm->anchorRight( $this->bu_estrai_ordine );
$frm->anchor( $this->fld_data_doc );
$frm->anchorRight( $this->bu_esporta_ordine );
$frm->anchor( $this->lbl_desc_ordine );
$frm->anchor( $this->tab_pane );
e3g_scrivi_footer( $this, $frm );
// Display
$this->display("main", $frm);
$this->display("menu", $p4a->menu);
$this->display("top", $this->toolbar);
$this->fld_fornitoreChange();
}
// -------------------------------------------------------------------------
function main()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
parent::main();
$this->update_message();
}
// -------------------------------------------------------------------------
function bu_esporta_ordine()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
if ($this->fldcodtipo->getNewValue() != "" && $this->fldfornitore->getNewValue() != "" && $this->fldiddoc->getNewValue() != "" && $this->fldnumdocum->getNewValue() != "" && $this->flddatadoc->getNewValue() != "" )
{
$pagamento = "";
genera_stampa_pdf($this->fldnumdocum->getNewValue(), $this->fldiddoc->getNewValue(), $this->fldcodtipo->getNewValue(), $this->fldfornitore->getNewValue(), $pagamento, 0 );
}
}
// -------------------------------------------------------------------------
function fld_fornitoreChange()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
$this->ds_doct->setWhere("codfornitore='".$this->fld_fornitore->getNewValue()."'");
$this->ds_doct->load();
$this->where_ds_spesa_articolo = "c.stato='A' AND c.codfornitore='".$this->fld_fornitore->getNewValue()."' AND c.codarticolo = art.codice " .
( $p4a->e3g_utente_tipo == 'R' ? "AND " . str_replace("#CAMPOCODICE#", "c.codfornitore", $p4a->e3g_where_referente) : "" );
$this->ds_spesa_articolo->setWhere( $this->where_ds_spesa_articolo );
$this->ds_spesa_articolo->load();
$pezzi = $db->queryOne(
"SELECT SUM( c.qta + c.qta_agg ) AS pezzi_in_ordine_tot " .
" FROM " . $p4a->e3g_prefix . "carrello c " .
" WHERE c.stato = 'A' AND c.codfornitore = '" . $this->fld_fornitore->getNewValue() . "' ");
if ( $pezzi == 0 )
{
$this->lbl_desc_ordine->setValue( "Nessun articolo in ordine." );
}
else
{
$cartoni = $db->queryOne(
"SELECT CEILING( SUM(c.qta+c.qta_agg) / art.qtaminordine ) AS cartoni " .
" FROM " . $p4a->e3g_prefix . "carrello c, " . $p4a->e3g_prefix . "articoli art " .
" WHERE c.stato = 'A' AND c.codarticolo = art.codice AND c.codfornitore = '" . $this->fld_fornitore->getNewValue() . "' ");
$utenti = $db->queryOne(
"SELECT COUNT( DISTINCT(c.codutente) ) AS utenti_diversi " .
" FROM " . $p4a->e3g_prefix . "carrello c " .
" WHERE c.stato = 'A' AND c.codfornitore = '" . $this->fld_fornitore->getNewValue() . "' ");
$importo = $db->queryOne(
"SELECT FORMAT(SUM(c.prezzoven * (c.qta+c.qta_agg)), $p4a->e3g_azienda_n_decimali_prezzi) AS importo " .
" FROM " . $p4a->e3g_prefix . "carrello c " .
" WHERE c.stato = 'A' AND c.codfornitore = '" . $this->fld_fornitore->getNewValue() . "' ");
$this->lbl_desc_ordine->setValue(
"In ordine: " . $pezzi . " pezzi, " . $cartoni . " cartoni, " . $utenti . " utenti. " .
"Importo totale: " . $importo . " euro" );
}
}
// -------------------------------------------------------------------------
function bu_estrai_ordineClick()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
$importototale = $db->queryOne("SELECT SUM(qta * prezzoven) as importo FROM ".$p4a->e3g_prefix."carrello WHERE stato='A' AND codfornitore='".$this->ds_forn->fields->codice->getNewValue()."'");
if ($p4a->e3g_azienda_ordine_minimo >0)
{
if ($importototale < $p4a->e3g_azienda_ordine_minimo)
{
// importo non sufficiente
$this->message->setValue("Impossibile generare l'ordine. Importo inferiore all'importo minimo previsto.");
return ;
}
}
// controllo se ci sono ancora ordini aperti per questo referente
$ordini_aperti = $db->queryOne("SELECT COUNT(*) as ordini_aperti " .
" FROM " . $p4a->e3g_prefix . "fornitoreperiodo fp " .
" LEFT JOIN " . $p4a->e3g_prefix . "anagrafiche a ON a.codice = fp.fornitore " .
" WHERE " . e3g_where_ordini_aperti("fp")." AND fp.fornitore = '".$this->fld_fornitore->getNewValue()."'");
// se ci sono ancora ordini aperti per uno o più fornitori di questo referente
// allora impedisco l'estrazione (l'estrazione deve essere possibile solo dopo la data di chiusura del periodo ordini)
if ($ordini_aperti > 0)
{
// uno o più ordini aperti
$this->message->setValue("Impossibile generare l'ordine. Il periodo ordini e' ancora aperto per il fornitore selezionato.");
return ;
}
// estraggo le righe con il fornitore indicato
// genero l'ordine a fornitore
// setto le righe Stato = A --> Stato = L
$fornitore = $this->fld_fornitore->getNewValue();
//$this->ds_doct->dropFilter("codfornitore");
$this->ds_doct->setWhere("codfornitore='".$fornitore."'");
$this->ds_doct->load();
$this->ds_doct->firstRow();
if ($this->ds_doct->getNumRows() == 0 )
{
// nessun articolo di questo fornitore in ordine
$this->message->setValue("Nessun articolo in ordine per questo fornitore.");
return ;
}
$codtipodoc =$p4a->e3g_azienda_gg_cod_doc_ordine;
$anno = $db->queryOne("SELECT annocontabile FROM ".$p4a->e3g_prefix."azienda");
if (!is_numeric($anno))
{
$anno = date("Y");
}
$registro = $db->queryOne("SELECT codregdoc FROM ".$p4a->e3g_prefix."doctipidoc WHERE codice='".$codtipodoc."'");
$numdocum = $db->queryOne("SELECT MAX(seriale) FROM ".$p4a->e3g_prefix."docregistri WHERE codice='".$registro."'");
if (is_numeric($numdocum))
{
$numdocum++;
}
else
{
$numdocum = 1;
}
$query = "UPDATE ".$p4a->e3g_prefix."docregistri SET seriale=".$numdocum." WHERE codice='".$registro."'";
$db->query($query);
$iddoc = $db->queryOne("SELECT MAX(iddoc) as iddoc FROM ".$p4a->e3g_prefix."doct");
if (is_numeric($iddoc))
{
$iddoc++;
}
else
{
$iddoc = 1;
}
// Inserisco la testa del documento
$db->query(
"INSERT INTO ".$p4a->e3g_prefix."doct (iddoc,codclifor,numdocum,codtipodoc,anno,data, data_ins, idanag) " .
" VALUES ( ".$iddoc.",'".$fornitore."',".$numdocum.",'".$codtipodoc."','".$anno."','" .
e3g_format_data_to_mysql( $this->fld_data_doc->getNewValue() ) . "','" .
date ("Y-m-d H:i:s")."',".$p4a->e3g_utente_idanag.")");
// Inserisco le righe
$this->build("p4a_db_source", "ds_docr");
$this->ds_docr->setTable($p4a->e3g_prefix."docr");
$this->ds_docr->setPk("idriga");
$this->ds_docr->load();
$riga = $db->queryOne("SELECT idriga FROM ".$p4a->e3g_prefix."docr ORDER BY idriga DESC");
if ( !is_numeric($riga) )
{
$riga = 0;
}
$riga++;
$rigarel = 1 ;
// data Source per la ricerca degli articoli
$this->ds_doct->firstRow();
$strselect = "AND idriga IN (";
$totimponibile = 0 ;
$totimposta = 0 ;
$totdoc = 0 ;
//$oldarticolo = $this->ds_doct->fields->codarticolo->getNewValue();
while($rigarel <= $this->ds_doct->getNumRows())
{
$qtamin = $db->queryOne("SELECT qtaminordine FROM ".$p4a->e3g_prefix."articoli WHERE codice='".$this->ds_doct->fields->codarticolo->getNewValue()."'");
$qtainordine = $db->queryOne("SELECT SUM(qta) FROM ".$p4a->e3g_prefix."carrello WHERE codarticolo='".$this->ds_doct->fields->codarticolo->getNewValue()."'");
$codiva = $db->queryOne("SELECT codiva FROM ".$p4a->e3g_prefix."articoli WHERE codice='".$this->ds_doct->fields->codarticolo->getNewValue()."'");
// estraggo comunqu tutto perchè poi la qta viene integrata
//if (($qtamin == 0) || ($qtamin > 0 && $qtainordine >= $qtamin))
//{
$strdescrizione = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."articoli WHERE barcode='".$this->fields->codarticolo->getNewValue()."' OR codice='".$this->fields->codarticolo->getNewValue()."'");
$this->ds_docr->newRow();
// Aggiungo la riga invisibile con il riferimento all'utente
// Creo le righe del documento ORDINE A FORNITORE $p4a->e3g_azienda_gg_cod_doc_ordine
$this->ds_docr->fields->idriga->setNewValue($riga);
$this->ds_docr->fields->codice->setNewValue($this->ds_doct->fields->codarticolo->getNewValue());
$this->ds_docr->fields->descrizione->setNewValue($strdescrizione);
$this->ds_docr->fields->iddocr->setNewValue($iddoc);
$this->ds_docr->fields->anno->setNewValue($anno);
$this->ds_docr->fields->codtipodoc->setNewValue($codtipodoc);
$this->ds_docr->fields->data->setNewValue( e3g_format_data_to_mysql( $this->fld_data_doc->getNewValue() ) );
$this->ds_docr->fields->numdocum->setNewValue($numdocum);
$this->ds_docr->fields->quantita->setValue($this->ds_doct->fields->qta->getNewValue() + $this->ds_doct->fields->qta_agg->getNewValue());
$this->ds_docr->fields->quantita2->setValue($this->ds_doct->fields->qta_agg->getNewValue());
$this->ds_docr->fields->codiva->setNewValue($codiva);
// nelle righe invisibili (con i dati per singolo utente) utilizzo il Prezzo di Vendita
$this->ds_docr->fields->prezzo->setNewValue($this->ds_doct->fields->prezzoven->getNewValue());
//$this->ds_docr->fields->nriga->setNewValue($rigarel);
$this->ds_docr->fields->nriga->setNewValue($riga);
$this->ds_docr->fields->rifidriga->setNewValue($this->ds_doct->fields->idriga->getNewValue());
$this->ds_docr->fields->codutente->setNewValue($this->ds_doct->fields->codutente->getNewValue());
$this->ds_docr->fields->dataordine->setNewValue($this->ds_doct->fields->data->getNewValue());
$this->ds_docr->fields->visibile->setNewValue("N");
$this->ds_docr->fields->delta_prezzo->setNewValue(0); // lo imposto a 0 perchè il campo non può essere NULL errore riscontrato il 15.04.09 AP
/*
// ricavo la mail per l'invio automatico
if ($_SESSION["mailordforn"] == "S")
{
$strmail = $db->queryOne("SELECT email FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$this->ds_doct->fields->codutente->getNewValue()."'");
$desfornitore = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$fornitore."'");
mail($strmail, "Ordine Fornitore Inviato", "L'ordine al fornitore: ".$desfornitore." è stato inviato in data ".$this->fld_data_doc->getNewValue());
}
*/
if ($strselect == "AND idriga IN (")
{
$strselect = $strselect.$this->ds_doct->fields->idriga->getNewValue();
}
else
{
$strselect = $strselect.", ".$this->ds_doct->fields->idriga->getNewValue();
}
$this->calcola_tot_riga();
$totimponibile = $totimponibile + $this->ds_docr->fields->imponibile->getNewValue();
$totimposta = $totimposta + $this->ds_docr->fields->imposta->getNewValue();
$totdoc = $totdoc + $this->ds_docr->fields->totale->getNewValue();
$this->ds_docr->saveRow();
//}
//else
//{
// // non ho la qta minima necessaria
// $strmessage = $strmessage."Articolo: [".$this->ds_doct->fields->codarticolo->getNewValue()."] Q.ta min. ordinabile = ".$qtamin."<br>";
//}
$this->ds_doct->nextRow();
$rigarel++;
$riga++;
}
// Aggiungo le righe Visibili con il SUM per ogni articolo
//
$this->build("p4a_db_source", "ds_totart");
$this->ds_totart->setTable($p4a->e3g_prefix."carrello");
$this->ds_totart->setPk("idarticolo");
//$query ="SELECT codarticolo, prezzoven, codiva, SUM(qta) as qta FROM ".$p4a->e3g_prefix."carrello WHERE codfornitore='".$this->fld_fornitore->getNewValue()."' GROUP BY codarticolo, prezzoven, codiva";
//$query = "SELECT DISTINCT codarticolo FROM ".$p4a->e3g_prefix."carrello WHERE codfornitore='".$this->fld_fornitore->getNewValue()."' ";
$query = "SELECT DISTINCT idarticolo FROM ".$p4a->e3g_prefix."articoli INNER JOIN ".$p4a->e3g_prefix."carrello ON ".$p4a->e3g_prefix."articoli.codice = ".$p4a->e3g_prefix."carrello.codarticolo WHERE codfornitore='".$this->fld_fornitore->getNewValue()."'";
$querynum ="SELECT COUNT(DISTINCT(codarticolo)) FROM ".$p4a->e3g_prefix."carrello WHERE codfornitore='".$this->fld_fornitore->getNewValue()."'";
$this->ds_totart->setQuery($query);
$this->ds_totart->load();
$this->ds_totart->firstRow();
$numrows = $db->queryOne($querynum);
$prog = 1 ;
while($prog <= $numrows)
{
// descrizione articolo
$codarticolo = $db->queryOne("SELECT codice FROM ".$p4a->e3g_prefix."articoli WHERE idarticolo='".$this->ds_totart->fields->idarticolo->getNewValue()."'");
$strdescrizione = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."articoli WHERE codice='".$codarticolo."'");
$iva = $db->queryOne("SELECT codiva FROM ".$p4a->e3g_prefix."articoli WHERE codice='".$codarticolo."'");
// nelle righe visibili (con i dati raggruppati per il fornitore) utilizzo il Prezzo di Acquisto
$prezzo = $db->queryOne("SELECT prezzoacq FROM ".$p4a->e3g_prefix."articoli WHERE codice='".$codarticolo."'");
$quantita = $db->queryOne("SELECT SUM(qta + qta_agg) FROM ".$p4a->e3g_prefix."carrello WHERE codarticolo='".$codarticolo."'");
// QUERY MODIFICATA 06 aprile 2007 AP
//$surplus = $db->queryOne("SELECT ( CEILING(SUM(c.qta+c.qta_agg) / art.qtaminordine) * art.qtaminordine ) - SUM(c.qta+c.qta_agg) AS surplus_pezzi FROM ".$p4a->e3g_prefix."carrello c,".$p4a->e3g_prefix."articoli art WHERE c.codarticolo=art.codice AND c.codarticolo='".$codarticolo."'");
$surplus = $db->queryOne("SELECT SUM(qta_agg) FROM ".$p4a->e3g_prefix."carrello WHERE codarticolo='".$codarticolo."'");
// aggiungo la riga del totale
$this->ds_docr->newRow();
// Creo le righe del documento ORDINE A FORNITORE $p4a->e3g_azienda_gg_cod_doc_ordine
$this->ds_docr->fields->idriga->setNewValue($riga);
$this->ds_docr->fields->codice->setNewValue($codarticolo);
$this->ds_docr->fields->descrizione->setNewValue($strdescrizione);
$this->ds_docr->fields->iddocr->setNewValue($iddoc);
$this->ds_docr->fields->anno->setNewValue($anno);
$this->ds_docr->fields->codtipodoc->setNewValue($codtipodoc);
$this->ds_docr->fields->data->setNewValue( e3g_format_data_to_mysql( $this->fld_data_doc->getNewValue() ) );
$this->ds_docr->fields->numdocum->setNewValue($numdocum);
$this->ds_docr->fields->quantita->setValue($quantita);
$this->ds_docr->fields->quantita2->setValue($surplus);
$this->ds_docr->fields->codiva->setNewValue($iva);
$this->ds_docr->fields->prezzo->setNewValue($prezzo);
$this->ds_docr->fields->nriga->setNewValue($riga);
$this->ds_docr->fields->visibile->setValue("S");
$this->ds_docr->fields->delta_prezzo->setValue(0); // lo imposto a 0 perchè il campo non può essere NULL errore riscontrato il 15.04.09 AP
$this->calcola_tot_riga();
$this->ds_docr->saveRow();
$riga++;
$rigarel++;
$this->ds_totart->nextRow();
$prog++;
}
//////////////////////////////////////////////
// Update dei totali nella testa del documento
$db->query("UPDATE ".$p4a->e3g_prefix."doct SET imponibile = ".str_replace(",", ".",$totimponibile).",imposta = ".str_replace(",", ".",$totimposta).",totdoc = ".str_replace(",", ".",$totdoc)." WHERE iddoc=".$iddoc);
// Eliminazione righe nel carrello
if ($strselect == "AND idriga IN (")
{
$strselect = "";
}
else
{
$strselect = $strselect.")";
}
// elimino le righe che non mi servono piu'
if ($strselect == "")
{
// nessuna riga eliminata
}
else
{
$db->query("DELETE FROM ".$p4a->e3g_prefix."carrello WHERE codfornitore='".$fornitore."' ".$strselect);
}
// 07.02.09 AP modifica inserita per consentire il corretto posizionamento sul nuovo Fornitore
// dopo l'estrazione del precedente (prima di questa modifica bisognava uscire e rientrare nel programma)
// aggiorno il data source dei fornitori
if ( $p4a->e3g_utente_tipo == "R" )
{
$this->ds_forn->setWhere( "a.tipocfa = 'F' AND " . str_replace("#CAMPOCODICE#", "a.codice", $p4a->e3g_where_referente) );
}
else
{
$this->ds_forn->setWhere( "a.tipocfa = 'F'" );
}
$this->ds_forn->firstRow();
$this->fld_fornitore->setNewValue($this->ds_forn->fields->codice->getNewValue());
// aggiorno la Tabella Dettaglio per il nuovo Fornitore selezionato dopo l'estrazione del precedente
$this->ds_doct->setWhere("stato='A' AND codfornitore='".$this->ds_forn->fields->codice->getNewValue()."'");
$this->ds_doct->firstRow();
// aggiorno la Label con i totali per il nuovo Fornitore selezionato dopo l'estrazione del precedente
$this->fld_fornitoreChange();
// salvo i valori per poi utilizzarli col tasto stampa
$this->fldcodtipo->setNewValue($codtipodoc);
$this->fldfornitore->setNewValue($fornitore);
$this->fldiddoc->setNewValue($iddoc);
$this->fldnumdocum->setNewValue($numdocum);
$this->flddatadoc->setNewValue($this->fld_data_doc->getNewValue());
$this->bu_esporta_ordine->setVisible();
$this->update_message();
}
// -------------------------------------------------------------------------
function calcola_tot_riga()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
$iva = str_replace(",", ".",$db->queryOne("SELECT iva FROM ".$p4a->e3g_prefix."aliquoteiva WHERE codice='".$this->ds_docr->fields->codiva->getNewValue()."'"));
$quantita = str_replace(",", ".",$this->ds_docr->fields->quantita->getNewValue());
if ( !is_numeric($quantita) )
$quantita = 0;
$prezzo = str_replace(",", ".",$this->ds_docr->fields->prezzo->getNewValue());
if ( !is_numeric($prezzo) )
$prezzo = 0;
$sconto = str_replace(",", ".",$this->ds_docr->fields->sconto->getNewValue());
if ( !is_numeric($sconto) )
$sconto = 0;
$imponibile = (($quantita * $prezzo) * (1 - $sconto / 100) / (100 + $iva)) * 100;
$imposta = (($quantita * $prezzo) * (1 - $sconto / 100)) - $imponibile;
$totriga = (($quantita * $prezzo) * (1 - $sconto / 100));
$this->ds_docr->fields->imponibile->setNewValue(round($imponibile, 2));
$this->ds_docr->fields->imposta->setNewValue(round($imposta,2));
$this->ds_docr->fields->totale->setNewValue(round($totriga,2));
return 0;
}
// -------------------------------------------------------------------------
function update_message()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
if ( $this->ds_forn->getNumRows() <> 0 ) {
$this->bu_estrai_ordine->enable();
$this->message->setValue( "" );
}
else {
$this->bu_estrai_ordine->disable();
$this->message->setValue( "Nessun articolo in ordine" );
}
}
}
?>