<?
/**
* 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_utils.php' );
class archivio_ordini extends P4A_Mask
{
// -------------------------------------------------------------------------
function archivio_ordini()
// -------------------------------------------------------------------------
{
$this->p4a_mask();
$this->addCss(E3G_TEMPLATE_DIR . 'css/style.css');
$p4a =& p4a::singleton();
$this->SetTitle( "Archivio Ordini" );
// ------------------------------------------------------------- Toolbar
$this->build("p4a_quit_toolbar", "toolbar");
// ------------------------------------------------------------- Message
$message =& $this->build("p4a_message", "message");
$message->setWidth("500");
// -------------------------------------------------------- Combo utenti
$this->build("p4a_db_source", "ds_utenti");
$query_txt =
"SELECT DISTINCT a.codice AS cod_utente, " .
" IF( a.stato = 1, " .
" a.descrizione, CONCAT( a.descrizione, ' (NON attivo)' ) " .
" ) AS desc_utente " .
" FROM " . $p4a->e3g_prefix . "doct AS t " .
" JOIN " . $p4a->e3g_prefix . "anagrafiche AS a ON a.codice = t.codclifor " .
" WHERE t.codtipodoc = '" . $p4a->e3g_azienda_gg_cod_doc_ordine_fam . "' AND t.totdoc <> 0 ";
if ( $p4a->e3g_utente_tipo == "U" ) // I normali utenti vedono solo i propri ordini
$query_txt .=
" AND a.idanag = " . $p4a->e3g_utente_idanag;
$query_txt .=
" ORDER BY a.stato, a.descrizione ";
$this->ds_utenti->setQuery( $query_txt );
$this->ds_utenti->setPk( "cod_utente" );
$this->ds_utenti->load();
$this->ds_utenti->firstRow();
$this->build( "p4a_field", "fld_cod_utente" );
$this->fld_cod_utente->setLabel( "Utente" );
$this->fld_cod_utente->label->setWidth( 50 );
$this->fld_cod_utente->setWidth( 250 );
$this->fld_cod_utente->setType( "select" );
$this->fld_cod_utente->setSource( $this->ds_utenti );
$this->fld_cod_utente->setSourceValueField( "cod_utente" );
$this->fld_cod_utente->setSourceDescriptionField( "desc_utente" );
$this->fld_cod_utente->addAction( "onChange" );
$this->intercept( $this->fld_cod_utente, "onChange", "fld_cod_utente_change" );
// Posizionamento sul primo record (non avviene in automatico)
$this->fld_cod_utente->setNewValue( $this->ds_utenti->fields->cod_utente->getNewValue() );
// --------------------------------------------- Griglia "Elenco ordini"
$this->build( "p4a_db_source", "ds_doct" );
$this->ds_doct->setSelect( "t.iddoc, t.numdocum, t.data, t.totdoc," .
"COUNT( DISTINCT a.centrale ) AS n_for_diversi, " .
"COUNT( DISTINCT r.codice ) AS n_art_diversi, " .
"SUM( r.quantita ) AS tot_qta" );
$this->ds_doct->setTable( $p4a->e3g_prefix . "doct AS t" );
$this->ds_doct->addJoin( $p4a->e3g_prefix . "docr AS r", "r.iddocr = t.iddoc" );
$this->ds_doct->addJoin( $p4a->e3g_prefix . "articoli AS a", "r.codice = a.codice" );
$this->ds_doct->setWhere( "1 = 0" ); // Impostato da fld_cod_utente_change()
$this->ds_doct->addOrder( "t.data", "DESC" );
$this->ds_doct->addGroup( "t.iddoc, t.numdocum, t.data, t.totdoc" );
$this->ds_doct->setPk( "t.iddoc" );
$this->ds_doct->setPageLimit( $p4a->e3g_utente_db_source_page_limit );
$this->ds_doct->load();
$this->setSource( $this->ds_doct ); // db_source principale
$tab_ord =& $this->build( "p4a_table", "tab_doct" );
$fs_utente_width = E3G_FIELDSET_SEARCH_WIDTH/2 - 140;
$this->tab_doct->setWidth( E3G_TABLE_WIDTH - $fs_utente_width - 40 );
$this->tab_doct->setTitle( "Elenco ordini" );
$this->tab_doct->setSource( $this->ds_doct );
$this->tab_doct->setVisibleCols( array( "data", "numdocum", "totdoc", "n_for_diversi", "n_art_diversi", "tot_qta") );
$this->intercept( $this->tab_doct->rows, "afterClick", "tab_doct_click" );
$this->tab_doct->cols->data->setLabel( "Data doc." );
$this->tab_doct->cols->numdocum->setLabel( "Numero doc." );
$this->tab_doct->cols->totdoc->setLabel( "Totale ordine" );
$this->tab_doct->cols->n_for_diversi->setLabel( "N. fornitori diversi" );
$this->tab_doct->cols->n_art_diversi->setLabel( "N. articoli diversi" );
$this->tab_doct->cols->tot_qta->setLabel( "Quantita' totale" );
// ------------------------------ Griglia "Dettaglio ordine selezionato"
$this->build( "p4a_db_source", "ds_docr" );
$this->ds_docr->setSelect( "r.iddocr, r.codice, " .
"r.quantita, r.descrizione, r.prezzo, r.totale, " .
"f.descrizione AS fornitore " );
$this->ds_docr->setTable( $p4a->e3g_prefix . "docr AS r" );
$this->ds_docr->addJoin( $p4a->e3g_prefix . "articoli", "r.codice = " . $p4a->e3g_prefix . "articoli.codice" );
$this->ds_docr->addJoin( $p4a->e3g_prefix . "anagrafiche AS f", $p4a->e3g_prefix . "articoli.centrale = f.codice" );
$this->ds_docr->setWhere( "1 = 0" ); // Impostato da tab_doct_click()
$this->ds_docr->addOrder( "f.descrizione" );
$this->ds_docr->addOrder( "r.descrizione" );
$this->ds_docr->setPk( "iddocr" );
$this->ds_docr->setPageLimit( $p4a->e3g_utente_db_source_page_limit );
$this->ds_docr->load();
$tab_row =& $this->build( "p4a_table", "tab_row" );
$this->tab_row->setWidth( E3G_TABLE_WIDTH );
$this->tab_row->setTitle( "Dettaglio ordine selezionato" );
$this->tab_row->setSource($this->ds_docr);
$this->tab_row->setVisibleCols( array( "fornitore", "quantita", "descrizione", "prezzo", "totale") );
$this->tab_row->cols->fornitore->setLabel( "Fornitore" );
$this->tab_row->cols->quantita->setLabel( "Quantita'" );
$this->tab_row->cols->descrizione->setLabel( "Articolo" );
$this->tab_row->cols->prezzo->setLabel( "Prezzo unitario" );
$this->tab_row->cols->totale->setLabel( "Importo totale" );
$this->tab_row->cols->fornitore->setWidth( 200 );
$this->tab_row->cols->quantita->setWidth( 90 );
//$this->tab_row->cols->descrizione->setWidth(); Per differenza
$this->tab_row->cols->prezzo->setWidth( 90 );
$this->tab_row->cols->totale->setWidth( 90 );
$this->tab_row->cols->fornitore->setOrderable( false );
// ----------------------------------------------- Fieldset combo utente
$this->build ("p4a_fieldset", "fs_utente" );
$this->fs_utente->setTitle( "Intestatario documento" );
$this->fs_utente->setWidth( $fs_utente_width );
$this->fs_utente->anchor( $this->fld_cod_utente );
// ---------------------------------------------------- Frame principale
$frm=& $this->build("p4a_frame", "frm");
$frm->setWidth(E3G_MAIN_FRAME_WIDTH);
$this->frm->anchor( $this->message );
if ( $p4a->e3g_utente_tipo <> "U" ) // I normali utenti vedono solo i propri ordini
$this->frm->anchor( $this->fs_utente );
$this->frm->anchorLeft( $this->tab_doct );
$this->frm->anchor( $this->tab_row );
e3g_scrivi_footer( $this, $frm );
// Display
$this->display("main", $frm);
$this->display("menu", $p4a->menu);
$this->display("top", $this->toolbar);
$this->fld_cod_utente_change();
}
// -------------------------------------------------------------------------
function main()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
parent::main();
}
// -------------------------------------------------------------------------
function fld_cod_utente_change()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
$this->ds_doct->setWhere(
"t.codtipodoc = '" . $p4a->e3g_azienda_gg_cod_doc_ordine_fam . "' AND " .
"t.codclifor = '" . $this->fld_cod_utente->getNewValue() . "'" );
$this->ds_doct->firstRow();
$this->tab_doct_click();
}
// -------------------------------------------------------------------------
function tab_doct_click()
// -------------------------------------------------------------------------
{
$p4a =& p4a::singleton();
// Controllo inserito perchè la prima volta che entra iddocr non restituisce niente e la query andrebbe in errore
if ( is_numeric( $this->tab_doct->data->fields->iddoc->getNewValue() ) )
$this->ds_docr->setWhere( "iddocr = " . $this->tab_doct->data->fields->iddoc->getNewValue() );
else
$this->ds_docr->setWhere( "1 = 0" );
}
}
?>