Location: PHPKode > projects > GAzie - Gestione Aziendale > gazie/library/include/document.php
<?php
 /* $Id: document.php,v 1.46 2010/05/03 06:20:14 devincen Exp $
 --------------------------------------------------------------------------
                            Gazie - Gestione Azienda
    Copyright (C) 2004-2010 - Antonio De Vincentiis Montesilvano (PE)
                                (www.devincentiis.it)
                        <http://gazie.sourceforge.net>
 --------------------------------------------------------------------------
    Questo programma e` free software;   e` lecito redistribuirlo  e/o
    modificarlo secondo i  termini della Licenza Pubblica Generica GNU
    come e` 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.

    Ognuno dovrebbe avere   ricevuto una copia  della Licenza Pubblica
    Generica GNU insieme a   questo programma; in caso  contrario,  si
    scriva   alla   Free  Software Foundation,  Inc.,   59
    Temple Place, Suite 330, Boston, MA 02111-1307 USA Stati Uniti.
 --------------------------------------------------------------------------
*/

class DocContabVars
{
    function setVars($gTables, $tesdoc, $testat, $tableName,$ecr=false)
    {
        $this->ecr=$ecr;
        $this->gTables = $gTables;
        $admin_aziend = gaz_dbi_get_row($gTables['aziend'], 'codice', $_SESSION['enterprise_id']);
        $this->azienda = $admin_aziend;
        $this->user = gaz_dbi_get_row($gTables['admin'], 'Login', $_SESSION['Login']);
        $this->pagame = gaz_dbi_get_row($gTables['pagame'], "codice", $tesdoc['pagame']);
        $this->banapp = gaz_dbi_get_row($gTables['banapp'],"codice",$tesdoc['banapp']);
        $anagrafica = new Anagrafica();
        $this->banacc = $anagrafica->getPartner($this->pagame['id_bank']);
        $this->vettor = gaz_dbi_get_row($gTables['vettor'], "codice", $tesdoc['vettor']);
        $this->tableName = $tableName;
        $this->intesta1 = $admin_aziend['ragso1'];
        $this->intesta1bis = $admin_aziend['ragso2'];
        $this->intesta2 = $admin_aziend['indspe'].' '.sprintf("%05d",$admin_aziend['capspe']).' '.$admin_aziend['citspe'].' ('.$admin_aziend['prospe'].')';
        $this->intesta3 = 'Tel.'.$admin_aziend['telefo'].' ';
        $this->aziendTel = $admin_aziend['telefo'];
        $this->aziendFax = $admin_aziend['fax'];
        $this->codici = '';
        if ($admin_aziend['codfis'] != '') {
            $this->codici .= 'C.F. '.$admin_aziend['codfis'].' ';
        }
        if ($admin_aziend['pariva']) {
            $this->codici .= 'P.I. '.$admin_aziend['pariva'].' ';
        }
        if ($admin_aziend['rea']) {
            $this->codici .= 'R.E.A. '.$admin_aziend['rea'];
        }
        $this->intesta4 = $admin_aziend['e_mail'];
        $this->intesta5 = $admin_aziend['sexper'];
        $this->colore = $admin_aziend['colore'];
        $this->decimal_quantity = $admin_aziend['decimal_quantity'];
        $this->decimal_price = $admin_aziend['decimal_price'];
        $this->logo = $admin_aziend['image'];
        $this->perbollo = 0;
        $this->iva_bollo = gaz_dbi_get_row($gTables['aliiva'], "codice", $admin_aziend['ivabol']);
        $this->client = $anagrafica->getPartner($tesdoc['clfoco']);
        $this->cliente1 = $this->client['ragso1'];
        $this->cliente2 = $this->client['ragso2'];
        $this->cliente3 = $this->client['indspe'];
        if (!empty($this->client['citspe'])) {
           $this->cliente4 = sprintf("%05d",$this->client['capspe']).' '.$this->client['citspe'].' ('.$this->client['prospe'].')';
        } else {
           $this->cliente4 = '';
        }
        if (!empty($this->client['pariva'])){
           $this->cliente5 = 'P.I. '.$this->client['pariva'].' ';
        } else {
           $this->cliente5 = '';
        }
        if (!empty($this->client['pariva'])){ //se c'e' la partita iva
            if (!empty($this->client['codfis']) and $this->client['codfis'] == $this->client['pariva']) {
                $this->cliente5 = 'C.F. e P.I. '.$this->client['codfis'];
            } elseif(!empty($this->client['codfis']) and $this->client['codfis'] != $this->client['pariva']) {
                $this->cliente5 = 'C.F. '.$this->client['codfis'].' P.I. '.$this->client['pariva'];
            } else { //per es. se non c'e' il codice fiscale
                $this->cliente5 = ' P.I. '.$this->client['pariva'];
            }
        } else { //se  NON c'e' la partita iva
            $this->cliente5 = '';
            if (!empty($this->client['codfis'])) {
                $this->cliente5 = 'C.F. '.$this->client['codfis'];
            }
        }
        // variabile e' sempre un array
        $this->id_agente = gaz_dbi_get_row($gTables['agenti'],'id_agente',$tesdoc['id_agente']);
        $this->rs_agente = $anagrafica->getPartner($this->id_agente['id_fornitore']);
        $this->name_agente = substr($this->rs_agente['ragso1']." ".$this->rs_agente['ragso2'],0,47);
        if ((isset($tesdoc['id_des'])) and ($tesdoc['id_des'] > 0)) {
            $this->partner_dest = $anagrafica->getPartner($tesdoc['id_des']);
            $this->destinazione = substr($this->partner_dest['ragso1']." ".$this->partner_dest['ragso2'],0,45);
            $this->destinazione .= "\n".substr($this->partner_dest['indspe'],0,45);
            $this->destinazione .= "\n".substr($this->partner_dest['capspe']." ".$this->partner_dest['citspe']." (".$this->partner_dest['prospe'].")",0,45);
        } else {
            if (isset($tesdoc['destin']) and is_array($tesdoc['destin'])) {
                $this->destinazione = $tesdoc['destin'];
            } elseif (isset($tesdoc['destin']) and is_string($tesdoc['destin'])) {
                $destino = preg_split("/[\r\n]+/i",$tesdoc['destin'],3);
                $this->destinazione = substr($destino[0],0,45);
                foreach ($destino as $key => $value) {
                    if ($key == 1){
                        $this->destinazione .= "\n".substr($value,0,45)."\n";
                    } elseif($key > 1) {
                        $this->destinazione .= substr(preg_replace("/[\r\n]+/i",' ',$value),0,45);
                    }
                }
            } else {
                $this->destinazione = '';
            }
        }

        $this->clientSedeLegale = ((trim($this->client['sedleg']) != '') ? preg_split("/\n/", trim($this->client['sedleg'])) : array());

        if (isset($tesdoc['c_a'])) {
           $this->c_Attenzione = $tesdoc['c_a'];
        } else {
           $this->c_Attenzione = '';
        }
        $this->client = $anagrafica->getPartner($tesdoc['clfoco']);
        $this->tesdoc = $tesdoc;
        $this->min = substr($tesdoc['initra'],14,2);
        $this->ora = substr($tesdoc['initra'],11,2);
        $this->day = substr($tesdoc['initra'],8,2);
        $this->month = substr($tesdoc['initra'],5,2);
        $this->year = substr($tesdoc['initra'],0,4);
        $this->trasporto=$tesdoc['traspo'];
        $this->testat = $testat;
    }

