<?
/**
* 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');
}
}
?>