mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2026-02-10 09:52:33 +01:00
@@ -6,7 +6,7 @@
|
||||
* Copyright (C) 2004 Andre Cianfarani <acianfa@free.fr>
|
||||
* Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr>
|
||||
* Copyright (C) 2008 Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
|
||||
* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2011-2012 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2011 Philippe Grand <philippe.grand@atoo-net.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -375,98 +375,119 @@ print "</tr>\n";
|
||||
|
||||
clearstatcache();
|
||||
|
||||
$var=true;
|
||||
foreach ($conf->file->dol_document_root as $dirroot)
|
||||
{
|
||||
$dir = $dirroot . "/core/modules/commande/";
|
||||
foreach (array('','/doc') as $valdir)
|
||||
{
|
||||
$dir = $dirroot . "/core/modules/commande".$valdir;
|
||||
|
||||
if (is_dir($dir))
|
||||
{
|
||||
$handle = opendir($dir);
|
||||
if (is_resource($handle))
|
||||
{
|
||||
$var=true;
|
||||
while (($file = readdir($handle))!==false)
|
||||
{
|
||||
if (preg_match('/\.modules\.php$/i',$file) && substr($file,0,4) == 'pdf_')
|
||||
{
|
||||
$name = substr($file, 4, dol_strlen($file) -16);
|
||||
$classname = substr($file, 0, dol_strlen($file) -12);
|
||||
if (is_dir($dir))
|
||||
{
|
||||
$handle=opendir($dir);
|
||||
if (is_resource($handle))
|
||||
{
|
||||
while (($file = readdir($handle))!==false)
|
||||
{
|
||||
$filelist[]=$file;
|
||||
}
|
||||
closedir($handle);
|
||||
|
||||
$var=!$var;
|
||||
print "<tr ".$bc[$var].">\n <td>";
|
||||
print "$name";
|
||||
print "</td>\n <td>\n";
|
||||
require_once($dir.$file);
|
||||
$module = new $classname($db);
|
||||
print $module->description;
|
||||
print "</td>\n";
|
||||
|
||||
// Activated
|
||||
print "<td align=\"center\">\n";
|
||||
if (in_array($name, $def))
|
||||
{
|
||||
//if ($conf->global->COMMANDE_ADDON_PDF != "$name")
|
||||
//{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">';
|
||||
print img_picto($langs->trans("Activated"),'switch_on');
|
||||
print '</a>';
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// print img_picto($langs->trans("Activated"),'switch_on');
|
||||
//}
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">';
|
||||
print img_picto($langs->trans("Disabled"),'switch_off');
|
||||
print '</a>';
|
||||
}
|
||||
print "</td>";
|
||||
|
||||
// Defaut
|
||||
print "<td align=\"center\">";
|
||||
if ($conf->global->COMMANDE_ADDON_PDF == "$name")
|
||||
{
|
||||
print img_picto($langs->trans("Yes"),'on');
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">';
|
||||
print img_picto($langs->trans("No"),'off');
|
||||
print '</a>';
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
// Info
|
||||
$htmltooltip = ''.$langs->trans("Name").': '.$module->name;
|
||||
$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown"));
|
||||
if ($module->type == 'pdf')
|
||||
foreach($filelist as $file)
|
||||
{
|
||||
if (preg_match('/\.modules\.php$/i',$file) && preg_match('/^(pdf_|doc_)/',$file))
|
||||
{
|
||||
$htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
||||
if (file_exists($dir.'/'.$file))
|
||||
{
|
||||
$name = substr($file, 4, dol_strlen($file) -16);
|
||||
$classname = substr($file, 0, dol_strlen($file) -12);
|
||||
|
||||
require_once($dir.'/'.$file);
|
||||
$module = new $classname($db);
|
||||
|
||||
$modulequalified=1;
|
||||
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0;
|
||||
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0;
|
||||
|
||||
if ($modulequalified)
|
||||
{
|
||||
$var = !$var;
|
||||
print '<tr '.$bc[$var].'><td width="100">';
|
||||
print (empty($module->name)?$name:$module->name);
|
||||
print "</td><td>\n";
|
||||
if (method_exists($module,'info')) print $module->info($langs);
|
||||
else print $module->description;
|
||||
print '</td>';
|
||||
|
||||
// Active
|
||||
if (in_array($name, $def))
|
||||
{
|
||||
print '<td align="center">'."\n";
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'">';
|
||||
print img_picto($langs->trans("Enabled"),'switch_on');
|
||||
print '</a>';
|
||||
print '</td>';
|
||||
}
|
||||
else
|
||||
{
|
||||
print "<td align=\"center\">\n";
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
|
||||
print "</td>";
|
||||
}
|
||||
|
||||
// Defaut
|
||||
print "<td align=\"center\">";
|
||||
if ($conf->global->PROPALE_ADDON_PDF == "$name")
|
||||
{
|
||||
print img_picto($langs->trans("Default"),'on');
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
// Info
|
||||
$htmltooltip = ''.$langs->trans("Name").': '.$module->name;
|
||||
$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown"));
|
||||
if ($module->type == 'pdf')
|
||||
{
|
||||
$htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
||||
}
|
||||
$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
||||
$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang,1,1);
|
||||
//$htmltooltip.='<br>'.$langs->trans("Escompte").': '.yn($module->option_escompte,1,1);
|
||||
//$htmltooltip.='<br>'.$langs->trans("CreditNote").': '.yn($module->option_credit_note,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark,1,1);
|
||||
|
||||
|
||||
print '<td align="center">';
|
||||
print $form->textwithpicto('',$htmltooltip,1,0);
|
||||
print '</td>';
|
||||
|
||||
// Preview
|
||||
print '<td align="center">';
|
||||
if ($module->type == 'pdf')
|
||||
{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"),'bill').'</a>';
|
||||
}
|
||||
else
|
||||
{
|
||||
print img_object($langs->trans("PreviewNotAvailable"),'generic');
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
print "</tr>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
||||
$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang,1,1);
|
||||
//$htmltooltip.='<br>'.$langs->trans("Escompte").': '.yn($module->option_escompte,1,1);
|
||||
//$htmltooltip.='<br>'.$langs->trans("CreditNote").': '.yn($module->option_credit_note,1,1);
|
||||
$htmltooltip.='<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark,1,1);
|
||||
|
||||
print '<td align="center">';
|
||||
print $form->textwithpicto('',$htmltooltip,1,0);
|
||||
print '</td>';
|
||||
print '<td align="center">';
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"),'order').'</a>';
|
||||
print '</td>';
|
||||
|
||||
print "</tr>\n";
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
|
||||
@@ -0,0 +1,495 @@
|
||||
<?php
|
||||
/* Copyright (C) 2010-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||
*
|
||||
* 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 2 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/>.
|
||||
* or see http://www.gnu.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/modules/commande/doc_generic_order_odt.modules.php
|
||||
* \ingroup societe
|
||||
* \brief File of class to build ODT documents for third parties
|
||||
*/
|
||||
|
||||
require_once(DOL_DOCUMENT_ROOT."/core/modules/commande/modules_commande.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
|
||||
require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
|
||||
|
||||
|
||||
/**
|
||||
* \class doc_generic_order_odt
|
||||
* \brief Class to build documents using ODF templates generator
|
||||
*/
|
||||
class doc_generic_order_odt extends ModelePDFCommandes
|
||||
{
|
||||
var $emetteur; // Objet societe qui emet
|
||||
|
||||
var $phpmin = array(5,2,0); // Minimum version of PHP required by module
|
||||
var $version = 'development';
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $DB Database handler
|
||||
*/
|
||||
function doc_generic_order_odt($db)
|
||||
{
|
||||
global $conf,$langs,$mysoc;
|
||||
|
||||
$langs->load("main");
|
||||
$langs->load("companies");
|
||||
|
||||
$this->db = $db;
|
||||
$this->name = "ODT templates";
|
||||
$this->description = $langs->trans("DocumentModelOdt");
|
||||
$this->scandir = 'COMMANDE_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan
|
||||
|
||||
// Dimension page pour format A4
|
||||
$this->type = 'odt';
|
||||
$this->page_largeur = 0;
|
||||
$this->page_hauteur = 0;
|
||||
$this->format = array($this->page_largeur,$this->page_hauteur);
|
||||
$this->marge_gauche=0;
|
||||
$this->marge_droite=0;
|
||||
$this->marge_haute=0;
|
||||
$this->marge_basse=0;
|
||||
|
||||
$this->option_logo = 1; // Affiche logo
|
||||
$this->option_tva = 0; // Gere option tva COMMANDE_TVAOPTION
|
||||
$this->option_modereg = 0; // Affiche mode reglement
|
||||
$this->option_condreg = 0; // Affiche conditions reglement
|
||||
$this->option_codeproduitservice = 0; // Affiche code produit-service
|
||||
$this->option_multilang = 0; // Dispo en plusieurs langues
|
||||
$this->option_escompte = 0; // Affiche si il y a eu escompte
|
||||
$this->option_credit_note = 0; // Support credit notes
|
||||
$this->option_freetext = 1; // Support add of a personalised text
|
||||
$this->option_draft_watermark = 0; // Support add of a watermark on drafts
|
||||
|
||||
// Recupere emetteur
|
||||
$this->emetteur=$mysoc;
|
||||
if (! $this->emetteur->pays_code) $this->emetteur->pays_code=substr($langs->defaultlang,-2); // Par defaut, si n'etait pas defini
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Define array with couple substitution key => substitution value
|
||||
*
|
||||
* @param Object $object Main object to use as data source
|
||||
* @param Translate $outputlangs Lang object to use for output
|
||||
*/
|
||||
function get_substitutionarray_object($object,$outputlangs)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
return array(
|
||||
'object_id'=>$object->id,
|
||||
'object_ref'=>$object->ref,
|
||||
'object_ref_ext'=>$object->ref_ext,
|
||||
'object_ref_customer'=>$object->ref_client,
|
||||
'object_date'=>dol_print_date($object->date,'day'),
|
||||
'object_fin_validite'=>dol_print_date($object->fin_validite,'dayhour'),
|
||||
'object_date_creation'=>dol_print_date($object->date_creation,'day'),
|
||||
'object_date_modification'=>dol_print_date($object->date_modification,'day'),
|
||||
'object_date_validation'=>dol_print_date($object->date_validation,'dayhour'),
|
||||
'object_payment_mode'=>$object->mode_reglement,
|
||||
'object_payment_term'=>$object->cond_reglement,
|
||||
'object_total_ht'=>price($object->total_ht,0,$outputlangs),
|
||||
'object_total_vat'=>price($object->total_tva,0,$outputlangs),
|
||||
'object_total_ttc'=>price($object->total_ttc,0,$outputlangs),
|
||||
'object_vatrate'=>vatrate($object->tva),
|
||||
'object_note_private'=>$object->note,
|
||||
'object_note'=>$object->note_public,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define array with couple substitution key => substitution value
|
||||
*
|
||||
* @param array $line
|
||||
* @param Translate $outputlangs Lang object to use for output
|
||||
*/
|
||||
function get_substitutionarray_lines($line,$outputlangs)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
return array(
|
||||
'line_fulldesc'=>$line->product_ref.(($line->product_ref && $line->desc)?' - ':'').$line->desc,
|
||||
'line_product_ref'=>$line->product_ref,
|
||||
'line_desc'=>$line->desc,
|
||||
'line_vatrate'=>vatrate($line->tva_tx,true,$line->info_bits),
|
||||
'line_up'=>price($line->subprice, 0, $outputlangs),
|
||||
'line_qty'=>$line->qty,
|
||||
'line_discount_percent'=>($line->remise_percent?$line->remise_percent.'%':''),
|
||||
'line_price_ht'=>price($line->total_ht, 0, $outputlangs),
|
||||
'line_price_ttc'=>price($line->total_ttc, 0, $outputlangs),
|
||||
'line_price_vat'=>price($line->total_tva, 0, $outputlangs),
|
||||
'line_date_start'=>$line->date_start,
|
||||
'line_date_end'=>$line->date_end
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return description of a module
|
||||
* @param langs Lang object to use for output
|
||||
* @return string Description
|
||||
*/
|
||||
function info($langs)
|
||||
{
|
||||
global $conf,$langs;
|
||||
|
||||
$langs->load("companies");
|
||||
$langs->load("errors");
|
||||
|
||||
$form = new Form($this->db);
|
||||
|
||||
$texte = $this->description.".<br>\n";
|
||||
$texte.= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
$texte.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
$texte.= '<input type="hidden" name="action" value="setModuleOptions">';
|
||||
$texte.= '<input type="hidden" name="param1" value="COMMANDE_ADDON_PDF_ODT_PATH">';
|
||||
$texte.= '<table class="nobordernopadding" width="100%">';
|
||||
|
||||
// List of directories area
|
||||
$texte.= '<tr><td>';
|
||||
$texttitle=$langs->trans("ListOfDirectories");
|
||||
$listofdir=explode(',',preg_replace('/[\r\n]+/',',',trim($conf->global->COMMANDE_ADDON_PDF_ODT_PATH)));
|
||||
$listoffiles=array();
|
||||
foreach($listofdir as $key=>$tmpdir)
|
||||
{
|
||||
$tmpdir=trim($tmpdir);
|
||||
$tmpdir=preg_replace('/DOL_DATA_ROOT/',DOL_DATA_ROOT,$tmpdir);
|
||||
if (! $tmpdir) { unset($listofdir[$key]); continue; }
|
||||
if (! is_dir($tmpdir)) $texttitle.=img_warning($langs->trans("ErrorDirNotFound",$tmpdir),0);
|
||||
else
|
||||
{
|
||||
$tmpfiles=dol_dir_list($tmpdir,'files',0,'\.odt');
|
||||
if (count($tmpfiles)) $listoffiles=array_merge($listoffiles,$tmpfiles);
|
||||
}
|
||||
}
|
||||
$texthelp=$langs->trans("ListOfDirectoriesForModelGenODT");
|
||||
// Add list of substitution keys
|
||||
$texthelp.='<br>'.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'<br>';
|
||||
$texthelp.=$langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it
|
||||
|
||||
$texte.= $form->textwithpicto($texttitle,$texthelp,1,'help','',1);
|
||||
$texte.= '<table><tr><td>';
|
||||
$texte.= '<textarea class="flat" cols="60" name="value1">';
|
||||
$texte.=$conf->global->COMMANDE_ADDON_PDF_ODT_PATH;
|
||||
$texte.= '</textarea>';
|
||||
$texte.= '</td>';
|
||||
$texte.= '<td align="center"> ';
|
||||
$texte.= '<input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button">';
|
||||
$texte.= '</td>';
|
||||
$texte.= '</tr>';
|
||||
$texte.= '</table>';
|
||||
|
||||
// Scan directories
|
||||
if (count($listofdir)) $texte.=$langs->trans("NumberOfModelFilesFound").': <b>'.count($listoffiles).'</b>';
|
||||
|
||||
$texte.= '</td>';
|
||||
|
||||
|
||||
$texte.= '<td valign="top" rowspan="2">';
|
||||
$texte.= $langs->trans("ExampleOfDirectoriesForModelGen");
|
||||
$texte.= '</td>';
|
||||
$texte.= '</tr>';
|
||||
|
||||
/*$texte.= '<tr>';
|
||||
$texte.= '<td align="center">';
|
||||
$texte.= '<input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button">';
|
||||
$texte.= '</td>';
|
||||
$texte.= '</tr>';*/
|
||||
|
||||
$texte.= '</table>';
|
||||
$texte.= '</form>';
|
||||
|
||||
return $texte;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to build a document on disk using the generic odt module.
|
||||
*
|
||||
* @param Commande $object Object source to build document
|
||||
* @param Translate $outputlangs Lang output object
|
||||
* @param string $srctemplatepath Full path of source filename for generator using a template file
|
||||
* @return int 1 if OK, <=0 if KO
|
||||
*/
|
||||
function write_file($object,$outputlangs,$srctemplatepath)
|
||||
{
|
||||
global $user,$langs,$conf,$mysoc;
|
||||
|
||||
if (empty($srctemplatepath))
|
||||
{
|
||||
dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (! is_object($outputlangs)) $outputlangs=$langs;
|
||||
$sav_charset_output=$outputlangs->charset_output;
|
||||
$outputlangs->charset_output='UTF-8';
|
||||
|
||||
$outputlangs->load("main");
|
||||
$outputlangs->load("dict");
|
||||
$outputlangs->load("companies");
|
||||
$outputlangs->load("bills");
|
||||
|
||||
if ($conf->commande->dir_output)
|
||||
{
|
||||
// If $object is id instead of object
|
||||
if (! is_object($object))
|
||||
{
|
||||
$id = $object;
|
||||
$object = new Commande($this->db);
|
||||
$result=$object->fetch($id);
|
||||
if ($result < 0)
|
||||
{
|
||||
dol_print_error($this->db,$object->error);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
$dir = $conf->commande->dir_output;
|
||||
$objectref = dol_sanitizeFileName($object->ref);
|
||||
if (! preg_match('/specimen/i',$objectref)) $dir.= "/" . $objectref;
|
||||
$file = $dir . "/" . $objectref . ".odt";
|
||||
|
||||
if (! file_exists($dir))
|
||||
{
|
||||
if (create_exdir($dir) < 0)
|
||||
{
|
||||
$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (file_exists($dir))
|
||||
{
|
||||
//print "srctemplatepath=".$srctemplatepath; // Src filename
|
||||
$newfile=basename($srctemplatepath);
|
||||
$newfiletmp=preg_replace('/\.odt/i','',$newfile);
|
||||
$newfiletmp=preg_replace('/template_/i','',$newfiletmp);
|
||||
$newfiletmp=preg_replace('/modele_/i','',$newfiletmp);
|
||||
$newfiletmp=$objectref.'_'.$newfiletmp;
|
||||
//$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt';
|
||||
$file=$dir.'/'.$newfiletmp.'.odt';
|
||||
//print "newdir=".$dir;
|
||||
//print "newfile=".$newfile;
|
||||
//print "file=".$file;
|
||||
//print "conf->societe->dir_temp=".$conf->societe->dir_temp;
|
||||
|
||||
create_exdir($conf->commande->dir_temp);
|
||||
|
||||
|
||||
// If BILLING contact defined on invoice, we use it
|
||||
$usecontact=false;
|
||||
$arrayidcontact=$object->getIdContact('external','BILLING');
|
||||
if (count($arrayidcontact) > 0)
|
||||
{
|
||||
$usecontact=true;
|
||||
$result=$object->fetch_contact($arrayidcontact[0]);
|
||||
}
|
||||
|
||||
// Recipient name
|
||||
if (! empty($usecontact))
|
||||
{
|
||||
// On peut utiliser le nom de la societe du contact
|
||||
if ($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) $socobject = $object->contact;
|
||||
else $socobject = $object->client;
|
||||
}
|
||||
else
|
||||
{
|
||||
$socobject=$object->client;
|
||||
}
|
||||
|
||||
// Make substitution
|
||||
$substitutionarray=array(
|
||||
'__FROM_NAME__' => $this->emetteur->nom,
|
||||
'__FROM_EMAIL__' => $this->emetteur->email,
|
||||
'__TOTAL_TTC__' => $object->total_ttc,
|
||||
'__TOTAL_HT__' => $object->total_ht,
|
||||
'__TOTAL_VAT__' => $object->total_vat
|
||||
);
|
||||
complete_substitutions_array($substitutionarray, $langs, $object);
|
||||
|
||||
// Line of free text
|
||||
$newfreetext='';
|
||||
$paramfreetext='COMMANDE_FREE_TEXT';
|
||||
if (! empty($conf->global->$paramfreetext))
|
||||
{
|
||||
$newfreetext=make_substitutions($conf->global->$paramfreetext,$substitutionarray);
|
||||
}
|
||||
|
||||
// Open and load template
|
||||
require_once(ODTPHP_PATH.'odf.php');
|
||||
$odfHandler = new odf($srctemplatepath, array(
|
||||
'PATH_TO_TMP' => $conf->commande->dir_temp,
|
||||
'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
|
||||
'DELIMITER_LEFT' => '{',
|
||||
'DELIMITER_RIGHT' => '}')
|
||||
);
|
||||
// After construction $odfHandler->contentXml contains content and
|
||||
// [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by
|
||||
// [!-- BEGIN lines --]*[!-- END lines --]
|
||||
//print html_entity_decode($odfHandler->__toString());
|
||||
//print exit;
|
||||
|
||||
|
||||
// Make substitutions into odt of freetext
|
||||
try {
|
||||
$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
|
||||
}
|
||||
catch(OdfException $e)
|
||||
{
|
||||
}
|
||||
|
||||
// Make substitutions into odt of user info
|
||||
$tmparray=$this->get_substitutionarray_user($user,$outputlangs);
|
||||
//var_dump($tmparray); exit;
|
||||
foreach($tmparray as $key=>$value)
|
||||
{
|
||||
try {
|
||||
if (preg_match('/logo$/',$key)) // Image
|
||||
{
|
||||
//var_dump($value);exit;
|
||||
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||
}
|
||||
else // Text
|
||||
{
|
||||
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||
}
|
||||
}
|
||||
catch(OdfException $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
// Make substitutions into odt of mysoc
|
||||
$tmparray=$this->get_substitutionarray_mysoc($mysoc,$outputlangs);
|
||||
//var_dump($tmparray); exit;
|
||||
foreach($tmparray as $key=>$value)
|
||||
{
|
||||
try {
|
||||
if (preg_match('/logo$/',$key)) // Image
|
||||
{
|
||||
//var_dump($value);exit;
|
||||
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||
}
|
||||
else // Text
|
||||
{
|
||||
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||
}
|
||||
}
|
||||
catch(OdfException $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
// Make substitutions into odt of thirdparty
|
||||
$tmparray=$this->get_substitutionarray_thirdparty($socobject,$outputlangs);
|
||||
foreach($tmparray as $key=>$value)
|
||||
{
|
||||
try {
|
||||
if (preg_match('/logo$/',$key)) // Image
|
||||
{
|
||||
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||
}
|
||||
else // Text
|
||||
{
|
||||
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||
}
|
||||
}
|
||||
catch(OdfException $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
// Replace tags of object + external modules
|
||||
$tmparray=$this->get_substitutionarray_object($object,$outputlangs);
|
||||
complete_substitutions_array($tmparray, $outputlangs, $object);
|
||||
foreach($tmparray as $key=>$value)
|
||||
{
|
||||
try {
|
||||
if (preg_match('/logo$/',$key)) // Image
|
||||
{
|
||||
if (file_exists($value)) $odfHandler->setImage($key, $value);
|
||||
else $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
|
||||
}
|
||||
else // Text
|
||||
{
|
||||
$odfHandler->setVars($key, $value, true, 'UTF-8');
|
||||
}
|
||||
}
|
||||
catch(OdfException $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
// Replace tags of lines
|
||||
try
|
||||
{
|
||||
$listlines = $odfHandler->setSegment('lines');
|
||||
foreach ($object->lines as $line)
|
||||
{
|
||||
$tmparray=$this->get_substitutionarray_lines($line,$outputlangs);
|
||||
foreach($tmparray as $key => $val)
|
||||
{
|
||||
try
|
||||
{
|
||||
$listlines->setVars($key, $val, true, 'UTF-8');
|
||||
}
|
||||
catch(OdfException $e)
|
||||
{
|
||||
}
|
||||
catch(SegmentException $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
$listlines->merge();
|
||||
}
|
||||
$odfHandler->mergeSegment($listlines);
|
||||
}
|
||||
catch(OdfException $e)
|
||||
{
|
||||
$this->error=$e->getMessage();
|
||||
dol_syslog($this->error, LOG_WARNING);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Write new file
|
||||
//$result=$odfHandler->exportAsAttachedFile('toto');
|
||||
$odfHandler->saveToDisk($file);
|
||||
|
||||
if (! empty($conf->global->MAIN_UMASK))
|
||||
@chmod($file, octdec($conf->global->MAIN_UMASK));
|
||||
|
||||
$odfHandler=null; // Destroy object
|
||||
|
||||
return 1; // Success
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr>
|
||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||
*
|
||||
* 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
|
||||
@@ -156,46 +157,55 @@ function commande_pdf_create($db, $object, $modele, $outputlangs, $hidedetails=0
|
||||
$langs->load("orders");
|
||||
|
||||
$error=0;
|
||||
|
||||
|
||||
$dir = "/core/modules/commande/";
|
||||
$srctemplatepath='';
|
||||
$modelisok=0;
|
||||
$liste=array();
|
||||
|
||||
// Positionne modele sur le nom du modele de commande a utiliser
|
||||
$file = "pdf_".$modele.".modules.php";
|
||||
// On verifie l'emplacement du modele
|
||||
$file = dol_buildpath($dir.$file);
|
||||
if ($modele && file_exists($file)) $modelisok=1;
|
||||
|
||||
// Si model pas encore bon
|
||||
if (! $modelisok)
|
||||
// Positionne le modele sur le nom du modele a utiliser
|
||||
if (! dol_strlen($modele))
|
||||
{
|
||||
if ($conf->global->COMMANDE_ADDON_PDF) $modele = $conf->global->COMMANDE_ADDON_PDF;
|
||||
$file = "pdf_".$modele.".modules.php";
|
||||
// On verifie l'emplacement du modele
|
||||
$file = dol_buildpath($dir.$file);
|
||||
if (file_exists($file)) $modelisok=1;
|
||||
if (! empty($conf->global->COMMANDE_ADDON_PDF))
|
||||
{
|
||||
$modele = $conf->global->COMMANDE_ADDON_PDF;
|
||||
}
|
||||
else
|
||||
{
|
||||
$modele = 'einstein';
|
||||
}
|
||||
}
|
||||
|
||||
// Si model pas encore bon
|
||||
if (! $modelisok)
|
||||
// If selected modele is a filename template (then $modele="modelname:filename")
|
||||
$tmp=explode(':',$modele,2);
|
||||
if (! empty($tmp[1]))
|
||||
{
|
||||
$modele=$tmp[0];
|
||||
$srctemplatepath=$tmp[1];
|
||||
}
|
||||
|
||||
// Search template file
|
||||
$file=''; $classname=''; $filefound=0;
|
||||
foreach(array('doc','pdf') as $prefix)
|
||||
{
|
||||
$liste=ModelePDFCommandes::liste_modeles($db);
|
||||
$modele=key($liste); // Renvoie premiere valeur de cle trouvee dans le tableau
|
||||
$file = "pdf_".$modele.".modules.php";
|
||||
// On verifie l'emplacement du modele
|
||||
$file = dol_buildpath($dir.$file);
|
||||
if (file_exists($file)) $modelisok=1;
|
||||
$file = $prefix."_".$modele.".modules.php";
|
||||
|
||||
// On verifie l'emplacement du modele
|
||||
$file = dol_buildpath($dir.'doc/'.$file);
|
||||
|
||||
if (file_exists($file))
|
||||
{
|
||||
$filefound=1;
|
||||
$classname=$prefix.'_'.$modele;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Charge le modele
|
||||
if ($modelisok)
|
||||
if ($filefound)
|
||||
{
|
||||
$classname = "pdf_".$modele;
|
||||
require_once($file);
|
||||
|
||||
$obj = new $classname($db);
|
||||
$obj->message = $message;
|
||||
|
||||
// We save charset_output to restore it because write_file can change it if needed for
|
||||
// output format that does not support UTF8.
|
||||
@@ -204,10 +214,13 @@ function commande_pdf_create($db, $object, $modele, $outputlangs, $hidedetails=0
|
||||
{
|
||||
$outputlangs->charset_output=$sav_charset_output;
|
||||
|
||||
// we delete preview files
|
||||
require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
|
||||
// We delete old preview
|
||||
require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
|
||||
dol_delete_preview($object);
|
||||
|
||||
// Success in building document. We build meta file.
|
||||
dol_meta_create($object);
|
||||
|
||||
// Appel des triggers
|
||||
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
|
||||
$interface=new Interfaces($db);
|
||||
@@ -220,22 +233,15 @@ function commande_pdf_create($db, $object, $modele, $outputlangs, $hidedetails=0
|
||||
else
|
||||
{
|
||||
$outputlangs->charset_output=$sav_charset_output;
|
||||
dol_syslog("Error");
|
||||
dol_print_error($db,$obj->error);
|
||||
return 0;
|
||||
dol_print_error($db,"order_pdf_create Error: ".$obj->error);
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! $conf->global->COMMANDE_ADDON_PDF)
|
||||
{
|
||||
print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_ADDON_PDF_NotDefined");
|
||||
}
|
||||
else
|
||||
{
|
||||
print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file);
|
||||
}
|
||||
return 0;
|
||||
dol_print_error('',$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr>
|
||||
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||
*
|
||||
* 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
|
||||
@@ -89,6 +90,13 @@ class modCommande extends DolibarrModules
|
||||
$this->const[$r][2] = "mod_commande_marbre";
|
||||
$this->const[$r][3] = 'Nom du gestionnaire de numerotation des commandes';
|
||||
$this->const[$r][4] = 0;
|
||||
|
||||
$r++;
|
||||
$this->const[$r][0] = "COMMANDE_ADDON_PDF_ODT_PATH";
|
||||
$this->const[$r][1] = "chaine";
|
||||
$this->const[$r][2] = "DOL_DATA_ROOT/doctemplates/orders";
|
||||
$this->const[$r][3] = "";
|
||||
$this->const[$r][4] = 0;
|
||||
|
||||
// Boites
|
||||
$this->boxes = array();
|
||||
|
||||
BIN
htdocs/install/doctemplates/orders/template_order.odt
Normal file
BIN
htdocs/install/doctemplates/orders/template_order.odt
Normal file
Binary file not shown.
@@ -6,6 +6,7 @@ Agenda=Agenda
|
||||
Agendas=Agendes
|
||||
Calendar=Calendari
|
||||
Calendars=Calendaris
|
||||
LocalAgenda=Calendari local
|
||||
AffectedTo=Assignada a
|
||||
DoneBy=Realitzat per
|
||||
Events=Esdeveniments
|
||||
@@ -29,8 +30,8 @@ ViewDay=Vista diària
|
||||
ViewWeek=Vista setmanal
|
||||
ViewWithPredefinedFilters=Veure amb els filtres predefinits
|
||||
AutoActions=Inclusió automàtica a l'agenda
|
||||
AgendaAutoActionDesc=Definir els esdeveniments aquí per què voleu que Dolibarr creu automàticament una acció en l'ordre del dia. Si no està marcada (per defecte), es podran crear manualment.
|
||||
AgendaSetupOtherDesc=Aquesta pàgina us permet configurar altres paràmetres del mòdul agenda.
|
||||
AgendaAutoActionDesc=Indiqueu en aquesta pestanya els esdeveniments per els que desitja que Dolibarr creu automàticament una acció a l'agenda. Si no es marca cap cas (per defecte), només les accions manuals s'han d'incloure en l'agenda.
|
||||
AgendaSetupOtherDesc=Aquesta pàgina permet configurar algunes opcions que permeten exportar una vista de la seva agenda Dolibar a un calendari extern (thunderbird, google calendar, ...)
|
||||
AgendaExtSitesDesc=Aquesta pàgina permet configurar calendaris externs per a la seva visualització en l'agenda de Dolibarr.
|
||||
ActionsEvents=Esdeveniments per a què Dolibarr crei una acció de forma automàtica
|
||||
PropalValidatedInDolibarr=Pressupost %s validat
|
||||
|
||||
@@ -326,6 +326,7 @@ NoDolibarrAccess=Sense accés d'usuari
|
||||
ExportDataset_company_1=Tercers (empreses/institucions) i atributs
|
||||
ExportDataset_company_2=Contactes de tercers i atributs
|
||||
ImportDataset_company_1=Tercers (empreses/institucions) i atributs
|
||||
ImportDataset_company_2=Contactes (tercers o lliures) i atributs
|
||||
PriceLevel=Nivell de preus
|
||||
DeliveriesAddress=Adreça(es) d'enviament
|
||||
DeliveryAddress=Adreça d'enviament
|
||||
|
||||
@@ -65,6 +65,7 @@ ErrorPasswordsMustMatch=Les 2 contrasenyes indicades s'han de correspondre
|
||||
ErrorContactEMail=S'ha produït un error tècnic. Contacti amb l'administrador al e-mail <b>%s</b>, indicant el codi d'error <b>%s</b> en el seu missatge, o pot també adjuntar una còpia de pantalla d'aquesta pàgina.
|
||||
ErrorWrongValueForField=Valor incorrecte per al camp número <b>%s</b> (el valor '<b>%s</b>' no compleix amb la regla <b>%s</b>)
|
||||
ErrorFieldValueNotIn=Valor incorrecte per al camp nombre <b>%s</b> (el valor '<b>%s</b>' no es un valor en el camp <b>%s</b> de la taula <b>%s</b>)
|
||||
ErrorFieldRefNotIn=Valor incorrecte per al camp nombre <b>%s</b> (el valor '<b>%s</b>' no és una referència existent en <b>%s</b>)
|
||||
ErrorsOnXLines=Errors a <b>%s</b> línies font
|
||||
ErrorFileIsInfectedWithAVirus=L'antivirus no ha pogut validar aquest arxiu (és probable que estigui infectat per un virus)!
|
||||
ErrorSpecialCharNotAllowedForField=Els caràcters especials no són admesos pel camp "%s"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Dolibarr language file - ca_ES - exports
|
||||
# Dolibarr language file - ca_ES - exports
|
||||
CHARSET=UTF-8
|
||||
ExportsArea=Àrea exportació
|
||||
ImportArea=Àrea importació
|
||||
@@ -103,8 +103,12 @@ NbOfLinesImported=Nombre de línies correctament importades: <b>%s</b>.
|
||||
DataComeFromNoWhere=El valor a inserir no correspon a cap camp de l'arxiu origen.
|
||||
DataComeFromFileFieldNb=El valor a inserir es correspon al camp nombre <<b>%s</b> de l'arxiu origen.
|
||||
DataComeFromIdFoundFromRef=El valor donat per el camp <b>%s</b> de l'arxiu origen serà utilitzat per trobar el ID de l'objecte pare a fer servir (l'objecte <b>%s</b> amb la referència de l'arxiu origen ha d'existir a Dolibarr).
|
||||
DataComeFromIdFoundFromCodeId=El codi del camp número <b>%s</b> de l'arxiu d'origen s'utilitzarà per trobar l'id de l'objecte pare a utilitzar (el codi de l'arxiu d'origen ha d'existir en el diccionari <b>%s</b>). Tingueu en compte que si coneix l'id, pot usar-lo en lloc del codi a l'arxiu d'origen. La importació funcionarà en els 2 casos.
|
||||
DataIsInsertedInto=Les dades de l'arxiu d'origen s'inseriran en el següent camp:
|
||||
DataIDSourceIsInsertedInto=L'ID de l'objecte pare trobat a partir de la dada origen, s'inserirà en el següent camp:
|
||||
DataCodeIDSourceIsInsertedInto=L'id de la línia pare trobada a partir del codi, s'ha d'inserir en el següent camp:
|
||||
SourceRequired=Dades d'origen obligatòries
|
||||
SourceExample=Exemple de dades d'origen possibles
|
||||
CSVFormatDesc=Arxiu amb format <b>Valors separats per coma</b> (.csv).<br>És un fitxer amb format de text en què els camps són separats pel caràcter [ %s ]. Si el separador es troba en el contingut d'un camp, el camp ha d'estar tancat per el caràcter [ %s ]. El caràcter d'escapament per a incloure un caràcter d'entorn en una dada és [ %s ].
|
||||
ExampleAnyRefFoundIntoElement=Totes les referències trobades per als elements <b>%s</b>
|
||||
ExampleAnyCodeOrIdFoundIntoDictionnary=Tots els codis (o id) trobats en el diccionari <b>%s</b>
|
||||
CSVFormatDesc=Arxiu amb format <b>Valors separats per coma</b> (.csv).<br>És un fitxer amb format de text en què els camps són separats pel caràcter [ %s ]. Si el separador es troba en el contingut d'un camp, el camp ha d'estar tancat per el caràcter [ %s ]. El caràcter d'escapament per a incloure un caràcter d'entorn en una dada és [ %s ].
|
||||
|
||||
@@ -6,6 +6,7 @@ Agenda=Agenda
|
||||
Agendas=Agendas
|
||||
Calendar=Calendario
|
||||
Calendars=Calendarios
|
||||
LocalAgenda=Calendario local
|
||||
AffectedTo=Asignada a
|
||||
DoneBy=Realizado por
|
||||
Events=Eventos
|
||||
@@ -29,8 +30,8 @@ ViewDay=Vista diaria
|
||||
ViewWeek=Vista semanal
|
||||
ViewWithPredefinedFilters=Ver con los filtros predefinidos
|
||||
AutoActions=Inclusión automática en la agenda
|
||||
AgendaAutoActionDesc=Definir los eventos aquí para los que desea que Dolibarr cree automáticamente una acción en el orden del día. Si no está marcada (por defecto), se podrán crear manualmente.
|
||||
AgendaSetupOtherDesc=Esta página le permite configurar otros parámetros del módulo agenda.
|
||||
AgendaAutoActionDesc=Indique en esta pestaña los eventos para los que desea que Dolibarr cree automáticamente una acción en la agenda. Si no se marca ningún caso (por defecto), solamente las acciones manuales se incluirán en la agenda.
|
||||
AgendaSetupOtherDesc=Esta página le permite configurar algunas opciones que permiten exportar una vista de su agenda Dolibar a un calendario externo (thunderbird, google calendar, ...)
|
||||
AgendaExtSitesDesc=Esta página le permite configurar calendarios externos para su visualización en la agenda de Dolibarr.
|
||||
ActionsEvents=Eventos para que Dolibarr cree una acción de forma automática
|
||||
PropalValidatedInDolibarr=Presupuesto %s validado
|
||||
|
||||
@@ -326,6 +326,7 @@ NoDolibarrAccess=Sin acceso de usuario
|
||||
ExportDataset_company_1=Terceros (empresas/instituciones) y atributos
|
||||
ExportDataset_company_2=Contactos de terceros y atributos
|
||||
ImportDataset_company_1=Terceros (empresas/instituciones) y atributos
|
||||
ImportDataset_company_2=Contactos (terceros o libres) y atributos
|
||||
PriceLevel=Nivel de precios
|
||||
DeliveriesAddress=Dirección(es) de envío
|
||||
DeliveryAddress=Dirección de envío
|
||||
|
||||
@@ -65,6 +65,7 @@ ErrorPasswordsMustMatch=Las 2 contraseñas indicadas deben corresponderse
|
||||
ErrorContactEMail=Se ha producido un error técnico. Contacte con el administrador al e-mail <b>%s</b>, indicando el código de error <b>%s</b> en su mensaje, o puede también adjuntar una copia de pantalla de esta página.
|
||||
ErrorWrongValueForField=Valor incorrecto para el campo número <b>%s</b> (el valor '<b>%s</b>' no cumple con la regla <b>%s</b>)
|
||||
ErrorFieldValueNotIn=Valor incorrecto para el campo número <b>%s</b> (el valor '<b>%s</b>' no es un valor en el campo <b>%s</b> de la tabla <b>%s</b>)
|
||||
ErrorFieldRefNotIn=Valor incorrecto para el campo número <b>%s</b> (el valor '<b>%s</b>' no es una referencia existente en <b>%s</b>)
|
||||
ErrorsOnXLines=Errores en <b>%s</b> líneas fuente
|
||||
ErrorFileIsInfectedWithAVirus=¡El antivirus no ha podido validar este archivo (es probable que esté infectado por un virus)!
|
||||
ErrorSpecialCharNotAllowedForField=Los caracteres especiales no son admitidos por el campo "%s"
|
||||
|
||||
@@ -1,110 +1,114 @@
|
||||
# Dolibarr language file - es_ES - exports
|
||||
CHARSET= UTF-8
|
||||
ExportsArea= Área exportación
|
||||
ImportArea= Área importación
|
||||
NewExport= Nueva exportación
|
||||
NewImport= Nueva importación
|
||||
ExportableDatas= Conjunto de datos exportables
|
||||
ImportableDatas= Conjunto de datos importables
|
||||
SelectExportDataSet= Elija un conjunto predefinido de datos que desee exportar...
|
||||
SelectImportDataSet= Seleccione un lote de datos predefinidos que desee importar...
|
||||
SelectExportFields= Elija los campos que deben exportarse, o elija un perfil de exportación predefinido
|
||||
SelectImportFields= Seleccione los campos a importar, o seleccione un perfil predefinido de importación
|
||||
NotImportedFields= Campos del archivo origen no importados
|
||||
SaveExportModel= Guardar este perfil de exportación si desea reutilizarlo posteriormente...
|
||||
SaveImportModel= Guarde este perfil de importación si desea reutilizarlo de nuevo posteriormente...
|
||||
ExportModelName= Nombre del perfil de exportación
|
||||
ExportModelSaved= Perfil de exportación guardado con el nombre de <b>%s</b>.
|
||||
ExportableFields= Campos exportables
|
||||
ExportedFields= Campos a exportar
|
||||
ImportModelName= Nombre del perfil de importación
|
||||
ImportModelSaved= Perfil de importación guardado bajo el nombre <b>%s</b>.
|
||||
ImportableFields= Campos importables
|
||||
ImportedFields= Campos a importar
|
||||
DatasetToExport= Conjunto de datos a exportar
|
||||
DatasetToImport= Lote de datos a importar
|
||||
NoDiscardedFields= Sin campos del archivo origen rechazados
|
||||
Dataset= Conjunto de datos
|
||||
ChooseFieldsOrdersAndTitle= Elija el orden de los campos...
|
||||
FieldsOrder= Orden de los campos
|
||||
FieldsTitle= Título campos
|
||||
FieldOrder= Orden del campo
|
||||
FieldTitle= Título campo
|
||||
ChooseExportFormat= Elija el formato de exportación
|
||||
NowClickToGenerateToBuildExportFile= Ahora, seleccione el formato de exportación de la lista desplegable y haga clic en "Generar" para generar el archivo exportación...
|
||||
AvailableFormats= Formatos dispo.
|
||||
LibraryShort= Librería
|
||||
LibraryUsed= Librería utilizada
|
||||
LibraryVersion= Versión
|
||||
Step= Paso
|
||||
FormatedImport= Asistente de importación
|
||||
FormatedImportDesc1= Esta área permite realizar importaciones personalizadas de datos mediante un ayudante que evita tener conocimientos técnicos de Dolibarr.
|
||||
FormatedImportDesc2= El primer paso consiste en elegir el tipo de dato que debe importarse, luego el archivo y a continuación elegir los campos que desea importar.
|
||||
FormatedExport= Asistente de exportación
|
||||
FormatedExportDesc1= Esta área permite realizar exportaciones personalizadas de los datos mediante un ayudante que evita tener conocimientos técnicos de Dolibarr.
|
||||
FormatedExportDesc2= El primer paso consiste en elegir uno de los conjuntos de datos predefinidos, a continuación elegir los campos que quiere exportar al archivo y en que orden.
|
||||
FormatedExportDesc3= Una vez seleccionados los datos, es posible elegir el formato del archivo de exportación generado.
|
||||
Sheet= Hoja
|
||||
NoImportableData= Sin tablas de datos importables (ningún módulo con las definiciones de los perfiles de importación está activo)
|
||||
FileSuccessfullyBuilt= Archivo de exportación generado
|
||||
SQLUsedForExport= Consulta SQL utilizada para construir el archivo de exportación
|
||||
LineId= ID de línea
|
||||
LineDescription= Descripción de línea
|
||||
LineUnitPrice= Precio unitario de la línea
|
||||
LineVATRate= Tipo de IVA de la línea
|
||||
LineQty= Cantidad de la línea
|
||||
LineTotalHT= Importe sin IVA de la línea
|
||||
LineTotalTTC= Importe total de la línea
|
||||
LineTotalVAT= Importe IVA de la línea
|
||||
TypeOfLineServiceOrProduct= Tipo de línea (0=producto, 1=servicio)
|
||||
FileWithDataToImport= Archivo que contiene los datos a importar
|
||||
FileToImport= Archivo origen a importar
|
||||
FileMustHaveOneOfFollowingFormat= El archivo de importación debe tener uno de los siguientes formatos
|
||||
ChooseFormatOfFileToImport= Elija el formato de archivo que desea importar haciendo en el picto %s para seleccionarlo...
|
||||
ChooseFileToImport= Elija el archivo de importación y haga clic en el picto %s para seleccionarlo como archivo origen de importación...
|
||||
DownloadEmptyExample= Descargar archivo de ejemplo vacío
|
||||
SourceFileFormat= Formato del archivo origen
|
||||
FieldsInSourceFile= Campos en el archivo origen
|
||||
FieldsInTargetDatabase= Campos destino en la base de datos Dolibarr (*=obligatorio)
|
||||
Field= Campo
|
||||
NoFields= Ningún campo
|
||||
MoveField= Mover campo columna número %s
|
||||
ExampleOfImportFile= Ejemplo_de_archivo_importación
|
||||
SaveImportProfile= Guardar este perfil de importación
|
||||
ErrorImportDuplicateProfil= No se puede guardar el perfil de importación bajo este nombre. Ya existe un perfil con ese nombre.
|
||||
ImportSummary= Resumen de la configuración de importación
|
||||
TablesTarget= Tablas de destino
|
||||
FieldsTarget= Campos de destino
|
||||
TableTarget= Tabla destino
|
||||
FieldTarget= Campo destino
|
||||
FieldSource= Campo origen
|
||||
DoNotImportFirstLine= No importar la primera línea del archivo fuente
|
||||
NbOfSourceLines= Número de líneas del archivo fuente
|
||||
NowClickToTestTheImport= Compruebe los parámetros de importación establecidos. Si está de acuerdo, haga clic en el botón "<b>%s</b>" para ejecutar una simulación de importación (ningún dato será modificado, inicialmente sólo será una simulación)...
|
||||
RunSimulateImportFile= Ejecutar la simulación de importación
|
||||
FieldNeedSource= Este campo requiere obligatoriamente una fuente de datos
|
||||
SomeMandatoryFieldHaveNoSource= Algunos campos obligatorios no tienen campo fuente en el archivo de origen
|
||||
InformationOnSourceFile= Información del archivo origen
|
||||
InformationOnTargetTables= Información sobre los campos de destino
|
||||
SelectAtLeastOneField= Bascular al menos un campo origen en la columna de campos a exportar
|
||||
SelectFormat= Seleccione este formato de archivo de importación
|
||||
RunImportFile= Lanzar la importación
|
||||
NowClickToRunTheImport= Compruebe los resultados de la simulación. Si todo está bien, inicie la importación definitiva.
|
||||
DataLoadedWithId= Todos los datos serán importados con la siguiente id de importación: <b>%s</b>
|
||||
ErrorMissingMandatoryValue= Dato obligatorio no indicado en el archivo fuente, campo número <b>%s</b>.
|
||||
TooMuchErrors= Todavía hay <b>%s</b> líneas con error, pero su visualización ha sido limitada.
|
||||
TooMuchWarnings= Todavía hay <b>%s</b> líneas con warnings, pero su visualización ha sido limitada.
|
||||
EmptyLine= Línea en blanco
|
||||
CorrectErrorBeforeRunningImport= Debe corregir todos los errores antes de iniciar la importación definitiva.
|
||||
FileWasImported= El archivo se ha importado con el número de importación <b>%s</b>.
|
||||
YouCanUseImportIdToFindRecord= Puede encontrar los registros de esta importación en su base de datos filtrando el campo <b>import_key='%s'</b>.
|
||||
NbOfLinesOK= Número de líneas sin errores ni warnings: <b>%s</b>.
|
||||
NbOfLinesImported= Número de líneas correctamente importadas: <b>%s</b>.
|
||||
DataComeFromNoWhere= El valor a insertar no corresponde a ningún campo del archivo origen.
|
||||
DataComeFromFileFieldNb= El valor a insertar se corresponde al campo número <b>%s</b> del archivo origen.
|
||||
DataComeFromIdFoundFromRef= El valor dado por el campo <b>%s</b> del archivo origen será utilizado para encontrar el ID del objeto padre a usar (el objeto <b>%s</b> con la referencia del archivo origen debe existir en Dolibarr).
|
||||
DataIsInsertedInto= Los datos del archivo de origen se insertarán en el siguiente campo:
|
||||
DataIDSourceIsInsertedInto= El ID del objeto padre encontrado a partir del dato origen, se insertará en el siguiente campo:
|
||||
SourceRequired= Datos de origen obligatorios
|
||||
SourceExample= Ejemplo de datos de origen posibles
|
||||
CSVFormatDesc=Archivo con formato <b>Valores separados por coma</b> (.csv).<br>Es un fichero con formato de texto en el que los campos son separados por el carácter [ %s ]. Si el separador se encuentra en el contenido de un campo, El campo debe de estar acotado por el carácter [ %s ]. El carácter de escape para incluir un carácter de entorno en un dato es [ %s ].
|
||||
# Dolibarr language file - es_ES - exports
|
||||
CHARSET=UTF-8
|
||||
ExportsArea=Área exportación
|
||||
ImportArea=Área importación
|
||||
NewExport=Nueva exportación
|
||||
NewImport=Nueva importación
|
||||
ExportableDatas=Conjunto de datos exportables
|
||||
ImportableDatas=Conjunto de datos importables
|
||||
SelectExportDataSet=Elija un conjunto predefinido de datos que desee exportar...
|
||||
SelectImportDataSet=Seleccione un lote de datos predefinidos que desee importar...
|
||||
SelectExportFields=Elija los campos que deben exportarse, o elija un perfil de exportación predefinido
|
||||
SelectImportFields=Seleccione los campos a importar, o seleccione un perfil predefinido de importación
|
||||
NotImportedFields=Campos del archivo origen no importados
|
||||
SaveExportModel=Guardar este perfil de exportación si desea reutilizarlo posteriormente...
|
||||
SaveImportModel=Guarde este perfil de importación si desea reutilizarlo de nuevo posteriormente...
|
||||
ExportModelName=Nombre del perfil de exportación
|
||||
ExportModelSaved=Perfil de exportación guardado con el nombre de <b>%s</b>.
|
||||
ExportableFields=Campos exportables
|
||||
ExportedFields=Campos a exportar
|
||||
ImportModelName=Nombre del perfil de importación
|
||||
ImportModelSaved=Perfil de importación guardado bajo el nombre <b>%s</b>.
|
||||
ImportableFields=Campos importables
|
||||
ImportedFields=Campos a importar
|
||||
DatasetToExport=Conjunto de datos a exportar
|
||||
DatasetToImport=Lote de datos a importar
|
||||
NoDiscardedFields=Sin campos del archivo origen rechazados
|
||||
Dataset=Conjunto de datos
|
||||
ChooseFieldsOrdersAndTitle=Elija el orden de los campos...
|
||||
FieldsOrder=Orden de los campos
|
||||
FieldsTitle=Título campos
|
||||
FieldOrder=Orden del campo
|
||||
FieldTitle=Título campo
|
||||
ChooseExportFormat=Elija el formato de exportación
|
||||
NowClickToGenerateToBuildExportFile=Ahora, seleccione el formato de exportación de la lista desplegable y haga clic en "Generar" para generar el archivo exportación...
|
||||
AvailableFormats=Formatos dispo.
|
||||
LibraryShort=Librería
|
||||
LibraryUsed=Librería utilizada
|
||||
LibraryVersion=Versión
|
||||
Step=Paso
|
||||
FormatedImport=Asistente de importación
|
||||
FormatedImportDesc1=Esta área permite realizar importaciones personalizadas de datos mediante un ayudante que evita tener conocimientos técnicos de Dolibarr.
|
||||
FormatedImportDesc2=El primer paso consiste en elegir el tipo de dato que debe importarse, luego el archivo y a continuación elegir los campos que desea importar.
|
||||
FormatedExport=Asistente de exportación
|
||||
FormatedExportDesc1=Esta área permite realizar exportaciones personalizadas de los datos mediante un ayudante que evita tener conocimientos técnicos de Dolibarr.
|
||||
FormatedExportDesc2=El primer paso consiste en elegir uno de los conjuntos de datos predefinidos, a continuación elegir los campos que quiere exportar al archivo y en que orden.
|
||||
FormatedExportDesc3=Una vez seleccionados los datos, es posible elegir el formato del archivo de exportación generado.
|
||||
Sheet=Hoja
|
||||
NoImportableData=Sin tablas de datos importables (ningún módulo con las definiciones de los perfiles de importación está activo)
|
||||
FileSuccessfullyBuilt=Archivo de exportación generado
|
||||
SQLUsedForExport=Consulta SQL utilizada para construir el archivo de exportación
|
||||
LineId=ID de línea
|
||||
LineDescription=Descripción de línea
|
||||
LineUnitPrice=Precio unitario de la línea
|
||||
LineVATRate=Tipo de IVA de la línea
|
||||
LineQty=Cantidad de la línea
|
||||
LineTotalHT=Importe sin IVA de la línea
|
||||
LineTotalTTC=Importe total de la línea
|
||||
LineTotalVAT=Importe IVA de la línea
|
||||
TypeOfLineServiceOrProduct=Tipo de línea (0=producto, 1=servicio)
|
||||
FileWithDataToImport=Archivo que contiene los datos a importar
|
||||
FileToImport=Archivo origen a importar
|
||||
FileMustHaveOneOfFollowingFormat=El archivo de importación debe tener uno de los siguientes formatos
|
||||
ChooseFormatOfFileToImport=Elija el formato de archivo que desea importar haciendo en el picto %s para seleccionarlo...
|
||||
ChooseFileToImport=Elija el archivo de importación y haga clic en el picto %s para seleccionarlo como archivo origen de importación...
|
||||
DownloadEmptyExample=Descargar archivo de ejemplo vacío
|
||||
SourceFileFormat=Formato del archivo origen
|
||||
FieldsInSourceFile=Campos en el archivo origen
|
||||
FieldsInTargetDatabase=Campos destino en la base de datos Dolibarr (*=obligatorio)
|
||||
Field=Campo
|
||||
NoFields=Ningún campo
|
||||
MoveField=Mover campo columna número %s
|
||||
ExampleOfImportFile=Ejemplo_de_archivo_importación
|
||||
SaveImportProfile=Guardar este perfil de importación
|
||||
ErrorImportDuplicateProfil=No se puede guardar el perfil de importación bajo este nombre. Ya existe un perfil con ese nombre.
|
||||
ImportSummary=Resumen de la configuración de importación
|
||||
TablesTarget=Tablas de destino
|
||||
FieldsTarget=Campos de destino
|
||||
TableTarget=Tabla destino
|
||||
FieldTarget=Campo destino
|
||||
FieldSource=Campo origen
|
||||
DoNotImportFirstLine=No importar la primera línea del archivo fuente
|
||||
NbOfSourceLines=Número de líneas del archivo fuente
|
||||
NowClickToTestTheImport=Compruebe los parámetros de importación establecidos. Si está de acuerdo, haga clic en el botón "<b>%s</b>" para ejecutar una simulación de importación (ningún dato será modificado, inicialmente sólo será una simulación)...
|
||||
RunSimulateImportFile=Ejecutar la simulación de importación
|
||||
FieldNeedSource=Este campo requiere obligatoriamente una fuente de datos
|
||||
SomeMandatoryFieldHaveNoSource=Algunos campos obligatorios no tienen campo fuente en el archivo de origen
|
||||
InformationOnSourceFile=Información del archivo origen
|
||||
InformationOnTargetTables=Información sobre los campos de destino
|
||||
SelectAtLeastOneField=Bascular al menos un campo origen en la columna de campos a exportar
|
||||
SelectFormat=Seleccione este formato de archivo de importación
|
||||
RunImportFile=Lanzar la importación
|
||||
NowClickToRunTheImport=Compruebe los resultados de la simulación. Si todo está bien, inicie la importación definitiva.
|
||||
DataLoadedWithId=Todos los datos serán importados con la siguiente id de importación: <b>%s</b>
|
||||
ErrorMissingMandatoryValue=Dato obligatorio no indicado en el archivo fuente, campo número <b>%s</b>.
|
||||
TooMuchErrors=Todavía hay <b>%s</b> líneas con error, pero su visualización ha sido limitada.
|
||||
TooMuchWarnings=Todavía hay <b>%s</b> líneas con warnings, pero su visualización ha sido limitada.
|
||||
EmptyLine=Línea en blanco
|
||||
CorrectErrorBeforeRunningImport=Debe corregir todos los errores antes de iniciar la importación definitiva.
|
||||
FileWasImported=El archivo se ha importado con el número de importación <b>%s</b>.
|
||||
YouCanUseImportIdToFindRecord=Puede encontrar los registros de esta importación en su base de datos filtrando el campo <b>import_key='%s'</b>.
|
||||
NbOfLinesOK=Número de líneas sin errores ni warnings: <b>%s</b>.
|
||||
NbOfLinesImported=Número de líneas correctamente importadas: <b>%s</b>.
|
||||
DataComeFromNoWhere=El valor a insertar no corresponde a ningún campo del archivo origen.
|
||||
DataComeFromFileFieldNb=El valor a insertar se corresponde al campo número <b>%s</b> del archivo origen.
|
||||
DataComeFromIdFoundFromRef=El valor dado por el campo <b>%s</b> del archivo origen será utilizado para encontrar el ID del objeto padre a usar (el objeto <b>%s</b> con la referencia del archivo origen debe existir en Dolibarr).
|
||||
DataComeFromIdFoundFromCodeId=El código del campo número <b>%s</b> del archivo de origen se utilizará para encontrar el id del objeto padre a usar (el código del archivo de origen debe existir en el diccionario <b>%s</b>). Tenga en cuenta que si conoce el id, puede usarlo en lugar del código en el archivo de origen. La importación funcionará en los 2 casos.
|
||||
DataIsInsertedInto=Los datos del archivo de origen se insertarán en el siguiente campo:
|
||||
DataIDSourceIsInsertedInto=El ID del objeto padre encontrado a partir del dato origen, se insertará en el siguiente campo:
|
||||
DataCodeIDSourceIsInsertedInto=El id de la línea padre encontrada a partir del código, se insertará en el siguiente campo:
|
||||
SourceRequired=Datos de origen obligatorios
|
||||
SourceExample=Ejemplo de datos de origen posibles
|
||||
ExampleAnyRefFoundIntoElement=Todas las referencias encontradas para los elementos <b>%s</b>
|
||||
ExampleAnyCodeOrIdFoundIntoDictionnary=Todos los códigos (o id) encontrados en el diccionario <b>%s</b>
|
||||
CSVFormatDesc=Archivo con formato <b>Valores separados por coma</b> (.csv).<br>Es un fichero con formato de texto en el que los campos son separados por el carácter [ %s ]. Si el separador se encuentra en el contenido de un campo, El campo debe de estar acotado por el carácter [ %s ]. El carácter de escape para incluir un carácter de entorno en un dato es [ %s ].
|
||||
|
||||
@@ -103,7 +103,7 @@ NbOfLinesImported=Nombre de lignes importées avec succès: <b>%s</b>.
|
||||
DataComeFromNoWhere=La valeur à insérer n'est issue d'aucun champ du fichier source.
|
||||
DataComeFromFileFieldNb=La valeur à insérer sera issue du champ numéro <b>%s</b> du fichier source.
|
||||
DataComeFromIdFoundFromRef=La valeur issue du champ numéro <b>%s</b> du fichier source sera utilisée pour trouver l'id de l'objet père à utiliser (L'objet <b>%s</b> ayant la réf. issue du fichier source doit donc exister dans Dolibarr).
|
||||
DataComeFromIdFoundFromCodeId=Le code issu du champ numéro <b>%s</b> du fichier source sera utilisée pour trouver l'id de l'objet père à utiliser (Le code issue du fichier source doit donc exister dans le dictionnaire <b>%s</b>). Noton que si vous connaissez cet id, vou spouvez l'utiliser dans le fichier source au lieu du code. L'import fonctionnera dans les 2 cas.
|
||||
DataComeFromIdFoundFromCodeId=Le code issu du champ numéro <b>%s</b> du fichier source sera utilisée pour trouver l'id de l'objet père à utiliser (Le code issue du fichier source doit donc exister dans le dictionnaire <b>%s</b>). Noton que si vous connaissez cet id, vous pouvez l'utiliser dans le fichier source au lieu du code. L'import fonctionnera dans les 2 cas.
|
||||
DataIsInsertedInto=La donnée issue du fichier source sera insérée dans le champ suivant:
|
||||
DataIDSourceIsInsertedInto=L'id de l'objet père retrouvé à partir de la donnée source, sera insérée dans le champ suivant:
|
||||
DataCodeIDSourceIsInsertedInto=L'id de la ligne père retrouvé à partir du code, sera insérée dans le champ suivant:
|
||||
|
||||
Reference in New Issue
Block a user