Add a tool to merge all invoices in one PDF
This commit is contained in:
parent
57b78e5b06
commit
aec9a9c9f5
@ -66,60 +66,128 @@ if (! isset($argv[1]))
|
|||||||
$diroutputpdf=$conf->facture->dir_output . '/temp';
|
$diroutputpdf=$conf->facture->dir_output . '/temp';
|
||||||
$newmodel=''; // To force a new model
|
$newmodel=''; // To force a new model
|
||||||
$newlangid='en_EN'; // To force a new lang id
|
$newlangid='en_EN'; // To force a new lang id
|
||||||
|
$filter=array();
|
||||||
$option='';
|
$option='';
|
||||||
|
|
||||||
// Define options
|
foreach ($argv as $key => $value)
|
||||||
if ($argv[1] == 'all')
|
|
||||||
{
|
{
|
||||||
$option='all';
|
$found=false;
|
||||||
|
|
||||||
print 'Rebuild PDF for all invoices'."\n";
|
// Define options
|
||||||
if ($argv[2])
|
if (eregi('^lang=',$value))
|
||||||
{
|
{
|
||||||
$newlangid=$argv[2];
|
$found=true;
|
||||||
print 'Use language '.$newlangid."\n";
|
$valarray=split('=',$value);
|
||||||
|
$newlangid=$valarray[1];
|
||||||
|
print 'Use language '.$newlangid.".\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT DISTINCT f.rowid, f.facnumber";
|
if ($value == 'filter=all')
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
|
{
|
||||||
$sql.= " ORDER BY f.facnumber ASC";
|
$found=true;
|
||||||
}
|
$option.='all';
|
||||||
|
$filter[]='all';
|
||||||
|
|
||||||
if ($argv[1] != 'all')
|
print 'Rebuild PDF for all invoices'."\n";
|
||||||
{
|
}
|
||||||
$option=$argv[1].'_'.$argv[2];
|
|
||||||
|
|
||||||
if (! isset($argv[2]))
|
if ($value == 'filter=date')
|
||||||
|
{
|
||||||
|
$found=true;
|
||||||
|
$option.=(empty($option)?'':'_').'date_'.$argv[$key+1].'_'.$argv[$key+2];
|
||||||
|
$filter[]='date';
|
||||||
|
|
||||||
|
$dateafter=dol_stringtotime($argv[$key+1]);
|
||||||
|
$datebefore=dol_stringtotime($argv[$key+2]);
|
||||||
|
print 'Rebuild PDF for invoices validated between '.dol_print_date($dateafter,'day')." and ".dol_print_date($datebefore,'day').".\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($value == 'filter=payments')
|
||||||
|
{
|
||||||
|
$found=true;
|
||||||
|
$option.=(empty($option)?'':'_').'payments_'.$argv[$key+1].'_'.$argv[$key+2];
|
||||||
|
$filter[]='payments';
|
||||||
|
|
||||||
|
$dateafter=dol_stringtotime($argv[$key+1]);
|
||||||
|
$datebefore=dol_stringtotime($argv[$key+2]);
|
||||||
|
print 'Rebuild PDF for invoices with at least one payment between '.dol_print_date($dateafter,'day')." and ".dol_print_date($datebefore,'day').".\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($value == 'filter=nopayment')
|
||||||
|
{
|
||||||
|
$found=true;
|
||||||
|
$option.=(empty($option)?'':'_').'nopayment';
|
||||||
|
$filter[]='nopayment';
|
||||||
|
|
||||||
|
print 'Rebuild PDF for invoices with no payment done yet.'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $found && eregi('filter=',$value))
|
||||||
{
|
{
|
||||||
usage();
|
usage();
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$dateafter=dol_stringtotime($argv[1]);
|
|
||||||
$datebefore=dol_stringtotime($argv[2]);
|
|
||||||
print 'Rebuild PDF for invoices with at least one payment between '.dol_print_date($dateafter,'day')." and ".dol_print_date($datebefore,'day')."\n";
|
|
||||||
if ($argv[3])
|
|
||||||
{
|
|
||||||
$newlangid=$argv[3];
|
|
||||||
print 'Use language '.$newlangid."\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql = "SELECT DISTINCT f.rowid, f.facnumber";
|
|
||||||
//$sql.= " s.nom,";
|
|
||||||
//$sql.= " pf.amount,";
|
|
||||||
//$sql.= " p.datep";
|
|
||||||
$sql.= " FROM ".MAIN_DB_PREFIX."facture as f,";
|
|
||||||
$sql.= " ".MAIN_DB_PREFIX."societe as s,";
|
|
||||||
$sql.= " ".MAIN_DB_PREFIX."paiement_facture as pf,";
|
|
||||||
$sql.= " ".MAIN_DB_PREFIX."paiement as p";
|
|
||||||
$sql.= " WHERE f.fk_soc = s.rowid";
|
|
||||||
$sql.= " AND f.rowid = pf.fk_facture";
|
|
||||||
$sql.= " AND pf.fk_paiement = p.rowid";
|
|
||||||
$sql.= " AND p.datep >= ".$db->idate($dateafter);
|
|
||||||
$sql.= " AND p.datep <= ".$db->idate($datebefore);
|
|
||||||
$sql.= " ORDER BY p.datep ASC";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if an option and a filter has been provided
|
||||||
|
if (empty($option) && sizeof($filter) <= 0)
|
||||||
|
{
|
||||||
|
usage();
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
// Check if there is no uncompatible choice
|
||||||
|
if (in_array('payments',$filter) && in_array('nopayment',$filter))
|
||||||
|
{
|
||||||
|
usage();
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Define SQL and SQL order request to select invoices
|
||||||
|
$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($dateafter);
|
||||||
|
$sqlwhere.= " AND f.datef <= ".$db->idate($datebefore);
|
||||||
|
$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))
|
||||||
|
{
|
||||||
|
$sql.= ", ".MAIN_DB_PREFIX."paiement_facture as pf,";
|
||||||
|
$sql.= " ".MAIN_DB_PREFIX."paiement as p";
|
||||||
|
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";
|
||||||
|
$sqlwhere.= " AND p.datep >= ".$db->idate($dateafter);
|
||||||
|
$sqlwhere.= " AND p.datep <= ".$db->idate($datebefore);
|
||||||
|
$sqlorder = " ORDER BY p.datep ASC";
|
||||||
|
}
|
||||||
|
if ($sqlwhere) $sql.=$sqlwhere;
|
||||||
|
if ($sqlorder) $sql.=$sqlorder;
|
||||||
|
|
||||||
|
//print $sql; exit;
|
||||||
|
dol_syslog("scripts/invoices/rebuild_merge.php: sql=",$sql);
|
||||||
|
|
||||||
print '--- start'."\n";
|
print '--- start'."\n";
|
||||||
|
|
||||||
// Start of transaction
|
// Start of transaction
|
||||||
@ -264,12 +332,16 @@ function usage()
|
|||||||
|
|
||||||
print "Rebuild PDF files for some invoices and merge PDF files into one.\n";
|
print "Rebuild PDF files for some invoices and merge PDF files into one.\n";
|
||||||
print "\n";
|
print "\n";
|
||||||
print "To build/merge PDF for invoices with at least one payment in a range:\n";
|
print "To build/merge PDF for invoices with at least one payment in a date range:\n";
|
||||||
print "Usage: ".$script_file." datefirstpayment datelastpayment [langcode]\n";
|
print "Usage: ".$script_file." filter=payments dateafter datebefore [lang=langcode]\n";
|
||||||
print "Example: ".$script_file." 20080101 20081231 fr_FR\n";
|
print "To build/merge PDF for invoices ina date range:\n";
|
||||||
|
print "Usage: ".$script_file." filter=date dateafter datebefore [lang=langcode]\n";
|
||||||
|
print "To build/merge PDF for all invoices, use filter=all\n";
|
||||||
|
print "Usage: ".$script_file." filter=all\n";
|
||||||
|
print "To build/merge PDF for invoices with no payments, use filter=nopayment\n";
|
||||||
|
print "Usage: ".$script_file." filter=nopayment\n";
|
||||||
print "\n";
|
print "\n";
|
||||||
print "To build/merge PDF for all invoices:\n";
|
print "Example: ".$script_file." filter=payments 20080101 20081231 lang=fr_FR\n";
|
||||||
print "Usage: ".$script_file." all [langcode]\n";
|
print "Example: ".$script_file." filter=all lang=it_IT\n";
|
||||||
print "Example: ".$script_file." all it_IT\n";
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user