    function open_drawer() // apre il cassetto dell'eventuale registratore di cassa
    {
       if ($this->ecr) {
            if (!empty($this->ecr['driver'])) {
              $ticket_printer = new $this->ecr['driver'];
              @$ticket_printer->set_serial($this->ecr['serial_port']);
              @$ticket_printer->open_drawer();
            }
       }
    }

    function getTicketRow()
    {
        // in caso di scontrino il calcolo dev'essere fatto scorporando dal totale l'IVA
        $rs_rig = gaz_dbi_dyn_query("*", $this->gTables[$this->tableName], "id_tes = $this->testat", "id_rig asc");
        $this->totale=0;
        $results = array();
        while ($rigo = gaz_dbi_fetch_array($rs_rig)) {
            $rigo['importo']=0;
            $rigo['totale']=0;
            //calcolo importo rigo
            if ($rigo['tiprig'] <= 1) {     // se del tipo normale o forfait
                if ($rigo['tiprig'] == 0) { // tipo normale
                    $rigo['totale'] = CalcolaImportoRigo($rigo['quanti'], $rigo['prelis'],array($rigo['sconto'],$this->tesdoc['sconto'],-$rigo['pervat']));
                } else {                    // tipo forfait
                    $rigo['totale'] = CalcolaImportoRigo(1,$rigo['prelis'],-$rigo['pervat']);
                }
                $rigo['importo']=round($rigo['totale']/(1+$rigo['pervat']/100),2);
                if (!isset($this->castel[$rigo['codvat']])) {
                  $iva = gaz_dbi_get_row($this->gTables['aliiva'],"codice",$rigo['codvat']);
                  $this->castel[$rigo['codvat']]['iva']=0.00;
                  $this->castel[$rigo['codvat']]['descri']=$iva['descri'];
                  $this->castel[$rigo['codvat']]['importo']=0.00;
                }
                $this->castel[$rigo['codvat']]['importo']+=$rigo['importo'];
                $this->castel[$rigo['codvat']]['iva']+=$rigo['totale']-$rigo['importo'];
                $this->totale+=$rigo['totale'];
            }
            $results[] = $rigo;
        }
        //inoltre devo settare la descrizione del misuratore fiscale
        $this->ecr = gaz_dbi_get_row($this->gTables['cash_register'], 'id_cash',$this->tesdoc['id_contract']);

        return $results;
    }

