Location: PHPKode > projects > Progetto e3g > e3g_0.19.2/objects/cassa_gg_singolo.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_utils.php' );
require_once( dirname(__FILE__) . '/../config.php' );


class cassa_gg_singolo extends P4A_Mask
{

	function cassa_gg_singolo()
	{
		// ORDINE CORRENTE SINGOLA FAMIGLIA (solo per GestiGAS)
		
		$this->p4a_mask();
		$this->addCss(E3G_TEMPLATE_DIR . 'css/style.css');
		$p4a =& p4a::singleton();
		$db =& p4a_db::singleton();
		
        $this->setTitle( "" );

		// ------------------------------------- Sorgente dati LISTA DELLA SPESA
		$this->build( "p4a_db_source", "SPE_ds_lista_spesa" );
        $this->SPE_ds_lista_spesa->setPageLimit( $p4a->e3g_utente_db_source_page_limit );

        $this->SPE_ds_lista_spesa->setSelect(
            "c.idriga, c.data, " .
            "c.codfornitore, f.descrizione AS desc_fornitore, " .
            "( c.qta + c.qta_agg ) AS qta, " .
            "art.bio, " .
            "c.codarticolo, c.descrizione, " .
            "c.codcaumov, c.carscar, c.codiva, c.idsessione, c.stato, " .
            "c.qtaconsegnata, c.um, c.codutente, " .
            "CONCAT( ROUND( art.prezzoven/art.um_qta, $p4a->e3g_azienda_n_decimali_prezzi), '/', art.um ) AS prezzo_ven_um, " .  // CONCAT è vuoto se manca l'UM
            "ROUND( c.prezzoven, $p4a->e3g_azienda_n_decimali_prezzi ) AS prezzoven, " .
            "ROUND( c.prezzoven * c.qta, $p4a->e3g_azienda_n_decimali_prezzi ) AS importo " );
		
		$this->SPE_ds_lista_spesa->setTable( $p4a->e3g_prefix . "carrello AS c" );
        $this->SPE_ds_lista_spesa->addJoin( $p4a->e3g_prefix . "articoli AS art", "c.codarticolo = art.codice" );
        $this->SPE_ds_lista_spesa->addJoin( $p4a->e3g_prefix . "anagrafiche AS f", "c.codfornitore = f.codice" );  // Serve per l'esportazione dell'ordine
		$this->SPE_ds_lista_spesa->setWhere( "c.codutente = '$p4a->e3g_utente_codice' " );
		$this->SPE_ds_lista_spesa->addOrder( "c.codfornitore" );
		$this->SPE_ds_lista_spesa->addOrder( "c.descrizione" );
		$this->SPE_ds_lista_spesa->setPk( "c.idriga" );
		$this->SPE_ds_lista_spesa->load();
		$this->SPE_ds_lista_spesa->firstRow();
		$this->SPE_ds_lista_spesa->fields->idriga->setSequence( "carrello" );

		$this->setSource($this->SPE_ds_lista_spesa);


		// -------------------------------------- Sorgente dati LISTINO ARTICOLI		
		$this->build("p4a_db_source", "ART_ds_articoli");
        $this->ART_ds_articoli->setPageLimit( $p4a->e3g_utente_db_source_page_limit );

        $this->ART_ds_articoli->setSelect(
            "a.idarticolo, a.centrale, a.codice, a.bio, " .
            "CONCAT_WS(' ', a.descrizione, '[', a.um_qta, a.um, ']') AS descrizione, " .
            "ROUND( a.prezzoven, $p4a->e3g_azienda_n_decimali_prezzi ) AS prezzoven, " .
            "CONCAT( ROUND( a.prezzoven/a.um_qta, $p4a->e3g_azienda_n_decimali_prezzi), '/', a.um ) AS prezzo_ven_um, " .  // CONCAT è vuoto se manca l'UM 
            "a.prezzoacq, a.codiva, a.tipo, a.giacenza, a.progetto, a.ingredienti, " .
            "a.catmerce, a.tipoarticolo, a.paese, a.contovendita, a.contoacquisto, " .
            "a.posizione, a.periodo, a.um, a.scortaminima, a.pzperconf, a.qtaminordine, a.qtaminperfamiglia, " .
            "f.descrizione AS fornitore, f.www " );
        
        $this->ART_ds_articoli->setTable( $p4a->e3g_prefix . "articoli AS a" );
        $this->ART_ds_articoli->addJoin( $p4a->e3g_prefix . "fornitoreperiodo AS fp", "a.centrale = fp.fornitore" );
        $this->ART_ds_articoli->addJoin( $p4a->e3g_prefix . "anagrafiche AS f", "a.centrale = f.codice" );
        $this->ART_ds_articoli->setWhere( e3g_where_ordini_aperti("fp") . " AND ( a.stato = 1 ) " );
        $this->ART_ds_articoli->addOrder( "f.descrizione" );  // Mantenere l'ordinamento come nell'esportazione listino
        $this->ART_ds_articoli->addOrder( "a.catmerce" );
        $this->ART_ds_articoli->addOrder( "a.descrizione" );

		$this->ART_ds_articoli->setPk( "a.idarticolo" );
		$this->ART_ds_articoli->load();
		$this->ART_ds_articoli->firstRow();
		

/*
        $this->ART_ds_articoli->fields->descrizione->setLabel( "Descrizione" );
        $this->ART_ds_articoli->fields->prezzoven->setLabel( "Prezzo unitario" );
        $this->ART_ds_articoli->fields->prezzo_ven_um->setLabel( "Prezzo per U.M." );
        $this->ART_ds_articoli->fields->fornitore->setLabel( "Fornitore" );
        $this->ART_ds_articoli->fields->www->setLabel( "Sito web" );
*/

        
		// ----------------------------------------------------- Altri DB source
		// Fornitori (per decodifica codice nelle griglie)
        $this->build("p4a_db_source", "ds_fornitori");
		$this->ds_fornitori->setTable($p4a->e3g_prefix."anagrafiche");
		$this->ds_fornitori->setPk("codice");		
		$this->ds_fornitori->setWhere("tipocfa='F'");		
		$this->ds_fornitori->addOrder("codice");		
		$this->ds_fornitori->load();
		$this->ds_fornitori->firstRow();

		// Fornitore (per filtri)
		$this->build( "p4a_db_source", "ds_filtro_fornitori" );
        $this->ds_filtro_fornitori->setSelect( "codice, CONCAT_WS( ' / ', descrizione, desc_agg ) AS descrizione" );
		$this->ds_filtro_fornitori->setTable( $p4a->e3g_prefix . "anagrafiche" );
		$this->ds_filtro_fornitori->setWhere( "( tipocfa = 'F' AND " . e3g_where_ordini_aperti() . " ) OR idanag = 0" );
		$this->ds_filtro_fornitori->setPk( "codice" );		
		$this->ds_filtro_fornitori->addJoin( $p4a->e3g_prefix . "fornitoreperiodo", $p4a->e3g_prefix . "anagrafiche.codice = " . $p4a->e3g_prefix . "fornitoreperiodo.fornitore", "LEFT" );		
		$this->ds_filtro_fornitori->addOrder( "descrizione" );		
		$this->ds_filtro_fornitori->load();		
		
		// Categorie articoli (per filtri)
		$this->build("p4a_db_source", "ds_filtro_cat_articoli");
		$this->ds_filtro_cat_articoli->setTable($p4a->e3g_prefix."tipiarticoli");
		$this->ds_filtro_cat_articoli->setPk("codice");		
		$this->ds_filtro_cat_articoli->addOrder("codice");		
		$this->ds_filtro_cat_articoli->load();
		$this->ds_filtro_cat_articoli->firstRow();
		
        // Sotto-categorie articoli (per filtri)
		$this->build("p4a_db_source", "ds_filtro_sottocat_articoli");
		$this->ds_filtro_sottocat_articoli->setTable($p4a->e3g_prefix."catmerceologica");
		$this->ds_filtro_sottocat_articoli->setWhere("tipo='".$this->ds_filtro_cat_articoli->fields->codice->getNewValue()."'");		
		$this->ds_filtro_sottocat_articoli->setPk("codice");		
		$this->ds_filtro_sottocat_articoli->addOrder("codice");		
		$this->ds_filtro_sottocat_articoli->load();


        // --------------------------------------------------- Chiusura finestra        
        $this->build( "p4a_button", "bu_chiudi" );
        $this->bu_chiudi->setLabel( "Chiudi finestra" );
        $this->bu_chiudi->addAction( "onClick");
        $this->intercept( $this->bu_chiudi, "onClick", "bu_chiudiClick" );
        $this->bu_chiudi->setWidth( 150 );
        $this->bu_chiudi->setIcon ( "exit" );
        
        // Label per segnalare situazione ordine (qtà prodotti e importo totale)        
        $this->build( "p4a_label", "lbl_situazione" );
        $this->lbl_situazione->setWidth( E3G_MAIN_FRAME_WIDTH-$this->bu_chiudi->getWidth()-25 );


		// --------------------------- Message per eventuali warning relativi...
		
		// ...al singolo prodotto che si sta aggiungendo/modificando (vengono visualizzati una sola volta)
		$this->build( "p4a_message", "msg_warning" );
		$this->msg_warning->setWidth( 500 );

		// ...ordine chiuso, importo minimo non raggiunto (rimangono visualizzati sempre)
		$this->build( "p4a_message", "msg_info" );
		$this->msg_info->setWidth( 500 );
		$this->msg_info->setIcon( "info" );
		$this->msg_info->autoClear( false );


		// -------------------------------- Pannello filtro in LISTA DELLA SPESA

		$SPE_fld_filtro_fornitore = & $this->build( "p4a_field", "SPE_fld_filtro_fornitore" );
		$SPE_fld_filtro_fornitore->setLabel( "Fornitore" );
		$SPE_fld_filtro_fornitore->label->setWidth( 100 );
		$SPE_fld_filtro_fornitore->setType( "select" );
		$SPE_fld_filtro_fornitore->setSource( $this->ds_filtro_fornitori );
		$SPE_fld_filtro_fornitore->setSourceValueField( "codice" );
		$SPE_fld_filtro_fornitore->setSourceDescriptionField( "descrizione" );
		$SPE_fld_filtro_fornitore->setWidth( 250 );
		$SPE_fld_filtro_fornitore->setNewValue( "00" );

		$SPE_fld_filtro_categoria = & $this->build( "p4a_field", "SPE_fld_filtro_categoria" );
		$SPE_fld_filtro_categoria->setLabel( "Categoria" );
		$SPE_fld_filtro_categoria->label->setWidth( 100 );
		$SPE_fld_filtro_categoria->setType( "select" );
		$SPE_fld_filtro_categoria->setSource( $this->ds_filtro_cat_articoli );
		$SPE_fld_filtro_categoria->setSourceValueField( "codice" );
		$SPE_fld_filtro_categoria->setSourceDescriptionField( "descrizione" );
		$SPE_fld_filtro_categoria->setWidth( 250 );
		
		// Bottone FILTRO
		$this->build("p4a_button", "SPE_bu_filtro");
		$this->SPE_bu_filtro->setLabel("Filtra lista della spesa");
		$this->SPE_bu_filtro->addAction("onClick");
		$this->SPE_bu_filtro->setIcon("find");
		$this->SPE_bu_filtro->setSize( 16 );
		$this->intercept($this->SPE_bu_filtro, "onClick", "SPE_bu_filtroClick");

		// Bottone ANNULLA FILTRO (vedi tutto)
		$this->build("p4a_button", "SPE_bu_annulla_filtro");
		$this->SPE_bu_annulla_filtro->setLabel("Mostra tutto");
		$this->SPE_bu_annulla_filtro->addAction("onClick");
		$this->SPE_bu_annulla_filtro->setIcon("cancel");
		$this->SPE_bu_annulla_filtro->setSize( 16 );
		$this->intercept($this->SPE_bu_annulla_filtro, "onClick", "SPE_bu_annulla_filtroClick");


		// ----------------------------------------- Tabella "LISTA DELLA SPESA"
		$SPE_tab_lista_spesa =& $this->build( "p4a_table", "SPE_tab_lista_spesa" );
		$SPE_tab_lista_spesa->setWidth( E3G_NARROW_TABLE_IN_TAB_PANE_WIDTH );
		$SPE_tab_lista_spesa->setSource( $this->SPE_ds_lista_spesa );	
		$SPE_tab_lista_spesa->setVisibleCols( array("codfornitore", "qta", "bio", "descrizione", "importo") );
        $SPE_tab_lista_spesa->showNavigationBar();
		$this->intercept( $SPE_tab_lista_spesa->rows, "afterClick", "SPE_tab_lista_spesa_afterClick");
        $this->intercept( $SPE_tab_lista_spesa->rows, "beforeDisplay", "SPE_tab_lista_spesa_beforeDisplay" );  

		$this->SPE_tab_lista_spesa->data->fields->importo->setType("float");

		$this->SPE_tab_lista_spesa->cols->codfornitore->setLabel( "Fornitore" );
        $this->SPE_tab_lista_spesa->cols->qta->setLabel( "Q.ta'" );
		$this->SPE_tab_lista_spesa->cols->descrizione->setLabel( "Articolo" );
		$this->SPE_tab_lista_spesa->cols->importo->setLabel( "Importo" );
		
		$this->SPE_tab_lista_spesa->cols->codfornitore->setSource($this->ds_fornitori);
		$this->SPE_tab_lista_spesa->cols->codfornitore->setSourceValueField("codice");
		$this->SPE_tab_lista_spesa->cols->codfornitore->setSourceDescriptionField("descrizione");

		// Larghezze colonne
		$this->SPE_tab_lista_spesa->cols->codfornitore->setWidth(160);
        $this->SPE_tab_lista_spesa->cols->qta->setWidth(50);
        $this->SPE_tab_lista_spesa->cols->bio->setWidth(20);
//		$this->SPE_tab_lista_spesa->cols->descrizione->setWidth(160);  per differenza
		$this->SPE_tab_lista_spesa->cols->importo->setWidth(50);
		
				
		// ---------------- Pannello "Lista della Spesa": oggetti colonna destra
		// Campo descrizione articolo		
		$this->build("p4a_label", "SPE_lbl_desc_articolo");
		$this->SPE_lbl_desc_articolo->setWidth( E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_lbl_desc_articolo->setFontColor( "black" );
		
		// Campo QUANTITA'
		$this->build("p4a_field", "SPE_fld_spesa_qta");
		$this->SPE_fld_spesa_qta->setLabel("Quantita'");
		$this->SPE_fld_spesa_qta->label->setWidth( E3G_LABEL_IN_TAB_PANE_WIDTH );
		$this->SPE_fld_spesa_qta->setWidth( E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_fld_spesa_qta->setFontColor( "black" );
        $this->SPE_fld_spesa_qta->label->setFontColor( "black" );
		
		// Bottone AGGIORNA Q.TA'
		$this->build( "p4a_button", "SPE_bu_aggiorna_qta" );
		$this->SPE_bu_aggiorna_qta->setLabel( "Aggiorna quantita'" );
		$this->SPE_bu_aggiorna_qta->setIcon( "reload" );
        $this->SPE_bu_aggiorna_qta->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_bu_aggiorna_qta->setSize( 16 );
		$this->SPE_bu_aggiorna_qta->addAction( "onClick" );
		$this->intercept( $this->SPE_bu_aggiorna_qta, "onClick", "SPE_bu_aggiorna_qtaClick" );

        // Bottone ELIMINA RIGA
        $this->build( "p4a_button", "SPE_bu_elimina_riga" );
        $this->SPE_bu_elimina_riga->setLabel( "Elimina riga" );
        $this->SPE_bu_elimina_riga->setIcon( "edit_remove" );
        $this->SPE_bu_elimina_riga->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_bu_elimina_riga->setSize( 16 );
        $this->SPE_bu_elimina_riga->addAction( "onClick" );
        $this->intercept( $this->SPE_bu_elimina_riga, "onClick", "SPE_bu_elimina_rigaClick" );

        // Bottone ELIMINA TUTTO
        $this->build( "p4a_button", "SPE_bu_svuota_ordine" );
        $this->SPE_bu_svuota_ordine->setLabel( "Elimina TUTTO..." );
        $this->SPE_bu_svuota_ordine->setIcon( "delete" );
        $this->SPE_bu_svuota_ordine->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_bu_svuota_ordine->setSize( 16 );
        $this->SPE_bu_svuota_ordine->addAction( "onClick" );
        $this->intercept( $this->SPE_bu_svuota_ordine, "onClick", "SPE_bu_svuota_ordineClick" );
        $this->SPE_bu_svuota_ordine->requireConfirmation( "onClick", "Confermi l'eliminazione di tutti gli articoli dalla lista?" );

		// Bottone ESPORTA ORDINE PDF
		$this->build( "p4a_button", "SPE_bu_esporta_ordinePdf" );
		$this->SPE_bu_esporta_ordinePdf->setLabel( "Esporta come PDF" );
		$this->SPE_bu_esporta_ordinePdf->setIcon( "pdf" );
        $this->SPE_bu_esporta_ordinePdf->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_bu_esporta_ordinePdf->setSize( 16 );
        $this->SPE_bu_esporta_ordinePdf->addAction( "onClick" );
		$this->intercept( $this->SPE_bu_esporta_ordinePdf, "onClick", "SPE_bu_esporta_ordinePdfClick" );

        // Bottone ESPORTA ORDINE CSV
        $this->build( "p4a_button", "SPE_bu_esporta_ordineCsv" );
        $this->SPE_bu_esporta_ordineCsv->setLabel( "Esporta come CSV" );
        $this->SPE_bu_esporta_ordineCsv->setIcon( "spreadsheet" );
        $this->SPE_bu_esporta_ordineCsv->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_bu_esporta_ordineCsv->setSize( 16 );
        $this->SPE_bu_esporta_ordineCsv->addAction( "onClick" );
        $this->intercept( $this->SPE_bu_esporta_ordineCsv, "onClick", "SPE_bu_esporta_ordineCsvClick" );

        // Bottone INVIA
        $this->build( "p4a_button", "SPE_bu_invia_email" );
        $this->SPE_bu_invia_email->setLabel( "Invia per e-mail" );
        $this->SPE_bu_invia_email->setIcon( "mail_send" );
        $this->SPE_bu_invia_email->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->SPE_bu_invia_email->setSize( 16 );
        $this->SPE_bu_invia_email->addAction( "onClick" );
        $this->SPE_bu_invia_email->requireConfirmation( "onClick", "Confermi l'invio per e-mail a te stesso della lista della spesa ?" );
        $this->intercept( $this->SPE_bu_invia_email, "onClick", "SPE_bu_invia_email_click" );

		
		// -------------------------------- Pannello ricerca in LISTINO ARTICOLI

		$ART_fld_forn_cerca = & $this->build("p4a_field", "ART_fld_forn_cerca");
		$ART_fld_forn_cerca->setLabel( "Fornitore" );
		$ART_fld_forn_cerca->label->setWidth(100);
		$ART_fld_forn_cerca->setType("select");
		$ART_fld_forn_cerca->setSource($this->ds_filtro_fornitori);
		$ART_fld_forn_cerca->setSourceValueField("codice");
		$ART_fld_forn_cerca->setSourceDescriptionField("descrizione");
		$ART_fld_forn_cerca->setWidth( 250 );
		$ART_fld_forn_cerca->setNewValue("00");

        $this->build( "p4a_field", "ART_ck_solo_bio" );
        $this->ART_ck_solo_bio->setType( "checkbox" );
        $this->ART_ck_solo_bio->setLabel( "Solo articoli bio" );
        $this->ART_ck_solo_bio->setTooltip( "Solo articoli da agricoltura biologica" );
        $this->ART_ck_solo_bio->label->setWidth( 150 );
        
		$ART_fld_categ_cerca = & $this->build("p4a_field", "ART_fld_categ_cerca");
		$ART_fld_categ_cerca->setLabel( "Categoria" );
		$ART_fld_categ_cerca->label->setWidth( 100 );
		$ART_fld_categ_cerca->setType("select");
		$ART_fld_categ_cerca->setSource($this->ds_filtro_cat_articoli);
		$ART_fld_categ_cerca->setSourceValueField("codice");
		$ART_fld_categ_cerca->setSourceDescriptionField("descrizione");
		$ART_fld_categ_cerca->addAction("OnChange");
		$ART_fld_categ_cerca->setWidth( 250 );
		$this->intercept($this->ART_fld_categ_cerca, "onChange","fld_categ_cerca_change");		
		
		$ART_fld_sottocateg_cerca=& $this->build("p4a_field", "ART_fld_sottocateg_cerca");
		$ART_fld_sottocateg_cerca->setLabel( "Sottocategoria" );
		$ART_fld_sottocateg_cerca->label->setWidth( 150 );
		$ART_fld_sottocateg_cerca->setType("select");
		$ART_fld_sottocateg_cerca->setSource($this->ds_filtro_sottocat_articoli);
		$ART_fld_sottocateg_cerca->setSourceValueField("codice");
		$ART_fld_sottocateg_cerca->setSourceDescriptionField("descrizione");
		$ART_fld_sottocateg_cerca->setWidth( 200 );
		
		$ART_fld_desc_cerca=& $this->build("p4a_field", "ART_fld_desc_cerca");
		$ART_fld_desc_cerca->setLabel( "Descrizione" );
		$ART_fld_desc_cerca->label->setWidth(100);
		$ART_fld_desc_cerca->setWidth( 250 );

        // Eventuali campi filtro sugli ingredienti        
        $this->build( "p4a_field", "ART_fld_ingredienti" );
        $this->ART_fld_ingredienti->setType( "textarea" );
        $this->ART_fld_ingredienti->setLabel( "Ingredienti da escludere" );
        $this->ART_fld_ingredienti->setTooltip( "Visualizza solo articoli che non includono gli ingredienti specificati (separarli con una virgola e non inserire spazi)" );
        $this->ART_fld_ingredienti->label->setWidth( 250 );
        $this->ART_fld_ingredienti->setWidth( 625 );
        $this->ART_fld_ingredienti->setHeight( 50 );
        
        $result = $db->queryRow(
            "SELECT ingredienti_escludi FROM " . $p4a->e3g_prefix . "anagrafiche " .
            " WHERE idanag = " . $p4a->e3g_utente_idanag );
        $this->ART_fld_ingredienti->setNewValue( $result["ingredienti_escludi"] );

		// Bottone FILTRA ARTICOLI
		$this->build("p4a_button", "ART_bu_filtra");
		$this->ART_bu_filtra->setLabel("Filtra listino articoli");
		$this->ART_bu_filtra->addAction("onClick");
		$this->ART_bu_filtra->setIcon("find");
		$this->ART_bu_filtra->setSize( 16 );
		$this->intercept($this->ART_bu_filtra, "onClick", "ART_bu_filtraClick");

		// Bottone ANNULLA FILTRO (vedi tutto)
		$this->build("p4a_button", "ART_bu_annulla_filtro");
		$this->ART_bu_annulla_filtro->setLabel("Mostra tutto");
		$this->ART_bu_annulla_filtro->addAction("onClick");
		$this->ART_bu_annulla_filtro->setIcon("cancel");
		$this->ART_bu_annulla_filtro->setSize( 16 );
		$this->intercept($this->ART_bu_annulla_filtro, "onClick", "ART_bu_annulla_filtroClick");


		// -------------------------------------------- Tabella LISTINO ARTICOLI
		$ART_tab_listino =& $this->build( "p4a_table", "ART_tab_listino" );
 		$ART_tab_listino->setWidth( E3G_NARROW_TABLE_IN_TAB_PANE_WIDTH );
		$ART_tab_listino->setSource( $this->ART_ds_articoli );
		$ART_tab_listino->setVisibleCols( array("centrale", "qtaminperfamiglia", "bio", "descrizione", "prezzoven", "prezzo_ven_um"));
		$ART_tab_listino->showNavigationBar();
		$this->intercept( $ART_tab_listino->rows, "afterClick", "ART_tab_listino_afterClick" );
        $this->intercept( $ART_tab_listino->rows, "beforeDisplay", "ART_tab_listino_beforeDisplay" );  
		
		$this->ART_tab_listino->data->fields->prezzoven->setType("float");

//		$this->ART_tab_listino->data->fields->prezzo_ven_um->setAlign('right');
//		$this->ART_tab_listino->data->fields->prezzo_ven_um->setType("float");
//		$this->ART_tab_listino->data->fields->prezzo_ven_um->setStyleProperty('text-align', 'right');

		$ART_tab_listino->cols->descrizione->setOrderable(false);
		$ART_tab_listino->cols->prezzo_ven_um->setOrderable(false);

		$ART_tab_listino->cols->centrale->setLabel( "Fornitore" );
        $ART_tab_listino->cols->qtaminperfamiglia->setLabel( "Min." );
		$ART_tab_listino->cols->descrizione->setLabel( "Articolo" );
		$ART_tab_listino->cols->prezzo_ven_um->setLabel( "Prezzo/UM" );
		$ART_tab_listino->cols->prezzoven->setLabel( "Prezzo" );

		$ART_tab_listino->cols->centrale->setWidth( 160 );
        $ART_tab_listino->cols->qtaminperfamiglia->setWidth(40);            
        $ART_tab_listino->cols->bio->setWidth(20);
//		$ART_tab_listino->cols->descrizione->  per differenza
		$ART_tab_listino->cols->prezzo_ven_um->setWidth( 75 );
		$ART_tab_listino->cols->prezzoven->setWidth( 60 );

		$ART_tab_listino->cols->centrale->setSource($this->ds_fornitori);
		$ART_tab_listino->cols->centrale->setSourceValueField("codice");
		$ART_tab_listino->cols->centrale->setSourceDescriptionField("descrizione");
		

		// ------------------------- Oggetti sul lato destro di LISTINO ARTICOLI		
		
		$this->build("p4a_label", "ART_lbl_desc_articolo");
		$this->ART_lbl_desc_articolo->setWidth(E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH);
        $this->ART_lbl_desc_articolo->setFontColor( "black" );
		
		$ART_fld_aggiungi_qta =& $this->build("p4a_field", "ART_fld_aggiungi_qta");
		$ART_fld_aggiungi_qta->setLabel("Quantita'");
		$ART_fld_aggiungi_qta->label->setWidth(E3G_LABEL_IN_TAB_PANE_WIDTH);
		$ART_fld_aggiungi_qta->setWidth(E3G_FIELD_IN_TAB_PANE_WIDTH);
        $ART_fld_aggiungi_qta->setFontColor( "black" );
        $ART_fld_aggiungi_qta->label->setFontColor( "black" );

		$this->build("p4a_button", "ART_bu_aggiungi_qta");
		$this->ART_bu_aggiungi_qta->setLabel("Aggiungi quantita'");
		$this->ART_bu_aggiungi_qta->setIcon( "edit_add" );
        $this->ART_bu_aggiungi_qta->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->ART_bu_aggiungi_qta->setSize( 16 );
		$this->ART_bu_aggiungi_qta->addAction("onClick");
		$this->intercept($this->ART_bu_aggiungi_qta, "onClick", "ART_bu_aggiungi_qtaClick");
		if ( $p4a->e3g_utente_tipo == 'A' )
			$this->ART_bu_aggiungi_qta->Disable();  // L'admin globale NON può fare l'ordine
		
		$this->build("p4a_button", "ART_bu_scheda_articolo");
		$this->ART_bu_scheda_articolo->setLabel("Scheda prodotto");
		$this->ART_bu_scheda_articolo->setIcon ( "info" );
        $this->ART_bu_scheda_articolo->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->ART_bu_scheda_articolo->setSize( 16 );
		$this->ART_bu_scheda_articolo->dropAction("onClick"); 
		$nome_file_scheda = "cache/scheda_articolo_" . $p4a->e3g_prefix . md5($p4a->e3g_utente_codice) . ".html";
		$this->ART_bu_scheda_articolo->setProperty("onclick", 
			"myRef = window.open('$nome_file_scheda', 'method_desc', 'status=yes,width=450,height=500,resizable=0');myRef.focus()"); 
			//window.open(''+self.location,'mywin','left=20,top=20,width=500,height=500,toolbar=1,resizable=0')

        // Bottone ESPORTA COME PDF
		$this->build( "p4a_button", "ART_bu_esporta_listinoPdf" );
		$this->ART_bu_esporta_listinoPdf->setLabel( "Esporta come PDF" );
        $this->ART_bu_esporta_listinoPdf->setIcon( "pdf" );
        $this->ART_bu_esporta_listinoPdf->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->ART_bu_esporta_listinoPdf->setSize( 16 );
		$this->ART_bu_esporta_listinoPdf->addAction( "onClick" );
		$this->intercept( $this->ART_bu_esporta_listinoPdf, "onClick", "ART_bu_esporta_listinoPdfClick" );

        // Bottone ESPORTA ORDINE CSV
        $this->build( "p4a_button", "ART_bu_esporta_listinoCsv" );
        $this->ART_bu_esporta_listinoCsv->setLabel( "Esporta come CSV" );
        $this->ART_bu_esporta_listinoCsv->setIcon( "spreadsheet" );
        $this->ART_bu_esporta_listinoCsv->setWidth( 20 + E3G_LABEL_IN_TAB_PANE_WIDTH + E3G_FIELD_IN_TAB_PANE_WIDTH );
        $this->ART_bu_esporta_listinoCsv->setSize( 16 );
        $this->ART_bu_esporta_listinoCsv->addAction( "onClick" );
        $this->intercept( $this->ART_bu_esporta_listinoCsv, "onClick", "ART_bu_esporta_listinoCsvClick" );
		
		
		// -------------------------------------------------- ANCORAGGIO OGGETTI
		
		// LISTA DELLA SPESA: filtro
		$SPE_fs_filtro_spesa =& $this->build("p4a_fieldset", "SPE_fs_filtro_spesa");
		$SPE_fs_filtro_spesa->setTitle("Filtro");
		$SPE_fs_filtro_spesa->setWidth( E3G_TABLE_IN_TAB_PANE_WIDTH -15 );  
		$SPE_fs_filtro_spesa->anchor( $this->SPE_fld_filtro_fornitore );
		$SPE_fs_filtro_spesa->anchor( $this->SPE_fld_filtro_categoria );
        $SPE_fs_filtro_spesa->anchorRight( $this->SPE_bu_annulla_filtro );
		$SPE_fs_filtro_spesa->anchorRight( $this->SPE_bu_filtro );

		// LISTA DELLA SPESA: spalla 
        $SPE_sh_spalla_lista_spesa =& $this->build("p4a_sheet", "SPE_sh_spalla_lista_spesa");
		$SPE_sh_spalla_lista_spesa->defineGrid(9, 1);
		$SPE_sh_spalla_lista_spesa->anchor( $this->SPE_lbl_desc_articolo, 1,1); 
		$SPE_sh_spalla_lista_spesa->anchor( $this->SPE_fld_spesa_qta, 2,1);
		$SPE_sh_spalla_lista_spesa->anchor( $this->SPE_bu_aggiorna_qta, 3,1);
		$SPE_sh_spalla_lista_spesa->anchor( $this->SPE_bu_elimina_riga, 4,1);
        $SPE_sh_spalla_lista_spesa->anchor( $this->SPE_bu_svuota_ordine, 5,1);
		$SPE_sh_spalla_lista_spesa->anchorText("<br>", 6,1);
        $SPE_sh_spalla_lista_spesa->anchor( $this->SPE_bu_esporta_ordinePdf, 7,1);
        $SPE_sh_spalla_lista_spesa->anchor( $this->SPE_bu_esporta_ordineCsv, 8,1);
        $SPE_sh_spalla_lista_spesa->anchor( $this->SPE_bu_invia_email, 9,1);

		// Sheet LISTA DELLA SPESA
		$SPE_sh_lista_spesa =& $this->build("p4a_sheet", "SPE_sh_lista_spesa");
        $SPE_sh_lista_spesa->defineGrid(1, 2);
		$SPE_sh_lista_spesa->anchor( $this->SPE_tab_lista_spesa, 1,1);
		$SPE_sh_lista_spesa->anchor( $SPE_sh_spalla_lista_spesa, 1,2);


		// LISTINO ARTICOLI: filtro
		$ART_fs_filtro_articoli =& $this->build("p4a_fieldset", "ART_fs_filtro_articoli");
		$ART_fs_filtro_articoli->setTitle("Filtro");
		$ART_fs_filtro_articoli->setWidth( E3G_TABLE_IN_TAB_PANE_WIDTH -15 );
		$ART_fs_filtro_articoli->anchor( $this->ART_fld_forn_cerca );
        $ART_fs_filtro_articoli->anchorLeft( $this->ART_ck_solo_bio );
		$ART_fs_filtro_articoli->anchor( $this->ART_fld_categ_cerca );
		$ART_fs_filtro_articoli->anchorLeft( $this->ART_fld_sottocateg_cerca );
		$ART_fs_filtro_articoli->anchor( $this->ART_fld_desc_cerca );
        $ART_fs_filtro_articoli->anchorRight( $this->ART_bu_annulla_filtro );
		$ART_fs_filtro_articoli->anchorRight( $this->ART_bu_filtra );
        if ( $p4a->e3g_utente_filtro_ingredienti ) 
            $ART_fs_filtro_articoli->anchor( $this->ART_fld_ingredienti, "130px" );

		// LISTINO ARTICOLI: spalla
        $ART_sh_spalla_listino =& $this->build("p4a_sheet", "ART_sh_spalla_listino");
		$ART_sh_spalla_listino->defineGrid(8, 1);
		$ART_sh_spalla_listino->anchor( $this->ART_lbl_desc_articolo, 1,1);
		$ART_sh_spalla_listino->anchor( $this->ART_fld_aggiungi_qta, 2,1);
		$ART_sh_spalla_listino->anchor( $this->ART_bu_aggiungi_qta, 3,1);
		$ART_sh_spalla_listino->anchorText("<br>", 4,1);
		$ART_sh_spalla_listino->anchor( $this->ART_bu_scheda_articolo, 5,1);
        $ART_sh_spalla_listino->anchorText("<br>", 6,1);
        $ART_sh_spalla_listino->anchor( $this->ART_bu_esporta_listinoPdf, 7,1);
        $ART_sh_spalla_listino->anchor( $this->ART_bu_esporta_listinoCsv, 8,1);

		// Sheet LISTINO ARTICOLI
		$ART_sh_listino =& $this->build("p4a_sheet", "ART_sh_listino");
		$ART_sh_listino->defineGrid(1, 2);
		$ART_sh_listino->anchor( $this->ART_tab_listino, 1,1);
		$ART_sh_listino->anchor( $ART_sh_spalla_listino, 1,2);


		// ------------------------------------------------- Pannello principale
		$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->setWidth(E3G_TAB_PANE_WIDTH);  Viene determinato automaticamente

		$this->tab_pane->pages->tabframe1->setLabel("Lista della Spesa");
		$this->tab_pane->pages->tabframe2->setLabel("Listino Articoli");

		$this->tab_pane->pages->tabframe1->anchor( $SPE_fs_filtro_spesa );		 
        $this->tab_pane->pages->tabframe1->anchor( $SPE_sh_lista_spesa );
        
		$this->tab_pane->pages->tabframe2->anchor( $ART_fs_filtro_articoli );		 
		$this->tab_pane->pages->tabframe2->anchor( $ART_sh_listino );		 

		
        // ------------------------------------- Sheet per situazione e chiusura
        $this->build( "p4a_sheet", "sh_info" );
        $this->sh_info->defineGrid( 1, 2 );
        $this->sh_info->anchor( $this->lbl_situazione, 1, 1 );
        $this->sh_info->anchor( $this->bu_chiudi, 1, 2 );


        // ------------------------------------------------- Pannello dettaglio
        $this->build( "p4a_tab_pane", "tp_articolo" );        
        $this->tp_articolo->pages->build( "p4a_frame", "fr_art_det" );
        $this->tp_articolo->pages->build( "p4a_frame", "fr_art_for" );
        $this->tp_articolo->pages->build( "p4a_frame", "fr_art_com" );

        $this->tp_articolo->setWidth( E3G_TAB_PANE_WIDTH );  // Sarà poi da togliere perchè viene determinato automaticamente

        $this->tp_articolo->pages->fr_art_det->setLabel( "Dettaglio articolo" );
        $this->tp_articolo->pages->fr_art_for->setLabel( "Fornitore" );
        $this->tp_articolo->pages->fr_art_com->setLabel( "Commenti (nessuno)" );

        $this->build( "p4a_field", "fld_temp" );
        $this->fld_temp->setLabel( "In costruzione..." );

        $this->tp_articolo->pages->fr_art_det->anchor( $this->fld_temp );
        $this->tp_articolo->pages->fr_art_for->anchor( $this->fld_temp );
        $this->tp_articolo->pages->fr_art_com->anchor( $this->fld_temp );


		// ---------------------------------------------------- Frame principale
		$frm=& $this->build( "p4a_frame", "frm" );
		$frm->setWidth( E3G_MAIN_FRAME_WIDTH );
        $frm->anchor( $this->sh_info );
        $frm->anchor( $this->msg_info );
        $frm->anchor( $this->msg_warning );
		$frm->anchor( $this->tab_pane );
        $frm->anchor( $this->tp_articolo );
	
		e3g_scrivi_footer( $this, $frm );

  		// Display
		$this->display( "main", $frm );
		$this->display( "menu", $p4a->menu );


		$this->SPE_tab_lista_spesa_afterClick();
		$this->ART_tab_listino_afterClick();
        $this->update_message();
	}


	// -------------------------------------------------------------------------
	function main()
	// -------------------------------------------------------------------------
	{
		parent::main();

		$this->update_message();
	}

    
	// -------------------------------------------------------------------------
	function bu_chiudiClick()
	// -------------------------------------------------------------------------
	{		
		$this->maskClose( "cassa_gg_singolo" );
		$this->showPrevMask();
	}

	
    // -------------------------------------------------------------------------
    function fld_categ_cerca_change()
    // -------------------------------------------------------------------------
    {
        $this->ds_filtro_sottocat_articoli->setWhere( "tipo = '" . $this->ART_fld_categ_cerca->getNewValue() . "' OR codice = '000'" );       
        $this->ds_filtro_sottocat_articoli->load();
    }
    
    
    // -------------------------------------------------------------------------
    function update_message()
    // -------------------------------------------------------------------------
    {
        $p4a =& p4a::singleton();
        $db =& p4a_db::singleton();
        
/*  1) ORDINE CHIUSO + NESSUN ARTICOLO NEL CARRELLO
        Nessun ordine è attualmente aperto.
        Il prossimo periodo si aprirà il:
        - elenco fornitori e date di apertura...
    
    2) ORDINE CHIUSO + ARTICOLI NEL CARRELLO 
        Il periodo d'ordine è concluso.
        La lista della spesa è in elaborazione da parte dei referenti: rimangono da elaborare ...
    
    3) ORDINE APERTO + NESSUN ARTICOLO NEL CARRELLO
        La tua lista della spesa è vuota.
        Scegli i prodotti nel listino articoli, specifica la quantità desiderata e poi premi il bottone "Aggiungi quantità".
        La lista della spesa verrà automaticamente elaborata dai referenti al termine del periodo d'ordine:
        - elenco fornitori e date di chiusura...

    4) ORDINE APERTO + ARTICOLI NEL CARRELLO
        Hai 88 articoli in ordine per un importo totale di 123,45 euro.
        [stesso testo in coda al caso 3)]
*/
        $n_ordini_aperti = $db->queryOne(
            "SELECT COUNT(*) FROM ".$p4a->e3g_prefix."fornitoreperiodo WHERE " . e3g_where_ordini_aperti() );

        $result = $db->queryRow( "SELECT SUM( qta ) AS qta, SUM( prezzoven * qta ) AS importo " .
            " FROM " . $p4a->e3g_prefix . "carrello WHERE codutente = '$p4a->e3g_utente_codice'" );
        $qta = (integer) $result[ "qta" ];
        $importo = (double) $result[ "importo" ];

        $testo_msg = "";
        $testo_lbl = "";
        if ( $n_ordini_aperti == 0 ) {
            if ( $qta == 0 )
                // 1) ORDINE CHIUSO + NESSUN ARTICOLO NEL CARRELLO
                $testo_lbl .= "<p>Nessun ordine e' attualmente aperto. Il prossimo periodo sara':</p>" .
                    e3g_get_html_elenco_prossime_aperture();
            else 
                // 2) ORDINE CHIUSO + ARTICOLI NEL CARRELLO 
                $testo_lbl .= "<p>Il periodo d'ordine e' concluso.</p>" .
                    "<p>La lista della spesa e' in elaborazione da parte dei referenti: riman" . ( $qta==1 ? "e" : "gono" ) . " da elaborare " .
                    "<strong>$qta articol" . ( $qta==1 ? "o" : "i" ) . "</strong> per un importo totale di <strong>" . $importo . " euro</strong>.</p>";
        }
        else {
            if ( $qta == 0 ) {
                // 3) ORDINE APERTO + NESSUN ARTICOLO NEL CARRELLO
                $testo_lbl .= "<p>La tua lista della spesa e' vuota.</p>";
                $this->tab_pane->pages->tabframe1->setLabel( "Lista della Spesa (vuota)" );
            }
            else {
                // 4) ORDINE APERTO + ARTICOLI NEL CARRELLO
                $testo_lbl .= "<p>Hai <strong>$qta articol" . ( $qta==1 ? "o" : "i" ) . 
                    "</strong> in ordine per un importo totale di <strong>" . $importo . " euro</strong>.</p>";
                $this->tab_pane->pages->tabframe1->setLabel( "Lista della Spesa ($qta articol" . ( $qta==1 ? "o" : "i" ) . " / $importo euro)" );
            }
        
            $testo_lbl .= "<p>Scegli i prodotti nel listino articoli, specifica la quantita' desiderata e poi premi il bottone \"Aggiungi quantita'\".<br />" .
                    "La lista della spesa verra' automaticamente elaborata dai referenti alla chiusura del periodo d'ordine:</p>" .
                e3g_get_html_elenco_prossime_chiusure();
    
            if ( $p4a->e3g_azienda_ordine_minimo > 0 and $importo < $p4a->e3g_azienda_ordine_minimo ) 
                $testo_msg .= "L'ordine minimo e' di $p4a->e3g_azienda_ordine_minimo euro." ;           
        }

        $this->msg_info->setValue( $testo_msg );
        $this->lbl_situazione->setValue( $testo_lbl );
    }


    // -------------------------------------------------------------------------
    function SPE_tab_lista_spesa_afterClick()
    // -------------------------------------------------------------------------
    {
        $db =& p4a_db::singleton();
        
        $this->SPE_lbl_desc_articolo->setValue( $this->SPE_ds_lista_spesa->fields->descrizione->getNewValue() );
        $this->SPE_fld_spesa_qta->setValue( $this->SPE_ds_lista_spesa->fields->qta->getNewValue() );
    }

        
    // Evidenzia la riga selezionata 
    // -------------------------------------------------------------------------
    function SPE_tab_lista_spesa_beforeDisplay( $obj, $rows ) 
    // -------------------------------------------------------------------------
    {  
        for( $i=0; $i<count($rows); $i++ ) {  
            if ( $rows[$i]["descrizione"] == $this->SPE_ds_lista_spesa->fields->descrizione->getNewValue() )
                $rows[$i]["descrizione"] = "<span style='color:black;font-weight:bold;'>" . $rows[$i]["descrizione"] . "</span>";
            $rows[$i]["bio"] = ( $rows[$i]["bio"] == 1 ? "Bio" : "" );
        }  
        return $rows;  
    }  


    // -------------------------------------------------------------------------
    function SPE_bu_filtroClick() 
    // -------------------------------------------------------------------------
    {
        $p4a =& p4a::singleton();

        $strWhere = "c.codutente = '$p4a->e3g_utente_codice' ";
                
        if ( $this->SPE_fld_filtro_fornitore->getNewValue() != "00" )
            $strWhere .= " AND c.codfornitore = '".$this->SPE_fld_filtro_fornitore->getNewValue()."' ";
    
        if ( $this->SPE_fld_filtro_categoria->getNewValue() != "00" )
            $strWhere .= " AND art.tipo = '".$this->SPE_fld_filtro_categoria->getNewValue()."' ";
        
        $this->SPE_ds_lista_spesa->setWhere( $strWhere );
        $this->SPE_ds_lista_spesa->load();
        $this->SPE_ds_lista_spesa->firstRow();

        $this->SPE_tab_lista_spesa_afterClick();
    }


    // -------------------------------------------------------------------------
    function SPE_bu_annulla_filtroClick()
    // -------------------------------------------------------------------------
    {       
        $p4a =& p4a::singleton();

        $this->SPE_fld_filtro_fornitore->setNewValue( "00" );
        $this->SPE_fld_filtro_categoria->setNewValue( "00" );
        
        $this->SPE_bu_filtroClick();
    }

    
	// -------------------------------------------------------------------------
	function SPE_bu_aggiorna_qtaClick()
	// -------------------------------------------------------------------------
	{
		$p4a =& p4a::singleton();
		$db =& p4a_db::singleton();
		
        $cod_articolo = $this->SPE_ds_lista_spesa->fields->codarticolo->getNewValue();
    	$fornitore = $this->SPE_ds_lista_spesa->fields->codfornitore->getNewValue();
			
		$numrighe = $db->queryOne(
			"SELECT COUNT(*) " .
			"  FROM " . $p4a->e3g_prefix . "fornitoreperiodo " .
			" WHERE ( fornitore='".$fornitore."' OR fornitore='ALL' ) " .
			"   AND " . e3g_where_ordini_aperti() );
		
		$stagione = $db->queryOne(
        	"SELECT COUNT(*) " .
        	"  FROM " . $p4a->e3g_prefix . "articoloperiodo " .
        	" WHERE codice='".$cod_articolo."' AND ((dalmese <= MONTH(NOW()) AND almese >= MONTH(NOW())) OR " .
              " (dalmese > almese AND (MONTH(NOW()) >= dalmese OR MONTH(NOW()) <= almese)))");
		// AP: modificato il 31.01.09 per consentire la selezione di articoli disponibili in periodo a cavallo tra due anni
		// (in questo caso il campo dalmese è sempre maggiore del campo almese)
		
		$articolostagionale = $db->queryOne(
			"SELECT COUNT(*) " .
			"  FROM " . $p4a->e3g_prefix . "articoloperiodo " .
			"  WHERE codice='$cod_articolo' ");
			
        $pzperconf = $db->queryOne(
			"SELECT pzperconf " .
			"  FROM " . $p4a->e3g_prefix . "articoli " .
			" WHERE codice='$cod_articolo'");
			
		if ( $pzperconf <> 0 ) {
			if ( ($this->SPE_fld_spesa_qta->getNewValue() % $pzperconf) == 0 ) 
				// Confez. OK 
				$pzperconf = 0;
            else 
            	// Conf. Errata
				$pzperconf = $pzperconf * -1; 
		}


		// Controllo la qta Minima impostata 
		$qtamin = $db->queryOne("SELECT qtaminperfamiglia FROM " . $p4a->e3g_prefix . "articoli WHERE codice = '$cod_articolo'");
		if ( $qtamin <> 0 )
		{
			if ( $this->SPE_fld_spesa_qta->getNewValue() >= $qtamin ) 
				// Confez. OK 
				$qtamin = 0;
		}
		
		if ( $cod_articolo != '' && $numrighe > 0 && $qtamin == 0 && $pzperconf == 0 && 
		     ( $articolostagionale == 0 || ($articolostagionale > 0 && $stagione > 0) ) )
		{
			$db->query(
				"UPDATE " . $p4a->e3g_prefix . "carrello " .
				"   SET qta = " . $this->SPE_fld_spesa_qta->getNewValue() .
				" WHERE idriga = " . $this->SPE_ds_lista_spesa->fields->idriga->getNewValue() );
		}
        else {
			$testo_errore = $this->SPE_ds_lista_spesa->fields->descrizione->getNewValue() . " :";
        	
        	if ( $numrighe == 0 )
    			$testo_errore .= "<br />- ordine NON CONSENTITO in questo periodo";

        	if ( $qtamin != 0 )
    			$testo_errore .= "<br />- la quantita' MINIMA e' di " . $qtamin . " pezzi";

			if ( $pzperconf != 0 )
            	$testo_errore .= "<br />- solo ordini multipli di " . ($pzperconf * -1) . " pezzi";
	    	
	    	if ( $articolostagionale >0 && $stagione == 0 )
    			$testo_errore .= "<br />- prodotto FUORI STAGIONE";
		
			$this->msg_warning->setValue( $testo_errore );
		}
		
		$this->update_message();
	}
	
	
    // -------------------------------------------------------------------------
    function SPE_bu_elimina_rigaClick()
    // -------------------------------------------------------------------------
    {
        $p4a =& p4a::singleton();
        $db =& p4a_db::singleton();
        
        $db->query(
            "DELETE FROM " . $p4a->e3g_prefix . "carrello " .
            " WHERE idriga = " . $this->SPE_ds_lista_spesa->fields->idriga->getNewValue() );
        
        $this->update_message();
    }
    

    // -------------------------------------------------------------------------
    function SPE_bu_svuota_ordineClick()
    // -------------------------------------------------------------------------
    {
        $p4a =& p4a::singleton();
        $db =& p4a_db::singleton();
    
        $db->query(
            "DELETE FROM " . $p4a->e3g_prefix . "carrello WHERE codutente = '$p4a->e3g_utente_codice'" );
        
        $this->update_message();
    }


    // -------------------------------------------------------------------------
    function SPE_bu_esporta_ordinePdfClick()
    // -------------------------------------------------------------------------
    {       
        require("class.report.php");
        
        $db =& p4a_db::singleton();
        $p4a =& p4a::singleton();
        
        $pdf = new Creport('a4','portrait');
                    
        $arr[ "desc_fornitore" ]  = "Fornitore";
        $arr[ "qta" ]             = "Q.ta'";
        $arr[ "bio" ]             = "Bio";
        $arr[ "descrizione" ]     = "Articolo";
        $arr[ "prezzo_ven_um" ]   = "Prezzo/UM";
        $arr[ "prezzoven" ]       = "Prezzo";
        $arr[ "importo" ]         = "Importo";
    
        // Recupero importo da visualizzare in stampa
        $result = $db->queryRow( "SELECT SUM( qta ) AS qta, SUM( prezzoven * qta ) AS importo " .
            " FROM " . $p4a->e3g_prefix . "carrello WHERE codutente = '$p4a->e3g_utente_codice'" );

        //$qta = (integer) $result[ "qta" ];
        $importo = (double) $result[ "importo" ];
        
        $pdf->stampareport( $this->SPE_ds_lista_spesa->getAll(), $arr, 
            "Ordine corrente " . $p4a->e3g_utente_desc . " (" . $importo . " euro)", 
            "Ordine corrente " . $p4a->e3g_utente_desc );
    }
    
    
    // -------------------------------------------------------------------------
    function SPE_bu_esporta_ordineCsvClick ()
    // -------------------------------------------------------------------------
    {       
        $db =& p4a_db::singleton();
        $p4a =& p4a::singleton();
        
        // MM_2009-01-26 Attenzione: causa probabile bug di p4a 2.2.3, non è possibile 
        // esportare le colonne in un ordine diverso da come sono presenti in tabella/query
        $colonne = array (
            "codfornitore"   => "Codice For.",
            "desc_fornitore" => "Fornitore",
            "qta"            => "Q.ta'",
            "bio"            => "Bio",
            "codarticolo"    => "Cod. Art.",
            "descrizione"    => "Articolo",
            "prezzo_ven_um"  => "Prezzo/UM",
            "prezzoven"      => "Prezzo unitario",
            "importo"        => "Importo"
        );
    
        e3g_db_source_exportToCsv( $this->SPE_ds_lista_spesa, $colonne, "Ordine corrente " . $p4a->e3g_utente_desc );
    }
    
    
    // -------------------------------------------------------------------------
    function SPE_bu_invia_email_click()
    // -------------------------------------------------------------------------
    {
        $p4a =& p4a::singleton();
        $db =& p4a_db::singleton();

        /* OGGETTO: Manto-GAS, lista della spesa
         * 
         * Salve Mario Rossi,
         * 
         * la tua lista della spesa è vuota.
         * la tua attuale lista della spesa è composta da:
         * 
         * Cooperativa Iris / Pasta e farina
         * - 3 (Bio) Fusilli integrali catering [5 Kg] x 6,00€ = 18,00€
         * - 12 (Bio) Grissini al farro [250 gr] x 3,50€ = 27,50€
         * 
         * Bio Caseificio Tomasoni / Formaggi
         * - 3 (Bio) Mozzarella [250 gr] x 4,00€ = 12,00€
         * 
         * TOTALI: 45 articoli per un importo di 123,45 euro.
         * 
         * La lista della spesa viene automaticamente elaborata dai referenti alla chiusura del periodo d'ordine.
         */        

        $qu_spesa = $db->getAll( 
            "SELECT CONCAT_WS( ' / ', f.descrizione, f.desc_agg ) AS desc_fornitore, " . 
            "       ( c.qta + c.qta_agg ) AS qta, art.bio, art.descrizione, " . 
            "       art.um_qta, art.um, " .  
            "       ROUND( c.prezzoven, $p4a->e3g_azienda_n_decimali_prezzi ) AS prezzoven, " .  
            "       ROUND( c.prezzoven * c.qta, $p4a->e3g_azienda_n_decimali_prezzi ) AS importo " .  
            "  FROM " . $p4a->e3g_prefix . "carrello AS c " . 
            "       JOIN " . $p4a->e3g_prefix . "articoli AS art ON c.codarticolo = art.codice " . 
            "       JOIN " . $p4a->e3g_prefix . "anagrafiche AS f ON c.codfornitore = f.codice " . 
            " WHERE c.codutente = '$p4a->e3g_utente_codice' " . 
          "ORDER BY f.descrizione, c.descrizione "  );

        $corpo = "Salve " . $p4a->e3g_utente_desc . ",\n\n";
        
        if ( $qu_spesa ) {
            $corpo .= "la tua attuale lista della spesa e' composta da:\n";
            $prec_for = "";
            $n_articoli = 0;
            $tot_importo = 0;
            foreach ( $qu_spesa as $record ) {
                if ( $prec_for <> $record["desc_fornitore"] ) {
                    $corpo .= "\n" . $record["desc_fornitore"] . "\n";
                    $prec_for = $record["desc_fornitore"];
                }
                $corpo .= 
                    "- " . $record["qta"] . ( $record["bio"] ? " (Bio) " : " " ) .
                    $record["descrizione"] .
                    ( $record["um_qta"] ? " [" . $record["um_qta"] . " " . $record["um"] . "]" : "" ) .
                    " x " . $record["prezzoven"] . " euro = " . $record["importo"] . " euro\n";
                $n_articoli += $record["um_qta"];
                $tot_importo += $record["importo"];
            }
            $corpo .= 
                "\nTOTALE: $n_articoli articoli per un importo di $tot_importo euro.\n\n" . 
                "La lista della spesa viene automaticamente elaborata dai referenti alla chiusura del periodo d'ordine.";
        }
        else
            $corpo .= "la tua lista della spesa e' vuota.";

        if ( !e3g_invia_email( $p4a->e3g_azienda_rag_soc . ", lista della spesa", 
                               $corpo, 
                               $p4a->e3g_utente_email, $p4a->e3g_utente_desc ) ) 
            $this->msg_warning->setValue( "Si sono verificati errori durante l'invio e-mail." ); 
    }
    

	// -------------------------------------------------------------------------
	function ART_tab_listino_afterClick()
	// -------------------------------------------------------------------------
	{
		$db =& p4a_db::singleton();
		
		$this->ART_lbl_desc_articolo->setValue( $this->ART_ds_articoli->fields->descrizione->getNewValue() );
		$this->ART_fld_aggiungi_qta->setValue( $this->ART_ds_articoli->fields->qtaminperfamiglia->getNewValue() );
		
		// Dopo una ricerca l'elenco articoli potrebbe essere vuoto
		if ( $this->ART_ds_articoli->fields->codice->getNewValue() <> "" ) {
			$this->ART_bu_scheda_articolo->enable();  
			e3g_prepara_scheda_articolo( $this->ART_ds_articoli->fields->codice->getNewValue() );
		}
		else 
// TODO Il bottone si disabilita, infatti l'icona viene sostituita, ma stranamente è ancora possibile premerlo		
			$this->ART_bu_scheda_articolo->disable();  
	}

		
    // Evidenzia la riga selezionata 
    // -------------------------------------------------------------------------
    function ART_tab_listino_beforeDisplay( $obj, $rows ) 
    // -------------------------------------------------------------------------
    {  
        for( $i=0; $i<count($rows); $i++ ) {  
            if ( $rows[$i]["descrizione"] == $this->ART_ds_articoli->fields->descrizione->getNewValue() )
                $rows[$i]["descrizione"] = "<span style='color:black;font-weight:bold;'>" . $rows[$i]["descrizione"] . "</span>";
            $rows[$i]["bio"] = ( $rows[$i]["bio"] == 1 ? "Bio" : "" );
        }  
        return $rows;  
    }  


    // -------------------------------------------------------------------------
    function ART_bu_filtraClick() 
    // -------------------------------------------------------------------------
    {
        $p4a =& p4a::singleton();

        $str_where = e3g_where_ordini_aperti("fp") . " AND ( a.stato = 1 ) ";
                
        if ($this->ART_fld_forn_cerca->getNewValue() != "00" )
            $str_where .= " AND a.centrale = '".$this->ART_fld_forn_cerca->getNewValue()."' ";
    
        if ( $this->ART_ck_solo_bio->getNewValue() != 0 )
            $str_where .= " AND bio = 1";
        
        if ($this->ART_fld_categ_cerca->getNewValue() != "00" )
            $str_where .= " AND a.tipo='".$this->ART_fld_categ_cerca->getNewValue()."' ";

        if ($this->ART_fld_sottocateg_cerca->getNewValue() != "000" )
            $str_where .= " AND a.catmerce='".$this->ART_fld_sottocateg_cerca->getNewValue()."' ";
        
        if ($this->ART_fld_desc_cerca->getNewValue() != "" )
            $str_where .= " AND UCASE(a.descrizione) LIKE '%" . addslashes( strtoupper(trim($this->ART_fld_desc_cerca->getNewValue())) ) . "%' ";
        
        // Filtro ingredienti (esclude articoli con ingredienti elencati; con questa query 
        // vengono giustamente esclusi anche quegli articoli che non hanno la specifica degli ingredienti)
        if ( $p4a->e3g_utente_filtro_ingredienti and ( $this->ART_fld_ingredienti->getNewValue() <> "" )  ) {
            $where_ing = "";
            $this->ART_fld_ingredienti->setNewValue( ucfirst(strtolower(trim( $this->ART_fld_ingredienti->getNewValue() ))) );
            $ingredienti = explode( ",", $this->ART_fld_ingredienti->getNewValue() );
            foreach( $ingredienti as $ingrediente ) 
                $where_ing .= " AND NOT FIND_IN_SET( '" . addslashes( strtoupper(trim($ingrediente)) ) . "', REPLACE( UCASE(ingredienti), ' ', '' ) ) ";
            $str_where .= $where_ing;
        }

        $this->ART_ds_articoli->setWhere( $str_where );
        $this->ART_ds_articoli->load();
        $this->ART_ds_articoli->firstRow();

        $this->ART_tab_listino_afterClick();
    }


	// -------------------------------------------------------------------------
	function ART_bu_annulla_filtroClick()
	// -------------------------------------------------------------------------
	{		
		$p4a =& p4a::singleton();

		$this->ART_fld_forn_cerca->setNewValue( "00" );
        $this->ART_ck_solo_bio->setNewValue( 0 );
		$this->ART_fld_categ_cerca->setNewValue( "00" );
		$this->ART_fld_sottocateg_cerca->setNewValue( "000" );
		$this->ART_fld_desc_cerca->setNewValue( "" );		
        $this->ART_fld_ingredienti->setNewValue( "" );       
		
		$this->ART_bu_filtraClick();
	}

	
    // -------------------------------------------------------------------------
    function ART_bu_aggiungi_qtaClick()
    // -------------------------------------------------------------------------
    {
        $p4a =& p4a::singleton();
        $db =& p4a_db::singleton();
        
        $cod_articolo = $this->ART_ds_articoli->fields->codice->getNewValue();
        $fornitore = $this->ART_ds_articoli->fields->centrale->getNewValue();

        $numrighe = $db->queryOne(
            "SELECT COUNT(*) " .
            "  FROM " . $p4a->e3g_prefix . "fornitoreperiodo " .
            " WHERE ( fornitore='".$fornitore."' OR fornitore='ALL' ) " .
            "   AND " . e3g_where_ordini_aperti() );

		$stagione = $db->queryOne(
        	"SELECT COUNT(*) " .
        	"  FROM " . $p4a->e3g_prefix . "articoloperiodo " .
        	" WHERE codice = '" . $cod_articolo . "' " .
            "   AND ( (dalmese <= MONTH(NOW()) AND almese >= MONTH(NOW()) ) OR " .
            "         (dalmese > almese AND (MONTH(NOW()) >= dalmese OR MONTH(NOW()) <= almese)) )" );
        // AP: modificato il 31.01.09 per consentire la selezione di articoli disponibili in periodo a cavallo tra due anni
		// (in questo caso il campo dalmese è sempre maggiore del campo almese)
        
        $articolostagionale = $db->queryOne(
            "SELECT COUNT(*) " .
            "  FROM " . $p4a->e3g_prefix . "articoloperiodo " .
            "  WHERE codice='$cod_articolo' ");
            
        $pzperconf = $this->ART_ds_articoli->fields->pzperconf->getNewValue();
        
        if ( $pzperconf <> 0 ) {
// TODO Anche qui, come per la qtamin più sotto, bisognerebbe considerare se c'è già qualche pezzo in ordine...     
            if (($this->ART_fld_aggiungi_qta->getNewValue() % $pzperconf) == 0) 
                // Confez. OK 
                $pzperconf = 0;
            else 
                // Conf. Errata
                $pzperconf = $pzperconf * -1; 
        }


        // Controllo la qta Minima impostata 
        $qtamin = $this->ART_ds_articoli->fields->qtaminperfamiglia->getNewValue();
        
        if ( $qtamin <> 0 ) {
            // C'è già qualche pezzo in ordine?
            $qta_gia_presente = $db->queryOne( 
                "SELECT qta FROM " . $p4a->e3g_prefix . "carrello " .
                " WHERE codutente = '" . $p4a->e3g_utente_codice . "' AND codarticolo = '" . $cod_articolo . "'" );

            if ( !is_numeric($qta_gia_presente) ) {
                if ( $this->ART_fld_aggiungi_qta->getNewValue() >= $qtamin ) 
                    // Confez. OK 
                    $qtamin = 0;
            }
            else {
                if ( ( $this->ART_fld_aggiungi_qta->getNewValue() + $qta_gia_presente ) >= $qtamin ) 
                    // Confez. OK 
                    $qtamin = 0;
            }
        }
        
        if ( $cod_articolo != '' && $numrighe > 0 && $qtamin == 0 && $pzperconf == 0 && 
             ( $articolostagionale == 0 || ($articolostagionale > 0 && $stagione > 0) ) )
        {
            $rigaid = $db->queryOne(
                "SELECT idriga FROM " . $p4a->e3g_prefix . "carrello " .
                " WHERE codutente = '" . $p4a->e3g_utente_codice . "' AND codarticolo = '" . $cod_articolo . "'" );
                
            if ( is_numeric($rigaid) ) {
                // ho un ID RIGA valido quindi ho già righe per questo utente
                $db->query(
                    "UPDATE " . $p4a->e3g_prefix . "carrello " .
                    "   SET qta = qta + ". $this->ART_fld_aggiungi_qta->getNewValue() . 
                    " WHERE idriga = " . $rigaid );
            }
            else {
                $new_idriga = $db->queryOne( "SELECT MAX( idriga ) FROM " . $p4a->e3g_prefix . "carrello" );
                if ( is_numeric ($new_idriga) )
                    $new_idriga++;
                else
                    $new_idriga = 1;
                
                // non ho nessuna riga per questo utente
                $db->query(
                    "INSERT INTO " . $p4a->e3g_prefix . "carrello " .
                    " ( idriga, codarticolo, um, descrizione, prezzoven, qta, codiva, idsessione, " .
                    "   codutente, stato, codfornitore, carscar, codcaumov, data ) " .
                    "VALUES ( " .
                        $new_idriga . ", '" .
                        $cod_articolo . "', '" . 
                        $this->ART_ds_articoli->fields->um->getNewValue() . "','" . 
                        addslashes( $this->ART_ds_articoli->fields->descrizione->getNewValue() ) . "'," .
                        $this->ART_ds_articoli->fields->prezzoven->getNewValue() . "," .
                        $this->ART_fld_aggiungi_qta->getNewValue() . ",'" .
                        $this->ART_ds_articoli->fields->codiva->getNewValue() . "','" . 
                        session_id() . "','" .
                        $p4a->e3g_utente_codice . "', 'A', '" .
                        $this->ART_ds_articoli->fields->centrale->getNewValue() . "', 'S', '".
                        $db->queryOne( "SELECT dettaglio_causale_mov_mag FROM _aziende WHERE prefix = '$p4a->e3g_prefix'" ). "','" .
                        date ("Y-m-d")."' ) " );
            }               
        }
        else {
            $testo_errore = $this->ART_ds_articoli->fields->descrizione->getNewValue() . " : ";
            
            if ( $numrighe == 0 )
                $testo_errore .= "<br />- ordine NON CONSENTITO in questo periodo";

            if ( $qtamin != 0 )
                $testo_errore .= "<br />- la quantita' MINIMA e' di " . $qtamin . " pezzi";

            if ( $pzperconf != 0 )
                $testo_errore .= "<br />- solo ordini multipli di " . ($pzperconf * -1) . " pezzi";
            
            if ( $articolostagionale > 0 && $stagione == 0 )
                $testo_errore .= "<br />- prodotto FUORI STAGIONE.";

            $this->msg_warning->setValue( $testo_errore );
        }
        
        $this->ART_tab_listino_afterClick();
        
        $this->update_message();
    }


	// -------------------------------------------------------------------------
	function ART_bu_esporta_listinoPdfClick()
	// -------------------------------------------------------------------------
	{		
        $p4a =& p4a::singleton();
        
        $p4a->openMask('esporta_listino');
	}


    // -------------------------------------------------------------------------
    function ART_bu_esporta_listinoCsvClick ()
    // -------------------------------------------------------------------------
    {       
        $p4a =& p4a::singleton();
        
        $p4a->openMask('esporta_listino');
    }
    
    
}

?>
Return current item: Progetto e3g