<?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__) . '/../config.php' );
require_once( dirname(__FILE__) . '/../libraries/phpmailer/class.phpmailer.php' );
//------------------------------------------------------------------------------
// Crea PDF con la griglia Utenti/Fornitori per il controllo delle consegne
//------------------------------------------------------------------------------
function tabella_pagamenti()
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
$utenti = $db->queryAll(
"SELECT doc.codutente, ana.descrizione AS desc_utente, " .
" FORMAT( SUM( doc.prezzo * ( doc.quantita ) ) , 2 ) AS importo, art.centrale " .
" FROM " . $p4a->e3g_prefix . "docr doc, " . $p4a->e3g_prefix . "articoli art, " . $p4a->e3g_prefix . "anagrafiche ana " .
" WHERE doc.codtipodoc = '" . $p4a->e3g_azienda_gg_cod_doc_ordine . "' " .
" AND (doc.estratto <> 'S' OR ISNULL(doc.estratto)) " .
" AND doc.codice = art.codice " .
" AND doc.codutente = ana.codice " .
"GROUP BY doc.codutente, art.centrale " .
"ORDER BY desc_utente, centrale" );
$num_utenti = count($utenti);
$fornitori = $db->queryAll(
"SELECT DISTINCT ana.descrizione AS desc_centrale, art.centrale " .
" FROM " . $p4a->e3g_prefix . "docr doc, " . $p4a->e3g_prefix . "articoli art, " . $p4a->e3g_prefix . "anagrafiche ana " .
" WHERE doc.codtipodoc = '" . $p4a->e3g_azienda_gg_cod_doc_ordine . "' " .
" AND doc.codice = art.codice " .
" AND art.centrale = ana.codice" );
$num_forn = count($fornitori);
$campi = array();
$campi["Famiglia"] = "Famiglia";
$riga = 0 ;
while($riga < $num_forn) {
$campi[$fornitori[$riga]["centrale"]] = $fornitori[$riga]["centrale"];
$riga++;
}
$campi["Totale"] = "Totale";
$arr = array();
$riga = 0 ;
$oldutente = "";
$myrow = -1;
while($riga < $num_utenti) {
$centrale = $utenti[$riga]["centrale"];
//$desccentrale = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice = '".$centrale."' ");
$des_ute = $utenti[$riga]["desc_utente"];
if ($oldutente == $utenti[$riga]["desc_utente"]) {
// sono sullo stesso utente aggiungo importo centrale
$centrale = $utenti[$riga]["centrale"];
$arr[$myrow][$centrale] = $utenti[$riga]["importo"];
$arr[$myrow]["Totale"] = $arr[$myrow]["Totale"] + $utenti[$riga]["importo"];
}
else {
// diverso utente metto la descr utente e l'importo del primo forn.
$myrow++;
$arr[$myrow]["Famiglia"] = $utenti[$riga]["desc_utente"];
$i = 0 ;
while($i < $num_forn) {
$centrale = $fornitori[$i]["centrale"];
$arr[$myrow][$centrale] = 0;
$i++;
}
$arr[$myrow]["Totale"] = 0;
$centrale = $utenti[$riga]["centrale"];
$arr[$myrow][$centrale] = $utenti[$riga]["importo"];
$arr[$myrow]["Totale"] = $utenti[$riga]["importo"];
}
$oldutente = $utenti[$riga]["desc_utente"];
$riga++;
}
// calcolo il totale per fornitore
$tot = array();
$riga = 0 ;
$i = 0 ;
while($i < $num_forn) {
$centrale = $fornitori[$i]["centrale"];
$tot[$centrale] = 0 ;
$i++;
}
// scorro gli utenti
while($riga < count($arr)) {
// scorro i fornitori per ogni utente
$i = 0 ;
while($i < $num_forn) {
$centrale = $fornitori[$i]["centrale"];
$tot[$centrale] = $tot[$centrale] + $arr[$riga][$centrale] ;
$i++;
}
$riga++;
}
$myrow++;
$arr[$myrow]["Famiglia"] = "Totale";
$i = 0 ;
$totale_generale = 0;
while ($i < $num_forn) {
$centrale = $fornitori[$i]["centrale"];
$arr[$myrow][$centrale] = $tot[$centrale] ;
$totale_generale = $totale_generale + $tot[$centrale];
$i++;
}
$arr[$myrow]["Totale"] = $totale_generale;
require("class.report.php");
$pdf = new Creport('a4','landscape');
$pdf->stampareport( $arr, $campi, "Consegna Famiglie","Consegna Famiglie" );
}
// -----------------------------------------------------------------------------
// Funzione per la generazione del file ODT per i documenti
// -----------------------------------------------------------------------------
function genera_stampa_odt( $numerodoc, $iddoc, $codtipodoc, $codclifor, $codtipopag )
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
if ( $numerodoc != "" ) {
$p4a->build("p4a_db_source", "ds_doct");
$p4a->ds_doct->setTable($p4a->e3g_prefix."doct");
$p4a->ds_doct->setPk("iddoc");
$p4a->ds_doct->setWhere("iddoc=".$iddoc);
$p4a->ds_doct->addOrder("data");
$p4a->ds_doct->addOrder("iddoc");
$p4a->ds_doct->addOrder("numdocum");
$p4a->ds_doct->load();
$p4a->ds_doct->firstRow();
require("class.text.php");
$doc = new FText();
// intestazione documento
$query = "SELECT descrizione, indirizzo, localita, cap, piva, cf FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$codclifor."'";
$scheda_clifor = $db->queryRow($query);
$clifor = $scheda_clifor["descrizione"];
$indirizzo = $scheda_clifor["indirizzo"];
$localita = $scheda_clifor["localita"];
$cap = $scheda_clifor["cap"];
$piva = $scheda_clifor["piva"];
$cf = $scheda_clifor["cf"];
$desdocumento = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."doctipidoc WHERE codice='".$codtipodoc."'");
$testata = array();
$testata[1][1] = strtoupper($desdocumento);
$testata[1][2] = "DATA";
$testata[1][3] = "P.IVA Cliente";
$testata[1][4] = "<b>".strtoupper($clifor)."</b>";
$testata[2][1] = $p4a->ds_doct->fields->numdocum->getnewValue();
$testata[2][2] = e3g_format_mysql_data( $p4a->ds_doct->fields->data->getnewValue());
$testata[2][3] = strtoupper($piva);
$testata[2][4] = strtoupper($indirizzo);
$testata[3][1] = "";
$testata[3][2] = "";
$testata[3][3] = "";
$testata[3][4] = strtoupper($cap)." ".strtoupper($localita);
$despagamento = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."pagamenti WHERE codice='".$p4a->ds_doct->fields->codtipopag->getNewValue()."'");
$dati_banca = $db->queryRow("SELECT abi, cab, cin, conto_corrente, banca, agenzia FROM _aziende WHERE prefix='".$p4a->e3g_prefix."'");
$testata2 = array();
$testata2[1][1] = "Pagamento";
$testata2[1][2] = $despagamento;
$testata2[2][1] = "Banca";
$testata2[2][2] = "ABI ".$dati_banca['abi']." - CAB ".$dati_banca['cab']." - CIN ".$dati_banca['cin'];
$testata2[3][1] = "";
$testata2[3][2] = $dati_banca['conto_corrente'];
$testata2[4][1] = "";
$testata2[4][2] = $dati_banca['banca']." ".$dati_banca['agenzia'];
$p4a->build("p4a_db_source", "ds_campi");
$p4a->ds_campi->setTable($p4a->e3g_prefix."doccampireport");
$p4a->ds_campi->setPk("idtable");
$p4a->ds_campi->setWhere("codtipodoc='".$codtipodoc."'");
$p4a->ds_campi->addOrder("ordine");
$p4a->ds_campi->load();
$p4a->ds_campi->firstRow();
// aggiungo intestazione campi nella riga 1 dell'array
$selectcampi = "";
$numcampi = 1;
$riga = 1 ;
$colonna = 1;
$corpo = array();
$stampaprezzi = "N";
while ($numcampi <= $p4a->ds_campi->getNumRows()) {
$corpo[$riga][$colonna] = "<b>".$p4a->ds_campi->fields->nomecampo->getNewValue()."</b>";
if ($selectcampi == "")
$selectcampi = $p4a->ds_campi->fields->campo->getNewValue();
else
$selectcampi .= ", ".$p4a->ds_campi->fields->campo->getNewValue();
// setto il flag STAMPA PREZZI per passarlo alla routine di stampa
if (strtoupper($p4a->ds_campi->fields->campo->getNewValue()) == "PREZZO") {
$stampaprezzi = "S";
}
$p4a->ds_campi->nextRow();
$numcampi++;
$colonna++;
}
// aggiungo le righe del corpo documento
$p4a->build("p4a_db_source", "ds_docr");
$p4a->ds_docr->setTable($p4a->e3g_prefix."docr d");
$p4a->ds_docr->setSelect("iddocr, nriga, visibile, ".$selectcampi);
$p4a->ds_docr->setPk("iddocr");
$p4a->ds_docr->setWhere("iddocr=".$p4a->ds_doct->fields->iddoc->getNewValue()." AND visibile='S'");
$p4a->ds_docr->addOrder("iddocr");
$p4a->ds_docr->addOrder("nriga");
$p4a->ds_docr->load();
$p4a->ds_docr->firstRow();
$numcampi = 1;
$riga = 2;
$colonna = 1;
foreach ($p4a->ds_docr->getAll() as $arr_riga) {
while (list($chiave,$valore) = each($arr_riga))
{
$pos = strpos(strtolower($selectcampi), strtolower($chiave));
if ($pos === false) {
// stringa non trovata
} else {
// campo trovato
$corpo[$riga][$colonna] = $valore;
$colonna++;
}
}
$riga++;
$colonna = 1;
}
// aggiungo intestazione campi totale 1
$selectcampi = "imponibile, imposta, totale, iva";
$totale1 = array();
$totale1[1][1] = "<b>Imponibile</b>";
$totale1[1][2] = "<b>Imposta</b>";
$totale1[1][3] = "<b>Totale</b>";
$totale1[1][4] = "<b>Iva</b>";
// ricavo il totale raggruppato per codici iva
if ( E3G_TIPO_GESTIONE == 'G' ) {
$query =
"SELECT ROUND(SUM(imponibile),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imponibile, ROUND(SUM(imposta),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imposta, ROUND(SUM(totale),".$p4a->e3g_azienda_n_decimali_prezzi.") AS totale , codiva AS iva " .
" FROM ".$p4a->e3g_prefix."docr " .
" WHERE visibile='S' AND iddocr=".$p4a->ds_doct->fields->iddoc->getNewValue()." AND codiva <> '' " .
"GROUP BY codiva ORDER BY codiva";
}
else {
$query =
"SELECT ROUND(SUM(imponibile),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imponibile, ROUND(SUM(imposta),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imposta, ROUND(SUM(totale),".$p4a->e3g_azienda_n_decimali_prezzi.") AS totale , codiva AS iva " .
" FROM ".$p4a->e3g_prefix."docr " .
" WHERE iddocr=".$p4a->ds_doct->fields->iddoc->getNewValue()." AND codiva <> '' " .
"GROUP BY codiva ORDER BY codiva";
}
$p4a->build("p4a_db_source", "ds_tot1");
$p4a->ds_tot1->setTable($p4a->e3g_prefix."docr");
$p4a->ds_tot1->setQuery($query);
$p4a->ds_tot1->load();
$p4a->ds_tot1->firstRow();
// aggiungo le righe dell'array totale 1
$numcampi = 1;
$riga = 2;
$colonna = 1;
foreach ($p4a->ds_tot1->getAll() as $arr_riga) {
while (list($chiave,$valore) = each($arr_riga)) {
$pos = strpos(strtolower($selectcampi), strtolower($chiave));
if ($pos === false) {
// stringa non trovata
} else {
// campo trovato
$totale1[$riga][$colonna] = $valore;
$colonna++;
}
}
$riga++;
$colonna = 1;
}
// aggiungo intestazione campi totale 2 GENERALE
$selectcampi = "imponibile, imposta, spese, totale";
$totale2 = array();
$totale2[1][1] = "<b>Imponibile</b>";
$totale2[1][2] = "<b>Imposta</b>";
$totale2[1][3] = "<b>Spese</b>";
$totale2[1][4] = "<b>Totale</b>";
// ricavo il totale generale
if ( E3G_TIPO_GESTIONE == 'G' ) {
$query =
"SELECT ROUND(imponibile,".$p4a->e3g_azienda_n_decimali_prezzi.") as Imponibile, ROUND(imposta,".$p4a->e3g_azienda_n_decimali_prezzi.") as Imposta, ROUND(spesevarie,".$p4a->e3g_azienda_n_decimali_prezzi.") as Spese, ROUND(imponibile+imposta+spesevarie,".$p4a->e3g_azienda_n_decimali_prezzi.") as totale " .
" FROM ".$p4a->e3g_prefix."doct " .
" WHERE iddoc = ".$p4a->ds_doct->fields->iddoc->getNewValue();
$stampaiva = "N";
}
else {
$query =
"SELECT ROUND(imponibile,".$p4a->e3g_azienda_n_decimali_prezzi.") as Imponibile, ROUND(imposta,".$p4a->e3g_azienda_n_decimali_prezzi.") as Imposta, ROUND(spesevarie,".$p4a->e3g_azienda_n_decimali_prezzi.") as Spese, ROUND(imponibile+imposta+spesevarie,".$p4a->e3g_azienda_n_decimali_prezzi.") as totale " .
" FROM ".$p4a->e3g_prefix."doct " .
" WHERE iddoc = ".$p4a->ds_doct->fields->iddoc->getNewValue();
$stampaiva = "S";
}
$p4a->build("p4a_db_source", "ds_tot2");
$p4a->ds_tot2->setTable($p4a->e3g_prefix."docr");
$p4a->ds_tot2->setQuery($query);
$p4a->ds_tot2->load();
$p4a->ds_tot2->firstRow();
// aggiungo le righe dell'array totale 2 GENERALE
$numcampi = 1;
$riga = 2;
$colonna = 1;
foreach ($p4a->ds_tot2->getAll() as $arr_riga) {
while (list($chiave,$valore) = each($arr_riga))
{
$pos = strpos(strtolower($selectcampi), strtolower($chiave));
if ($pos === false) {
// stringa non trovata
} else {
// campo trovato
$totale2[$riga][$colonna] = $valore;
$colonna++;
}
}
$riga++;
$colonna = 1;
}
// coda per Porto, vettore, data trasp firma...
$coda = array();
$coda[1][1] = "Porto: ";
$coda[1][2] = "Aspetto Beni: ";
$coda[2][1] = "Vettore: ";
$coda[2][2] = "Data e ora Trasp. : ";
$coda[3][1] = "Firma Conducente";
$coda[3][2] = "Firma Destinatario";
$nomefile = "e3g_document.htm";
$doc->doc2text($p4a->e3g_azienda_path_documento.$nomefile, $testata, $testata2, $corpo, $totale1,$totale2,$coda);
// scarico il file odt
// tipo MIME:
$file_mime = "application/odt";
//Collocazione effettiva del file sul server:
$file_path = $p4a->e3g_azienda_path_documento."e3g_document.odt";
$file_name = "e3g_document.odt";
header("Content-Type: ".$file_mime);
header("Content-Disposition: attachment; filename=".$file_name);
header("Content-Length: " . filesize($file_path));
readfile($file_path);
}
}
// -----------------------------------------------------------------------------
// Funzione per la generazione del file pdf per i documenti
// $righe_det_per_utente -> 0: righe raggruppate per articolo
// 1: righe dettagliate per utente
// -----------------------------------------------------------------------------
function genera_stampa_pdf( $numerodoc, $iddoc, $codtipodoc, $codclifor, $codtipopag, $righe_det_per_utente=0 )
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
if ( $numerodoc != "" ) {
$p4a->build("p4a_db_source", "ds_doct");
$p4a->ds_doct->setTable($p4a->e3g_prefix."doct");
$p4a->ds_doct->setPk("iddoc");
$p4a->ds_doct->setWhere("iddoc=".$iddoc);
$p4a->ds_doct->addOrder("data");
$p4a->ds_doct->addOrder("iddoc");
$p4a->ds_doct->addOrder("numdocum");
$p4a->ds_doct->load();
$p4a->ds_doct->firstRow();
$p4a->build("p4a_db_source", "ds_docr");
$p4a->ds_docr->setTable($p4a->e3g_prefix."docr d");
if ($righe_det_per_utente == 1 )
$p4a->ds_docr->setSelect("d.codice, IF(d.visibile='N','',ROUND(d.prezzo + d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.")) as prezzo, d.quantita, IF(d.visibile='N','',ROUND(d.totale,".$p4a->e3g_azienda_n_decimali_prezzi.")) as totale, d.codiva, CONCAT_WS(' ', d.descrizione, '[', art.um_qta, art.um, ']') AS descrizione, d.visibile, d.nriga, d.iddocr, ana.descrizione as fornitore, d.quantita2, d.sconto, IF(d.visibile='N',ana2.descrizione,'') as utente, ROUND(d.prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo_originale, ROUND(d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as delta_prezzo");
else
$p4a->ds_docr->setSelect("d.codice,ROUND(d.prezzo + d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo, d.quantita,ROUND(d.totale,".$p4a->e3g_azienda_n_decimali_prezzi.") as totale, d.codiva, CONCAT_WS(' ', d.descrizione, '[', art.um_qta, art.um, ']') AS descrizione, d.visibile, d.nriga, d.iddocr, ana.descrizione as fornitore, d.quantita2, d.sconto, ROUND(d.prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo_originale, ROUND(d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as delta_prezzo");
$p4a->ds_docr->addJoin( $p4a->e3g_prefix . "articoli art", "d.codice = art.codice", "LEFT" );
$p4a->ds_docr->addJoin( $p4a->e3g_prefix . "anagrafiche ana", "ana.codice = art.centrale", "LEFT" );
if ( $righe_det_per_utente == 1 )
$p4a->ds_docr->addJoin( $p4a->e3g_prefix . "anagrafiche ana2", "ana2.codice = d.codutente", "LEFT" );
$p4a->ds_docr->setPk("iddocr");
if ( E3G_TIPO_GESTIONE == 'G' )
{
// AP commentato il 28.10.08 per consentire di vedere in stampa le righe con qta = 0
// andrà migliorato (in che modo?) con la visualizzazione della Qta Aggiunta
//$p4a->ds_docr->setWhere("iddocr=".$iddoc." AND visibile='S' AND quantita > 0 ");
if ($righe_det_per_utente == 1)
$p4a->ds_docr->setWhere("iddocr=".$iddoc);
else
$p4a->ds_docr->setWhere("iddocr=".$iddoc." AND visibile='S' ");
}
else {
// tutte le righe di Equogest sono Visibili per default (non esiste la gestione Visibili/Invisibili)
$p4a->ds_docr->setWhere("iddocr=".$iddoc." AND visibile='S'");
}
if ($righe_det_per_utente == 1)
{
// ordinamento per Utente e poi per Cod. Articolo
$p4a->ds_docr->addOrder("utente", "DESC");
$p4a->ds_docr->addOrder("codice");
}
else {
// ordinamento di Default
$p4a->ds_docr->addOrder("iddocr");
$p4a->ds_docr->addOrder("nriga");
}
$p4a->ds_docr->load();
//$p4a->ds_docr->firstRow();
require("class.report.php");
$pdf = new Creport('a4','portrait');
$desdocumento = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."doctipidoc WHERE codice='".$codtipodoc."'");
$clifor = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$codclifor."'");
$piva = $db->queryOne("SELECT piva FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$codclifor."'");
$cf = $db->queryOne("SELECT cf FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$codclifor."'");
$indirizzo = $db->queryOne("SELECT indirizzo FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$codclifor."'");
$localita = $db->queryOne("SELECT CONCAT(cap, ' ' , localita) as localita FROM ".$p4a->e3g_prefix."anagrafiche WHERE codice='".$codclifor."'");
$pagamento = $db->queryOne("SELECT descrizione FROM ".$p4a->e3g_prefix."pagamenti WHERE codice='".$codtipopag."'");
$p4a->build("p4a_db_source", "ds_campi");
$p4a->ds_campi->setTable($p4a->e3g_prefix."doccampireport");
$p4a->ds_campi->setPk("idtable");
$p4a->ds_campi->setWhere("codtipodoc='".$codtipodoc."'");
$p4a->ds_campi->addOrder("ordine");
$p4a->ds_campi->load();
$p4a->ds_campi->firstRow();
// ricavo i campi del documento
$riga = 1 ;
$arr = array();
$stampaprezzi = "N";
while ($riga <= $p4a->ds_campi->getNumRows()) {
$arr[strtolower($p4a->ds_campi->fields->campo->getNewValue())] = $p4a->ds_campi->fields->nomecampo->getNewValue();
// setto il flag STAMPA PREZZI per passarlo alla routine di stampa
if (strtoupper($p4a->ds_campi->fields->campo->getNewValue()) == "PREZZO")
$stampaprezzi = "S";
$p4a->ds_campi->nextRow();
$riga++;
}
if ( $righe_det_per_utente == 1 )
$arr["utente"] = "Nome Utente";
// ricavo il totale raggruppato per codici iva
if ( E3G_TIPO_GESTIONE == 'G' ) {
$query =
"SELECT ROUND(SUM(imponibile),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imponibile, ROUND(SUM(imposta),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imposta, ROUND(SUM(totale),".$p4a->e3g_azienda_n_decimali_prezzi.") AS totale , codiva AS iva " .
" FROM ".$p4a->e3g_prefix."docr " .
" WHERE visibile='S' AND iddocr=".$iddoc." AND codiva <> '' " .
"GROUP BY codiva ORDER BY codiva";
}
else {
$query =
"SELECT ROUND(SUM(imponibile),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imponibile, ROUND(SUM(imposta),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imposta, ROUND(SUM(totale),".$p4a->e3g_azienda_n_decimali_prezzi.") AS totale , codiva AS iva " .
" FROM ".$p4a->e3g_prefix."docr " .
" WHERE iddocr=".$iddoc." AND codiva <> '' " .
"GROUP BY codiva ORDER BY codiva";
}
// ricavo il totale raggruppato per codici iva
$arrtot1 = array();
$p4a->build("p4a_db_source", "ds_tot1");
if ( E3G_TIPO_GESTIONE == 'G' ) {
$p4a->ds_tot1->setTable($p4a->e3g_prefix."docr");
$p4a->ds_tot1->setSelect("codiva , ROUND(SUM(imponibile),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imponibile, ROUND(SUM(imposta),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imposta, ROUND(SUM(totale),".$p4a->e3g_azienda_n_decimali_prezzi.") AS totale ");
$p4a->ds_tot1->setPk("codiva");
$p4a->ds_tot1->setWhere("visibile='S' AND iddocr=".$iddoc." AND codiva <> '' ");
$p4a->ds_tot1->addGroup("codiva");
$p4a->ds_tot1->addOrder("codiva");
$arrtot1["codiva"] = "Iva";
$arrtot1["imponibile"] = "Imponibile";
$arrtot1["imposta"] = "Imposta";
$arrtot1["totale"] = "Totale";
}
else {
$p4a->ds_tot1->setTable($p4a->e3g_prefix."docr");
$p4a->ds_tot1->setSelect("codiva, ROUND(SUM(imponibile),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imponibile, ROUND(SUM(imposta),".$p4a->e3g_azienda_n_decimali_prezzi.") AS imposta");
$p4a->ds_tot1->setPk("codiva");
$p4a->ds_tot1->setWhere("iddocr=".$iddoc." AND codiva <> '' ");
$p4a->ds_tot1->addGroup("codiva");
$p4a->ds_tot1->addOrder("codiva");
$arrtot1["codiva"] = "Iva";
$arrtot1["imponibile"] = "Imponibile";
$arrtot1["imposta"] = "Imposta";
}
$p4a->ds_tot1->load();
$p4a->ds_tot1->firstRow();
$p4a->build("p4a_db_source", "ds_tot2");
$p4a->ds_tot2->setTable($p4a->e3g_prefix."docr");
// ricavo il totale generale
$arrtot2 = array();
if ( E3G_TIPO_GESTIONE == 'G' ) {
$stampaiva = "N";
$p4a->ds_tot2->setTable($p4a->e3g_prefix."doct");
$p4a->ds_tot2->setSelect("ROUND(imponibile,".$p4a->e3g_azienda_n_decimali_prezzi.") as Imponibile, ROUND(imposta,".$p4a->e3g_azienda_n_decimali_prezzi.") as Imposta, ROUND(spesevarie,".$p4a->e3g_azienda_n_decimali_prezzi.") as Spese, ROUND(imponibile+imposta+spesevarie,".$p4a->e3g_azienda_n_decimali_prezzi.") as totale ");
$p4a->ds_tot2->setWhere("iddoc = ".$iddoc);
$arrtot2["Imponibile"] = "Imponibile";
$arrtot2["Imposta"] = "Imposta";
$arrtot2["Spese"] = "Spese";
$arrtot2["totale"] = "Totale";
}
else {
$stampaiva = "S";
$p4a->ds_tot2->setTable($p4a->e3g_prefix."docr");
$p4a->ds_tot2->setSelect("SUM(imponibile) as imponibile, SUM(imposta) as imposta, SUM(totale) as totale ");
$p4a->ds_tot2->setWhere("iddocr=".$iddoc." AND codiva <> '' ");
}
$p4a->ds_tot2->load();
$p4a->ds_tot2->firstRow();
if ( E3G_TIPO_GESTIONE == 'G' ) {
$arr_coda = array();
$arr_tot = array();
$arr_tot[0]["colonna1"] = "Spese";
$arr_tot[0]["colonna2"] = number_format($p4a->ds_tot2->fields->Spese->getValue(),2);
$arr_tot[0]["colonna3"] = "Imponibile";
$arr_tot[0]["colonna4"] = number_format($p4a->ds_tot2->fields->Imponibile->getValue(),2);
$arr_tot[1]["colonna1"] = "Spese Trasporto";
$arr_tot[1]["colonna2"] = number_format($p4a->ds_doct->fields->spesetrasporto->getValue(), 2);
$arr_tot[1]["colonna3"] = "Imposta";
$arr_tot[1]["colonna4"] = number_format($p4a->ds_tot2->fields->Imposta->getValue(),2);
$arr_tot[2]["colonna1"] = "";
$arr_tot[2]["colonna2"] = "";
$arr_tot[2]["colonna3"] = "Totale";
$arr_tot[2]["colonna4"] = number_format($p4a->ds_tot2->fields->totale->getValue() ,2);
}
else {
$arr_coda = array();
$arr_coda[0]["colonna1"] = "Pagamento";
$arr_coda[0]["colonna2"] = $pagamento;
$arr_coda[1]["colonna1"] = "Banca";
$arr_coda[1]["colonna2"] = $p4a->e3g_banca." ".$p4a->e3g_agenzia;
if ( $p4a->e3g_iban == "" ) {
$arr_coda[2]["colonna1"] = "C/C";
$arr_coda[2]["colonna2"] = $p4a->e3g_conto_corrente;
$arr_coda[3]["colonna1"] = "";
$arr_coda[3]["colonna2"] = "ABI: ".$p4a->e3g_abi." CAB: ".$p4a->e3g_cab." CIN: ".$p4a->e3g_cin;
}
else {
$arr_coda[2]["colonna1"] = "IBAN: ";
$arr_coda[2]["colonna2"] = $p4a->e3g_iban;
}
$arr_tot = array();
$arr_tot[0]["colonna1"] = "Spese Varie";
$arr_tot[0]["colonna2"] = number_format($p4a->ds_doct->fields->spesevarie->getValue(),2);
$arr_tot[0]["colonna3"] = "Imponibile";
$arr_tot[0]["colonna4"] = number_format($p4a->ds_tot2->fields->imponibile->getValue(),2);
$arr_tot[1]["colonna1"] = "Spese Trasporto";
$arr_tot[1]["colonna2"] = number_format($p4a->ds_doct->fields->spesetrasporto->getValue(), 2);
$arr_tot[1]["colonna3"] = "Imposta";
$arr_tot[1]["colonna4"] = number_format($p4a->ds_tot2->fields->imposta->getValue(),2);
$arr_tot[2]["colonna1"] = "";
$arr_tot[2]["colonna2"] = "";
$arr_tot[2]["colonna3"] = "Totale";
$arr_tot[2]["colonna4"] = number_format($p4a->ds_tot2->fields->totale->getValue() + $p4a->ds_doct->fields->spesetrasporto->getValue() + $p4a->ds_doct->fields->spesevarie->getValue(),2);
}
// Modello: "NomeGasBottega_DocTipoXXX_DataDoc_NumDoc.ext"
// (mantenerlo uguale a quello dell'esportazione CSV più sotto)
$nome_file = P4A_Get_Valid_File_Name( $p4a->e3g_azienda_rag_soc .
"_DOC_Tipo" . $codtipodoc . "_Data" . $p4a->ds_doct->fields->data->getValue() . "_N" . $numerodoc );
$pdf->stampadoc(
e3g_format_mysql_data( $p4a->ds_doct->fields->data->getValue() ),
$desdocumento . " " . $numerodoc,
$clifor, $piva, $indirizzo, $localita,
$p4a->ds_docr->getAll(), $arr,
$p4a->ds_tot1->getAll(),
$arr_tot,
$stampaprezzi, $nome_file . ".pdf", $stampaiva, $pagamento, $arr_coda, $arrtot1, $cf );
}
}
// -----------------------------------------------------------------------------
// Funzione per l'esportazione come CSV (foglio elettronico) dei documenti
// $righe_det_per_utente -> 0: righe raggruppate per articolo
// 1: righe dettagliate per utente
// -----------------------------------------------------------------------------
function genera_stampa_csv( $numerodoc, $iddoc, $codtipodoc, $codclifor, $codtipopag, $righe_det_per_utente=0 )
{
$p4a =& p4a::singleton();
$db =& p4a_db::singleton();
if ( $numerodoc != "" ) {
$stringa_select = "d.iddocr, d.visibile, d.nriga"; // stringa utilizzata per la select della table docr
// apro la testa dei documenti
$p4a->build("p4a_db_source", "ds_doct");
$p4a->ds_doct->setTable($p4a->e3g_prefix."doct");
$p4a->ds_doct->setPk("iddoc");
$p4a->ds_doct->setWhere("iddoc=".$iddoc);
$p4a->ds_doct->addOrder("data");
$p4a->ds_doct->addOrder("iddoc");
$p4a->ds_doct->addOrder("numdocum");
$p4a->ds_doct->load();
$p4a->ds_doct->firstRow();
// ricavo i campi del documento
$p4a->build("p4a_db_source", "ds_campi");
$p4a->ds_campi->setTable($p4a->e3g_prefix."doccampireport");
$p4a->ds_campi->setPk("idtable");
$p4a->ds_campi->setWhere("codtipodoc='".$codtipodoc."'");
$p4a->ds_campi->addOrder("ordine");
$p4a->ds_campi->load();
$p4a->ds_campi->firstRow();
$riga = 1 ;
$arr = array();
$stampaprezzi = "N";
if ($righe_det_per_utente == 1)
{
$arr["prezzo"] = "Prezzo";
$arr["prezzo_originale"] = "Prezzo Orig.";
$arr["delta_prezzo"] = "Var. Prezzo";
$arr["quantita"] = "Q.ta";
$arr["totale"] = "Importo";
$arr["descrizione"] = "Articolo";
$arr["utente"] = "Nome Utente";
}
else
{
while ($riga <= $p4a->ds_campi->getNumRows()) {
$arr[strtolower($p4a->ds_campi->fields->campo->getNewValue())] = $p4a->ds_campi->fields->nomecampo->getNewValue();
// compongo la stringa per la SELECT sui campi della table docr
// in questo modo i campi sono nel giusto ordinamento
// problema riscontrato 29.01.09: il getasCSV non prende l'ordinamento dei campi dell'array ma utilizza quello del db_source
$nome_campo = "";
switch (strtolower($p4a->ds_campi->fields->campo->getNewValue())) {
case "prezzo":
$nome_campo = "ROUND(d.prezzo + d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo";
break;
case "totale":
$nome_campo = "ROUND(d.totale,".$p4a->e3g_azienda_n_decimali_prezzi.") as totale";
break;
case "descrizione":
$nome_campo = "CONCAT_WS(' ', d.descrizione, '[', art.um_qta, art.um, ']') AS descrizione";
break;
case "fornitore":
$nome_campo = "ana.descrizione as fornitore";
break;
case "prezzo_originale":
$nome_campo = "ROUND(d.prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo_originale";
break;
case "delta_prezzo":
$nome_campo = "ROUND(d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as delta_prezzo";
break;
default:
$nome_campo = "d.".strtolower($p4a->ds_campi->fields->campo->getNewValue());
break;
}
if ( $stringa_select == "" )
$stringa_select = $nome_campo;
else
$stringa_select .= ", ".$nome_campo;
// setto il flag STAMPA PREZZI per passarlo alla routine di stampa
if (strtoupper($p4a->ds_campi->fields->campo->getNewValue()) == "PREZZO") {
$stampaprezzi = "S";
}
$p4a->ds_campi->nextRow();
$riga++;
}
}
// apro il corpo del documento
$p4a->build("p4a_db_source", "ds_docr");
$p4a->ds_docr->setTable($p4a->e3g_prefix."docr d");
if ( E3G_TIPO_GESTIONE == 'G' ) {
//$p4a->ds_docr->setSelect("d.codice,ROUND(d.prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo, d.quantita,ROUND(d.totale,".$p4a->e3g_azienda_n_decimali_prezzi.") as totale, d.codiva, CONCAT_WS(' ', d.descrizione, '[', art.um_qta, art.um, ']') AS descrizione, d.visibile, d.nriga, d.iddocr, ana.descrizione as fornitore, d.quantita2, d.sconto");
if ( $righe_det_per_utente == 1 )
$p4a->ds_docr->setSelect("d.codice, IF(d.visibile='N','',ROUND(d.prezzo + d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.")) as prezzo, d.quantita, IF(d.visibile='N','',ROUND(d.totale,".$p4a->e3g_azienda_n_decimali_prezzi.")) as totale, d.codiva, CONCAT_WS(' ', d.descrizione, '[', art.um_qta, art.um, ']') AS descrizione, d.visibile, d.nriga, d.iddocr, ana.descrizione as fornitore, d.quantita2, d.sconto, IF(d.visibile='N',ana2.descrizione,'') as utente, ROUND(d.prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo_originale, ROUND(d.delta_prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as delta_prezzo");
else
$p4a->ds_docr->setSelect($stringa_select);
}
else {
$p4a->ds_docr->setSelect("d.codice,ROUND(d.prezzo,".$p4a->e3g_azienda_n_decimali_prezzi.") as prezzo, d.quantita,ROUND(d.totale,".$p4a->e3g_azienda_n_decimali_prezzi.") as totale, d.codiva, d.descrizione AS descrizione, d.visibile, d.nriga, d.iddocr, ana.descrizione as fornitore, d.quantita2, d.sconto, ROUND(d.imponibile,".$p4a->e3g_azienda_n_decimali_prezzi.") as imponibile, ROUND(d.imposta,".$p4a->e3g_azienda_n_decimali_prezzi.") as imposta ");
}
$p4a->ds_docr->addJoin( $p4a->e3g_prefix . "articoli art", "d.codice = art.codice", "LEFT" );
$p4a->ds_docr->addJoin( $p4a->e3g_prefix . "anagrafiche ana", "ana.codice = art.centrale", "LEFT" );
if ( $righe_det_per_utente == 1 )
$p4a->ds_docr->addJoin( $p4a->e3g_prefix . "anagrafiche ana2", "ana2.codice = d.codutente", "LEFT" );
$p4a->ds_docr->setPk("iddocr");
if ( E3G_TIPO_GESTIONE == 'G' ) {
if ($righe_det_per_utente == 1)
$p4a->ds_docr->setWhere("iddocr=".$iddoc);
else {
// AP commentato il 28.10.08 per consentire di vedere in stampa le righe con qta = 0
// andrà migliorato (in che modo?) con la visualizzazione della Qta Aggiunta
//$p4a->ds_docr->setWhere("iddocr=".$iddoc." AND visibile='S' AND quantita > 0 ");
$p4a->ds_docr->setWhere("iddocr=".$iddoc." AND visibile='S' ");
}
}
else {
$p4a->ds_docr->setWhere("iddocr=".$iddoc." AND visibile='S'");
}
if ($righe_det_per_utente == 1)
{
// ordinamento per Utente e poi per Cod. Articolo
$p4a->ds_docr->addOrder("utente", "DESC");
$p4a->ds_docr->addOrder("codice");
}
else {
// ordinamento di Default
$p4a->ds_docr->addOrder("iddocr");
$p4a->ds_docr->addOrder("nriga");
}
$p4a->ds_docr->load();
$p4a->ds_docr->firstRow();
// Modello: "NomeGasBottega_DocTipoXXX_DataDoc_NumDoc.ext"
// (mantenerlo uguale a quello dell'esportazione PDF più sopra)
$nome_file = P4A_Get_Valid_File_Name( $p4a->e3g_azienda_rag_soc .
"_DOC_Tipo" . $codtipodoc . "_Data" . $p4a->ds_doct->fields->data->getValue() . "_N" . $numerodoc );
$p4a->ds_docr->exportToCsv( $nome_file . ".csv", ";", $arr );
}
}
?>