    function getRigo()
    {
        $from =  $this->gTables[$this->tableName].' AS rows
                 LEFT JOIN '.$this->gTables['aliiva'].' AS vat
                 ON rows.codvat=vat.codice';
        $rs_rig = gaz_dbi_dyn_query('rows.*,vat.tipiva AS tipiva',$from, "rows.id_tes = ".$this->testat,"id_tes DESC, id_rig");
        $this->riporto =0.00;
        $this->ritenuta=0.00;
        $results = array();
        while ($rigo = gaz_dbi_fetch_array($rs_rig)) {
            if ($rigo['tiprig'] <= 1) {
                $rigo['importo'] = CalcolaImportoRigo($rigo['quanti'], $rigo['prelis'], $rigo['sconto']);
                $v_for_castle = CalcolaImportoRigo($rigo['quanti'], $rigo['prelis'], array($rigo['sconto'],$this->tesdoc['sconto']));
                if ($rigo['tiprig'] == 1) {
                    $rigo['importo'] = CalcolaImportoRigo(1,$rigo['prelis'],0);
                    $v_for_castle = CalcolaImportoRigo(1, $rigo['prelis'],$this->tesdoc['sconto']);
                }
                if (!isset($this->castel[$rigo['codvat']])) {
                    $this->castel[$rigo['codvat']] = 0;
                    if ($rigo['tipiva']!='C' && $rigo['tipiva']!='S' ) {
                       $this->decalc_castle[$rigo['codvat']] = 0.00;
                    }
                }
                $this->castel[$rigo['codvat']] += $v_for_castle;
                if ($rigo['tipiva']!='C' && $rigo['tipiva']!='S' ) {
                   $this->decalc_castle[$rigo['codvat']] += $v_for_castle;
                   $this->totimp_decalc += $v_for_castle;
                }
                $this->totimp_body += $rigo['importo'];
                $this->ritenuta += round($rigo['importo']*$rigo['ritenuta']/100,2);
                $this->totimp_doc += $v_for_castle;
            } elseif ($rigo['tiprig']>5 && $rigo['tiprig']<9) {
               $body_text = gaz_dbi_get_row($this->gTables['body_text'], "id_body",$rigo['id_body_text']);
               $rigo['descri'] = $body_text['body_text'];
            } elseif ($rigo['tiprig'] == 3) {
               $this->riporto += $rigo['prelis'];
            }
            $results[] = $rigo;
            //creo il castelletto IVA ma solo se del tipo normale o forfait
        }
        return $results;
    }

