$file = $conf->facture->dir_output . '/' . $ref . '/' . $ref . '.pdf'; // Construit PDF si non existant if (! is_readable($file)) { // Define output language $outputlangs = $langs; $newlang=''; if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; if (! empty($newlang)) { $outputlangs = new Translate("",$conf); $outputlangs->setDefaultLang($newlang); } $result=facture_pdf_create($db, $object, '', $_REQUEST['model'], $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); if ($result <= 0) { dol_print_error($db,$result); exit; } } print '<br>'; print_titre($langs->trans($titreform)); // Cree l'objet formulaire mail include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); $formmail = new FormMail($db); $formmail->fromtype = 'user'; $formmail->fromid = $user->id;
// Define output language $outputlangs = $langs; $newlang = ''; if ($conf->global->MAIN_MULTILANGS && empty($newlang) && !empty($_REQUEST['lang_id'])) { $newlang = $_REQUEST['lang_id']; } if ($conf->global->MAIN_MULTILANGS && empty($newlang)) { $newlang = $customer->default_lang; } if (!empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); } // Generate PDF (whatever is option MAIN_DISABLE_PDF_AUTOUPDATE) so we can include it into email //if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) facture_pdf_create($db, $invoice, $invoice->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); } } } } if (!$error) { $db->commit(); } else { $db->rollback(); $action = 'addsubscription'; } // Send email if (!$error) { // Send confirmation Email if ($object->email && $_POST["sendmail"]) { $subjecttosend = $object->makeSubstitution($conf->global->ADHERENT_MAIL_COTIS_SUBJECT);
// Build document if it not exists if (!$file || !is_readable($file)) { // Define output language $outputlangs = $langs; $newlang = ''; if ($conf->global->MAIN_MULTILANGS && empty($newlang) && !empty($_REQUEST['lang_id'])) { $newlang = $_REQUEST['lang_id']; } if ($conf->global->MAIN_MULTILANGS && empty($newlang)) { $newlang = $object->client->default_lang; } if (!empty($newlang)) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlang); } $result = facture_pdf_create($db, $object, GETPOST('model') ? GETPOST('model') : $object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); if ($result <= 0) { dol_print_error($db, $result); exit; } $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($ref, '/')); $file = $fileparams['fullname']; } print '<br>'; print_titre($langs->trans($titreform)); // Cree l'objet formulaire mail include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; $formmail = new FormMail($db); $formmail->fromtype = 'user'; $formmail->fromid = $user->id; $formmail->fromname = $user->getFullName($langs);
$fac = new Facture($db); $result=$fac->fetch($obj->rowid); if ($result > 0) { $outputlangs = $langs; if (! empty($newlangid)) { if ($outputlangs->defaultlang != $newlangid) { $outputlangs = new Translate("",$conf); $outputlangs->setDefaultLang($newlangid); } } print "Build PDF for invoice ".$obj->facnumber." - Lang = ".$outputlangs->defaultlang."\n"; $result=facture_pdf_create($db, $fac, '', $newmodel?$newmodel:$fac->modelpdf, $outputlangs); // Add file into files array $files[] = $conf->facture->dir_output.'/'.$fac->ref.'/'.$fac->ref.'.pdf'; } if ($result <= 0) { print "Error: Failed to build PDF for invoice ".$fac->ref."\n"; } $cpt++; } // Now, build a merged files with all files in $files array
$paiement = new PaymentSocialContribution($db); $paiement->id = $_REQUEST['id']; if ($paiement->valide() > 0) { $db->commit(); $factures = array(); // TODO Get all id of invoices linked to this payment foreach ($factures as $id) { $fac = new Facture($db); $fac->fetch($id); $outputlangs = $langs; if (!empty($_REQUEST['lang_id'])) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($_REQUEST['lang_id']); } if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { facture_pdf_create($db, $fac, $fac->modelpdf, $outputlangs, $hookmanager); } } Header('Location: fiche.php?id=' . $paiement->id); exit; } else { $mesg = '<div class="error">' . $paiement->error . '</div>'; $db->rollback(); } } /* * View */ llxHeader(); $socialcontrib = new ChargeSociales($db); $paiement = new PaymentSocialContribution($db);
$db->begin(); $result = $paiement->valide(); if ($result > 0) { $db->commit(); $factures = array(); // TODO Get all id of invoices linked to this payment foreach ($factures as $id) { $fac = new Facture($db); $fac->fetch($id); $outputlangs = $langs; if (!empty($_REQUEST['lang_id'])) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($_REQUEST['lang_id']); } if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { facture_pdf_create($db, $fac, $fac->modelpdf, $outputlangs); } } header('Location: fiche.php?id=' . $paiement->id); exit; } else { setEventMessage($paiement->error); $db->rollback(); } } /* * View */ llxHeader(); $socialcontrib = new ChargeSociales($db); $form = new Form($db);
/** * testFactureBuild * * @return int */ public function testFactureBuild() { global $conf,$user,$langs,$db; $conf=$this->savconf; $user=$this->savuser; $langs=$this->savlangs; $db=$this->savdb; $conf->facture->dir_output.='/temp'; $localobjectcom=new Commande($this->savdb); $localobjectcom->initAsSpecimen(); $localobject=new Facture($this->savdb); $localobject->createFromOrder($localobjectcom); $localobject->date_lim_reglement = dol_now() + 3600 * 24 *30; // Crabe $localobject->modelpdf='crabe'; $result=facture_pdf_create($db, $localobject, $localobject->modelpdf, $langs); $localobject=new Facture($this->savdb); $localobject->initAsSpecimen(); $this->assertLessThan($result, 0); print __METHOD__." result=".$result."\n"; // Oursin $localobject->modelpdf='oursin'; $result=facture_pdf_create($db, $localobject, $localobject->modelpdf, $langs); $this->assertLessThan($result, 0); print __METHOD__." result=".$result."\n"; return 0; }
/** * Function to build a compiled PDF * * @param DoliDB $db Database handler * @param Translate $langs Object langs * @param Conf $conf Object conf * @param string $diroutputpdf Dir to output file * @param string $newlangid Lang id * @param array $filter Array with filters * @param date $dateafterdate Invoice after date * @param date $datebeforedate Invoice before date * @param date $paymentdateafter Payment after date (must includes hour) * @param date $paymentdatebefore Payment before date (must includes hour) * @param int $usestdout Add information onto standard output * @param int $regenerate ''=Use existing PDF files, 'nameofpdf'=Regenerate all PDF files using the template * @param string $option Suffix to add into file name of generated PDF * @param string $paymentbankid Only if payment on this bank account id * @param array $thirdpartiesid List of thirdparties id when using filter excludethirdpartiesid or onlythirdpartiesid * @return int Error code */ function rebuild_merge_pdf($db, $langs, $conf, $diroutputpdf, $newlangid, $filter, $dateafterdate, $datebeforedate, $paymentdateafter, $paymentdatebefore, $usestdout, $regenerate = 0, $option = '', $paymentbankid = '', $thirdpartiesid = '') { $sql = "SELECT DISTINCT f.rowid, f.facnumber"; $sql .= " FROM " . MAIN_DB_PREFIX . "facture as f"; $sqlwhere = ''; $sqlorder = ''; if (in_array('all', $filter)) { $sqlorder = " ORDER BY f.facnumber ASC"; } if (in_array('date', $filter)) { if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= " f.fk_statut > 0"; $sqlwhere .= " AND f.datef >= '" . $db->idate($dateafterdate) . "'"; $sqlwhere .= " AND f.datef <= '" . $db->idate($datebeforedate) . "'"; $sqlorder = " ORDER BY f.datef ASC"; } if (in_array('nopayment', $filter)) { $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "paiement_facture as pf ON f.rowid = pf.fk_facture"; if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= " f.fk_statut > 0"; $sqlwhere .= " AND pf.fk_paiement IS NULL"; } if (in_array('payments', $filter) || in_array('bank', $filter)) { $sql .= ", " . MAIN_DB_PREFIX . "paiement_facture as pf, " . MAIN_DB_PREFIX . "paiement as p"; if (in_array('bank', $filter)) { $sql .= ", " . MAIN_DB_PREFIX . "bank as b"; } if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= " f.fk_statut > 0"; $sqlwhere .= " AND f.rowid = pf.fk_facture"; $sqlwhere .= " AND pf.fk_paiement = p.rowid"; if (in_array('payments', $filter)) { $sqlwhere .= " AND p.datep >= '" . $db->idate($paymentdateafter) . "'"; $sqlwhere .= " AND p.datep <= '" . $db->idate($paymentdatebefore) . "'"; } if (in_array('bank', $filter)) { $sqlwhere .= " AND p.fk_bank = b.rowid"; $sqlwhere .= " AND b.fk_account = " . $paymentbankid; } $sqlorder = " ORDER BY p.datep ASC"; } if (in_array('nodeposit', $filter)) { if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= ' type <> 3'; } if (in_array('noreplacement', $filter)) { if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= ' type <> 1'; } if (in_array('nocreditnote', $filter)) { if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= ' type <> 2'; } if (in_array('excludethirdparties', $filter) && is_array($thirdpartiesid)) { if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= ' f.fk_soc NOT IN (' . join(',', $thirdpartiesid) . ')'; } if (in_array('onlythirdparties', $filter) && is_array($thirdpartiesid)) { if (empty($sqlwhere)) { $sqlwhere = ' WHERE '; } else { $sqlwhere .= " AND"; } $sqlwhere .= ' f.fk_soc IN (' . join(',', $thirdpartiesid) . ')'; } if ($sqlwhere) { $sql .= $sqlwhere; } if ($sqlorder) { $sql .= $sqlorder; } //print $sql; exit; dol_syslog("scripts/invoices/rebuild_merge.php: sql=" . $sql); if ($usestdout) { print '--- start' . "\n"; } // Start of transaction //$db->begin(); $error = 0; $result = 0; $files = array(); // liste les fichiers dol_syslog("scripts/invoices/rebuild_merge.php sql=" . $sql); if ($resql = $db->query($sql)) { $num = $db->num_rows($resql); $cpt = 0; $oldemail = ''; $message = ''; $total = ''; if ($num) { // First loop on each resultset to build PDF // ----------------------------------------- while ($cpt < $num) { $obj = $db->fetch_object($resql); $fac = new Facture($db); $result = $fac->fetch($obj->rowid); if ($result > 0) { $outputlangs = $langs; if (!empty($newlangid)) { if ($outputlangs->defaultlang != $newlangid) { $outputlangs = new Translate("", $conf); $outputlangs->setDefaultLang($newlangid); } } $filename = $conf->facture->dir_output . '/' . $fac->ref . '/' . $fac->ref . '.pdf'; if ($regenerate || !dol_is_file($filename)) { if ($usestdout) { print "Build PDF for invoice " . $obj->facnumber . " - Lang = " . $outputlangs->defaultlang . "\n"; } $result = facture_pdf_create($db, $fac, $regenerate ? $regenerate : $fac->modelpdf, $outputlangs); } else { if ($usestdout) { print "PDF for invoice " . $obj->facnumber . " already exists\n"; } } // Add file into files array $files[] = $filename; } if ($result <= 0) { $error++; if ($usestdout) { print "Error: Failed to build PDF for invoice " . ($fac->ref ? $fac->ref : ' id ' . $obj->rowid) . "\n"; } else { dol_syslog("Failed to build PDF for invoice " . ($fac->ref ? $fac->ref : ' id ' . $obj->rowid), LOG_ERR); } } $cpt++; } // Define format of output PDF $formatarray = pdf_getFormat($langs); $page_largeur = $formatarray['width']; $page_hauteur = $formatarray['height']; $format = array($page_largeur, $page_hauteur); if ($usestdout) { print "Using output PDF format " . join('x', $format) . "\n"; } else { dol_syslog("Using output PDF format " . join('x', $format), LOG_ERR); } // Now, build a merged files with all files in $files array //--------------------------------------------------------- // Create empty PDF $pdf = pdf_getInstance($format); if (class_exists('TCPDF')) { $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); } $pdf->SetFont(pdf_getPDFFont($langs)); if ($conf->global->MAIN_DISABLE_PDF_COMPRESSION) { $pdf->SetCompression(false); } //$pdf->SetCompression(false); //$pdf->Open(); //$pdf->AddPage(); //$title=$langs->trans("BillsCustomersUnpaid"); //if ($option=='late') $title=$langs->trans("BillsCustomersUnpaid"); //$pdf->MultiCell(100, 3, $title, 0, 'J'); // Add all others foreach ($files as $file) { if ($usestdout) { print "Merge PDF file for invoice " . $file . "\n"; } else { dol_syslog("Merge PDF file for invoice " . $file); } // Charge un document PDF depuis un fichier. $pagecount = $pdf->setSourceFile($file); for ($i = 1; $i <= $pagecount; $i++) { $tplidx = $pdf->importPage($i); $s = $pdf->getTemplatesize($tplidx); $pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L'); $pdf->useTemplate($tplidx); } } // Create output dir if not exists dol_mkdir($diroutputpdf); // Save merged file $filename = 'mergedpdf'; if (!empty($option)) { $filename .= '_' . $option; } $file = $diroutputpdf . '/' . $filename . '.pdf'; if (!$error && $pagecount) { $pdf->Output($file, 'F'); if (!empty($conf->global->MAIN_UMASK)) { @chmod($file, octdec($conf->global->MAIN_UMASK)); } } if ($usestdout) { if (!$error) { print "Merged PDF has been built in " . $file . "\n"; } else { print "Can't build PDF " . $file . "\n"; } } $result = 1; } else { if ($usestdout) { print "No invoices found for criteria.\n"; } else { dol_syslog("No invoices found for criteria"); } $result = 0; } } else { dol_print_error($db); dol_syslog("scripts/invoices/rebuild_merge.php: Error"); $error++; } if ($error) { return -1; } else { return $result; } }
/** */ public function testFactureBuild() { global $conf,$user,$langs,$db; $conf=$this->savconf; $user=$this->savuser; $langs=$this->savlangs; $db=$this->savdb; $conf->facture->dir_output.='/temp'; $localobject=new Facture($this->savdb); $localobject->initAsSpecimen(); $localobject->socid=1; // Crabe $localobject->modelpdf='crabe'; $result=facture_pdf_create($db, $localobject, '', $localobject->modelpdf, $langs); $this->assertLessThan($result, 0); print __METHOD__." result=".$result."\n"; // Oursin $localobject->modelpdf='oursin'; $result=facture_pdf_create($db, $localobject, '', $localobject->modelpdf, $langs); $this->assertLessThan($result, 0); print __METHOD__." result=".$result."\n"; return 0; }