mirror of
https://github.com/YunoHost-Apps/dolibarr_ynh.git
synced 2024-09-03 18:35:53 +02:00
433 lines
15 KiB
PHP
433 lines
15 KiB
PHP
<?php
|
|
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
|
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
|
|
* Copyright (C) 2006-2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* \file htdocs/barcode/printsheet.php
|
|
* \ingroup member
|
|
* \brief Page to print sheets with barcodes using the document templates into core/modules/printsheets
|
|
*/
|
|
require '../main.inc.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/modules/printsheet/modules_labels.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/genericobject.class.php';
|
|
|
|
$langs->load("admin");
|
|
$langs->load("members");
|
|
$langs->load("errors");
|
|
|
|
// Choice of print year or current year.
|
|
$now = dol_now();
|
|
$year=dol_print_date($now,'%Y');
|
|
$month=dol_print_date($now,'%m');
|
|
$day=dol_print_date($now,'%d');
|
|
$forbarcode=GETPOST('forbarcode');
|
|
$fk_barcode_type=GETPOST('fk_barcode_type');
|
|
$mode=GETPOST('mode');
|
|
$modellabel=GETPOST("modellabel"); // Doc template to use
|
|
$numberofsticker=GETPOST('numberofsticker','int');
|
|
|
|
$mesg='';
|
|
|
|
$action=GETPOST('action');
|
|
|
|
$producttmp=new Product($db);
|
|
$thirdpartytmp=new Societe($db);
|
|
|
|
|
|
/*
|
|
* Actions
|
|
*/
|
|
|
|
if (GETPOST('submitproduct') && GETPOST('submitproduct'))
|
|
{
|
|
$action=''; // We reset because we don't want to build doc
|
|
if (GETPOST('productid') > 0)
|
|
{
|
|
$producttmp->fetch(GETPOST('productid'));
|
|
$forbarcode=$producttmp->barcode;
|
|
$fk_barcode_type=$thirdpartytmp->barcode_type_code;
|
|
|
|
if (empty($fk_barcode_type) && ! empty($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE)) $fk_barcode_type = $conf->global->PRODUIT_DEFAULT_BARCODE_TYPE;
|
|
|
|
if (empty($forbarcode) || empty($fk_barcode_type))
|
|
{
|
|
setEventMessage($langs->trans("DefinitionOfBarCodeForProductNotComplete",$producttmp->getNomUrl()), 'warnings');
|
|
}
|
|
}
|
|
}
|
|
if (GETPOST('submitthirdparty') && GETPOST('submitthirdparty'))
|
|
{
|
|
$action=''; // We reset because we don't want to build doc
|
|
if (GETPOST('socid') > 0)
|
|
{
|
|
$thirdpartytmp->fetch(GETPOST('socid'));
|
|
$forbarcode=$thirdpartytmp->barcode;
|
|
$fk_barcode_type=$thirdpartytmp->barcode_type_code;
|
|
|
|
if (empty($fk_barcode_type) && ! empty($conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY)) $fk_barcode_type = $conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY;
|
|
|
|
if (empty($forbarcode) || empty($fk_barcode_type))
|
|
{
|
|
setEventMessage($langs->trans("DefinitionOfBarCodeForProductNotComplete",$thirdpartytmp->getNomUrl()), 'warnings');
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($action == 'builddoc')
|
|
{
|
|
$result=0; $error=0;
|
|
|
|
if (empty($forbarcode)) // barcode value
|
|
{
|
|
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("BarcodeValue")),'errors');
|
|
$error++;
|
|
}
|
|
if (empty($fk_barcode_type)) // barcode type = barcode encoding
|
|
{
|
|
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("BarcodeType")),'errors');
|
|
$error++;
|
|
}
|
|
|
|
if (! $error)
|
|
{
|
|
// Get encoder (barcode_type_coder) from barcode type id (barcode_type)
|
|
$stdobject=new GenericObject($db);
|
|
$stdobject->barcode_type=$fk_barcode_type;
|
|
$result=$stdobject->fetch_barcode();
|
|
if ($result <= 0)
|
|
{
|
|
$error++;
|
|
setEventMessage('Failed to get bar code type information '.$stdobject->error, 'errors');
|
|
}
|
|
}
|
|
|
|
if (! $error)
|
|
{
|
|
$code=$forbarcode;
|
|
$generator=$stdobject->barcode_type_coder; // coder (loaded by fetch_barcode). Engine.
|
|
$encoding=strtoupper($stdobject->barcode_type_code); // code (loaded by fetch_barcode). Example 'ean', 'isbn', ...
|
|
|
|
$diroutput=$conf->barcode->dir_temp;
|
|
dol_mkdir($diroutput);
|
|
|
|
// Generate barcode
|
|
$dirbarcode=array_merge(array("/core/modules/barcode/doc/"),$conf->modules_parts['barcode']);
|
|
|
|
foreach($dirbarcode as $reldir)
|
|
{
|
|
$dir=dol_buildpath($reldir,0);
|
|
$newdir=dol_osencode($dir);
|
|
|
|
// Check if directory exists (we do not use dol_is_dir to avoid loading files.lib.php)
|
|
if (! is_dir($newdir)) continue;
|
|
|
|
$result=@include_once $newdir.$generator.'.modules.php';
|
|
if ($result) break;
|
|
}
|
|
|
|
// Load barcode class for generating barcode image
|
|
$classname = "mod".ucfirst($generator);
|
|
$module = new $classname($db);
|
|
if ($generator != 'tcpdfbarcode') {
|
|
$template = 'standardlabel';
|
|
$is2d = false;
|
|
if ($module->encodingIsSupported($encoding))
|
|
{
|
|
$barcodeimage=$conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png';
|
|
dol_delete_file($barcodeimage);
|
|
// File is created with full name $barcodeimage = $conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png';
|
|
$result=$module->writeBarCode($code,$encoding,'Y',4);
|
|
|
|
if ($result <= 0 || ! dol_is_file($barcodeimage))
|
|
{
|
|
$error++;
|
|
setEventMessage('Failed to generate image file of barcode for code='.$code.' encoding='.$encoding.' file='.basename($barcodeimage), 'errors');
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$error++;
|
|
setEventMessage("Error, encoding ".$encoding." is not supported by encoder ".$generator.'. You must choose another barcode type or install a barcode generation engine that support '.$encoding, 'errors');
|
|
}
|
|
} else {
|
|
$template = 'tcpdflabel';
|
|
$encoding = $module->getTcpdfEncodingType($encoding); //convert to TCPDF compatible encoding types
|
|
$is2d = $module->is2d;
|
|
}
|
|
}
|
|
|
|
if (! $error)
|
|
{
|
|
// List of values to scan for a replacement
|
|
$substitutionarray = array (
|
|
'%LOGIN%'=>$user->login,
|
|
'%COMPANY%'=>$mysoc->name,
|
|
'%ADDRESS%'=>$mysoc->address,
|
|
'%ZIP%'=>$mysoc->zip,
|
|
'%TOWN%'=>$mysoc->town,
|
|
'%COUNTRY%'=>$mysoc->country,
|
|
'%COUNTRY_CODE%'=>$mysoc->country_code,
|
|
'%EMAIL%'=>$mysoc->email,
|
|
'%YEAR%'=>$year,
|
|
'%MONTH%'=>$month,
|
|
'%DAY%'=>$day,
|
|
'%DOL_MAIN_URL_ROOT%'=>DOL_MAIN_URL_ROOT,
|
|
'%SERVER%'=>"http://".$_SERVER["SERVER_NAME"]."/"
|
|
);
|
|
complete_substitutions_array($substitutionarray, $langs);
|
|
|
|
// For labels
|
|
if ($mode == 'label')
|
|
{
|
|
|
|
$txtforsticker="%PHOTO%"; // Photo will be barcode image, %BARCODE% posible when using TCPDF generator
|
|
$textleft=make_substitutions((empty($conf->global->BARCODE_LABEL_LEFT_TEXT)?$txtforsticker:$conf->global->BARCODE_LABEL_LEFT_TEXT), $substitutionarray);
|
|
$textheader=make_substitutions((empty($conf->global->BARCODE_LABEL_HEADER_TEXT)?'':$conf->global->BARCODE_LABEL_HEADER_TEXT), $substitutionarray);
|
|
$textfooter=make_substitutions((empty($conf->global->BARCODE_LABEL_FOOTER_TEXT)?'':$conf->global->BARCODE_LABEL_FOOTER_TEXT), $substitutionarray);
|
|
$textright=make_substitutions((empty($conf->global->BARCODE_LABEL_RIGHT_TEXT)?'':$conf->global->BARCODE_LABEL_RIGHT_TEXT), $substitutionarray);
|
|
$forceimgscalewidth=(empty($conf->global->BARCODE_FORCEIMGSCALEWIDTH)?1:$conf->global->BARCODE_FORCEIMGSCALEWIDTH);
|
|
$forceimgscaleheight=(empty($conf->global->BARCODE_FORCEIMGSCALEHEIGHT)?1:$conf->global->BARCODE_FORCEIMGSCALEHEIGHT);
|
|
|
|
for ($i=0; $i < $numberofsticker; $i++)
|
|
{
|
|
$arrayofmembers[]=array(
|
|
'textleft'=>$textleft,
|
|
'textheader'=>$textheader,
|
|
'textfooter'=>$textfooter,
|
|
'textright'=>$textright,
|
|
'code'=>$code,
|
|
'encoding'=>$encoding,
|
|
'is2d'=>$is2d,
|
|
'photo'=>$barcodeimage // Photo must be a file that exists with format supported by TCPDF
|
|
);
|
|
}
|
|
}
|
|
|
|
$i++;
|
|
$mesg='';
|
|
|
|
// Build and output PDF
|
|
if ($mode == 'label')
|
|
{
|
|
if (! count($arrayofmembers))
|
|
{
|
|
$mesg=$langs->trans("ErrorRecordNotFound");
|
|
}
|
|
if (empty($modellabel) || $modellabel == '-1')
|
|
{
|
|
$mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("DescADHERENT_ETIQUETTE_TYPE"));
|
|
}
|
|
if (! $mesg) $result=members_label_pdf_create($db, $arrayofmembers, $modellabel, $outputlangs, $diroutput, $template);
|
|
}
|
|
|
|
if ($result <= 0)
|
|
{
|
|
dol_print_error('',$result);
|
|
}
|
|
|
|
if (! $mesg)
|
|
{
|
|
$db->close();
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* View
|
|
*/
|
|
|
|
if (empty($conf->barcode->enabled)) accessforbidden();
|
|
|
|
$form=new Form($db);
|
|
|
|
llxHeader('',$langs->trans("BarCodePrintsheet"));
|
|
|
|
print_fiche_titre($langs->trans("BarCodePrintsheet"));
|
|
print '<br>';
|
|
|
|
print $langs->trans("PageToGenerateBarCodeSheets",$langs->transnoentitiesnoconv("BuildPageToPrint")).'<br>';
|
|
print '<br>';
|
|
|
|
dol_htmloutput_errors($mesg);
|
|
|
|
//print img_picto('','puce').' '.$langs->trans("PrintsheetForOneBarCode").'<br>';
|
|
//print '<br>';
|
|
|
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
|
print '<input type="hidden" name="mode" value="label">';
|
|
print '<input type="hidden" name="action" value="builddoc">';
|
|
|
|
print '<div class="tagtable">';
|
|
|
|
// Sheet format
|
|
print ' <div class="tagtr">';
|
|
print ' <div class="tagtd" style="overflow: hidden; white-space: nowrap; max-width: 300px;">';
|
|
print $langs->trans("DescADHERENT_ETIQUETTE_TYPE").' ';
|
|
print '</div><div class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;">';
|
|
// List of possible labels (defined into $_Avery_Labels variable set into format_cards.lib.php)
|
|
$arrayoflabels=array();
|
|
foreach(array_keys($_Avery_Labels) as $codecards)
|
|
{
|
|
$arrayoflabels[$codecards]=$_Avery_Labels[$codecards]['name'];
|
|
}
|
|
print $form->selectarray('modellabel',$arrayoflabels,(GETPOST('modellabel')?GETPOST('modellabel'):$conf->global->ADHERENT_ETIQUETTE_TYPE),1,0,0);
|
|
print '</div></div>';
|
|
|
|
// Number of stickers to print
|
|
print ' <div class="tagtr">';
|
|
print ' <div class="tagtd" style="overflow: hidden; white-space: nowrap; max-width: 300px;">';
|
|
print $langs->trans("NumberOfStickers").' ';
|
|
print '</div><div class="tagtd maxwidthonsmartphone" style="overflow: hidden; white-space: nowrap;">';
|
|
print '<input size="4" type="text" name="numberofsticker" value="'.(GETPOST('numberofsticker')?GETPOST('numberofsticker','int'):10).'">';
|
|
print '</div></div>';
|
|
|
|
print '</div>';
|
|
|
|
|
|
print '<br>';
|
|
|
|
|
|
// Add javascript to make choice dynamic
|
|
print '<script type="text/javascript" language="javascript">
|
|
jQuery(document).ready(function() {
|
|
function init_selectors()
|
|
{
|
|
if (jQuery("#fillmanually:checked").val() == "fillmanually")
|
|
{
|
|
jQuery("#submitproduct").prop("disabled", true);
|
|
jQuery("#submitthirdparty").prop("disabled", true);
|
|
jQuery("#search_productid").prop("disabled", true);
|
|
jQuery("#socid").prop("disabled", true);
|
|
jQuery(".showforproductselector").hide();
|
|
jQuery(".showforthirdpartyselector").hide();
|
|
}
|
|
if (jQuery("#fillfromproduct:checked").val() == "fillfromproduct")
|
|
{
|
|
jQuery("#submitproduct").removeAttr("disabled");
|
|
jQuery("#submitthirdparty").prop("disabled", true);
|
|
jQuery("#search_productid").removeAttr("disabled");
|
|
jQuery("#socid").prop("disabled", true);
|
|
jQuery(".showforproductselector").show();
|
|
jQuery(".showforthirdpartyselector").hide();
|
|
}
|
|
if (jQuery("#fillfromthirdparty:checked").val() == "fillfromthirdparty")
|
|
{
|
|
jQuery("#submitproduct").prop("disabled", true);
|
|
jQuery("#submitthirdparty").removeAttr("disabled");
|
|
jQuery("#search_productid").prop("disabled", true);
|
|
jQuery("#socid").removeAttr("disabled");
|
|
jQuery(".showforproductselector").hide();
|
|
jQuery(".showforthirdpartyselector").show();
|
|
}
|
|
}
|
|
init_selectors();
|
|
jQuery(".radiobarcodeselect").click(function() {
|
|
init_selectors();
|
|
});
|
|
|
|
function init_gendoc_button()
|
|
{
|
|
if (jQuery("#select_fk_barcode_type").val() > 0 && jQuery("#forbarcode").val())
|
|
{
|
|
jQuery("#submitformbarcodegen").removeAttr("disabled");
|
|
}
|
|
else
|
|
{
|
|
jQuery("#submitformbarcodegen").prop("disabled", true);
|
|
}
|
|
}
|
|
init_gendoc_button();
|
|
jQuery("#select_fk_barcode_type").change(function() {
|
|
init_gendoc_button();
|
|
});
|
|
jQuery("#forbarcode").keyup(function() {
|
|
init_gendoc_button()
|
|
});
|
|
});
|
|
</script>';
|
|
|
|
// Checkbox to select from free text
|
|
print '<input id="fillmanually" type="radio" '.((! GETPOST("selectorforbarcode") || GETPOST("selectorforbarcode")=='fillmanually')?'checked ':'').'name="selectorforbarcode" value="fillmanually" class="radiobarcodeselect"> '.$langs->trans("FillBarCodeTypeAndValueManually").' ';
|
|
print '<br>';
|
|
|
|
print '<input id="fillfromproduct" type="radio" '.((GETPOST("selectorforbarcode")=='fillfromproduct')?'checked ':'').'name="selectorforbarcode" value="fillfromproduct" class="radiobarcodeselect"> '.$langs->trans("FillBarCodeTypeAndValueFromProduct").' ';
|
|
print '<br>';
|
|
print '<div class="showforproductselector">';
|
|
$form->select_produits(GETPOST('productid'), 'productid', '');
|
|
print ' <input type="submit" id="submitproduct" name="submitproduct" class="button" value="'.(dol_escape_htmltag($langs->trans("GetBarCode"))).'">';
|
|
print '</div>';
|
|
|
|
print '<input id="fillfromthirdparty" type="radio" '.((GETPOST("selectorforbarcode")=='fillfromthirdparty')?'checked ':'').'name="selectorforbarcode" value="fillfromthirdparty" class="radiobarcodeselect"> '.$langs->trans("FillBarCodeTypeAndValueFromThirdParty").' ';
|
|
print '<br>';
|
|
print '<div class="showforthirdpartyselector">';
|
|
print $form->select_company(GETPOST('socid'), 'socid', '', 1, 0, 0, array(), 0, 'minwidth300');
|
|
print ' <input type="submit" id="submitthirdparty" name="submitthirdparty" class="button showforthirdpartyselector" value="'.(dol_escape_htmltag($langs->trans("GetBarCode"))).'">';
|
|
print '</div>';
|
|
|
|
print '<br>';
|
|
|
|
if ($producttmp->id > 0)
|
|
{
|
|
print $langs->trans("BarCodeDataForProduct",$producttmp->getNomUrl(1)).'<br>';
|
|
}
|
|
if ($thirdpartytmp->id > 0)
|
|
{
|
|
print $langs->trans("BarCodeDataForThirdparty",$thirdpartytmp->getNomUrl(1)).'<br>';
|
|
}
|
|
|
|
print '<div class="tagtable">';
|
|
|
|
// Barcode type
|
|
print ' <div class="tagtr">';
|
|
print ' <div class="tagtd" style="overflow: hidden; white-space: nowrap; max-width: 300px;">';
|
|
print $langs->trans("BarcodeType").' ';
|
|
print '</div><div class="tagtd" style="overflow: hidden; white-space: nowrap; max-width: 300px;">';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formbarcode.class.php';
|
|
$formbarcode = new FormBarCode($db);
|
|
$formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1);
|
|
print '</div></div>';
|
|
|
|
// Barcode value
|
|
print ' <div class="tagtr">';
|
|
print ' <div class="tagtd" style="overflow: hidden; white-space: nowrap; max-width: 300px;">';
|
|
print $langs->trans("BarcodeValue").' ';
|
|
print '</div><div class="tagtd" style="overflow: hidden; white-space: nowrap; max-width: 300px;">';
|
|
print '<input size="16" type="text" name="forbarcode" id="forbarcode" value="'.$forbarcode.'">';
|
|
print '</div></div>';
|
|
|
|
/*
|
|
$barcodestickersmask=GETPOST('barcodestickersmask');
|
|
print '<br>'.$langs->trans("BarcodeStickersMask").':<br>';
|
|
print '<textarea cols="40" type="text" name="barcodestickersmask" value="'.GETPOST('barcodestickersmask').'">'.$barcodestickersmask.'</textarea>';
|
|
print '<br>';
|
|
*/
|
|
|
|
print '</div>';
|
|
|
|
print '<br><input class="button" type="submit" id="submitformbarcodegen" '.((GETPOST("selectorforbarcode") && GETPOST("selectorforbarcode"))?'':'disabled ').'value="'.$langs->trans("BuildPageToPrint").'">';
|
|
|
|
print '</form>';
|
|
print '<br>';
|
|
|
|
llxFooter();
|
|
|
|
$db->close();
|