    function setTotal($totTrasporto=0)
    {
        $bolli = new Compute();
        $this->totivafat = 0.00;
        $this->totimpfat = 0.00;
        $this->totimpmer = 0.00;
        $this->tot_ritenute = $this->ritenuta;
        $this->impbol = 0.00;
        $this->totriport = $this->riporto;
        $this->speseincasso = $this->tesdoc['speban'] * $this->pagame['numrat'];
        $this->cast = array();
        if (!isset($this->decalc_castle)){
            $this->decalc_castle= array();
        }
        if (!isset($this->castel)){
            $this->castel= array();
        }
        if (!isset($this->totimp_body)){
            $this->totimp_body=0;
        }
        $this->totimpmer = $this->totimp_body;
        $this->totimp_body=0;
        if (!isset($this->totimp_doc)){
            $this->totimp_doc=0;
        }
        $this->totimpfat = $this->totimp_doc;
        $this->totimp_doc = 0;
        $somma_spese = $totTrasporto + $this->speseincasso + $this->tesdoc['spevar'];
        $last=count($this->decalc_castle);
        $acc_val=$somma_spese;
        foreach ($this->castel as $k=>$v) {
            $vat = gaz_dbi_get_row($this->gTables['aliiva'],"codice",$k);
            $last--;
            if (isset($this->decalc_castle[$k])) {
               if ($last == 0) {
                  $v += $acc_val;
                  $this->totimpfat += $acc_val;
               } else {
                  $decalc=round($somma_spese*$v/$this->totimp_decalc,2);
                  $v += $decalc;
                  $this->totimpfat += $decalc;
                  $acc_val-=$decalc;
               }
            }
            $ivacast = round($v*$vat['aliquo'])/ 100;
            $this->totivafat += $ivacast;
            $this->cast[$k]['impcast'] = $v;
            $this->cast[$k]['ivacast'] = $ivacast;
            $this->cast[$k]['descriz'] = $vat['descri'];
        }
        //se il pagamento e' del tipo TRATTA calcolo i bolli da addebitare per l'emissione dell'effetto
        if ($this->pagame['tippag'] == 'T' or $this->pagame['tippag'] == 'R') {
           if ($this->pagame['tippag'] == 'T') {
              $this->impbol = $bolli->stampTax($this->totimpfat+$this->totriport+$this->totivafat-$this->tot_ritenute, $this->tesdoc['stamp'],$this->tesdoc['round_stamp']*$this->pagame['numrat']);
           } elseif($this->pagame['tippag'] == 'R') {
              $this->impbol = $this->tesdoc['stamp'];
           }
        }
        $this->riporto=0;
        $this->ritenute=0;
        $this->castel = array();
        $this->decalc_castle= array();
    }
}


function createDocument($testata, $templateName, $gTables,$rows='rigdoc')
{
    $templates = array('Received' => 'received',
                       'CartaIntestata' => 'carta_intestata',
                       'Lettera' => 'lettera',
                       'FatturaAcquisto' => 'fattura_acquisto',
                       'FatturaImmediata' => 'fattura_immediata',
                       'Parcella' => 'parcella',
                       'PreventivoCliente' => 'preventivo_cliente',
                       'OrdineCliente' => 'ordine_cliente',
                       'FatturaSemplice' => 'fattura_semplice',
                       'FatturaAllegata' => 'fattura_allegata',
                       'OrdineFornitore' => 'ordine_fornitore',
                       'PreventivoFornitore' => 'preventivo_fornitore',
                       'InformativaPrivacy' => 'informativa_privacy',
                       'DDT' => 'ddt'
                       );

    $config = new Config;
    $configTemplate = new configTemplate;
    require("../../config/templates".($configTemplate->template ? '.'.$configTemplate->template : '').'/'.$templates[$templateName].'.php');
    $pdf = new $templateName();
    $ecr=gaz_dbi_get_row($gTables['cash_register'],'adminid',$_SESSION['Login']);
    if (!empty($ecr['driver'])) {
         require("../../library/cash_register/".$ecr['driver'].".php");
         $ticket_printer = new $ecr['driver'];
    } else {
       $ecr=false;
    }
    $docVars = new DocContabVars();
    $docVars->setVars($gTables, $testata, $testata['id_tes'], $rows, $ecr);
    $pdf->setVars($docVars,$templateName);
    $pdf->setTesDoc();
    $pdf->SetPageFormat($config->getValue('page_format'));
    $pdf->setCreator(PDF_CREATOR);
    $pdf->setTitle($templateName);
    $pdf->setTopMargin(79);
    $pdf->setHeaderMargin(5);
    $pdf->Open();
    $pdf->AliasNbPages();
    $pdf->pageHeader();
    $pdf->compose();
    $pdf->pageFooter();
    $pdf->Output();
}

function createMultiDocument($results, $templateName, $gTables)
{
    $templates = array('Received' => 'received',
                       'CartaIntestata' => 'carta_intestata',
                       'Lettera' => 'lettera',
                       'FatturaAcquisto' => 'fattura_acquisto',
                       'FatturaImmediata' => 'fattura_immediata',
                       'Parcella' => 'parcella',
                       'PreventivoCliente' => 'preventivo_cliente',
                       'OrdineCliente' => 'ordine_cliente',
                       'FatturaSemplice' => 'fattura_semplice',
                       'FatturaAllegata' => 'fattura_allegata',
                       'OrdineFornitore' => 'ordine_fornitore',
                       'PreventivoFornitore' => 'preventivo_fornitore',
                       'InformativaPrivacy' => 'informativa_privacy',
                       'DDT' => 'ddt'
                       );
    $config = new Config;
    $configTemplate = new configTemplate;
    require("../../config/templates".($configTemplate->template ? '.'.$configTemplate->template : '').'/'.$templates[$templateName].'.php');
    $pdf = new $templateName();
    $docVars = new DocContabVars();
    $pdf->SetPageFormat($config->getValue('page_format'));
    $pdf->setCreator(PDF_CREATOR);
    $pdf->SetTitle($templateName);
    $pdf->SetTopMargin(79);
    $pdf->SetHeaderMargin(5);
    $ctrlprotoc = 0;
    while ($tesdoc = gaz_dbi_fetch_array($results)) {
    //se il cliente non e' lo stesso di prima
            $ref=$tesdoc['protoc'];
            if ($templateName == 'DDT') {
               $ref=$tesdoc['numdoc'];
            }
            if ($ref <> $ctrlprotoc && $ctrlprotoc > 0 ) {
                $pdf->pageFooter();
            }
            // Inizio pagina
            $testat = $tesdoc['id_tes'];
            $docVars->setVars($gTables, $tesdoc, $testat, 'rigdoc');
            $pdf->setVars($docVars,$templateName);
            $pdf->setTesDoc();
            if ($ctrlprotoc == 0) {
                $pdf->SetAuthor($docVars->intesta1.' '.$_SESSION['Login']);
                $pdf->Open();
            }
            //aggiungo una pagina
            $pdf->pageHeader();
            $ctrlprotoc = $tesdoc['protoc'];
            if ($templateName == 'DDT') {
               $ctrlprotoc=$tesdoc['numdoc'];
            }
            $testat = $tesdoc['id_tes'];
            $pdf->docVars->setVars($gTables, $tesdoc, $testat, 'rigdoc');
            $pdf->compose();
    }
    $pdf->pageFooter();
    $pdf->Output();
}

function createInvoiceFromDDT($result,$gTables) {
    $config = new Config;
    $configTemplate = new configTemplate;
    require("../../config/templates".($configTemplate->template ? '.'.$configTemplate->template : '').'/fattura_semplice.php');
    $pdf = new FatturaSemplice();
    $docVars = new DocContabVars();
    $pdf->SetPageFormat($config->getValue('page_format'));
    $pdf->setCreator(PDF_CREATOR);
    $pdf->SetTitle('Fatture Differite da DDT');
    $pdf->SetTopMargin(79);
    $pdf->SetHeaderMargin(5);
    $pdf->Open();
    $ctrlprotoc = 0;
    while ($tesdoc = gaz_dbi_fetch_array($result)) {
    //se il cliente non e' lo stesso di prima
        if ($tesdoc['protoc'] <> $ctrlprotoc) {
            //se non e' piu' lo stesso cliente e non e' il primo Ddt stampo il piede della fattura
            if ($ctrlprotoc <> 0) {
                $pdf->pageFooter();
            }
            // Inizio pagina
            // se non e' il tipo di documento stampabile da questo modulo ... va a casa
               if ($tesdoc['tipdoc'] <> 'FAD') {
                header("Location: report_docven.php");
                exit;
               }

            $testat = $tesdoc['id_tes'];
            $docVars->setVars($gTables, $tesdoc, $testat, 'rigdoc');
            $pdf->setVars($docVars);
            $pdf->setTesDoc();
            if ($ctrlprotoc == 0) {
                $pdf->SetAuthor($docVars->intesta1.' '.$_SESSION['Login']);
                $pdf->Open();
            }
            //aggiungo una pagina
            $pdf->pageHeader();
            $ctrlprotoc = $tesdoc['protoc'];
        }
        $testat = $tesdoc['id_tes'];
        $pdf->docVars->setVars($gTables, $tesdoc, $testat, 'rigdoc');
        $pdf->compose();
    }
    $pdf->pageFooter();
    $pdf->Output();
}
?>
Return current item: GAzie - Gestione Aziendale