Merge remote-tracking branch 'Upstream/develop' into develop-a4

Conflicts:
	htdocs/product/card.php
This commit is contained in:
aspangaro 2015-12-19 05:43:22 +01:00
commit 51640c19bb
1899 changed files with 26849 additions and 13447 deletions

View File

@ -109,6 +109,12 @@ install:
echo echo
before_script: before_script:
- |
echo Start travis
echo Current dir is `pwd`
echo Home dir is `echo ~`
echo TRAVIS_BUILD_DIR is $TRAVIS_BUILD_DIR
- | - |
echo "Re-enabling Xdebug for PHP CodeSniffer and PHP Unit" echo "Re-enabling Xdebug for PHP CodeSniffer and PHP Unit"
phpenv config-add /tmp/xdebug.ini phpenv config-add /tmp/xdebug.ini
@ -149,7 +155,7 @@ before_script:
mysql -e "SELECT VERSION();" mysql -e "SELECT VERSION();"
echo echo
fi fi
- | - |
echo "Setting up database" echo "Setting up database"
if [ "$DB" = 'mysql' ] || [ "$DB" = 'mariadb' ]; then if [ "$DB" = 'mysql' ] || [ "$DB" = 'mariadb' ]; then
@ -166,8 +172,8 @@ before_script:
echo echo
- | - |
echo "Setting up Dolibarr"
export CONF_FILE=htdocs/conf/conf.php export CONF_FILE=htdocs/conf/conf.php
echo "Setting up Dolibarr $CONF_FILE"
echo '<?php ' > $CONF_FILE echo '<?php ' > $CONF_FILE
echo '$'dolibarr_main_url_root=\'http://127.0.0.1\'';' >> $CONF_FILE echo '$'dolibarr_main_url_root=\'http://127.0.0.1\'';' >> $CONF_FILE
echo '$'dolibarr_main_document_root=\'$TRAVIS_BUILD_DIR/htdocs\'';' >> $CONF_FILE echo '$'dolibarr_main_document_root=\'$TRAVIS_BUILD_DIR/htdocs\'';' >> $CONF_FILE
@ -184,15 +190,9 @@ before_script:
#fi #fi
# TODO: SQLite # TODO: SQLite
echo '$'dolibarr_main_authentication=\'dolibarr\'';' >> $CONF_FILE echo '$'dolibarr_main_authentication=\'dolibarr\'';' >> $CONF_FILE
cat $CONF_FILE
echo echo
- |
if [ "$DEBUG" = true ]; then
echo "Debugging informations"
cat $CONF_FILE
echo
fi
- | - |
echo "Create documents directory and set permissions" echo "Create documents directory and set permissions"
# and admin/temp subdirectory needed for unit tests # and admin/temp subdirectory needed for unit tests
@ -306,3 +306,4 @@ after_failure:
fi fi
after_script: after_script:

View File

@ -124,7 +124,7 @@
<!-- Tweaks to metrics --> <!-- Tweaks to metrics -->
<rule ref="Generic.Metrics.CyclomaticComplexity"> <rule ref="Generic.Metrics.CyclomaticComplexity">
<properties> <properties>
<property name="complexity" value="80" /> <property name="complexity" value="120" />
<property name="absoluteComplexity" value="250" /> <property name="absoluteComplexity" value="250" />
</properties> </properties>
</rule> </rule>

View File

@ -88,7 +88,7 @@ $extrafields = new ExtraFields($db);
********************************************************************/ ********************************************************************/
$parameters=array(); $parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook)) if (empty($reshook))

View File

@ -124,7 +124,7 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
********************************************************************/ ********************************************************************/
$parameters=array(); $parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';

View File

@ -7,13 +7,15 @@
# Usage: txpush.sh (source|xx_XX) [-r dolibarr.file] [-f] # Usage: txpush.sh (source|xx_XX) [-r dolibarr.file] [-f]
#------------------------------------------------------ #------------------------------------------------------
export project='dolibarr'
# Syntax # Syntax
if [ "x$1" = "x" ] if [ "x$1" = "x" ]
then then
echo "This push local files to transifex." echo "This push local files to transifex for project $project."
echo "Note: If you push a language file (not source), file will be skipped if transifex file is newer." echo "Note: If you push a language file (not source), file will be skipped if transifex file is newer."
echo " Using -f will overwrite translation but not memory." echo " Using -f will overwrite translation but not memory."
echo "Usage: ./dev/translation/txpush.sh (source|xx_XX) [-r dolibarr.file] [-f] [--no-interactive]" echo "Usage: ./dev/translation/txpush.sh (source|xx_XX|all) [-r dolibarr.file] [-f] [--no-interactive]"
exit exit
fi fi
@ -28,11 +30,24 @@ then
echo "tx push -s $2 $3" echo "tx push -s $2 $3"
tx push -s $2 $3 tx push -s $2 $3
else else
for file in `find htdocs/langs/$1/*.lang -type f` if [ "x$1" = "xall" ]
do then
echo $file for dir in `find htdocs/langs/* -type d`
export basefile=`basename $file | sed -s s/\.lang//g` do
echo "tx push --skip -r dolibarr.$basefile -t -l $1 $2 $3 $4" shortdir=`basename $dir`
tx push --skip -r dolibarr.$basefile -t -l $1 $2 $3 $4 file=$3
done echo $file
export basefile=`basename $file | sed -s s/\.lang//g`
echo "tx push --skip -t -l $shortdir $2 $3 $4"
tx push --skip -t -l $shortdir $2 $3 $4
done
else
for file in `find htdocs/langs/$1/*.lang -type f`
do
echo $file
export basefile=`basename $file | sed -s s/\.lang//g`
echo "tx push --skip -r $project.$basefile -t -l $1 $2 $3 $4"
tx push --skip -r $project.$basefile -t -l $1 $2 $3 $4
done
fi
fi fi

View File

@ -148,14 +148,14 @@ if ($action == 'create')
dol_fiche_head(); dol_fiche_head();
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
print '<tr><td width="25%">' . $langs->trans("AccountNumber") . '</td>'; print '<tr><td width="25%"><span class="fieldrequired">' . $langs->trans("AccountNumber") . '</span></td>';
print '<td><input name="account_number" size="30" value="' . $accounting->account_number . '"</td></tr>'; print '<td><input name="account_number" size="30" value="' . $accounting->account_number . '"</td></tr>';
print '<tr><td>' . $langs->trans("Label") . '</td>'; print '<tr><td><span class="fieldrequired">' . $langs->trans("Label") . '</span></td>';
print '<td><input name="label" size="70" value="' . $accounting->label . '"</td></tr>'; print '<td><input name="label" size="70" value="' . $accounting->label . '"</td></tr>';
print '<tr><td>' . $langs->trans("Accountparent") . '</td>'; print '<tr><td>' . $langs->trans("Accountparent") . '</td>';
print '<td>'; print '<td>';
print $htmlacc->select_account($accounting->account_parent, 'account_parent'); print $htmlacc->select_account($accounting->account_parent, 'account_parent', 1);
print '</td></tr>'; print '</td></tr>';
print '<tr><td>' . $langs->trans("Pcgtype") . '</td>'; print '<tr><td>' . $langs->trans("Pcgtype") . '</td>';
print '<td>'; print '<td>';
@ -204,13 +204,13 @@ else if ($id)
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
print '<tr><td width="25%">' . $langs->trans("AccountNumber") . '</td>'; print '<tr><td width="25%"><span class="fieldrequired">' . $langs->trans("AccountNumber") . '</span></td>';
print '<td><input name="account_number" size="30" value="' . $accounting->account_number . '"</td></tr>'; print '<td><input name="account_number" size="30" value="' . $accounting->account_number . '"</td></tr>';
print '<tr><td>' . $langs->trans("Label") . '</td>'; print '<tr><td><span class="fieldrequired">' . $langs->trans("Label") . '</span></td>';
print '<td><input name="label" size="70" value="' . $accounting->label . '"</td></tr>'; print '<td><input name="label" size="70" value="' . $accounting->label . '"</td></tr>';
print '<tr><td>' . $langs->trans("Accountparent") . '</td>'; print '<tr><td>' . $langs->trans("Accountparent") . '</td>';
print '<td>'; print '<td>';
print $htmlacc->select_account($accounting->account_parent, 'account_parent'); print $htmlacc->select_account($accounting->account_parent, 'account_parent', 1);
print '</td></tr>'; print '</td></tr>';
print '<tr><td>' . $langs->trans("Pcgtype") . '</td>'; print '<tr><td>' . $langs->trans("Pcgtype") . '</td>';
print '<td>'; print '<td>';

View File

@ -98,7 +98,8 @@ abstract class ActionsAdherentCardCommon
} }
/** /**
* Load data control * doActions of a canvas is not the doActions of the hook
* @deprecated Use the doActions of hooks instead of this.
* *
* @param string $action Type of action * @param string $action Type of action
* @param int $id Id of object * @param int $id Id of object

View File

@ -97,7 +97,7 @@ if ($action == 'setModuleOptions')
if (! $error) if (! $error)
{ {
setEventMessages($langs->trans("SetupSaved"), null, 'msgs'); setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
} }
else else
{ {

View File

@ -2,7 +2,8 @@
/* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
* Copyright (C) 2011-2015 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2011-2015 Juanjo Menent <jmenent@2byte.es>ù
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -26,6 +27,7 @@
require '../main.inc.php'; require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expedition.lib.php';
$langs->load("admin"); $langs->load("admin");
$langs->load("sendings"); $langs->load("sendings");
@ -76,29 +78,9 @@ llxHeader("","");
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>'; $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup'); print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup');
print '<br>'; print '<br>';
$head = expedition_admin_prepare_head();
$h = 0; dol_fiche_head($head, 'general', $langs->trans("ModuleSetup"), 0, 'sending');
$head[$h][0] = DOL_URL_ROOT."/admin/confexped.php";
$head[$h][1] = $langs->trans("Setup");
$hselected=$h;
$h++;
if (! empty($conf->global->MAIN_SUBMODULE_EXPEDITION))
{
$head[$h][0] = DOL_URL_ROOT."/admin/expedition.php";
$head[$h][1] = $langs->trans("Shipment");
$h++;
}
if (! empty($conf->global->MAIN_SUBMODULE_LIVRAISON))
{
$head[$h][0] = DOL_URL_ROOT."/admin/livraison.php";
$head[$h][1] = $langs->trans("Receivings");
$h++;
}
dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup"));
/* /*
* Formulaire parametres divers * Formulaire parametres divers

View File

@ -478,20 +478,16 @@ if ($id == 11)
if ($id == 25) if ($id == 25)
{ {
// We save list of template type Dolibarr can manage. This list can found by a grep into code on "->param['models']" // We save list of template type Dolibarr can manage. This list can found by a grep into code on "->param['models']"
$elementList = array( $elementList = array();
'propal_send' => $langs->trans('MailToSendProposal'), if ($conf->propal->enabled) $elementList['propal_send']=$langs->trans('MailToSendProposal');
'order_send' => $langs->trans('MailToSendOrder'), if ($conf->commande->enabled) $elementList['order_send']=$langs->trans('MailToSendOrder');
'facture_send' => $langs->trans('MailToSendInvoice'), if ($conf->facture->enabled) $elementList['facture_send']=$langs->trans('MailToSendInvoice');
if ($conf->expedition->enabled) $elementList['shipping_send']=$langs->trans('MailToSendShipment');
'shipping_send' => $langs->trans('MailToSendShipment'), if ($conf->ficheinter->enabled) $elementList['fichinter_send']=$langs->trans('MailToSendIntervention');
'fichinter_send' => $langs->trans('MailToSendIntervention'), if ($conf->supplier_proposal->enabled) $elementList['supplier_proposal_send']=$langs->trans('MailToSendSupplierRequestForQuotation');
if ($conf->fournisseur->enabled) $elementList['order_supplier_send']=$langs->trans('MailToSendSupplierOrder');
'supplier_proposal_send' => $langs->trans('MailToSendSupplierRequestForQuotation'), if ($conf->fournisseur->enabled) $elementList['invoice_supplier_send']=$langs->trans('MailToSendSupplierInvoice');
'order_supplier_send' => $langs->trans('MailToSendSupplierOrder'), if ($conf->societe->enabled) $elementList['thirdparty']=$langs->trans('MailToThirdparty');
'invoice_supplier_send' => $langs->trans('MailToSendSupplierInvoice'),
'thirdparty' => $langs->trans('MailToThirdparty')
);
} }
// Define localtax_typeList (used for dictionary "llx_c_tva") // Define localtax_typeList (used for dictionary "llx_c_tva")

View File

@ -30,6 +30,7 @@
require '../main.inc.php'; require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expedition.lib.php';
require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php'; require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php';
$langs->load("admin"); $langs->load("admin");
@ -219,30 +220,9 @@ llxHeader("","");
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>'; $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup'); print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup');
print '<br>'; print '<br>';
$head = expedition_admin_prepare_head();
dol_fiche_head($head, 'shipment', $langs->trans("Sendings"), 0, 'sending');
//if ($mesg) print $mesg.'<br>';
$h = 0;
$head[$h][0] = DOL_URL_ROOT."/admin/confexped.php";
$head[$h][1] = $langs->trans("Setup");
$h++;
$head[$h][0] = DOL_URL_ROOT."/admin/expedition.php";
$head[$h][1] = $langs->trans("Shipment");
$hselected=$h;
$h++;
if (! empty($conf->global->MAIN_SUBMODULE_LIVRAISON))
{
$head[$h][0] = DOL_URL_ROOT."/admin/livraison.php";
$head[$h][1] = $langs->trans("Receivings");
$h++;
}
dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup"));
/* /*
* Expedition numbering model * Expedition numbering model

View File

@ -0,0 +1,126 @@
<?php
/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2012 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
*
* 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/admin/expedition_extrafields.php
* \ingroup expedition
* \brief Page to setup extra fields of expedition
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expedition.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
if (!$user->admin)
accessforbidden();
$langs->load("admin");
$langs->load("other");
$langs->load("sendings");
$langs->load("deliveries");
$extrafields = new ExtraFields($db);
$form = new Form($db);
// List of supported format
$tmptype2label=ExtraFields::$type2label;
$type2label=array('');
foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->trans($val);
$action=GETPOST('action', 'alpha');
$attrname=GETPOST('attrname', 'alpha');
$elementtype='expedition'; //Must be the $table_element of the class that manage extrafield
if (!$user->admin) accessforbidden();
/*
* Actions
*/
require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php';
/*
* View
*/
$textobject=$langs->transnoentitiesnoconv("Sendings");
llxHeader('',$langs->trans("SendingsSetup"));
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup');
print "<br>\n";
$head = expedition_admin_prepare_head();
dol_fiche_head($head, 'attributes_shipment', $langs->trans("Sendings"), 0, 'sending');
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
dol_fiche_end();
// Buttons
if ($action != 'create' && $action != 'edit')
{
print '<div class="tabsAction">';
print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
print "</div>";
}
/* ************************************************************************** */
/* */
/* Creation d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'create')
{
print "<br>";
print load_fiche_titre($langs->trans('NewAttribute'));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
}
/* ************************************************************************** */
/* */
/* Edition d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'edit' && ! empty($attrname))
{
print "<br>";
print load_fiche_titre($langs->trans("FieldEdition", $attrname));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
}
llxFooter();
$db->close();

View File

@ -0,0 +1,126 @@
<?php
/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2012 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com>
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
*
*
* 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/admin/expeditiondet_extrafields.php
* \ingroup expedition
* \brief Page to setup extra fields of expedition
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expedition.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
if (!$user->admin)
accessforbidden();
$langs->load("admin");
$langs->load("other");
$langs->load("sendings");
$extrafields = new ExtraFields($db);
$form = new Form($db);
// List of supported format
$tmptype2label=ExtraFields::$type2label;
$type2label=array('');
foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->trans($val);
$action=GETPOST('action', 'alpha');
$attrname=GETPOST('attrname', 'alpha');
$elementtype='expeditiondet'; //Must be the $table_element of the class that manage extrafield
if (!$user->admin) accessforbidden();
/*
* Actions
*/
require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php';
/*
* View
*/
$textobject=$langs->transnoentitiesnoconv("Sendings");
llxHeader('',$langs->trans("SendingsSetup"));
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup');
print "<br>\n";
$head = expedition_admin_prepare_head();
dol_fiche_head($head, 'attributeslines_shipment', $langs->trans("Sendings"), 0, 'sending');
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
dol_fiche_end();
// Buttons
if ($action != 'create' && $action != 'edit')
{
print '<div class="tabsAction">';
print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
print "</div>";
}
/* ************************************************************************** */
/* */
/* Creation d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'create')
{
print "<br>";
print load_fiche_titre($langs->trans('NewAttribute'));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
}
/* ************************************************************************** */
/* */
/* Edition d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'edit' && ! empty($attrname))
{
print "<br>";
print load_fiche_titre($langs->trans("FieldEdition", $attrname));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
}
llxFooter();
$db->close();

View File

@ -180,21 +180,21 @@ else
// Always show vat rates with vat 0 // Always show vat rates with vat 0
$s=2/7;$qty=1;$vat=0; $s=2/7;$qty=1;$vat=0;
$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,0); $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,0,$mysoc);
print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU'); print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
print " x ".$langs->trans("Quantity").": ".$qty; print " x ".$langs->trans("Quantity").": ".$qty;
print " - ".$langs->trans("VAT").": ".$vat.'%'; print " - ".$langs->trans("VAT").": ".$vat.'%';
print " &nbsp; -> &nbsp; ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; print " &nbsp; -> &nbsp; ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n";
$s=10/3;$qty=1;$vat=0; $s=10/3;$qty=1;$vat=0;
$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,0); $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0,0,$mysoc);
print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU'); print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
print " x ".$langs->trans("Quantity").": ".$qty; print " x ".$langs->trans("Quantity").": ".$qty;
print " - ".$langs->trans("VAT").": ".$vat.'%'; print " - ".$langs->trans("VAT").": ".$vat.'%';
print " &nbsp; -> &nbsp; ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; print " &nbsp; -> &nbsp; ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n";
$s=10/3;$qty=2;$vat=0; $s=10/3;$qty=2;$vat=0;
$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0); $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0,$mysoc);
print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU'); print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
print " x ".$langs->trans("Quantity").": ".$qty; print " x ".$langs->trans("Quantity").": ".$qty;
print " - ".$langs->trans("VAT").": ".$vat.'%'; print " - ".$langs->trans("VAT").": ".$vat.'%';
@ -230,7 +230,7 @@ else
for ($qty=1; $qty<=2; $qty++) for ($qty=1; $qty<=2; $qty++)
{ {
$s=10/3; $s=10/3;
$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0); $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0,$mysoc);
print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU'); print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
print " x ".$langs->trans("Quantity").": ".$qty; print " x ".$langs->trans("Quantity").": ".$qty;
print " - ".$langs->trans("VAT").": ".$vat.'%'; print " - ".$langs->trans("VAT").": ".$vat.'%';
@ -245,14 +245,14 @@ else
// were calculated to show all possible cases of rounding. If we change this, examples becomes useless or show the same rounding rule. // were calculated to show all possible cases of rounding. If we change this, examples becomes useless or show the same rounding rule.
$s=10/3;$qty=1;$vat=10; $s=10/3;$qty=1;$vat=10;
$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0); $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0,$mysoc);
print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU'); print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
print " x ".$langs->trans("Quantity").": ".$qty; print " x ".$langs->trans("Quantity").": ".$qty;
print " - ".$langs->trans("VAT").": ".$vat.'%'; print " - ".$langs->trans("VAT").": ".$vat.'%';
print " &nbsp; -> &nbsp; ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n"; print " &nbsp; -> &nbsp; ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n";
$s=10/3;$qty=2;$vat=10; $s=10/3;$qty=2;$vat=10;
$tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0); $tmparray=calcul_price_total(1,$qty*price2num($s,'MU'),0,$vat,0,0,0,'HT',0, 0,$mysoc);
print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU'); print $langs->trans("UnitPriceOfProduct").": ".price2num($s,'MU');
print " x ".$langs->trans("Quantity").": ".$qty; print " x ".$langs->trans("Quantity").": ".$qty;
print " - ".$langs->trans("VAT").": ".$vat.'%'; print " - ".$langs->trans("VAT").": ".$vat.'%';
@ -272,8 +272,8 @@ else
$s2=2/7; $s2=2/7;
// Round by line // Round by line
$tmparray1=calcul_price_total(1,$qty*price2num($s1,'MU'),0,$vat,0,0,0,'HT',0, 0); $tmparray1=calcul_price_total(1,$qty*price2num($s1,'MU'),0,$vat,0,0,0,'HT',0, 0,$mysoc);
$tmparray2=calcul_price_total(1,$qty*price2num($s2,'MU'),0,$vat,0,0,0,'HT',0, 0); $tmparray2=calcul_price_total(1,$qty*price2num($s2,'MU'),0,$vat,0,0,0,'HT',0, 0,$mysoc);
$total_ht = $tmparray1[0] + $tmparray2[0]; $total_ht = $tmparray1[0] + $tmparray2[0];
$total_tva = $tmparray1[1] + $tmparray2[1]; $total_tva = $tmparray1[1] + $tmparray2[1];
$total_ttc = $tmparray1[2] + $tmparray2[2]; $total_ttc = $tmparray1[2] + $tmparray2[2];
@ -296,7 +296,7 @@ else
// Global round // Global round
$subtotal_ht = (($qty*price2num($s1,'MU')) + ($qty*price2num($s2,'MU'))); $subtotal_ht = (($qty*price2num($s1,'MU')) + ($qty*price2num($s2,'MU')));
$tmparray3=calcul_price_total(1,$subtotal_ht,0,$vat,0,0,0,'HT',0, 0); $tmparray3=calcul_price_total(1,$subtotal_ht,0,$vat,0,0,0,'HT',0, 0,$mysoc);
$total_ht = $tmparray3[0]; $total_ht = $tmparray3[0];
$total_tva = $tmparray3[1]; $total_tva = $tmparray3[1];
$total_ttc = $tmparray3[2]; $total_ttc = $tmparray3[2];

View File

@ -7,6 +7,7 @@
* Copyright (C) 2005-2014 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2014 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2011-2013 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2011-2013 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2011-2015 Philippe Grand <philippe.grand@atoo-net.com> * Copyright (C) 2011-2015 Philippe Grand <philippe.grand@atoo-net.com>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -29,6 +30,7 @@
*/ */
require '../main.inc.php'; require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expedition.lib.php';
require_once DOL_DOCUMENT_ROOT.'/livraison/class/livraison.class.php'; require_once DOL_DOCUMENT_ROOT.'/livraison/class/livraison.class.php';
$langs->load("admin"); $langs->load("admin");
@ -210,28 +212,10 @@ $form=new Form($db);
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>'; $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup'); print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup');
print '<br>'; print '<br>';
$head = expedition_admin_prepare_head();
dol_fiche_head($head, 'receivings', $langs->trans("Receivings"), 0, 'sending');
$h = 0;
$head[$h][0] = DOL_URL_ROOT."/admin/confexped.php";
$head[$h][1] = $langs->trans("Setup");
$h++;
if (! empty($conf->global->MAIN_SUBMODULE_EXPEDITION))
{
$head[$h][0] = DOL_URL_ROOT."/admin/expedition.php";
$head[$h][1] = $langs->trans("Shipment");
$h++;
}
$head[$h][0] = DOL_URL_ROOT."/admin/livraison.php";
$head[$h][1] = $langs->trans("Receivings");
$hselected=$h;
$h++;
dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup"));
/* /*
* Livraison numbering model * Livraison numbering model

View File

@ -0,0 +1,126 @@
<?php
/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2012 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
*
* 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/admin/livraison_extrafields.php
* \ingroup livraison
* \brief Page to setup extra fields of livraison
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expedition.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
if (!$user->admin)
accessforbidden();
$langs->load("admin");
$langs->load("other");
$langs->load("sendings");
$langs->load("deliveries");
$extrafields = new ExtraFields($db);
$form = new Form($db);
// List of supported format
$tmptype2label=ExtraFields::$type2label;
$type2label=array('');
foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->trans($val);
$action=GETPOST('action', 'alpha');
$attrname=GETPOST('attrname', 'alpha');
$elementtype='livraison'; //Must be the $table_element of the class that manage extrafield
if (!$user->admin) accessforbidden();
/*
* Actions
*/
require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php';
/*
* View
*/
$textobject=$langs->transnoentitiesnoconv("Receivings");
llxHeader('',$langs->trans("SendingsSetup"));
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup');
print "<br>\n";
$head = expedition_admin_prepare_head();
dol_fiche_head($head, 'attributes_receivings', $langs->trans("Receivings"), 0, 'sending');
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
dol_fiche_end();
// Buttons
if ($action != 'create' && $action != 'edit')
{
print '<div class="tabsAction">';
print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
print "</div>";
}
/* ************************************************************************** */
/* */
/* Creation d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'create')
{
print "<br>";
print load_fiche_titre($langs->trans('NewAttribute'));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
}
/* ************************************************************************** */
/* */
/* Edition d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'edit' && ! empty($attrname))
{
print "<br>";
print load_fiche_titre($langs->trans("FieldEdition", $attrname));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
}
llxFooter();
$db->close();

View File

@ -0,0 +1,126 @@
<?php
/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2012 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com>
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
*
*
* 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/admin/livraisondet_extrafields.php
* \ingroup livraison
* \brief Page to setup extra fields of livraison
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expedition.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
if (!$user->admin)
accessforbidden();
$langs->load("admin");
$langs->load("other");
$langs->load("sendings");
$extrafields = new ExtraFields($db);
$form = new Form($db);
// List of supported format
$tmptype2label=ExtraFields::$type2label;
$type2label=array('');
foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->trans($val);
$action=GETPOST('action', 'alpha');
$attrname=GETPOST('attrname', 'alpha');
$elementtype='livraisondet'; //Must be the $table_element of the class that manage extrafield
if (!$user->admin) accessforbidden();
/*
* Actions
*/
require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php';
/*
* View
*/
$textobject=$langs->transnoentitiesnoconv("Receivings");
llxHeader('',$langs->trans("SendingsSetup"));
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
print load_fiche_titre($langs->trans("SendingsSetup"),$linkback,'title_setup');
print "<br>\n";
$head = expedition_admin_prepare_head();
dol_fiche_head($head, 'attributeslines_receivings', $langs->trans("Receivings"), 0, 'sending');
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
dol_fiche_end();
// Buttons
if ($action != 'create' && $action != 'edit')
{
print '<div class="tabsAction">';
print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
print "</div>";
}
/* ************************************************************************** */
/* */
/* Creation d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'create')
{
print "<br>";
print load_fiche_titre($langs->trans('NewAttribute'));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
}
/* ************************************************************************** */
/* */
/* Edition d'un champ optionnel */
/* */
/* ************************************************************************** */
if ($action == 'edit' && ! empty($attrname))
{
print "<br>";
print load_fiche_titre($langs->trans("FieldEdition", $attrname));
require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
}
llxFooter();
$db->close();

View File

@ -89,7 +89,7 @@ class Facturation
*/ */
public function ajoutArticle() public function ajoutArticle()
{ {
global $conf,$db; global $conf,$db,$mysoc;
$thirdpartyid = $_SESSION['CASHDESK_ID_THIRDPARTY']; $thirdpartyid = $_SESSION['CASHDESK_ID_THIRDPARTY'];
@ -118,7 +118,7 @@ class Facturation
} }
// Define part of HT, VAT, TTC // Define part of HT, VAT, TTC
$resultarray=calcul_price_total($this->qte,$this->prix(),$this->remisePercent(),$vat_rate,0,0,0,'HT',0,$product->type,0); $resultarray=calcul_price_total($this->qte,$this->prix(),$this->remisePercent(),$vat_rate,0,0,0,'HT',0,$product->type,$mysoc);
// Calcul du total ht sans remise // Calcul du total ht sans remise
$total_ht = $resultarray[0]; $total_ht = $resultarray[0];

View File

@ -325,7 +325,7 @@ if (empty($reshook))
for($i = 0; $i < $num; $i ++) for($i = 0; $i < $num; $i ++)
{ {
$label = (! empty($lines[$i]->label) ? $lines[$i]->label : ''); $label = (! empty($lines[$i]->label) ? $lines[$i]->label : '');
$desc = (! empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->libelle); $desc = (! empty($lines[$i]->desc) ? $lines[$i]->desc : '');
$product_type = (! empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0); $product_type = (! empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
// Dates // Dates

View File

@ -1222,7 +1222,7 @@ class Commande extends CommonOrder
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc); $localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate. $txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type,'', $localtaxes_type); $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];

View File

@ -405,6 +405,8 @@ class FactureRec extends Facture
*/ */
function addline($desc, $pu_ht, $qty, $txtva, $fk_product=0, $remise_percent=0, $price_base_type='HT', $info_bits=0, $fk_remise_except='', $pu_ttc=0, $type=0, $rang=-1, $special_code=0, $label='', $fk_unit=null) function addline($desc, $pu_ht, $qty, $txtva, $fk_product=0, $remise_percent=0, $price_base_type='HT', $info_bits=0, $fk_remise_except='', $pu_ttc=0, $type=0, $rang=-1, $special_code=0, $label='', $fk_unit=null)
{ {
global $mysoc;
$facid=$this->id; $facid=$this->id;
dol_syslog("FactureRec::addline facid=$facid,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva,fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc,type=$type,fk_unit=$fk_unit", LOG_DEBUG); dol_syslog("FactureRec::addline facid=$facid,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva,fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc,type=$type,fk_unit=$fk_unit", LOG_DEBUG);
@ -437,7 +439,7 @@ class FactureRec extends Facture
// qty, pu, remise_percent et txtva // qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, 0, 0, $price_base_type, $info_bits, $type); $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, 0, 0, $price_base_type, $info_bits, $type, $mysoc);
$total_ht = $tabprice[0]; $total_ht = $tabprice[0];
$total_tva = $tabprice[1]; $total_tva = $tabprice[1];
$total_ttc = $tabprice[2]; $total_ttc = $tabprice[2];

View File

@ -2401,18 +2401,20 @@ class Facture extends CommonInvoice
/** /**
* Update invoice line with percentage * Update invoice line with percentage
* *
* @param FactureLigne $line Invoice line * @param FactureLigne $line Invoice line
* @param int $percent Percentage * @param int $percent Percentage
* @return void * @return void
*/ */
function update_percent($line, $percent) function update_percent($line, $percent)
{ {
global $mysoc;
include_once(DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php'); include_once(DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php');
// Cap percentages to 100 // Cap percentages to 100
if ($percent > 100) $percent = 100; if ($percent > 100) $percent = 100;
$line->situation_percent = $percent; $line->situation_percent = $percent;
$tabprice = calcul_price_total($line->qty, $line->subprice, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->product_type, 'HT', 0, 0, '', '', $percent); $tabprice = calcul_price_total($line->qty, $line->subprice, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->product_type, 'HT', 0, 0, $mysoc, '', $percent);
$line->total_ht = $tabprice[0]; $line->total_ht = $tabprice[0];
$line->total_tva = $tabprice[1]; $line->total_tva = $tabprice[1];
$line->total_ttc = $tabprice[2]; $line->total_ttc = $tabprice[2];

View File

@ -329,10 +329,11 @@ if (empty($reshook))
$result=$mailfile->sendfile(); $result=$mailfile->sendfile();
if ($result) if ($result)
{ {
$resaction.=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)); // Must not contain " $resaction.=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)).'<br>'; // Must not contain "
$error=0; $error=0;
// Insert logs into agenda
foreach($listofqualifiedinvoice as $invid => $object) foreach($listofqualifiedinvoice as $invid => $object)
{ {
$actiontypecode='AC_FAC'; $actiontypecode='AC_FAC';
@ -357,16 +358,13 @@ if (empty($reshook))
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($db); $interface=new Interfaces($db);
$result=$interface->run_triggers('BILL_SENTBYMAIL',$object,$user,$langs,$conf); $result=$interface->run_triggers('BILL_SENTBYMAIL',$object,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; } if ($result < 0) { $error++; $errors=$interface->errors; }
// Fin appel triggers // Fin appel triggers
if (! $error) if ($error)
{ {
$resaction.=$langs->trans("MailSent").': '.$sendto."<br>\n"; setEventMessages($db->lasterror(), $errors, 'errors');
} dol_syslog("Error in trigger BILL_SENTBYMAIL ".$db->lasterror(), LOG_ERR);
else
{
dol_print_error($db);
} }
$nbsent++; $nbsent++;
} }
@ -615,7 +613,7 @@ if ($resql)
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
$formmail = new FormMail($db); $formmail = new FormMail($db);
dol_fiche_head(null, '', $langs->trans("SendByMail")); dol_fiche_head(null, '', '');
$topicmail="SendBillRef"; $topicmail="SendBillRef";
$modelmail="facture_send"; $modelmail="facture_send";
@ -660,7 +658,7 @@ if ($resql)
$formmail->withtocc=1; $formmail->withtocc=1;
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
$formmail->withtopic=$langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__'); $formmail->withtopic=$langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__');
$formmail->withfile=$langs->trans("EachInvoiceWillBeAttachedToEmail"); $formmail->withfile=$langs->trans("OnlyPDFattachmentSupported");
$formmail->withbody=1; $formmail->withbody=1;
$formmail->withdeliveryreceipt=1; $formmail->withdeliveryreceipt=1;
$formmail->withcancel=1; $formmail->withcancel=1;

View File

@ -732,7 +732,7 @@ if ($resql)
$formmail->withtocc=1; $formmail->withtocc=1;
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
$formmail->withtopic=$langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__'); $formmail->withtopic=$langs->transnoentities($topicmail, '__REF__', '__REFCLIENT__');
$formmail->withfile=$langs->trans("EachInvoiceWillBeAttachedToEmail"); $formmail->withfile=$langs->trans("OnlyPDFattachmentSupported");
$formmail->withbody=1; $formmail->withbody=1;
$formmail->withdeliveryreceipt=1; $formmail->withdeliveryreceipt=1;
$formmail->withcancel=1; $formmail->withcancel=1;

View File

@ -94,7 +94,8 @@ abstract class ActionsContactCardCommon
} }
/** /**
* Load data control * doActions of a canvas is not the doActions of the hook
* @deprecated Use the doActions of hooks instead of this.
* *
* @param string $action Type of action * @param string $action Type of action
* @param int $id Id of object * @param int $id Id of object

View File

@ -36,7 +36,9 @@ $langs->load("companies");
$langs->load("suppliers"); $langs->load("suppliers");
// Security check // Security check
$id = GETPOST('id','int');
$contactid = GETPOST('id','int'); $contactid = GETPOST('id','int');
$ref = ''; // There is no ref for contacts
if ($user->societe_id) $socid=$user->societe_id; if ($user->societe_id) $socid=$user->societe_id;
$result = restrictedArea($user, 'contact', $contactid,''); $result = restrictedArea($user, 'contact', $contactid,'');
@ -150,13 +152,20 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
} }
} }
$object=new Contact($db);
if (($id > 0 || ! empty($ref)) && $action != 'add')
{
$result=$object->fetch($id,$ref);
if ($result < 0) dol_print_error($db);
}
/* /*
* Actions * Actions
*/ */
$parameters=array(); $parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';

View File

@ -8,6 +8,7 @@
* Copyright (C) 2013 Christophe Battarel <christophe.battarel@altairis.fr> * Copyright (C) 2013 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro> * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com> * Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2015 Ferran Marcet <fmarcet@2byte.es>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -989,6 +990,13 @@ class Contrat extends CommonObject
} }
} }
if (! $error)
{
// Delete linked object
$res = $this->deleteObjectLinked();
if ($res < 0) $error++;
}
if (! $error) if (! $error)
{ {
// Delete contratdet_log // Delete contratdet_log

View File

@ -264,6 +264,7 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
} }
} }
} }
// Send mail // Send mail
require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1,'','',$trackid); $mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1,'','',$trackid);
@ -277,6 +278,8 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
if ($result) if ($result)
{ {
$error=0; $error=0;
// FIXME This must be moved into a trigger for action $trigger_name
if (! empty($conf->dolimail->enabled)) if (! empty($conf->dolimail->enabled))
{ {
$mid = (GETPOST('mid','int') ? GETPOST('mid','int') : 0); // Original mail id is set ? $mid = (GETPOST('mid','int') ? GETPOST('mid','int') : 0); // Original mail id is set ?
@ -295,7 +298,7 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
else setEventMessages($langs->trans("MailMovedToImapFolder_Warning",$folder), null, 'warnings'); else setEventMessages($langs->trans("MailMovedToImapFolder_Warning",$folder), null, 'warnings');
} }
} }
// Initialisation of datas // Initialisation of datas
$object->socid = $sendtosocid; // To link to a company $object->socid = $sendtosocid; // To link to a company
$object->sendtoid = $sendtoid; // To link to a contact/address $object->sendtoid = $sendtoid; // To link to a contact/address

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com> /* Copyright (C) 2010-2015 Regis Houssin <regis.houssin@capnetworks.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -17,15 +17,17 @@
/** /**
* \file htdocs/core/ajax/row.php * \file htdocs/core/ajax/row.php
* \brief File to return Ajax response on Row move * \brief File to return Ajax response on Row move.
* This ajax page is called when doing an up or down drag and drop.
*/ */
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Disables token renewal if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Disable token renewal
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1');
if (! defined('NOREQUIREHOOK')) define('NOREQUIREHOOK','1'); // Disable "main.inc.php" hooks
require '../../main.inc.php'; require '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/genericobject.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/genericobject.class.php';
@ -63,7 +65,7 @@ if ((isset($_POST['roworder']) && ! empty($_POST['roworder'])) && (isset($_POST[
$row->line_ajaxorder($newrowordertab); $row->line_ajaxorder($newrowordertab);
// Reorder line to have position of chilren lines sharing same counter than parent lines // Reorder line to have position of chilren lines sharing same counter than parent lines
// This should be useless because there is no need to have children sharing same counter that parent. // This should be useless because there is no need to have children sharing same counter than parent, but well, it's cleaner into database.
if (in_array($fk_element,array('fk_facture','fk_propal','fk_commande'))) if (in_array($fk_element,array('fk_facture','fk_propal','fk_commande')))
{ {
$result=$row->line_order(true); $result=$row->line_order(true);

View File

@ -179,13 +179,14 @@ class Canvas
} }
/** /**
* Shared method for canvas to execute actions * Shared method for canvas to execute actions.
* @deprecated Use the doActions of hooks instead of this.
* This function is called if you add a doActions class inside your canvas. Try to not
* do that and add action code into a hook instead.
* *
* @param string $action Action string * @param string $action Action string
* @param int $id Object id * @param int $id Object id
* @return mixed Return return code of doActions of canvas * @return mixed Return return code of doActions of canvas
* @deprecated This function is called if you add a doActions class inside your canvas. Try to not
* do that and add action code into a hook instead.
* @see http://wiki.dolibarr.org/index.php/Canvas_development * @see http://wiki.dolibarr.org/index.php/Canvas_development
*/ */
function doActions(&$action='view', $id=0) function doActions(&$action='view', $id=0)

View File

@ -4243,7 +4243,7 @@ class Form
else else
{ {
// Day // Day
$retstring.='<select'.($disabled?' disabled':'').' class="flat" name="'.$prefix.'day">'; $retstring.='<select'.($disabled?' disabled':'').' class="flat" id="'.$prefix.'day" name="'.$prefix.'day">';
if ($emptydate || $set_time == -1) if ($emptydate || $set_time == -1)
{ {
@ -4257,7 +4257,7 @@ class Form
$retstring.="</select>"; $retstring.="</select>";
$retstring.='<select'.($disabled?' disabled':'').' class="flat" name="'.$prefix.'month">'; $retstring.='<select'.($disabled?' disabled':'').' class="flat" id="'.$prefix.'month" name="'.$prefix.'month">';
if ($emptydate || $set_time == -1) if ($emptydate || $set_time == -1)
{ {
$retstring.='<option value="0" selected>&nbsp;</option>'; $retstring.='<option value="0" selected>&nbsp;</option>';
@ -4275,11 +4275,11 @@ class Form
// Year // Year
if ($emptydate || $set_time == -1) if ($emptydate || $set_time == -1)
{ {
$retstring.='<input'.($disabled?' disabled':'').' placeholder="'.dol_escape_htmltag($langs->trans("Year")).'" class="flat" type="text" size="3" maxlength="4" name="'.$prefix.'year" value="'.$syear.'">'; $retstring.='<input'.($disabled?' disabled':'').' placeholder="'.dol_escape_htmltag($langs->trans("Year")).'" class="flat" type="text" size="3" maxlength="4" id="'.$prefix.'year" name="'.$prefix.'year" value="'.$syear.'">';
} }
else else
{ {
$retstring.='<select'.($disabled?' disabled':'').' class="flat" name="'.$prefix.'year">'; $retstring.='<select'.($disabled?' disabled':'').' class="flat" id="'.$prefix.'year" name="'.$prefix.'year">';
for ($year = $syear - 5; $year < $syear + 10 ; $year++) for ($year = $syear - 5; $year < $syear + 10 ; $year++)
{ {

View File

@ -316,10 +316,25 @@ class FormMail extends Form
$out.= $langs->trans('SelectMailModel').': '.$this->selectarray('modelmailselected', $modelmail_array, 0, 1); $out.= $langs->trans('SelectMailModel').': '.$this->selectarray('modelmailselected', $modelmail_array, 0, 1);
if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1); if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
$out.= ' &nbsp; '; $out.= ' &nbsp; ';
$out.= '<input class="button" type="submit" value="'.$langs->trans('Valid').'" name="modelselected" id="modelselected">'; $out.= '<input class="button" type="submit" value="'.$langs->trans('Use').'" name="modelselected" id="modelselected">';
$out.= ' &nbsp; '; $out.= ' &nbsp; ';
$out.= '</div>'; $out.= '</div>';
} }
elseif (! empty($this->param['models']) && in_array($this->param['models'], array(
'propal_send','order_send','facture_send',
'shipping_send','fichinter_send','supplier_proposal_send','order_supplier_send',
'invoice_supplier_send','thirdparty'
)))
{
$out.= '<div style="padding: 3px 0 3px 0">'."\n";
$out.= $langs->trans('SelectMailModel').': <select name="modelmailselected" disabled="disabled"><option value="none" disabled="disabled">'.$langs->trans("NoTemplateDefined").'</option></select>';
if ($user->admin) $out.= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
$out.= ' &nbsp; ';
$out.= '<input class="button" type="submit" value="'.$langs->trans('Use').'" name="modelselected" disabled="disabled" id="modelselected">';
$out.= ' &nbsp; ';
$out.= '</div>';
}
$out.= '<table class="border" width="100%">'."\n"; $out.= '<table class="border" width="100%">'."\n";

View File

@ -237,9 +237,9 @@ abstract class DoliDB implements Database
$return.=preg_replace('/[^0-9a-z_\.]/i','',$val); $return.=preg_replace('/[^0-9a-z_\.]/i','',$val);
// Only ASC and DESC values are valid SQL // Only ASC and DESC values are valid SQL
if ($sortorder === 'ASC') { if (strtoupper($sortorder) === 'ASC') {
$return .= ' ASC'; $return .= ' ASC';
} elseif ($sortorder === 'DESC') { } elseif (strtoupper($sortorder) === 'DESC') {
$return .= ' DESC'; $return .= ' DESC';
} }
} }

View File

@ -0,0 +1,50 @@
<?php
if (empty($keyforselect) || empty($keyforelement) || empty($keyforaliasextra))
{
//print $keyforselet.' - '.$keyforelement.' - '.$keyforaliasextra;
dol_print_error('', 'include of file extrafieldsinexport.inc.php was done but var $keyforselect or $keyforelement or $keyforaliasextra was not set');
exit;
}
// Add extra fields
$sql="SELECT name, label, type, param FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = '".$keyforselect."' AND entity IN (0, ".$conf->entity.')';
//print $sql;
$resql=$this->db->query($sql);
if ($resql) // This can fail when class is used on old database (during migration for example)
{
while ($obj=$this->db->fetch_object($resql))
{
$fieldname=$keyforaliasextra.'.'.$obj->name;
$fieldlabel=ucfirst($obj->label);
$typeFilter="Text";
switch($obj->type)
{
case 'int':
case 'double':
case 'price':
$typeFilter="Numeric";
break;
case 'date':
case 'datetime':
$typeFilter="Date";
break;
case 'boolean':
$typeFilter="Boolean";
break;
case 'sellist':
$tmp='';
$tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null
if ($tmpparam['options'] && is_array($tmpparam['options'])) {
$tmpkeys=array_keys($tmpparam['options']);
$tmp=array_shift($tmpkeys);
}
if (preg_match('/[a-z0-9_]+:[a-z0-9_]+:[a-z0-9_]+/', $tmp)) $typeFilter="List:".$tmp;
break;
}
$this->export_fields_array[$r][$fieldname]=$fieldlabel;
$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
$this->export_entities_array[$r][$fieldname]=$keyforelement;
}
}
// End add axtra fields

View File

@ -0,0 +1,142 @@
<?php
/* Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
*
* 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/>.
* or see http://www.gnu.org/
*/
/**
* \file htdocs/core/lib/expedition.lib.php
* \brief Function for expedition module
* \ingroup expedition
*/
/**
* Prepare array with list of tabs
*
* @param Expedition $object Object related to tabs
* @return array Array of tabs to show
*/
function expedition_prepare_head(Expedition $object)
{
global $langs, $conf, $user;
if (! empty($conf->expedition->enabled)) $langs->load("sendings");
$langs->load("orders");
$h = 0;
$head = array();
$h = 0;
$head[$h][0] = DOL_URL_ROOT."/admin/confexped.php";
$head[$h][1] = $langs->trans("Setup");
$h++;
$head[$h][0] = DOL_URL_ROOT."/admin/expedition.php";
$head[$h][1] = $langs->trans("Shipment");
$hselected=$h;
$h++;
if (! empty($conf->global->MAIN_SUBMODULE_LIVRAISON))
{
$head[$h][0] = DOL_URL_ROOT."/admin/livraison.php";
$head[$h][1] = $langs->trans("Receivings");
$h++;
}
complete_head_from_modules($conf,$langs,$object,$head,$h,'order','remove');
return $head;
}
/**
* Return array head with list of tabs to view object informations.
*
* @return array head array with tabs
*/
function expedition_admin_prepare_head()
{
global $langs, $conf, $user;
$langs->load("sendings");
$h = 0;
$head = array();
$head[$h][0] = DOL_URL_ROOT."/admin/confexped.php";
$head[$h][1] = $langs->trans("Setup");
$head[$h][2] = 'general';
$h++;
if (! empty($conf->global->MAIN_SUBMODULE_EXPEDITION))
{
$head[$h][0] = DOL_URL_ROOT."/admin/expedition.php";
$head[$h][1] = $langs->trans("Shipment");
$head[$h][2] = 'shipment';
$h++;
}
if (! empty($conf->global->MAIN_SUBMODULE_EXPEDITION))
{
$head[$h][0] = DOL_URL_ROOT.'/admin/expedition_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFields");
$head[$h][2] = 'attributes_shipment';
$h++;
}
if (! empty($conf->global->MAIN_SUBMODULE_EXPEDITION))
{
$head[$h][0] = DOL_URL_ROOT.'/admin/expeditiondet_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines");
$head[$h][2] = 'attributeslines_shipment';
$h++;
}
if (! empty($conf->global->MAIN_SUBMODULE_LIVRAISON))
{
$head[$h][0] = DOL_URL_ROOT."/admin/livraison.php";
$head[$h][1] = $langs->trans("Receivings");
$head[$h][2] = 'receivings';
$h++;
}
if (! empty($conf->global->MAIN_SUBMODULE_LIVRAISON))
{
$head[$h][0] = DOL_URL_ROOT.'/admin/livraison_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFields");
$head[$h][2] = 'attributes_receivings';
$h++;
}
if (! empty($conf->global->MAIN_SUBMODULE_LIVRAISON))
{
$head[$h][0] = DOL_URL_ROOT.'/admin/livraisondet_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines");
$head[$h][2] = 'attributeslines_receivings';
$h++;
}
complete_head_from_modules($conf,$langs,null,$head,$h,'expedition_admin','remove');
return $head;
}

View File

@ -32,7 +32,7 @@
* *
* Parent class for module descriptor class files * Parent class for module descriptor class files
*/ */
class DolibarrModules // Can not be abstract, because we need to instantiant it into unActivateModule to be able to disable a module whose files were removed. class DolibarrModules // Can not be abstract, because we need to instantiate it into unActivateModule to be able to disable a module whose files were removed.
{ {
/** /**
* @var DoliDb Database handler * @var DoliDb Database handler
@ -432,7 +432,7 @@ class DolibarrModules // Can not be abstract, because we need to insta
} }
else else
{ {
// If module description translation using it's unique id does not exists, we take use its name to find translation // If module description translation does not exist using its unique id, we can use its name to find translation
if (is_array($this->langfiles)) if (is_array($this->langfiles))
{ {
foreach($this->langfiles as $val) foreach($this->langfiles as $val)
@ -510,12 +510,12 @@ class DolibarrModules // Can not be abstract, because we need to insta
$langstring="ExportDataset_".$this->export_code[$r]; $langstring="ExportDataset_".$this->export_code[$r];
if ($langs->trans($langstring) == $langstring) if ($langs->trans($langstring) == $langstring)
{ {
// Traduction non trouvee // Translation not found
return $langs->trans($this->export_label[$r]); return $langs->trans($this->export_label[$r]);
} }
else else
{ {
// Traduction trouvee // Translation found
return $langs->trans($langstring); return $langs->trans($langstring);
} }
} }
@ -536,12 +536,12 @@ class DolibarrModules // Can not be abstract, because we need to insta
//print "x".$langstring; //print "x".$langstring;
if ($langs->trans($langstring) == $langstring) if ($langs->trans($langstring) == $langstring)
{ {
// Traduction non trouvee // Translation not found
return $langs->trans($this->import_label[$r]); return $langs->trans($this->import_label[$r]);
} }
else else
{ {
// Traduction trouvee // Translation found
return $langs->trans($langstring); return $langs->trans($langstring);
} }
} }
@ -1223,7 +1223,7 @@ print $sql;
$obj=$this->db->fetch_object($resql); $obj=$this->db->fetch_object($resql);
if ($obj !== null && ! empty($obj->value) && ! empty($this->rights)) if ($obj !== null && ! empty($obj->value) && ! empty($this->rights))
{ {
// Si module actif // If the module is active
foreach ($this->rights as $key => $value) foreach ($this->rights as $key => $value)
{ {
$r_id = $this->rights[$key][0]; $r_id = $this->rights[$key][0];

View File

@ -484,7 +484,7 @@ class pdf_einstein extends ModelePDFCommandes
$this->tva[$vatrate] += $tvaligne; $this->tva[$vatrate] += $tvaligne;
// Add line // Add line
if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{ {
$pdf->setPage($pageposafter); $pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));

View File

@ -279,7 +279,7 @@ class pdf_merou extends ModelePdfExpedition
$pdf->MultiCell(30, 3, $object->lines[$i]->qty_shipped, 0, 'C', 0); $pdf->MultiCell(30, 3, $object->lines[$i]->qty_shipped, 0, 'C', 0);
// Add line // Add line
if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{ {
$pdf->setPage($pageposafter); $pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));

View File

@ -452,7 +452,7 @@ class pdf_rouget extends ModelePdfExpedition
$pdf->MultiCell(($this->page_largeur - $this->marge_droite - $this->posxqtytoship), 3, $object->lines[$i]->qty_shipped,'','C'); $pdf->MultiCell(($this->page_largeur - $this->marge_droite - $this->posxqtytoship), 3, $object->lines[$i]->qty_shipped,'','C');
// Add line // Add line
if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{ {
$pdf->setPage($pageposafter); $pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));

View File

@ -579,7 +579,7 @@ class pdf_crabe extends ModelePDFFactures
if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage;
// Add line // Add line
if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{ {
$pdf->setPage($pageposafter); $pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));

View File

@ -183,52 +183,23 @@ class modCommande extends DolibarrModules
$this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','co.label'=>'List:c_country:label:label','co.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','c.ref'=>"Text",'c.ref_client'=>"Text",'c.date_creation'=>"Date",'c.date_commande'=>"Date",'c.amount_ht'=>"Numeric",'c.remise_percent'=>"Numeric",'c.total_ht'=>"Numeric",'c.total_ttc'=>"Numeric",'c.facture'=>"Boolean",'c.fk_statut'=>'Status','c.note_public'=>"Text",'c.date_livraison'=>'Date','cd.description'=>"Text",'cd.product_type'=>'Boolean','cd.tva_tx'=>"Numeric",'cd.qty'=>"Numeric",'cd.total_ht'=>"Numeric",'cd.total_tva'=>"Numeric",'cd.total_ttc'=>"Numeric",'p.rowid'=>'List:product:ref','p.ref'=>'Text','p.label'=>'Text'); $this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','co.label'=>'List:c_country:label:label','co.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','c.ref'=>"Text",'c.ref_client'=>"Text",'c.date_creation'=>"Date",'c.date_commande'=>"Date",'c.amount_ht'=>"Numeric",'c.remise_percent'=>"Numeric",'c.total_ht'=>"Numeric",'c.total_ttc'=>"Numeric",'c.facture'=>"Boolean",'c.fk_statut'=>'Status','c.note_public'=>"Text",'c.date_livraison'=>'Date','cd.description'=>"Text",'cd.product_type'=>'Boolean','cd.tva_tx'=>"Numeric",'cd.qty'=>"Numeric",'cd.total_ht'=>"Numeric",'cd.total_tva'=>"Numeric",'cd.total_ttc'=>"Numeric",'p.rowid'=>'List:product:ref','p.ref'=>'Text','p.label'=>'Text');
$this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','co.label'=>'company','co.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.siret'=>'company','c.rowid'=>"order",'c.ref'=>"order",'c.ref_client'=>"order",'c.fk_soc'=>"order",'c.date_creation'=>"order",'c.date_commande'=>"order",'c.amount_ht'=>"order",'c.remise_percent'=>"order",'c.total_ht'=>"order",'c.total_ttc'=>"order",'c.facture'=>"order",'c.fk_statut'=>"order",'c.note'=>"order",'c.date_livraison'=>"order",'cd.rowid'=>'order_line','cd.label'=>"order_line",'cd.description'=>"order_line",'cd.product_type'=>'order_line','cd.tva_tx'=>"order_line",'cd.qty'=>"order_line",'cd.total_ht'=>"order_line",'cd.total_tva'=>"order_line",'cd.total_ttc'=>"order_line",'p.rowid'=>'product','p.ref'=>'product','p.label'=>'product'); $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','co.label'=>'company','co.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.siret'=>'company','c.rowid'=>"order",'c.ref'=>"order",'c.ref_client'=>"order",'c.fk_soc'=>"order",'c.date_creation'=>"order",'c.date_commande'=>"order",'c.amount_ht'=>"order",'c.remise_percent'=>"order",'c.total_ht'=>"order",'c.total_ttc'=>"order",'c.facture'=>"order",'c.fk_statut'=>"order",'c.note'=>"order",'c.date_livraison'=>"order",'cd.rowid'=>'order_line','cd.label'=>"order_line",'cd.description'=>"order_line",'cd.product_type'=>'order_line','cd.tva_tx'=>"order_line",'cd.qty'=>"order_line",'cd.total_ht'=>"order_line",'cd.total_tva'=>"order_line",'cd.total_ttc'=>"order_line",'p.rowid'=>'product','p.ref'=>'product','p.label'=>'product');
$this->export_dependencies_array[$r]=array('order_line'=>'cd.rowid','product'=>'cd.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them $this->export_dependencies_array[$r]=array('order_line'=>'cd.rowid','product'=>'cd.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them
// Add extra fields $keyforselect='commande'; $keyforelement='order'; $keyforaliasextra='extra';
$sql="SELECT name, label, type FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'commande' AND entity IN (0, ".$conf->entity.')'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$resql=$this->db->query($sql); $keyforselect='commandedet'; $keyforelement='order_line'; $keyforaliasextra='extra2';
if ($resql) // This can fail when class is used on old database (during migration for example) include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
{ $keyforselect='product'; $keyforelement='product'; $keyforaliasextra='extra3';
while ($obj=$this->db->fetch_object($resql)) include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
{
$fieldname='extra.'.$obj->name;
$fieldlabel=ucfirst($obj->label);
$typeFilter="Text";
switch($obj->type)
{
case 'int':
case 'double':
case 'price':
$typeFilter="Numeric";
break;
case 'date':
case 'datetime':
$typeFilter="Date";
break;
case 'boolean':
$typeFilter="Boolean";
break;
case 'sellist':
$tmp='';
$tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null
if ($tmpparam['options'] && is_array($tmpparam['options'])) $tmp=array_shift(array_keys($tmpparam['options']));
if (preg_match('/[a-z0-9_]+:[a-z0-9_]+:[a-z0-9_]+/', $tmp)) $typeFilter="List:".$tmp;
break;
}
$this->export_fields_array[$r][$fieldname]=$fieldlabel;
$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
$this->export_entities_array[$r][$fieldname]='order';
}
}
// End add extra fields
$this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_start[$r]='SELECT DISTINCT ';
$this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s'; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as co ON s.fk_pays = co.rowid,'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as co ON s.fk_pays = co.rowid,';
$this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'commande as c'; $this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'commande as c';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uc ON c.fk_user_author = uc.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uc ON c.fk_user_author = uc.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON c.fk_user_valid = uc.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON c.fk_user_valid = uv.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'commande_extrafields as extra ON c.rowid = extra.fk_object'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'commande_extrafields as extra ON c.rowid = extra.fk_object';
$this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'commandedet as cd'; $this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'commandedet as cd';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'commandedet_extrafields as extra2 on cd.rowid = extra2.fk_object';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on cd.fk_product = p.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on cd.fk_product = p.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extra3 on p.rowid = extra3.fk_object';
$this->export_sql_end[$r] .=' WHERE c.fk_soc = s.rowid AND c.rowid = cd.fk_commande'; $this->export_sql_end[$r] .=' WHERE c.fk_soc = s.rowid AND c.rowid = cd.fk_commande';
$this->export_sql_end[$r] .=' AND c.entity IN ('.getEntity('commande',1).')'; $this->export_sql_end[$r] .=' AND c.entity IN ('.getEntity('commande',1).')';
} }

View File

@ -128,7 +128,7 @@ class modCron extends DolibarrModules
$this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'type'=>'left', // This is a Left menu entry 'type'=>'left', // This is a Left menu entry
'titre'=>'CronList', 'titre'=>'CronList',
'url'=>'/cron/list.php?status=-1', 'url'=>'/cron/list.php?status=-2',
'langs'=>'cron', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. 'langs'=>'cron', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'position'=>200, 'position'=>200,
'enabled'=>'$leftmenu==\'modulesadmintools\'', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. 'enabled'=>'$leftmenu==\'modulesadmintools\'', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.

View File

@ -185,46 +185,12 @@ class modFacture extends DolibarrModules
$this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','c.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text','s.tva_intra'=>'Text','f.facnumber'=>"Text",'f.datec'=>"Date",'f.datef'=>"Date",'f.date_lim_reglement'=>"Date",'f.total'=>"Numeric",'f.total_ttc'=>"Numeric",'f.tva'=>"Numeric",'f.paye'=>"Boolean",'f.fk_statut'=>'Status','f.note_private'=>"Text",'f.note_public'=>"Text",'fd.description'=>"Text",'fd.subprice'=>"Numeric",'fd.tva_tx'=>"Numeric",'fd.qty'=>"Numeric",'fd.total_ht'=>"Numeric",'fd.total_tva'=>"Numeric",'fd.total_ttc'=>"Numeric",'fd.date_start'=>"Date",'fd.date_end'=>"Date",'fd.special_code'=>'Numeric','fd.product_type'=>"Numeric",'fd.fk_product'=>'List:product:label','p.ref'=>'Text','p.label'=>'Text','p.accountancy_code_sell'=>'Text'); $this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','c.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text','s.tva_intra'=>'Text','f.facnumber'=>"Text",'f.datec'=>"Date",'f.datef'=>"Date",'f.date_lim_reglement'=>"Date",'f.total'=>"Numeric",'f.total_ttc'=>"Numeric",'f.tva'=>"Numeric",'f.paye'=>"Boolean",'f.fk_statut'=>'Status','f.note_private'=>"Text",'f.note_public'=>"Text",'fd.description'=>"Text",'fd.subprice'=>"Numeric",'fd.tva_tx'=>"Numeric",'fd.qty'=>"Numeric",'fd.total_ht'=>"Numeric",'fd.total_tva'=>"Numeric",'fd.total_ttc'=>"Numeric",'fd.date_start'=>"Date",'fd.date_end'=>"Date",'fd.special_code'=>'Numeric','fd.product_type'=>"Numeric",'fd.fk_product'=>'List:product:label','p.ref'=>'Text','p.label'=>'Text','p.accountancy_code_sell'=>'Text');
$this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','c.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','s.tva_intra'=>'company','f.rowid'=>"invoice",'f.facnumber'=>"invoice",'f.datec'=>"invoice",'f.datef'=>"invoice",'f.date_lim_reglement'=>"invoice",'f.total'=>"invoice",'f.total_ttc'=>"invoice",'f.tva'=>"invoice",'f.paye'=>"invoice",'f.fk_statut'=>'invoice','f.note_private'=>"invoice",'f.note_public'=>"invoice",'fd.rowid'=>'invoice_line','fd.label'=>"invoice_line",'fd.description'=>"invoice_line",'fd.subprice'=>"invoice_line",'fd.total_ht'=>"invoice_line",'fd.total_tva'=>"invoice_line",'fd.total_ttc'=>"invoice_line",'fd.tva_tx'=>"invoice_line",'fd.qty'=>"invoice_line",'fd.date_start'=>"invoice_line",'fd.date_end'=>"invoice_line",'fd.special_code'=>'invoice_line','fd.product_type'=>'invoice_line','fd.fk_product'=>'product','p.ref'=>'product','p.label'=>'product','p.accountancy_code_sell'=>'product','f.fk_user_author'=>'user','uc.login'=>'user','f.fk_user_valid'=>'user','uv.login'=>'user'); $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','c.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','s.tva_intra'=>'company','f.rowid'=>"invoice",'f.facnumber'=>"invoice",'f.datec'=>"invoice",'f.datef'=>"invoice",'f.date_lim_reglement'=>"invoice",'f.total'=>"invoice",'f.total_ttc'=>"invoice",'f.tva'=>"invoice",'f.paye'=>"invoice",'f.fk_statut'=>'invoice','f.note_private'=>"invoice",'f.note_public'=>"invoice",'fd.rowid'=>'invoice_line','fd.label'=>"invoice_line",'fd.description'=>"invoice_line",'fd.subprice'=>"invoice_line",'fd.total_ht'=>"invoice_line",'fd.total_tva'=>"invoice_line",'fd.total_ttc'=>"invoice_line",'fd.tva_tx'=>"invoice_line",'fd.qty'=>"invoice_line",'fd.date_start'=>"invoice_line",'fd.date_end'=>"invoice_line",'fd.special_code'=>'invoice_line','fd.product_type'=>'invoice_line','fd.fk_product'=>'product','p.ref'=>'product','p.label'=>'product','p.accountancy_code_sell'=>'product','f.fk_user_author'=>'user','uc.login'=>'user','f.fk_user_valid'=>'user','uv.login'=>'user');
$this->export_dependencies_array[$r]=array('invoice_line'=>'fd.rowid','product'=>'fd.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them $this->export_dependencies_array[$r]=array('invoice_line'=>'fd.rowid','product'=>'fd.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them
// Add extra fields $keyforselect='facture'; $keyforelement='invoice'; $keyforaliasextra='extra';
$sql="SELECT name, label, type, param FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'facture'"; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$resql=$this->db->query($sql); $keyforselect='facturedet'; $keyforelement='invoice_line'; $keyforaliasextra='extra2';
if ($resql) // This can fail when class is used on old database (during migration for example) include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
{ $keyforselect='product'; $keyforelement='product'; $keyforaliasextra='extra3';
while ($obj=$this->db->fetch_object($resql)) include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
{
$fieldname='extra.'.$obj->name;
$fieldlabel=ucfirst($obj->label);
$typeFilter="Text";
switch($obj->type)
{
case 'int':
case 'double':
case 'price':
$typeFilter="Numeric";
break;
case 'date':
case 'datetime':
$typeFilter="Date";
break;
case 'boolean':
$typeFilter="Boolean";
break;
case 'sellist':
$tmp='';
$tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null
if ($tmpparam['options'] && is_array($tmpparam['options'])) {
$tmpkeys=array_keys($tmpparam['options']);
$tmp=array_shift($tmpkeys);
}
if (preg_match('/[a-z0-9_]+:[a-z0-9_]+:[a-z0-9_]+/', $tmp)) $typeFilter="List:".$tmp;
break;
}
$this->export_fields_array[$r][$fieldname]=$fieldlabel;
$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
$this->export_entities_array[$r][$fieldname]='facture';
}
}
// End add axtra fields
$this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_start[$r]='SELECT DISTINCT ';
$this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s'; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c on s.fk_pays = c.rowid,'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c on s.fk_pays = c.rowid,';
@ -233,7 +199,9 @@ class modFacture extends DolibarrModules
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON f.fk_user_valid = uv.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON f.fk_user_valid = uv.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'facture_extrafields as extra ON f.rowid = extra.fk_object'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'facture_extrafields as extra ON f.rowid = extra.fk_object';
$this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'facturedet as fd'; $this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'facturedet as fd';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'facturedet_extrafields as extra2 on fd.rowid = extra2.fk_object';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on (fd.fk_product = p.rowid)'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on (fd.fk_product = p.rowid)';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extra3 on p.rowid = extra3.fk_object';
$this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_facture'; $this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_facture';
$this->export_sql_end[$r] .=' AND f.entity IN ('.getEntity('facture',1).')'; $this->export_sql_end[$r] .=' AND f.entity IN ('.getEntity('facture',1).')';
$r++; $r++;
@ -247,46 +215,8 @@ class modFacture extends DolibarrModules
$this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','c.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text','s.tva_intra'=>'Text','f.rowid'=>"List:facture:facnumber",'f.facnumber'=>"Text",'f.datec'=>"Date",'f.datef'=>"Date",'f.date_lim_reglement'=>"Date",'f.total'=>"Numeric",'f.total_ttc'=>"Numeric",'f.tva'=>"Numeric",'f.paye'=>"Boolean",'f.fk_statut'=>'Status','f.note_private'=>"Text",'f.note_public'=>"Text",'pf.amount'=>'Numeric','p.datep'=>'Date','p.num_paiement'=>'Numeric','p.fk_bank'=>'Numeric','p.note'=>'Text'); $this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','c.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','s.code_compta'=>'Text','s.code_compta_fournisseur'=>'Text','s.tva_intra'=>'Text','f.rowid'=>"List:facture:facnumber",'f.facnumber'=>"Text",'f.datec'=>"Date",'f.datef'=>"Date",'f.date_lim_reglement'=>"Date",'f.total'=>"Numeric",'f.total_ttc'=>"Numeric",'f.tva'=>"Numeric",'f.paye'=>"Boolean",'f.fk_statut'=>'Status','f.note_private'=>"Text",'f.note_public'=>"Text",'pf.amount'=>'Numeric','p.datep'=>'Date','p.num_paiement'=>'Numeric','p.fk_bank'=>'Numeric','p.note'=>'Text');
$this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','c.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','s.tva_intra'=>'company','f.rowid'=>"invoice",'f.facnumber'=>"invoice",'f.datec'=>"invoice",'f.datef'=>"invoice",'f.date_lim_reglement'=>"invoice",'f.total'=>"invoice",'f.total_ttc'=>"invoice",'f.tva'=>"invoice",'f.paye'=>"invoice",'f.fk_statut'=>'invoice','f.note_private'=>"invoice",'f.note_public'=>"invoice",'p.rowid'=>'payment','p.ref'=>'payment','p.amount'=>'payment','pf.amount'=>'payment','p.datep'=>'payment','p.num_paiement'=>'payment','pt.code'=>'payment','p.fk_bank'=>'payment','p.note'=>'payment','f.fk_user_author'=>'user','uc.login'=>'user','f.fk_user_valid'=>'user','uv.login'=>'user'); $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','c.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','s.tva_intra'=>'company','f.rowid'=>"invoice",'f.facnumber'=>"invoice",'f.datec'=>"invoice",'f.datef'=>"invoice",'f.date_lim_reglement'=>"invoice",'f.total'=>"invoice",'f.total_ttc'=>"invoice",'f.tva'=>"invoice",'f.paye'=>"invoice",'f.fk_statut'=>'invoice','f.note_private'=>"invoice",'f.note_public'=>"invoice",'p.rowid'=>'payment','p.ref'=>'payment','p.amount'=>'payment','pf.amount'=>'payment','p.datep'=>'payment','p.num_paiement'=>'payment','pt.code'=>'payment','p.fk_bank'=>'payment','p.note'=>'payment','f.fk_user_author'=>'user','uc.login'=>'user','f.fk_user_valid'=>'user','uv.login'=>'user');
$this->export_dependencies_array[$r]=array('payment'=>'p.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them $this->export_dependencies_array[$r]=array('payment'=>'p.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them
// Add extra fields $keyforselect='facture'; $keyforelement='invoice'; $keyforaliasextra='extra';
$sql="SELECT name, label, type, param FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'facture'"; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$resql=$this->db->query($sql);
if ($resql) // This can fail when class is used on old database (during migration for example)
{
while ($obj=$this->db->fetch_object($resql))
{
$fieldname='extra.'.$obj->name;
$fieldlabel=ucfirst($obj->label);
$typeFilter="Text";
switch($obj->type)
{
case 'int':
case 'double':
case 'price':
$typeFilter="Numeric";
break;
case 'date':
case 'datetime':
$typeFilter="Date";
break;
case 'boolean':
$typeFilter="Boolean";
break;
case 'sellist':
$tmp='';
$tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null
if ($tmpparam['options'] && is_array($tmpparam['options'])) {
$tmpkeys=array_keys($tmpparam['options']);
$tmp=array_shift($tmpkeys);
}
if (preg_match('/[a-z0-9_]+:[a-z0-9_]+:[a-z0-9_]+/', $tmp)) $typeFilter="List:".$tmp;
break;
}
$this->export_fields_array[$r][$fieldname]=$fieldlabel;
$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
$this->export_entities_array[$r][$fieldname]='facture';
}
}
// End add axtra fields
$this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_start[$r]='SELECT DISTINCT ';
$this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s'; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c on s.fk_pays = c.rowid,'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c on s.fk_pays = c.rowid,';

View File

@ -176,52 +176,23 @@ class modPropale extends DolibarrModules
$this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','co.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','c.ref'=>"Text",'c.ref_client'=>"Text",'c.datec'=>"Date",'c.datep'=>"Date",'c.fin_validite'=>"Date",'c.remise_percent'=>"Numeric",'c.total_ht'=>"Numeric",'c.total'=>"Numeric",'c.fk_statut'=>'Status','c.note_public'=>"Text",'c.date_livraison'=>'Date','cd.description'=>"Text",'cd.product_type'=>'Boolean','cd.tva_tx'=>"Numeric",'cd.qty'=>"Numeric",'cd.total_ht'=>"Numeric",'cd.total_tva'=>"Numeric",'cd.total_ttc'=>"Numeric",'p.ref'=>'Text','p.label'=>'Text'); $this->export_TypeFields_array[$r]=array('s.nom'=>'Text','s.address'=>'Text','s.zip'=>'Text','s.town'=>'Text','co.code'=>'Text','s.phone'=>'Text','s.siren'=>'Text','s.siret'=>'Text','s.ape'=>'Text','s.idprof4'=>'Text','c.ref'=>"Text",'c.ref_client'=>"Text",'c.datec'=>"Date",'c.datep'=>"Date",'c.fin_validite'=>"Date",'c.remise_percent'=>"Numeric",'c.total_ht'=>"Numeric",'c.total'=>"Numeric",'c.fk_statut'=>'Status','c.note_public'=>"Text",'c.date_livraison'=>'Date','cd.description'=>"Text",'cd.product_type'=>'Boolean','cd.tva_tx'=>"Numeric",'cd.qty'=>"Numeric",'cd.total_ht'=>"Numeric",'cd.total_tva'=>"Numeric",'cd.total_ttc'=>"Numeric",'p.ref'=>'Text','p.label'=>'Text');
$this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','co.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.siret'=>'company','c.rowid'=>"propal",'c.ref'=>"propal",'c.ref_client'=>"propal",'c.fk_soc'=>"propal",'c.datec'=>"propal",'c.datep'=>"propal",'c.fin_validite'=>"propal",'c.remise_percent'=>"propal",'c.total_ht'=>"propal",'c.total'=>"propal",'c.fk_statut'=>"propal",'c.note_public'=>"propal",'c.date_livraison'=>"propal",'cd.rowid'=>'propal_line','cd.label'=>"propal_line",'cd.description'=>"propal_line",'cd.product_type'=>'propal_line','cd.tva_tx'=>"propal_line",'cd.qty'=>"propal_line",'cd.total_ht'=>"propal_line",'cd.total_tva'=>"propal_line",'cd.total_ttc'=>"propal_line",'p.rowid'=>'product','p.ref'=>'product','p.label'=>'product'); $this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.zip'=>'company','s.town'=>'company','co.code'=>'company','s.phone'=>'company','s.siren'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.siret'=>'company','c.rowid'=>"propal",'c.ref'=>"propal",'c.ref_client'=>"propal",'c.fk_soc'=>"propal",'c.datec'=>"propal",'c.datep'=>"propal",'c.fin_validite'=>"propal",'c.remise_percent'=>"propal",'c.total_ht'=>"propal",'c.total'=>"propal",'c.fk_statut'=>"propal",'c.note_public'=>"propal",'c.date_livraison'=>"propal",'cd.rowid'=>'propal_line','cd.label'=>"propal_line",'cd.description'=>"propal_line",'cd.product_type'=>'propal_line','cd.tva_tx'=>"propal_line",'cd.qty'=>"propal_line",'cd.total_ht'=>"propal_line",'cd.total_tva'=>"propal_line",'cd.total_ttc'=>"propal_line",'p.rowid'=>'product','p.ref'=>'product','p.label'=>'product');
$this->export_dependencies_array[$r]=array('propal_line'=>'cd.rowid','product'=>'cd.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them $this->export_dependencies_array[$r]=array('propal_line'=>'cd.rowid','product'=>'cd.rowid'); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them
// Add extra fields $keyforselect='propal'; $keyforelement='propal'; $keyforaliasextra='extra';
$sql="SELECT name, label, type FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'propal' AND entity IN (0, ".$conf->entity.')'; include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
$resql=$this->db->query($sql); $keyforselect='propaldet'; $keyforelement='propal_line'; $keyforaliasextra='extra2';
if ($resql) // This can fail when class is used on old database (during migration for example) include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
{ $keyforselect='product'; $keyforelement='product'; $keyforaliasextra='extra3';
while ($obj=$this->db->fetch_object($resql)) include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
{
$fieldname='extra.'.$obj->name;
$fieldlabel=ucfirst($obj->label);
$typeFilter="Text";
switch($obj->type)
{
case 'int':
case 'double':
case 'price':
$typeFilter="Numeric";
break;
case 'date':
case 'datetime':
$typeFilter="Date";
break;
case 'boolean':
$typeFilter="Boolean";
break;
case 'sellist':
$tmp='';
$tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null
if ($tmpparam['options'] && is_array($tmpparam['options'])) $tmp=array_shift(array_keys($tmpparam['options']));
if (preg_match('/[a-z0-9_]+:[a-z0-9_]+:[a-z0-9_]+/', $tmp)) $typeFilter="List:".$tmp;
break;
}
$this->export_fields_array[$r][$fieldname]=$fieldlabel;
$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
$this->export_entities_array[$r][$fieldname]='propal';
}
}
// End add extra fields
$this->export_sql_start[$r]='SELECT DISTINCT '; $this->export_sql_start[$r]='SELECT DISTINCT ';
$this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s '; $this->export_sql_end[$r] =' FROM '.MAIN_DB_PREFIX.'societe as s ';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as co ON s.fk_pays = co.rowid,'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as co ON s.fk_pays = co.rowid,';
$this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'propal as c'; $this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'propal as c';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uc ON c.fk_user_author = uc.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uc ON c.fk_user_author = uc.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON c.fk_user_valid = uc.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON c.fk_user_valid = uv.rowid';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'propal_extrafields as extra ON c.rowid = extra.fk_object'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'propal_extrafields as extra ON c.rowid = extra.fk_object';
$this->export_sql_end[$r] .=', '.MAIN_DB_PREFIX.'propaldet as cd'; $this->export_sql_end[$r] .=', '.MAIN_DB_PREFIX.'propaldet as cd';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'propaldet_extrafields as extra2 on cd.rowid = extra2.fk_object';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on (cd.fk_product = p.rowid)'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on (cd.fk_product = p.rowid)';
$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extra3 on p.rowid = extra3.fk_object';
$this->export_sql_end[$r] .=' WHERE c.fk_soc = s.rowid AND c.rowid = cd.fk_propal'; $this->export_sql_end[$r] .=' WHERE c.fk_soc = s.rowid AND c.rowid = cd.fk_propal';
$this->export_sql_end[$r] .=' AND c.entity IN ('.getEntity('propal',1).')'; $this->export_sql_end[$r] .=' AND c.entity IN ('.getEntity('propal',1).')';
} }

View File

@ -572,7 +572,7 @@ class pdf_azur extends ModelePDFPropales
if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage;
// Add line // Add line
if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{ {
$pdf->setPage($pageposafter); $pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));

View File

@ -448,7 +448,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
$this->localtax2[$localtax2rate]+=$localtax2ligne; $this->localtax2[$localtax2rate]+=$localtax2ligne;
// Add line // Add line
if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{ {
$pdf->setPage($pageposafter); $pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));

View File

@ -470,7 +470,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
// Add line // Add line
if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) if ($conf->global->MAIN_PDF_DASH_BETWEEN_LINES && $i < ($nblignes - 1))
{ {
$pdf->setPage($pageposafter); $pdf->setPage($pageposafter);
$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));

View File

@ -59,6 +59,8 @@ if (empty($reshook) && ! empty($extrafields->attribute_label))
if (isset($user->rights->$keyforperm)) $permok=$user->rights->$keyforperm->creer||$user->rights->$keyforperm->create||$user->rights->$keyforperm->write; if (isset($user->rights->$keyforperm)) $permok=$user->rights->$keyforperm->creer||$user->rights->$keyforperm->create||$user->rights->$keyforperm->write;
if ($object->element=='order_supplier') $permok=$user->rights->fournisseur->commande->creer; if ($object->element=='order_supplier') $permok=$user->rights->fournisseur->commande->creer;
if ($object->element=='invoice_supplier') $permok=$user->rights->fournisseur->facture->creer; if ($object->element=='invoice_supplier') $permok=$user->rights->fournisseur->facture->creer;
if ($object->element=='shipping') $permok=$user->rights->expedition->creer;
if ($object->element=='delivery') $permok=$user->rights->expedition->livraison->creer;
if (($object->statut == 0 || $extrafields->attribute_alwayseditable[$key]) if (($object->statut == 0 || $extrafields->attribute_alwayseditable[$key])
&& $permok && ($action != 'edit_extras' || GETPOST('attribute') != $key)) && $permok && ($action != 'edit_extras' || GETPOST('attribute') != $key))

View File

@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
class InterfaceWorkflowManager extends DolibarrTriggers class InterfaceWorkflowManager extends DolibarrTriggers
{ {
public $picto = 'paypal@paypal'; public $picto = 'technic';
public $family = 'core'; public $family = 'core';
public $description = "Triggers of this module allows to manage workflows"; public $description = "Triggers of this module allows to manage workflows";
public $version = self::VERSION_DOLIBARR; public $version = self::VERSION_DOLIBARR;

View File

@ -43,6 +43,11 @@ $action=GETPOST('action','alpha');
$confirm=GETPOST('confirm','alpha'); $confirm=GETPOST('confirm','alpha');
$cancel=GETPOST('cancel'); $cancel=GETPOST('cancel');
/*
* Actions
*/
$object = new Cronjob($db); $object = new Cronjob($db);
if (!empty($id)) if (!empty($id))
{ {
@ -53,7 +58,7 @@ if (!empty($id))
} }
} }
if(!empty($cancel)) if (!empty($cancel))
{ {
if (!empty($id)) if (!empty($id))
{ {
@ -61,7 +66,7 @@ if(!empty($cancel))
} }
else else
{ {
Header("Location: ".DOL_URL_ROOT.'/cron/list.php?status=1'); Header("Location: ".DOL_URL_ROOT.'/cron/list.php?status=-2');
exit; exit;
} }
} }
@ -78,7 +83,7 @@ if ($action == 'confirm_delete' && $confirm == "yes" && $user->rights->cron->del
} }
else else
{ {
Header("Location: ".DOL_URL_ROOT.'/cron/list.php?status=1'); Header("Location: ".DOL_URL_ROOT.'/cron/list.php?status=-2');
exit; exit;
} }
} }
@ -312,7 +317,7 @@ if (($action=="create") || ($action=="edit"))
print "</tr>\n"; print "</tr>\n";
print "<tr><td>"; print "<tr><td>";
print $langs->trans('CronHourStart')."</td><td>"; print $langs->trans('CronDtStart')."</td><td>";
if(!empty($object->datestart)) if(!empty($object->datestart))
{ {
$form->select_date($object->datestart,'datestart',1,1,'',"cronform"); $form->select_date($object->datestart,'datestart',1,1,'',"cronform");
@ -513,15 +518,22 @@ else
print "</td></tr>"; print "</td></tr>";
print "<tr><td>"; print "<tr><td>";
print $langs->trans('CronHourStart')."</td><td>"; print $langs->trans('CronDtStart')."</td><td>";
if(!empty($object->datestart)) {print dol_print_date($object->datestart,'dayhourtext');} else {print $langs->trans('CronNone');} if(!empty($object->datestart)) {print dol_print_date($object->datestart,'dayhourtext');}
print "</td></tr>"; print "</td></tr>";
print "<tr><td>"; print "<tr><td>";
print $langs->trans('CronDtEnd')."</td><td>"; print $langs->trans('CronDtEnd')."</td><td>";
if(!empty($object->dateend)) {print dol_print_date($object->dateend,'dayhourtext');} else {print $langs->trans('CronNone');} if(!empty($object->dateend)) {print dol_print_date($object->dateend,'dayhourtext');}
print "</td></tr>"; print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronDtNextLaunch');
print ' ('.$langs->trans('CronFrom').')';
print "</td><td>";
if(!empty($object->datenextrun)) {print dol_print_date($object->datenextrun,'dayhoursec');} else {print $langs->trans('CronNone');}
print "</td></tr>";
print "<tr><td>"; print "<tr><td>";
print $langs->trans('CronPriority')."</td>"; print $langs->trans('CronPriority')."</td>";
print "<td>".$object->priority; print "<td>".$object->priority;
@ -586,23 +598,17 @@ else
print '<br>'; print '<br>';
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
print '<tr><td width="30%">'; print '<tr><td width="30%">';
print $langs->trans('CronDtLastLaunch')."</td><td>"; print $langs->trans('CronDtLastLaunch')."</td><td>";
if(!empty($object->datelastrun)) {print dol_print_date($object->datelastrun,'dayhourtext');} else {print $langs->trans('CronNone');} if(!empty($object->datelastrun)) {print dol_print_date($object->datelastrun,'dayhoursec');} else {print $langs->trans('CronNone');}
print "</td></tr>";
print '<tr><td>';
print $langs->trans('CronDtNextLaunch');
print ' ('.$langs->trans('CronFrom').')';
print "</td><td>";
if(!empty($object->datenextrun)) {print dol_print_date($object->datenextrun,'dayhourtext');} else {print $langs->trans('CronNone');}
print "</td></tr>"; print "</td></tr>";
print '<tr><td>'; print '<tr><td>';
print $langs->trans('CronDtLastResult')."</td><td>"; print $langs->trans('CronDtLastResult')."</td><td>";
if(!empty($object->datelastresult)) {print dol_print_date($object->datelastresult,'dayhourtext');} else {print $langs->trans('CronNone');} if(!empty($object->datelastresult)) {print dol_print_date($object->datelastresult,'dayhoursec');} else {print $langs->trans('CronNone');}
print "</td></tr>"; print "</td></tr>";
print '<tr><td>'; print '<tr><td>';

View File

@ -521,9 +521,6 @@ class Cronjob extends CommonObject
// Check parameters // Check parameters
// Put here code to add a control on parameters values // Put here code to add a control on parameters values
if (empty($this->status)) {
$this->dateend=dol_now();
}
if (dol_strlen($this->datestart)==0) { if (dol_strlen($this->datestart)==0) {
$this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronDtStart')); $this->errors[]=$langs->trans('CronFieldMandatory',$langs->trans('CronDtStart'));
$error++; $error++;
@ -830,7 +827,9 @@ class Cronjob extends CommonObject
/** /**
* Run a job * Run a job.
* Once job is finished, status and nb of of run is updated.
* This function does not plan the next run. This is done by function ->reprogram_jobs
* *
* @param string $userlogin User login * @param string $userlogin User login
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
@ -843,7 +842,8 @@ class Cronjob extends CommonObject
$langs->load('cron'); $langs->load('cron');
if (empty($userlogin)) { if (empty($userlogin))
{
$this->error="User login is mandatory"; $this->error="User login is mandatory";
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
return -1; return -1;
@ -891,7 +891,7 @@ class Cronjob extends CommonObject
$this->datelastrun=$now; $this->datelastrun=$now;
$this->lastoutput=''; $this->lastoutput='';
$this->lastresult=''; $this->lastresult='';
$this->nbrun=$this->nbrun+1; $this->nbrun=$this->nbrun + 1;
$result = $this->update($user); $result = $this->update($user);
if ($result<0) { if ($result<0) {
dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::run_jobs ".$this->error, LOG_ERR);
@ -1055,23 +1055,28 @@ class Cronjob extends CommonObject
/** /**
* Reprogram a job * Reprogram a job
* *
* @param string $userlogin User login * @param string $userlogin User login
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*
*/ */
function reprogram_jobs($userlogin) function reprogram_jobs($userlogin)
{ {
dol_syslog(get_class($this)."::reprogram_jobs userlogin:$userlogin", LOG_DEBUG); dol_syslog(get_class($this)."::reprogram_jobs userlogin:$userlogin", LOG_DEBUG);
$now = dol_now();
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
$user=new User($this->db); $user=new User($this->db);
$result=$user->fetch('',$userlogin); $result=$user->fetch('',$userlogin);
if ($result<0) { if ($result<0)
{
$this->error="User Error:".$user->error; $this->error="User Error:".$user->error;
dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR);
return -1; return -1;
}else { }
if (empty($user->id)) { else
{
if (empty($user->id))
{
$this->error=" User user login:".$userlogin." do not exists"; $this->error=" User user login:".$userlogin." do not exists";
dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR);
return -1; return -1;
@ -1080,17 +1085,41 @@ class Cronjob extends CommonObject
dol_syslog(get_class($this)."::reprogram_jobs ", LOG_DEBUG); dol_syslog(get_class($this)."::reprogram_jobs ", LOG_DEBUG);
if (empty($this->datenextrun)) {
$this->datenextrun=dol_now()+$this->frequency; if (empty($this->datenextrun))
} else { {
if ($this->datenextrun<dol_now()) { $this->datenextrun = $now + $this->frequency;
$this->datenextrun=dol_now()+$this->frequency; }
} else { else
$this->datenextrun=$this->datenextrun+$this->frequency; {
if ($this->datenextrun < $now && $this->frequency > 0)
{
// Loop until date is after future
while ($this->datenextrun < $now)
{
$this->datenextrun += $this->frequency;
}
}
else
{
//$this->datenextrun=$this->datenextrun+$this->frequency;
} }
} }
// Archive job
if ($this->autodelete == 2)
{
if (($this->maxrun > 0 && ($this->nbrun >= $this->maxrun))
|| ($this->dateend && ($this->datenextrun > $this->dateend)))
{
$this->status = 2;
dol_syslog(get_class($this)."::reprogram_jobs Job must be set to archived", LOG_ERR);
}
}
$result = $this->update($user); $result = $this->update($user);
if ($result<0) { if ($result<0)
{
dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR); dol_syslog(get_class($this)."::reprogram_jobs ".$this->error, LOG_ERR);
return -1; return -1;
} }

View File

@ -47,6 +47,7 @@ $sortorder=GETPOST('sortorder','alpha');
$sortfield=GETPOST('sortfield','alpha'); $sortfield=GETPOST('sortfield','alpha');
$page=GETPOST('page','int'); $page=GETPOST('page','int');
$status=GETPOST('status','int'); $status=GETPOST('status','int');
if ($status == '') $status=-2;
//Search criteria //Search criteria
$search_label=GETPOST("search_label",'alpha'); $search_label=GETPOST("search_label",'alpha');
@ -116,7 +117,7 @@ if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->ex
} }
} }
header("Location: ".DOL_URL_ROOT.'/cron/list.php?status=-1'); // Make a call to avoid to run twice job when using back header("Location: ".DOL_URL_ROOT.'/cron/list.php?status=-2'); // Make a call to avoid to run twice job when using back
exit; exit;
} }
@ -131,22 +132,6 @@ $pagetitle=$langs->trans("CronList");
llxHeader('',$pagetitle); llxHeader('',$pagetitle);
print load_fiche_titre($pagetitle,'','title_setup');
print $langs->trans('CronInfo');
if ($action == 'delete')
{
print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status,$langs->trans("CronDelete"),$langs->trans("CronConfirmDelete"),"confirm_delete",'','',1);
}
if ($action == 'execute')
{
print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status,$langs->trans("CronExecute"),$langs->trans("CronConfirmExecute"),"confirm_execute",'','',1);
}
// list of jobs created // list of jobs created
$object = new Cronjob($db); $object = new Cronjob($db);
$result=$object->fetch_all($sortorder, $sortfield, $limit, $offset, $status, $filter); $result=$object->fetch_all($sortorder, $sortfield, $limit, $offset, $status, $filter);
@ -154,29 +139,50 @@ if ($result < 0)
{ {
setEventMessages($object->error, $object->errors, 'errors'); setEventMessages($object->error, $object->errors, 'errors');
} }
$nbtotalofrecord=0;
$num=count($object->lines);
$param='&page='.$page.'&status='.$status.'&search_label='.$search_label;
print_barre_liste($pagetitle, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_setup');
print $langs->trans('CronInfo');
print "<br><br>"; print "<br><br>";
if ($action == 'delete')
{
print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status,$langs->trans("CronDelete"),$langs->trans("CronConfirmDelete"),"confirm_delete",'','',1);
}
if ($action == 'execute')
{
print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$id.'&status='.$status,$langs->trans("CronExecute"),$langs->trans("CronConfirmExecute"),"confirm_execute",'','',1);
}
print '<form method="GET" action="'.$url_form.'" name="search_form">'."\n"; print '<form method="GET" action="'.$url_form.'" name="search_form">'."\n";
print '<input type="hidden" name="status" value="'.$status.'" >'; print '<input type="hidden" name="status" value="'.$status.'" >';
print '<table width="100%" class="noborder">'; print '<table width="100%" class="noborder">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
$arg_url='&page='.$page.'&status='.$status.'&search_label='.$search_label; print_liste_field_titre($langs->trans("ID"),$_SERVER["PHP_SELF"],"t.rowid","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("ID"),$_SERVER["PHP_SELF"],"t.rowid","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronLabel"),$_SERVER["PHP_SELF"],"t.label","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronLabel"),$_SERVER["PHP_SELF"],"t.label","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronTask"),'','',"",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronTask"),'','',"",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronDtStart"),$_SERVER["PHP_SELF"],"t.datestart","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtStart"),$_SERVER["PHP_SELF"],"t.datestart","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronDtEnd"),$_SERVER["PHP_SELF"],"t.dateend","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtEnd"),$_SERVER["PHP_SELF"],"t.dateend","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronDtNextLaunch"),$_SERVER["PHP_SELF"],"t.datenextrun","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtLastLaunch"),$_SERVER["PHP_SELF"],"t.datelastrun","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronFrequency"),'',"","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronDtNextLaunch"),$_SERVER["PHP_SELF"],"t.datenextrun","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronMaxRun"),$_SERVER["PHP_SELF"],"t.maxrun","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronFrequency"),'',"","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronNbRun"),$_SERVER["PHP_SELF"],"t.nbrun","",$param,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronNbRun"),$_SERVER["PHP_SELF"],"t.nbrun","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronDtLastLaunch"),$_SERVER["PHP_SELF"],"t.datelastrun","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronLastResult"),$_SERVER["PHP_SELF"],"t.lastresult","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronLastResult"),$_SERVER["PHP_SELF"],"t.lastresult","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("CronLastOutput"),$_SERVER["PHP_SELF"],"t.lastoutput","",$arg_url,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("CronLastOutput"),$_SERVER["PHP_SELF"],"t.lastoutput","",$param,'',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Enabled"),$_SERVER["PHP_SELF"],"t.status","",$arg_url,'align="center"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"t.status","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre(''); print_liste_field_titre('');
print "</tr>\n"; print "</tr>\n";
@ -194,8 +200,9 @@ print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>'; print '<td>&nbsp;</td>';
print '<td>&nbsp;</td>';
print '<td class="liste_titre" align="center">'; print '<td class="liste_titre" align="center">';
print $form->selectarray('status', array('0'=>$langs->trans("No"),'1'=>$langs->trans("Yes")), $status, 1); print $form->selectarray('status', array('0'=>$langs->trans("Disabled"), '1'=>$langs->trans("Enabled"), '-2'=>$langs->trans("EnabledAndDisabled"), '2'=>$langs->trans("Archived")), $status, 1);
print '</td><td class="liste_titre" align="right">'; print '</td><td class="liste_titre" align="right">';
print '<input class="liste_titre" type="image" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; print '<input class="liste_titre" type="image" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
print '<input type="image" class="liste_titre" name="button_removefilter" src="'.img_picto($langs->trans("Search"),'searchclear.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">'; print '<input type="image" class="liste_titre" name="button_removefilter" src="'.img_picto($langs->trans("Search"),'searchclear.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
@ -203,9 +210,9 @@ print '</td>';
print '</tr>'; print '</tr>';
if (count($object->lines) > 0) if ($num > 0)
{ {
// Loop on each active job // Loop on each job
$style='pair'; $style='pair';
foreach($object->lines as $line) foreach($object->lines as $line)
{ {
@ -229,7 +236,7 @@ if (count($object->lines) > 0)
} }
else else
{ {
print $langs->trans('CronNone'); //print $langs->trans('CronNone');
} }
print '</td>'; print '</td>';
@ -252,20 +259,16 @@ if (count($object->lines) > 0)
} }
print '</td>'; print '</td>';
print '<td>'; print '<td class="center">';
if(!empty($line->datestart)) {print dol_print_date($line->datestart,'dayhour');} else {print $langs->trans('CronNone');} if(!empty($line->datestart)) {print dol_print_date($line->datestart,'dayhour');}
print '</td>'; print '</td>';
print '<td>'; print '<td class="center">';
if(!empty($line->dateend)) {print dol_print_date($line->dateend,'dayhour');} else {print $langs->trans('CronNone');} if(!empty($line->dateend)) {print dol_print_date($line->dateend,'dayhour');}
print '</td>'; print '</td>';
print '<td>'; print '<td class="center">';
if(!empty($line->datelastrun)) {print dol_print_date($line->datelastrun,'dayhour');} else {print $langs->trans('CronNone');} if(!empty($line->datenextrun)) {print dol_print_date($line->datenextrun,'dayhour');}
print '</td>';
print '<td>';
if(!empty($line->datenextrun)) {print dol_print_date($line->datenextrun,'dayhour');} else {print $langs->trans('CronNone');}
print '</td>'; print '</td>';
print '<td>'; print '<td>';
@ -275,21 +278,31 @@ if (count($object->lines) > 0)
if($line->unitfrequency == "604800") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Weeks'); if($line->unitfrequency == "604800") print $langs->trans('CronEach')." ".($line->frequency/$line->unitfrequency)." ".$langs->trans('Weeks');
print '</td>'; print '</td>';
print '<td>'; print '<td align="right">';
if(!empty($line->nbrun)) {print $line->nbrun;} else {print '0';} if (!empty($line->maxrun)) {print $line->maxrun;}
print '</td>';
print '<td align="right">';
if (!empty($line->nbrun)) {print $line->nbrun;} else {print '0';}
print '</td>';
print '<td class="center">';
if(!empty($line->datelastrun)) {print dol_print_date($line->datelastrun,'dayhour');}
print '</td>';
print '<td class="center">';
if(!empty($line->lastresult)) {print dol_trunc($line->lastresult);}
print '</td>'; print '</td>';
print '<td>'; print '<td>';
if(!empty($line->lastresult)) {print dol_trunc($line->lastresult);} else {print $langs->trans('CronNone');} if(!empty($line->lastoutput)) {print dol_trunc(nl2br($line->lastoutput),100);}
print '</td>';
print '<td>';
if(!empty($line->lastoutput)) {print dol_trunc(nl2br($line->lastoutput),100);} else {print $langs->trans('CronNone');}
print '</td>'; print '</td>';
// Status // Status
print '<td align="center">'; print '<td align="center">';
print yn($line->status); if ($line->status == 1) print $langs->trans("Enabled");
elseif ($line->status == 2) print $langs->trans("Archived");
else print $langs->trans("Disabled");
print '</td>'; print '</td>';
print '<td align="right" class="nowrap">'; print '<td align="right" class="nowrap">';

View File

@ -8,6 +8,7 @@
* Copyright (C) 2013 Marcos García <marcosgdf@gmail.com> * Copyright (C) 2013 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr> * Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr>
* Copyright (C) 2014 Francis Appels <francis.appels@yahoo.com> * Copyright (C) 2014 Francis Appels <francis.appels@yahoo.com>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -37,6 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/sendings.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/sendings.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/modules/expedition/modules_expedition.php'; require_once DOL_DOCUMENT_ROOT.'/core/modules/expedition/modules_expedition.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; if (! empty($conf->product->enabled) || ! empty($conf->service->enabled)) require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
@ -75,6 +77,15 @@ $hidedesc = (GETPOST('hidedesc','int') ? GETPOST('hidedesc','int') : (! empty(
$hideref = (GETPOST('hideref','int') ? GETPOST('hideref','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0)); $hideref = (GETPOST('hideref','int') ? GETPOST('hideref','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
$object = new Expedition($db); $object = new Expedition($db);
$extrafields = new ExtraFields($db);
$extrafieldsline = new ExtraFields($db);
// fetch optionals attributes and labels
$extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
// fetch optionals attributes lines and labels
$extralabelslines=$extrafieldsline->fetch_name_optionals_label($object->table_element_line);
// Load object. Make an object->fetch // Load object. Make an object->fetch
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once
@ -111,6 +122,33 @@ if ($action == 'set_incoterms' && !empty($conf->incoterm->enabled))
$result = $object->setIncoterms(GETPOST('incoterm_id', 'int'), GETPOST('location_incoterms', 'alpha')); $result = $object->setIncoterms(GETPOST('incoterm_id', 'int'), GETPOST('location_incoterms', 'alpha'));
} }
if ($action == 'update_extras')
{
// Fill array 'array_options' with data from update form
$extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
$ret = $extrafields->setOptionalsFromPost($extralabels, $object, GETPOST('attribute'));
if ($ret < 0) $error++;
if (! $error)
{
// Actions on extra fields (by external module or standard code)
// TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('expeditiondao'));
$parameters = array('id' => $object->id);
$reshook = $hookmanager->executeHooks('insertExtraFields', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if (empty($reshook)) {
$result = $object->insertExtraFields();
if ($result < 0) {
$error++;
}
} else if ($reshook < 0)
$error++;
}
if ($error)
$action = 'edit_extras';
}
$parameters=array(); $parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
@ -119,9 +157,10 @@ if (empty($reshook))
{ {
include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once
if ($action == 'add') if ($action == 'add' && $user->rights->expedition->creer)
{ {
$error=0; $error=0;
$predef='';
$db->begin(); $db->begin();
@ -157,7 +196,8 @@ if (empty($reshook))
$object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->location_incoterms = GETPOST('location_incoterms', 'alpha');
$batch_line = array(); $batch_line = array();
$array_options=array();
$num=count($objectsrc->lines); $num=count($objectsrc->lines);
$totalqty=0; $totalqty=0;
@ -201,8 +241,20 @@ if (empty($reshook))
//shipment line for product with no batch management //shipment line for product with no batch management
if (GETPOST($qty,'int') > 0) $totalqty+=GETPOST($qty,'int'); if (GETPOST($qty,'int') > 0) $totalqty+=GETPOST($qty,'int');
} }
// Extrafields
$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
$array_options[$i] = $extrafieldsline->getOptionalsFromPost($extralabelsline, $i);
// Unset extrafield
if (is_array($extralabelsline)) {
// Get extra fields
foreach ($extralabelsline as $key => $value) {
unset($_POST["options_" . $key]);
}
}
} }
//var_dump($batch_line[2]); //var_dump($batch_line[2]);
if ($totalqty > 0) // There is at least one thing to ship if ($totalqty > 0) // There is at least one thing to ship
@ -220,8 +272,8 @@ if (empty($reshook))
$idl = "idl".$i; $idl = "idl".$i;
$entrepot_id = is_numeric(GETPOST($ent,'int'))?GETPOST($ent,'int'):GETPOST('entrepot_id','int'); $entrepot_id = is_numeric(GETPOST($ent,'int'))?GETPOST($ent,'int'):GETPOST('entrepot_id','int');
if ($entrepot_id < 0) $entrepot_id=''; if ($entrepot_id < 0) $entrepot_id='';
$ret=$object->addline($entrepot_id,GETPOST($idl,'int'),GETPOST($qty,'int')); $ret=$object->addline($entrepot_id,GETPOST($idl,'int'),GETPOST($qty,'int'),$array_options[$i]);
if ($ret < 0) if ($ret < 0)
{ {
setEventMessages($object->error, $object->errors, 'errors'); setEventMessages($object->error, $object->errors, 'errors');
@ -234,7 +286,7 @@ if (empty($reshook))
// batch mode // batch mode
if ($batch_line[$i]['qty']>0) if ($batch_line[$i]['qty']>0)
{ {
$ret=$object->addline_batch($batch_line[$i]); $ret=$object->addline_batch($batch_line[$i],$array_options[$i]);
if ($ret < 0) if ($ret < 0)
{ {
setEventMessages($object->error, $object->errors, 'errors'); setEventMessages($object->error, $object->errors, 'errors');
@ -242,8 +294,11 @@ if (empty($reshook))
} }
} }
} }
} }
// Fill array 'array_options' with data from add form
$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
if ($ret < 0) $error++;
if (! $error) if (! $error)
{ {
$ret=$object->create($user); // This create shipment (like Odoo picking) and line of shipments. Stock movement will when validating shipment. $ret=$object->create($user); // This create shipment (like Odoo picking) and line of shipments. Stock movement will when validating shipment.
@ -603,6 +658,15 @@ if ($action == 'create')
print '<td colspan="3">'; print '<td colspan="3">';
print '<input name="tracking_number" size="20" value="'.GETPOST('tracking_number','alpha').'">'; print '<input name="tracking_number" size="20" value="'.GETPOST('tracking_number','alpha').'">';
print "</td></tr>\n"; print "</td></tr>\n";
// Other attributes
$parameters = array('objectsrc' => $objectsrc, 'colspan' => ' colspan="3"', 'socid'=>$socid);
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$expe,$action); // Note that $action and $object may have been modified by hook
if (empty($reshook) && ! empty($extrafields->attribute_label)) {
print $expe->showOptionals($extrafields, 'edit');
}
// Incoterms // Incoterms
if (!empty($conf->incoterm->enabled)) if (!empty($conf->incoterm->enabled))
@ -621,17 +685,13 @@ if ($action == 'create')
$liste = ModelePdfExpedition::liste_modeles($db); $liste = ModelePdfExpedition::liste_modeles($db);
print $form->selectarray('model', $liste, $conf->global->EXPEDITION_ADDON_PDF); print $form->selectarray('model', $liste, $conf->global->EXPEDITION_ADDON_PDF);
print "</td></tr>\n"; print "</td></tr>\n";
// Other attributes
$parameters=array('colspan' => ' colspan="3"');
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$expe,$action); // Note that $action and $object may have been modified by hook
print "</table>"; print "</table>";
dol_fiche_end(); dol_fiche_end();
/* /*
* Lignes de commandes * Expedition Lines
*/ */
$numAsked = count($object->lines); $numAsked = count($object->lines);
@ -895,6 +955,17 @@ if ($action == 'create')
print img_warning().' '.$langs->trans("NoProductToShipFoundIntoStock", $staticwarehouse->libelle); print img_warning().' '.$langs->trans("NoProductToShipFoundIntoStock", $staticwarehouse->libelle);
} }
} }
//Display lines extrafields
if (is_array($extralabelslines) && count($extralabelslines)>0) {
$colspan=5;
$line = new ExpeditionLigne($db);
$line->fetch_optionals($object->id,$extralabelslines);
print '<tr '.$bc[$var].'>';
print $line->showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var], 'colspan'=>$colspan),$indiceAsked);
print '</tr>';
}
$indiceAsked++; $indiceAsked++;
} }
@ -934,6 +1005,8 @@ else if ($id || $ref)
$soc = new Societe($db); $soc = new Societe($db);
$soc->fetch($object->socid); $soc->fetch($object->socid);
$res = $object->fetch_optionals($object->id, $extralabels);
$head=shipping_prepare_head($object); $head=shipping_prepare_head($object);
dol_fiche_head($head, 'shipping', $langs->trans("Shipment"), 0, 'sending'); dol_fiche_head($head, 'shipping', $langs->trans("Shipment"), 0, 'sending');
@ -1252,9 +1325,9 @@ else if ($id || $ref)
} }
// Other attributes // Other attributes
$parameters=array('colspan' => ' colspan="3"'); $cols = 3;
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php';
print "</table>\n"; print "</table>\n";
/* /*
@ -1437,6 +1510,16 @@ else if ($id || $ref)
} }
} }
print "</tr>"; print "</tr>";
//Display lines extrafields
if (is_array($extralabelslines) && count($extralabelslines)>0) {
$colspan= empty($conf->productbatch->enabled) ? 5 : 6;
$line = new ExpeditionLigne($db);
$line->fetch_optionals($lines[$i]->id,$extralabelslines);
print '<tr '.$bc[$var].'>';
print $line->showOptionals($extrafieldsline, 'view', array('style'=>$bc[$var], 'colspan'=>$colspan),$indiceAsked);
print '</tr>';
}
$var=!$var; $var=!$var;
} }

View File

@ -8,6 +8,7 @@
* Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr> * Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr>
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com> * Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2014-2015 Francis Appels <francis.appels@yahoo.com> * Copyright (C) 2014-2015 Francis Appels <francis.appels@yahoo.com>
* Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@ -30,6 +31,7 @@
*/ */
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
require_once DOL_DOCUMENT_ROOT."/core/class/commonobjectline.class.php";
if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
if (! empty($conf->productbatch->enabled)) require_once DOL_DOCUMENT_ROOT.'/expedition/class/expeditionbatch.class.php'; if (! empty($conf->productbatch->enabled)) require_once DOL_DOCUMENT_ROOT.'/expedition/class/expeditionbatch.class.php';
@ -43,6 +45,7 @@ class Expedition extends CommonObject
public $element="shipping"; public $element="shipping";
public $fk_element="fk_expedition"; public $fk_element="fk_expedition";
public $table_element="expedition"; public $table_element="expedition";
public $table_element_line="expeditiondet";
protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
var $socid; var $socid;
@ -167,11 +170,12 @@ class Expedition extends CommonObject
* Create expedition en base * Create expedition en base
* *
* @param User $user Objet du user qui cree * @param User $user Objet du user qui cree
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
* @return int <0 si erreur, id expedition creee si ok * @return int <0 si erreur, id expedition creee si ok
*/ */
function create($user) function create($user, $notrigger=0)
{ {
global $conf, $langs; global $conf, $langs, $hookmanager;
$now=dol_now(); $now=dol_now();
@ -255,14 +259,14 @@ class Expedition extends CommonObject
{ {
if (! isset($this->lines[$i]->detail_batch)) if (! isset($this->lines[$i]->detail_batch))
{ // no batch management { // no batch management
if (! $this->create_line($this->lines[$i]->entrepot_id, $this->lines[$i]->origin_line_id, $this->lines[$i]->qty) > 0) if (! $this->create_line($this->lines[$i]->entrepot_id, $this->lines[$i]->origin_line_id, $this->lines[$i]->qty, $this->lines[$i]->array_options) > 0)
{ {
$error++; $error++;
} }
} }
else else
{ // with batch management { // with batch management
if (! $this->create_line_batch($this->lines[$i]) > 0) if (! $this->create_line_batch($this->lines[$i],$this->lines[$i]->array_options) > 0)
{ {
$error++; $error++;
} }
@ -284,8 +288,26 @@ class Expedition extends CommonObject
$error++; $error++;
} }
} }
// Actions on extra fields (by external module or standard code)
// TODO le hook fait double emploi avec le trigger !!
$hookmanager->initHooks(array('expeditiondao'));
$parameters=array('socid'=>$this->id);
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
if (empty($reshook))
{
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$result=$this->insertExtraFields();
if ($result < 0)
{
$error++;
}
}
}
else if ($reshook < 0) $error++;
if (! $error) if (! $error && ! $notrigger)
{ {
// Call trigger // Call trigger
$result=$this->call_trigger('SHIPPING_CREATE',$user); $result=$this->call_trigger('SHIPPING_CREATE',$user);
@ -340,10 +362,12 @@ class Expedition extends CommonObject
* @param int $entrepot_id Id of warehouse * @param int $entrepot_id Id of warehouse
* @param int $origin_line_id Id of source line * @param int $origin_line_id Id of source line
* @param int $qty Quantity * @param int $qty Quantity
* @param array $array_options extrafields array
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*/ */
function create_line($entrepot_id, $origin_line_id, $qty) function create_line($entrepot_id, $origin_line_id, $qty,$array_options=0)
{ {
global $conf;
$error = 0; $error = 0;
$sql = "INSERT INTO ".MAIN_DB_PREFIX."expeditiondet ("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."expeditiondet (";
@ -363,6 +387,19 @@ class Expedition extends CommonObject
{ {
$error++; $error++;
} }
if (!$error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options)>0) // For avoid conflicts if trigger used
{
$expeditionline = new ExpeditionLigne($this->db);
$expeditionline->array_options=$array_options;
$expeditionline->id= $this->db->last_insert_id(MAIN_DB_PREFIX.$expeditionline->table_element);
$result=$expeditionline->insertExtraFields();
if ($result < 0)
{
$this->error[]=$expeditionline->error;
$error++;
}
}
if (! $error) return 1; if (! $error) return 1;
else return -1; else return -1;
@ -373,13 +410,14 @@ class Expedition extends CommonObject
* Create the detail (eat-by date) of the expedition line * Create the detail (eat-by date) of the expedition line
* *
* @param object $line_ext full line informations * @param object $line_ext full line informations
* @param array $array_options extrafields array
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*/ */
function create_line_batch($line_ext) function create_line_batch($line_ext,$array_options=0)
{ {
$error = 0; $error = 0;
if ($this->create_line(($line_ext->entrepot_id?$line_ext->entrepot_id:'null'),$line_ext->origin_line_id,$line_ext->qty) < 0) if ($this->create_line(($line_ext->entrepot_id?$line_ext->entrepot_id:'null'),$line_ext->origin_line_id,$line_ext->qty,$array_options) < 0)
{ {
$error++; $error++;
} }
@ -500,6 +538,13 @@ class Expedition extends CommonObject
* Thirparty * Thirparty
*/ */
$result=$this->fetch_thirdparty(); $result=$this->fetch_thirdparty();
// Retrieve all extrafields for expedition
// fetch optionals attributes and labels
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
$extrafields=new ExtraFields($this->db);
$extralabels=$extrafields->fetch_name_optionals_label($this->table_element,true);
$this->fetch_optionals($this->id,$extralabels);
/* /*
* Lines * Lines
@ -784,9 +829,10 @@ class Expedition extends CommonObject
* @param int $entrepot_id Id of warehouse * @param int $entrepot_id Id of warehouse
* @param int $id Id of source line (order line) * @param int $id Id of source line (order line)
* @param int $qty Quantity * @param int $qty Quantity
* @param array $array_options extrafields array
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*/ */
function addline($entrepot_id, $id, $qty) function addline($entrepot_id, $id, $qty,$array_options=0)
{ {
global $conf, $langs; global $conf, $langs;
@ -824,7 +870,11 @@ class Expedition extends CommonObject
} }
} }
} }
// extrafields
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options)>0) // For avoid conflicts if trigger used
$line->array_options = $array_options;
$this->lines[$num] = $line; $this->lines[$num] = $line;
} }
@ -832,10 +882,13 @@ class Expedition extends CommonObject
* Add a shipment line with batch record * Add a shipment line with batch record
* *
* @param array $dbatch Array of value (key 'detail' -> Array, key 'qty' total quantity for line, key ix_l : original line index) * @param array $dbatch Array of value (key 'detail' -> Array, key 'qty' total quantity for line, key ix_l : original line index)
* @param array $array_options extrafields array
* @return int <0 if KO, >0 if OK * @return int <0 if KO, >0 if OK
*/ */
function addline_batch($dbatch) function addline_batch($dbatch,$array_options=0)
{ {
global $conf;
$num = count($this->lines); $num = count($this->lines);
if ($dbatch['qty']>0) if ($dbatch['qty']>0)
{ {
@ -872,6 +925,10 @@ class Expedition extends CommonObject
$line->qty = $dbatch['qty']; $line->qty = $dbatch['qty'];
$line->detail_batch=$tab; $line->detail_batch=$tab;
// extrafields
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options)>0) // For avoid conflicts if trigger used
$line->array_options = $array_options;
//var_dump($line); //var_dump($line);
$this->lines[$num] = $line; $this->lines[$num] = $line;
} }
@ -1181,7 +1238,7 @@ class Expedition extends CommonObject
*/ */
function fetch_lines() function fetch_lines()
{ {
global $conf; global $conf, $mysoc;
// TODO: recuperer les champs du document associe a part // TODO: recuperer les champs du document associe a part
$sql = "SELECT cd.rowid, cd.fk_product, cd.label as custom_label, cd.description, cd.qty as qty_asked"; $sql = "SELECT cd.rowid, cd.fk_product, cd.label as custom_label, cd.description, cd.qty as qty_asked";
@ -1257,7 +1314,7 @@ class Expedition extends CommonObject
$line->volume_units = $obj->volume_units; $line->volume_units = $obj->volume_units;
// For invoicing // For invoicing
$tabprice = calcul_price_total($obj->qty_shipped, $obj->subprice, $obj->remise_percent, $obj->tva_tx, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->fk_product_type); // We force type to 0 $tabprice = calcul_price_total($obj->qty_shipped, $obj->subprice, $obj->remise_percent, $obj->tva_tx, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->fk_product_type, $mysoc); // We force type to 0
$line->desc = $obj->description; // We need ->desc because some code into CommonObject use desc (property defined for other elements) $line->desc = $obj->description; // We need ->desc because some code into CommonObject use desc (property defined for other elements)
$line->qty = $line->qty_shipped; $line->qty = $line->qty_shipped;
$line->total_ht = $tabprice[0]; $line->total_ht = $tabprice[0];
@ -1766,7 +1823,7 @@ class Expedition extends CommonObject
/** /**
* Classe de gestion des lignes de bons d'expedition * Classe de gestion des lignes de bons d'expedition
*/ */
class ExpeditionLigne class ExpeditionLigne extends CommonObjectLine
{ {
var $db; var $db;
@ -1791,6 +1848,9 @@ class ExpeditionLigne
var $total_localtax1; // Total Local tax 1 var $total_localtax1; // Total Local tax 1
var $total_localtax2; // Total Local tax 2 var $total_localtax2; // Total Local tax 2
public $element='expeditiondet';
public $table_element='expeditiondet';
public $fk_origin_line; public $fk_origin_line;
// Deprecated // Deprecated

View File

@ -886,7 +886,8 @@ if ($action == "addline")
$object_ligne->fk_expensereport = $_POST['fk_expensereport']; $object_ligne->fk_expensereport = $_POST['fk_expensereport'];
$type = 0; // TODO What if service ? $type = 0; // TODO What if service ?
$tmp = calcul_price_total($qty, $up, 0, $vatrate, 0, 0, 0, 'TTC', 0, $type); $seller = ''; // seller is unknown
$tmp = calcul_price_total($qty, $up, 0, $vatrate, 0, 0, 0, 'TTC', 0, $type, $seller);
$object_ligne->vatrate = price2num($vatrate); $object_ligne->vatrate = price2num($vatrate);
$object_ligne->total_ttc = $tmp[2]; $object_ligne->total_ttc = $tmp[2];

View File

@ -167,9 +167,9 @@ $tmp='';
$found=0; $found=0;
$real_dolibarr_main_document_root=str_replace('\\','/',realpath($dolibarr_main_document_root)); // A) Value found into config file, to say where are store htdocs files. Ex: C:/xxx/dolibarr, C:/xxx/dolibarr/htdocs $real_dolibarr_main_document_root=str_replace('\\','/',realpath($dolibarr_main_document_root)); // A) Value found into config file, to say where are store htdocs files. Ex: C:/xxx/dolibarr, C:/xxx/dolibarr/htdocs
if (!empty($_SERVER["DOCUMENT_ROOT"])) { if (!empty($_SERVER["DOCUMENT_ROOT"])) {
$pathroot = $_SERVER["DOCUMENT_ROOT"]; // B) Value reported by web server setup, to say where is root of web server instance. Ex: C:/xxx/dolibarr, C:/xxx/dolibarr/htdocs $pathroot = $_SERVER["DOCUMENT_ROOT"]; // B) Value reported by web server setup (not defined on CLI mode), to say where is root of web server instance. Ex: C:/xxx/dolibarr, C:/xxx/dolibarr/htdocs
} else { } else {
$pathroot = 'BOGUS'; $pathroot = 'NOTDEFINED';
} }
$paths=explode('/',str_replace('\\','/',$_SERVER["SCRIPT_NAME"])); // C) Value reported by web server, to say full path on filesystem of a file. Ex: /dolibarr/htdocs/admin/system/phpinfo.php $paths=explode('/',str_replace('\\','/',$_SERVER["SCRIPT_NAME"])); // C) Value reported by web server, to say full path on filesystem of a file. Ex: /dolibarr/htdocs/admin/system/phpinfo.php
// Try to detect if $_SERVER["DOCUMENT_ROOT"]+start of $_SERVER["SCRIPT_NAME"] is $dolibarr_main_document_root. If yes, relative url to add before dol files is this start part. // Try to detect if $_SERVER["DOCUMENT_ROOT"]+start of $_SERVER["SCRIPT_NAME"] is $dolibarr_main_document_root. If yes, relative url to add before dol files is this start part.
@ -189,6 +189,7 @@ foreach($paths as $tmppath) // We check to find (B+start of C)=A
} }
//else print "Not found yet for concatpath=".$concatpath."<br>\n"; //else print "Not found yet for concatpath=".$concatpath."<br>\n";
} }
//print "found=".$found." dolibarr_main_url_root=".$dolibarr_main_url_root."\n";
if (! $found) $tmp=$dolibarr_main_url_root; // If autodetect fails (Ie: when using apache alias that point outside default DOCUMENT_ROOT). if (! $found) $tmp=$dolibarr_main_url_root; // If autodetect fails (Ie: when using apache alias that point outside default DOCUMENT_ROOT).
else $tmp='http'.(((empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != 'on') && (empty($_SERVER["SERVER_PORT"])||$_SERVER["SERVER_PORT"]!=443))?'':'s').'://'.$_SERVER["SERVER_NAME"].((empty($_SERVER["SERVER_PORT"])||$_SERVER["SERVER_PORT"]==80||$_SERVER["SERVER_PORT"]==443)?'':':'.$_SERVER["SERVER_PORT"]).($tmp3?(preg_match('/^\//',$tmp3)?'':'/').$tmp3:''); else $tmp='http'.(((empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != 'on') && (empty($_SERVER["SERVER_PORT"])||$_SERVER["SERVER_PORT"]!=443))?'':'s').'://'.$_SERVER["SERVER_NAME"].((empty($_SERVER["SERVER_PORT"])||$_SERVER["SERVER_PORT"]==80||$_SERVER["SERVER_PORT"]==443)?'':':'.$_SERVER["SERVER_PORT"]).($tmp3?(preg_match('/^\//',$tmp3)?'':'/').$tmp3:'');
//print "tmp1=".$tmp1." tmp2=".$tmp2." tmp3=".$tmp3." tmp=".$tmp."\n"; //print "tmp1=".$tmp1." tmp2=".$tmp2." tmp3=".$tmp3." tmp=".$tmp."\n";

View File

@ -732,7 +732,8 @@ class CommandeFournisseur extends CommonOrder
// Do we have to change status now ? (If double approval is required and first approval, we keep status to 1 = validated) // Do we have to change status now ? (If double approval is required and first approval, we keep status to 1 = validated)
$movetoapprovestatus=true; $movetoapprovestatus=true;
$comment='';
$sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur";
$sql.= " SET ref='".$this->db->escape($num)."',"; $sql.= " SET ref='".$this->db->escape($num)."',";
if (empty($secondlevel)) // standard or first level approval if (empty($secondlevel)) // standard or first level approval
@ -741,7 +742,11 @@ class CommandeFournisseur extends CommonOrder
$sql.= " fk_user_approve = ".$user->id; $sql.= " fk_user_approve = ".$user->id;
if (! empty($conf->global->SUPPLIER_ORDER_DOUBLE_APPROVAL) && $conf->global->MAIN_FEATURES_LEVEL > 0 && $this->total_ht >= $conf->global->SUPPLIER_ORDER_DOUBLE_APPROVAL) if (! empty($conf->global->SUPPLIER_ORDER_DOUBLE_APPROVAL) && $conf->global->MAIN_FEATURES_LEVEL > 0 && $this->total_ht >= $conf->global->SUPPLIER_ORDER_DOUBLE_APPROVAL)
{ {
if (empty($this->user_approve_id2)) $movetoapprovestatus=false; // second level approval not done if (empty($this->user_approve_id2))
{
$movetoapprovestatus=false; // second level approval not done
$comment=' (first level)';
}
} }
} }
else // request a second level approval else // request a second level approval
@ -749,6 +754,7 @@ class CommandeFournisseur extends CommonOrder
$sql.= " date_approve2='".$this->db->idate($now)."',"; $sql.= " date_approve2='".$this->db->idate($now)."',";
$sql.= " fk_user_approve2 = ".$user->id; $sql.= " fk_user_approve2 = ".$user->id;
if (empty($this->user_approve_id)) $movetoapprovestatus=false; // first level approval not done if (empty($this->user_approve_id)) $movetoapprovestatus=false; // first level approval not done
$comment=' (second level)';
} }
// If double approval is required and first approval, we keep status to 1 = validated // If double approval is required and first approval, we keep status to 1 = validated
if ($movetoapprovestatus) $sql.= ", fk_statut = 2"; if ($movetoapprovestatus) $sql.= ", fk_statut = 2";
@ -758,7 +764,7 @@ class CommandeFournisseur extends CommonOrder
if ($this->db->query($sql)) if ($this->db->query($sql))
{ {
$this->log($user, 2, time()); // Statut 2 $this->log($user, 2, time(), $comment); // Statut 2
if (! empty($conf->global->SUPPLIER_ORDER_AUTOADD_USER_CONTACT)) if (! empty($conf->global->SUPPLIER_ORDER_AUTOADD_USER_CONTACT))
{ {

View File

@ -2733,10 +2733,24 @@ elseif (! empty($object->id))
// Reopen // Reopen
if (in_array($object->statut, array(2))) if (in_array($object->statut, array(2)))
{ {
if ($user->rights->fournisseur->commande->commander) $buttonshown=0;
{ if (! $buttonshown && $user->rights->fournisseur->commande->approuver)
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=reopen">'.$langs->trans("Disapprove").'</a>'; {
} if (empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER_ONLY)
|| (! empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER_ONLY) && $user->id == $object->user_approve_id))
{
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=reopen">'.$langs->trans("Disapprove").'</a>';
$buttonshown++;
}
}
if (! $buttonshown && $user->rights->fournisseur->commande->approve2 && ! empty($conf->global->SUPPLIER_ORDER_DOUBLE_APPROVAL))
{
if (empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER2_ONLY)
|| (! empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER2_ONLY) && $user->id == $object->user_approve_id2))
{
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=reopen">'.$langs->trans("Disapprove").'</a>';
}
}
} }
if (in_array($object->statut, array(3, 5, 6, 7, 9)) || ($object->statut == 4 && $object->billed)) if (in_array($object->statut, array(3, 5, 6, 7, 9)) || ($object->statut == 4 && $object->billed))
{ {

View File

@ -195,8 +195,8 @@ insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (18
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1812, 181, '0','0','VAT Rate 0',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1812, 181, '0','0','VAT Rate 0',1);
-- POLAND (id country=184) -- POLAND (id country=184)
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1841, 184, '20','0','VAT standard rate',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1841, 184, '23','0','VAT standard rate',1);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1842, 184, '7','0','VAT reduced rate',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1842, 184, '8','0','VAT reduced rate',1);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1843, 184, '3','0','VAT reduced rate',1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1843, 184, '3','0','VAT reduced rate',1);
insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1844, 184, '0','0','VAT Rate 0', 1); insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1844, 184, '0','0','VAT Rate 0', 1);

View File

@ -340,6 +340,54 @@ create table llx_categorie_project
import_key varchar(14) import_key varchar(14)
)ENGINE=innodb; )ENGINE=innodb;
-- Extrafields Expedition (shipment)
create table llx_expedition_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL,
import_key varchar(14) -- import key
) ENGINE=innodb;
ALTER TABLE llx_expedition_extrafields ADD INDEX idx_expedition_extrafields (fk_object);
create table llx_expeditiondet_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL, -- object id
import_key varchar(14) -- import key
)ENGINE=innodb;
ALTER TABLE llx_expeditiondet_extrafields ADD INDEX idx_expeditiondet_extrafields (fk_object);
-- Extrafields Expedition (delivery receipts)
create table llx_livraison_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL,
import_key varchar(14) -- import key
) ENGINE=innodb;
ALTER TABLE llx_livraison_extrafields ADD INDEX idx_livraison_extrafields (fk_object);
create table llx_livraisondet_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL, -- object id
import_key varchar(14) -- import key
)ENGINE=innodb;
ALTER TABLE llx_livraisondet_extrafields ADD INDEX idx_livraisondet_extrafields (fk_object);
ALTER TABLE llx_categorie_project ADD PRIMARY KEY pk_categorie_project (fk_categorie, fk_project); ALTER TABLE llx_categorie_project ADD PRIMARY KEY pk_categorie_project (fk_categorie, fk_project);
ALTER TABLE llx_categorie_project ADD INDEX idx_categorie_project_fk_categorie (fk_categorie); ALTER TABLE llx_categorie_project ADD INDEX idx_categorie_project_fk_categorie (fk_categorie);
ALTER TABLE llx_categorie_project ADD INDEX idx_categorie_project_fk_project (fk_project); ALTER TABLE llx_categorie_project ADD INDEX idx_categorie_project_fk_project (fk_project);

View File

@ -0,0 +1,23 @@
-- ===================================================================
-- Copyright (C) 2015 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/>.
--
-- ===================================================================
ALTER TABLE llx_cronjob ADD INDEX idx_cronjob_status (status);
ALTER TABLE llx_cronjob ADD INDEX idx_cronjob_datelastrun (datelastrun);
ALTER TABLE llx_cronjob ADD INDEX idx_cronjob_datenextrun (datenextrun);
ALTER TABLE llx_cronjob ADD INDEX idx_cronjob_datestart (datestart);
ALTER TABLE llx_cronjob ADD INDEX idx_cronjob_dateend (dateend);

View File

@ -33,19 +33,19 @@ CREATE TABLE llx_cronjob
md5params varchar(32), md5params varchar(32),
module_name varchar(255), module_name varchar(255),
priority integer DEFAULT 0, priority integer DEFAULT 0,
datelastrun datetime, -- date last run and when should be next datelastrun datetime, -- date last run start (see datelastresult for end with a result)
datenextrun datetime, -- job will be run if current date higher that this date datenextrun datetime, -- job will be run if current date higher that this date
datestart datetime, -- before this date no jobs will be run datestart datetime, -- before this date no jobs will be run
dateend datetime, -- after this date, no more jobs will be run dateend datetime, -- after this date, no more jobs will be run
datelastresult datetime, datelastresult datetime, -- date last run end
lastresult text, lastresult text,
lastoutput text, lastoutput text,
unitfrequency integer NOT NULL DEFAULT 0, unitfrequency integer NOT NULL DEFAULT 0,
frequency integer NOT NULL DEFAULT 0, frequency integer NOT NULL DEFAULT 0,
maxrun integer NOT NULL DEFAULT 0, -- set this to 1 for a job queued for on run only maxrun integer NOT NULL DEFAULT 0, -- set this to 1 for a job queued for on run only
nbrun integer, -- nb of run complete (failed or not) nbrun integer, -- nb of run complete (failed or not)
autodelete integer DEFAULT 0, -- Job can be delete once finished autodelete integer DEFAULT 0, -- 0=Job is kept unchanged once nbrun > maxrun or date > dateend, 2=Job must be archived (archive = status 2) once nbrun > maxrun or date > dateend
status integer NOT NULL DEFAULT 1, status integer NOT NULL DEFAULT 1, -- 0=disabled, 1=enabled, 2=archived
fk_user_author integer DEFAULT NULL, fk_user_author integer DEFAULT NULL,
fk_user_mod integer DEFAULT NULL, fk_user_mod integer DEFAULT NULL,
fk_mailing integer DEFAULT NULL, -- id of emailing if job was queued to send mass emailing fk_mailing integer DEFAULT NULL, -- id of emailing if job was queued to send mass emailing

View File

@ -0,0 +1,20 @@
-- ===================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ===================================================================
ALTER TABLE llx_expedition_extrafields ADD INDEX idx_expedition_extrafields (fk_object);

View File

@ -0,0 +1,26 @@
-- ========================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ========================================================================
create table llx_expedition_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL,
import_key varchar(14) -- import key
) ENGINE=innodb;

View File

@ -0,0 +1,20 @@
-- ===================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ===================================================================
ALTER TABLE llx_expeditiondet_extrafields ADD INDEX idx_expeditiondet_extrafields (fk_object);

View File

@ -0,0 +1,25 @@
-- ===================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ===================================================================
create table llx_expeditiondet_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL, -- object id
import_key varchar(14) -- import key
)ENGINE=innodb;

View File

@ -0,0 +1,20 @@
-- ===================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ===================================================================
ALTER TABLE llx_livraison_extrafields ADD INDEX idx_livraison_extrafields (fk_object);

View File

@ -0,0 +1,26 @@
-- ========================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ========================================================================
create table llx_livraison_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL,
import_key varchar(14) -- import key
) ENGINE=innodb;

View File

@ -0,0 +1,20 @@
-- ===================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ===================================================================
ALTER TABLE llx_livraisondet_extrafields ADD INDEX idx_livraisondet_extrafields (fk_object);

View File

@ -0,0 +1,25 @@
-- ===================================================================
-- Copyright (C) 2015 Claudio Aschieri <c.aschieri@19.coop>
--
-- 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/>.
--
-- ===================================================================
create table llx_livraisondet_extrafields
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_object integer NOT NULL, -- object id
import_key varchar(14) -- import key
)ENGINE=innodb;

View File

@ -1292,7 +1292,10 @@ function migrate_paiementfourn_facturefourn($db,$langs,$conf)
function migrate_price_facture($db,$langs,$conf) function migrate_price_facture($db,$langs,$conf)
{ {
$err=0; $err=0;
$tmpmysoc=new Societe($db);
$tmpmysoc->setMysoc($conf);
$db->begin(); $db->begin();
print '<tr><td colspan="4">'; print '<tr><td colspan="4">';
@ -1333,7 +1336,7 @@ function migrate_price_facture($db,$langs,$conf)
$facligne= new FactureLigne($db); $facligne= new FactureLigne($db);
$facligne->fetch($rowid); $facligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$vatrate, 0, 0,$remise_percent_global,'HT',$info_bits,0); $result=calcul_price_total($qty,$pu,$remise_percent,$vatrate, 0, 0,$remise_percent_global,'HT',$info_bits,$facligne->product_type,$tmpmysoc);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];
@ -1407,6 +1410,9 @@ function migrate_price_facture($db,$langs,$conf)
*/ */
function migrate_price_propal($db,$langs,$conf) function migrate_price_propal($db,$langs,$conf)
{ {
$tmpmysoc=new Societe($db);
$tmpmysoc->setMysoc($conf);
$db->begin(); $db->begin();
print '<tr><td colspan="4">'; print '<tr><td colspan="4">';
@ -1445,7 +1451,7 @@ function migrate_price_propal($db,$langs,$conf)
$propalligne= new PropaleLigne($db); $propalligne= new PropaleLigne($db);
$propalligne->fetch($rowid); $propalligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,$remise_percent_global,'HT',$info_bits,0); $result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,$remise_percent_global,'HT',$info_bits,$propalligne->product_type,$tmpmysoc);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];
@ -1552,9 +1558,9 @@ function migrate_price_contrat($db,$langs,$conf)
// On met a jour les 3 nouveaux champs // On met a jour les 3 nouveaux champs
$contratligne= new ContratLigne($db); $contratligne= new ContratLigne($db);
//$contratligne->fetch($rowid); Non requis car le update_total ne met a jour que chp redefinis //$contratligne->fetch($rowid); Non requis car le update_total ne met a jour que chp redefinis
$contratligne->id=$rowid; $contratligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,0,'HT',$info_bits,0,$tmpmysoc); $result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,0,'HT',$info_bits,$contratligne->product_type,$tmpmysoc);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];
@ -1603,6 +1609,9 @@ function migrate_price_commande($db,$langs,$conf)
{ {
$db->begin(); $db->begin();
$tmpmysoc=new Societe($db);
$tmpmysoc->setMysoc($conf);
print '<tr><td colspan="4">'; print '<tr><td colspan="4">';
print '<br>'; print '<br>';
@ -1639,7 +1648,7 @@ function migrate_price_commande($db,$langs,$conf)
$commandeligne= new OrderLine($db); $commandeligne= new OrderLine($db);
$commandeligne->fetch($rowid); $commandeligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,$remise_percent_global,'HT',$info_bits,0); $result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,$remise_percent_global,'HT',$info_bits,$commandeligne->product_type,$tmpmysoc);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];
@ -1716,7 +1725,10 @@ function migrate_price_commande($db,$langs,$conf)
function migrate_price_commande_fournisseur($db,$langs,$conf) function migrate_price_commande_fournisseur($db,$langs,$conf)
{ {
$db->begin(); $db->begin();
$tmpmysoc=new Societe($db);
$tmpmysoc->setMysoc($conf);
print '<tr><td colspan="4">'; print '<tr><td colspan="4">';
print '<br>'; print '<br>';
@ -1753,7 +1765,7 @@ function migrate_price_commande_fournisseur($db,$langs,$conf)
$commandeligne= new CommandeFournisseurLigne($db); $commandeligne= new CommandeFournisseurLigne($db);
$commandeligne->fetch($rowid); $commandeligne->fetch($rowid);
$result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,$remise_percent_global,'HT',$info_bits,0); $result=calcul_price_total($qty,$pu,$remise_percent,$vatrate,0,0,$remise_percent_global,'HT',$info_bits,$commandeligne->product_type,$tmpsoc);
$total_ht = $result[0]; $total_ht = $result[0];
$total_tva = $result[1]; $total_tva = $result[1];
$total_ttc = $result[2]; $total_ttc = $result[2];

View File

@ -1,5 +1,4 @@
# Dolibarr language file - en_US - Accounting Expert # Dolibarr language file - en_US - Accounting Expert
CHARSET=UTF-8
ACCOUNTING_EXPORT_SEPARATORCSV=Column separator for export file ACCOUNTING_EXPORT_SEPARATORCSV=Column separator for export file
ACCOUNTING_EXPORT_DATE=Date format for export file ACCOUNTING_EXPORT_DATE=Date format for export file
ACCOUNTING_EXPORT_PIECE=Export the number of piece ACCOUNTING_EXPORT_PIECE=Export the number of piece
@ -12,8 +11,6 @@ ACCOUNTING_EXPORT_PREFIX_SPEC=Specify the prefix for the file name
Accounting=Accounting Accounting=Accounting
Globalparameters=Global parameters Globalparameters=Global parameters
Chartofaccounts=Chart of accounts
Fiscalyear=Fiscal years
Menuaccount=Accounting accounts Menuaccount=Accounting accounts
Menuthirdpartyaccount=Thirdparty accounts Menuthirdpartyaccount=Thirdparty accounts
MenuTools=Tools MenuTools=Tools
@ -33,23 +30,17 @@ Back=Return
Definechartofaccounts=Define a chart of accounts Definechartofaccounts=Define a chart of accounts
Selectchartofaccounts=Select a chart of accounts Selectchartofaccounts=Select a chart of accounts
Validate=Validate
Addanaccount=Add an accounting account Addanaccount=Add an accounting account
AccountAccounting=Accounting account AccountAccounting=Accounting account
AccountAccountingSuggest=Accounting account suggest AccountAccountingSuggest=Accounting account suggest
Ventilation=Breakdown Ventilation=Breakdown
ToDispatch=To dispatch
Dispatched=Dispatched
CustomersVentilation=Breakdown customers CustomersVentilation=Breakdown customers
SuppliersVentilation=Breakdown suppliers SuppliersVentilation=Breakdown suppliers
TradeMargin=Trade margin TradeMargin=Trade margin
Reports=Reports Reports=Reports
ByCustomerInvoice=By invoices customers ByCustomerInvoice=By invoices customers
ByMonth=By Month
NewAccount=New accounting account NewAccount=New accounting account
Update=Update
List=List
Create=Create Create=Create
CreateMvts=Create movement CreateMvts=Create movement
UpdateAccount=Modification of an accounting account UpdateAccount=Modification of an accounting account
@ -61,7 +52,6 @@ AccountBalanceByMonth=Account balance by month
AccountingVentilation=Breakdown accounting AccountingVentilation=Breakdown accounting
AccountingVentilationSupplier=Breakdown accounting supplier AccountingVentilationSupplier=Breakdown accounting supplier
AccountingVentilationCustomer=Breakdown accounting customer AccountingVentilationCustomer=Breakdown accounting customer
Line=Line
CAHTF=Total purchase supplier before tax CAHTF=Total purchase supplier before tax
InvoiceLines=Lines of invoice to be ventilated InvoiceLines=Lines of invoice to be ventilated
@ -112,22 +102,19 @@ Docref=Reference
Numerocompte=Account Numerocompte=Account
Code_tiers=Thirdparty Code_tiers=Thirdparty
Labelcompte=Label account Labelcompte=Label account
Debit=Debit
Credit=Credit
Amount=Amount
Sens=Sens Sens=Sens
Codejournal=Journal Codejournal=Journal
DelBookKeeping=Delete the records of the general ledger DelBookKeeping=Delete the records of the general ledger
SellsJournal=Sells journal
PurchasesJournal=Purchases journal
DescSellsJournal=Sells journal DescSellsJournal=Sells journal
DescPurchasesJournal=Purchases journal DescPurchasesJournal=Purchases journal
BankJournal=Bank journal BankJournal=Bank journal
DescBankJournal=Bank journal including all the types of payments other than cash DescBankJournal=Bank journal including all the types of payments other than cash
CashJournal=Cash journal CashJournal=Cash journal
DescCashJournal=Cash journal including the type of payment cash DescCashJournal=Cash journal including the type of payment cash
FinanceJournal=Finance journal
DescFinanceJournal=Finance journal including all the types of payments by bank account
CashPayment=Cash Payment CashPayment=Cash Payment
@ -150,9 +137,6 @@ Pcgversion=Version of the plan
Pcgtype=Class of account Pcgtype=Class of account
Pcgsubtype=Under class of account Pcgsubtype=Under class of account
Accountparent=Root of the account Accountparent=Root of the account
Active=Statement
NewFiscalYear=New fiscal year
DescVentilCustomer=Consult here the annual breakdown accounting of your invoices customers DescVentilCustomer=Consult here the annual breakdown accounting of your invoices customers
TotalVente=Total turnover before tax TotalVente=Total turnover before tax

View File

@ -105,7 +105,6 @@ DetailPosition=رتب الرقم لتعريف موقع القائمة
PersonalizedMenusNotSupported=القوائم الشخصية غير مدعومة PersonalizedMenusNotSupported=القوائم الشخصية غير مدعومة
AllMenus=الكل AllMenus=الكل
NotConfigured=النموذج غير مهيء NotConfigured=النموذج غير مهيء
Setup=الإعداد
Activation=التفعيل Activation=التفعيل
Active=نشطة Active=نشطة
SetupShort=الإعداد SetupShort=الإعداد
@ -193,15 +192,12 @@ ExportOptions=خيارات التصدير
AddDropDatabase=أمر إضافة, حذف قاعدة بيانات AddDropDatabase=أمر إضافة, حذف قاعدة بيانات
AddDropTable=أمر إضافة حذف الجدول AddDropTable=أمر إضافة حذف الجدول
ExportStructure=البنية ExportStructure=البنية
Datas=البيانات
NameColumn=اسم الأعمدة NameColumn=اسم الأعمدة
ExtendedInsert=الإضافة الممددة ExtendedInsert=الإضافة الممددة
NoLockBeforeInsert=لا يوجد أوامر قفل حول الإضافة NoLockBeforeInsert=لا يوجد أوامر قفل حول الإضافة
DelayedInsert=إضافة متأخرة DelayedInsert=إضافة متأخرة
EncodeBinariesInHexa=ترميز البيانات الأحادية لستة عشرية EncodeBinariesInHexa=ترميز البيانات الأحادية لستة عشرية
IgnoreDuplicateRecords=تجاهل الأخطاء في السجلات المكررة (تجاهل الإدراج) IgnoreDuplicateRecords=تجاهل الأخطاء في السجلات المكررة (تجاهل الإدراج)
Yes=نعم
No=لا
AutoDetectLang=اكتشاف تلقائي (لغة المتصفح) AutoDetectLang=اكتشاف تلقائي (لغة المتصفح)
FeatureDisabledInDemo=الميزة معلطة في العرض التجريبي FeatureDisabledInDemo=الميزة معلطة في العرض التجريبي
Rights=الصلاحيات Rights=الصلاحيات
@ -285,14 +281,16 @@ ModuleSetup=إعداد وحدة
ModulesSetup=نمائط الإعداد ModulesSetup=نمائط الإعداد
ModuleFamilyBase=نظام ModuleFamilyBase=نظام
ModuleFamilyCrm=Ressource العملاء إدارة (إدارة علاقات العملاء) ModuleFamilyCrm=Ressource العملاء إدارة (إدارة علاقات العملاء)
ModuleFamilyProducts=إدارة المنتجات ModuleFamilyProducts=Products Management (PM)
ModuleFamilyHr=إدارة الموارد البشرية ModuleFamilyHr=Human Resource Management (HR)
ModuleFamilyProjects=مشاريع / العمل التعاوني ModuleFamilyProjects=مشاريع / العمل التعاوني
ModuleFamilyOther=أخرى ModuleFamilyOther=أخرى
ModuleFamilyTechnic=Multi بين وحدات وأدوات ModuleFamilyTechnic=Multi بين وحدات وأدوات
ModuleFamilyExperimental=نماذج تجريبية ModuleFamilyExperimental=نماذج تجريبية
ModuleFamilyFinancial=الوحدات المالية (المحاسبة / الخزانة) ModuleFamilyFinancial=الوحدات المالية (المحاسبة / الخزانة)
ModuleFamilyECM=إدارة المحتوى في المؤسسة ModuleFamilyECM=إدارة المحتوى في المؤسسة
ModuleFamilyPortal=Web sites and other frontal application
ModuleFamilyInterface=Interfaces with external systems
MenuHandlers=قائمة مناولي MenuHandlers=قائمة مناولي
MenuAdmin=قائمة تحرير MenuAdmin=قائمة تحرير
DoNotUseInProduction=Do not use in production DoNotUseInProduction=Do not use in production
@ -331,7 +329,7 @@ UMaskExplanation=تسمح لك هذه المعلمة لتحديد الاذونا
SeeWikiForAllTeam=إلقاء نظرة على صفحة ويكي قائمة كاملة لجميع الجهات الفاعلة والمنظمة SeeWikiForAllTeam=إلقاء نظرة على صفحة ويكي قائمة كاملة لجميع الجهات الفاعلة والمنظمة
UseACacheDelay= التخزين المؤقت للتأخير في الرد على الصادرات ثانية (0 فارغة أو لا مخبأ) UseACacheDelay= التخزين المؤقت للتأخير في الرد على الصادرات ثانية (0 فارغة أو لا مخبأ)
DisableLinkToHelpCenter=الاختباء وصلة <b>"هل تحتاج إلى مساعدة أو دعم"</b> على صفحة تسجيل الدخول DisableLinkToHelpCenter=الاختباء وصلة <b>"هل تحتاج إلى مساعدة أو دعم"</b> على صفحة تسجيل الدخول
DisableLinkToHelp=إخفاء ارتباط <b>"ق ٪ أخبار يساعد"</b> على القائمة اليمنى DisableLinkToHelp=Hide link to online help "<b>%s</b>"
AddCRIfTooLong=ليس هناك التفاف تلقائي ، حتى إذا خرج من خط صفحة على وثائق لفترة طويلة جدا ، يجب إضافة حرف إرجاع نفسك في ناحية النص. AddCRIfTooLong=ليس هناك التفاف تلقائي ، حتى إذا خرج من خط صفحة على وثائق لفترة طويلة جدا ، يجب إضافة حرف إرجاع نفسك في ناحية النص.
ModuleDisabled=نميطة المعوقين ModuleDisabled=نميطة المعوقين
ModuleDisabledSoNoEvent=نميطة المعوقين بغية خلق حالة أبدا ModuleDisabledSoNoEvent=نميطة المعوقين بغية خلق حالة أبدا
@ -354,7 +352,7 @@ ThemeDir=جلود دليل
ConnectionTimeout=بمناسبه المهلة ConnectionTimeout=بمناسبه المهلة
ResponseTimeout=استجابة مهلة ResponseTimeout=استجابة مهلة
SmsTestMessage=رسالة اختبار من __PHONEFROM__ إلى __PHONETO__ SmsTestMessage=رسالة اختبار من __PHONEFROM__ إلى __PHONETO__
ModuleMustBeEnabledFirst=يجب تمكين <b>%s</b> الوحدة الأولى قبل استخدام هذه الميزة. ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
SecurityToken=المفتاح لعناوين المواقع الآمنة SecurityToken=المفتاح لعناوين المواقع الآمنة
NoSmsEngine=لا مدير مرسل الرسائل القصيرة المتاحة. لم يتم تثبيت SMS المرسل مع مدير التوزيع الافتراضي (لأنها تعتمد على مورد خارجي)، ولكن يمكنك أن تجد بعض على http://www.dolistore.com NoSmsEngine=لا مدير مرسل الرسائل القصيرة المتاحة. لم يتم تثبيت SMS المرسل مع مدير التوزيع الافتراضي (لأنها تعتمد على مورد خارجي)، ولكن يمكنك أن تجد بعض على http://www.dolistore.com
PDF=PDF PDF=PDF
@ -364,6 +362,7 @@ HideAnyVATInformationOnPDF=إخفاء كل المعلومات المتعلقة
HideDescOnPDF=Hide products description on generated PDF HideDescOnPDF=Hide products description on generated PDF
HideRefOnPDF=Hide products ref. on generated PDF HideRefOnPDF=Hide products ref. on generated PDF
HideDetailsOnPDF=Hide products lines details on generated PDF HideDetailsOnPDF=Hide products lines details on generated PDF
PlaceCustomerAddressToIsoLocation=Use french standard position (La Posteà for customer address position
Library=المكتبة Library=المكتبة
UrlGenerationParameters=المعلمات لتأمين عناوين المواقع UrlGenerationParameters=المعلمات لتأمين عناوين المواقع
SecurityTokenIsUnique=استخدام معلمة securekey فريدة لكل URL SecurityTokenIsUnique=استخدام معلمة securekey فريدة لكل URL
@ -394,8 +393,9 @@ ExtrafieldLink=Link to an object
ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...<br><br>In order to have the list depending on another :<br>1,value1|parent_list_code:parent_key<br>2,value2|parent_list_code:parent_key ExtrafieldParamHelpselect=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...<br><br>In order to have the list depending on another :<br>1,value1|parent_list_code:parent_key<br>2,value2|parent_list_code:parent_key
ExtrafieldParamHelpcheckbox=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>... ExtrafieldParamHelpcheckbox=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
ExtrafieldParamHelpradio=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>... ExtrafieldParamHelpradio=Parameters list have to be like key,value<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
ExtrafieldParamHelpsellist=Parameters list comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value <br> if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another :<br>c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpsellist=Parameters list comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
ExtrafieldParamHelpchkbxlst=Parameters list comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value <br> if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another :<br>c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Parameters list comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntaxt extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax : ObjectName:Classpath<br>Example : Societe:societe/class/societe.class.php
LibraryToBuildPDF=Library used to build PDF LibraryToBuildPDF=Library used to build PDF
WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b> WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b>
LocalTaxDesc=Some countries apply 2 or 3 taxes on each invoice line. If this is the case, choose type for second and third tax and its rate. Possible type are:<br>1 : local tax apply on products and services without vat (localtax is calculated on amount without tax)<br>2 : local tax apply on products and services including vat (localtax is calculated on amount + main tax)<br>3 : local tax apply on products without vat (localtax is calculated on amount without tax)<br>4 : local tax apply on products including vat (localtax is calculated on amount + main vat)<br>5 : local tax apply on services without vat (localtax is calculated on amount without tax)<br>6 : local tax apply on services including vat (localtax is calculated on amount + tax) LocalTaxDesc=Some countries apply 2 or 3 taxes on each invoice line. If this is the case, choose type for second and third tax and its rate. Possible type are:<br>1 : local tax apply on products and services without vat (localtax is calculated on amount without tax)<br>2 : local tax apply on products and services including vat (localtax is calculated on amount + main tax)<br>3 : local tax apply on products without vat (localtax is calculated on amount without tax)<br>4 : local tax apply on products including vat (localtax is calculated on amount + main vat)<br>5 : local tax apply on services without vat (localtax is calculated on amount without tax)<br>6 : local tax apply on services including vat (localtax is calculated on amount + tax)
@ -524,19 +524,21 @@ Module2400Name=جدول الأعمال
Module2400Desc=الأعمال / الإدارة المهام وجدول الأعمال Module2400Desc=الأعمال / الإدارة المهام وجدول الأعمال
Module2500Name=إدارة المحتوى الإلكتروني Module2500Name=إدارة المحتوى الإلكتروني
Module2500Desc=حفظ وتبادل الوثائق Module2500Desc=حفظ وتبادل الوثائق
Module2600Name=API services (Web services SOAP) Module2600Name=API/Web services (SOAP server)
Module2600Desc=Enable the Dolibarr SOAP server providing API services Module2600Desc=Enable the Dolibarr SOAP server providing API services
Module2610Name=API services (Web services REST) Module2610Name=API/Web services (REST server)
Module2610Desc=Enable the Dolibarr REST server providing API services Module2610Desc=Enable the Dolibarr REST server providing API services
Module2650Name=WebServices (client) Module2660Name=Call WebServices (SOAP client)
Module2650Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment) Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
Module2700Name=غرفتر Module2700Name=غرفتر
Module2700Desc=استخدام خدمة غرفتر على الانترنت (www.gravatar.com) لإظهار الصورة من المستخدمين / أعضاء (وجدت مع رسائل البريد الإلكتروني الخاصة بهم). في حاجة الى الوصول الى شبكة الانترنت Module2700Desc=استخدام خدمة غرفتر على الانترنت (www.gravatar.com) لإظهار الصورة من المستخدمين / أعضاء (وجدت مع رسائل البريد الإلكتروني الخاصة بهم). في حاجة الى الوصول الى شبكة الانترنت
Module2800Desc=FTP Client Module2800Desc=FTP Client
Module2900Name=GeoIPMaxmind Module2900Name=GeoIPMaxmind
Module2900Desc=GeoIP التحويلات Maxmind القدرات Module2900Desc=GeoIP التحويلات Maxmind القدرات
Module3100Name=Skype Module3100Name=Skype
Module3100Desc=Add a Skype button into card of adherents / third parties / contacts Module3100Desc=Add a Skype button into card of users / third parties / contacts / members
Module4000Name=HRM
Module4000Desc=Human resources management
Module5000Name=شركة متعددة Module5000Name=شركة متعددة
Module5000Desc=يسمح لك لإدارة الشركات المتعددة Module5000Desc=يسمح لك لإدارة الشركات المتعددة
Module6000Name=Workflow Module6000Name=Workflow
@ -802,7 +804,7 @@ Permission59003=Read every user margin
DictionaryCompanyType=Thirdparties type DictionaryCompanyType=Thirdparties type
DictionaryCompanyJuridicalType=Juridical kinds of thirdparties DictionaryCompanyJuridicalType=Juridical kinds of thirdparties
DictionaryProspectLevel=Prospect potential level DictionaryProspectLevel=Prospect potential level
DictionaryCanton=State/Cantons DictionaryCanton=State/Province
DictionaryRegion=Regions DictionaryRegion=Regions
DictionaryCountry=Countries DictionaryCountry=Countries
DictionaryCurrency=Currencies DictionaryCurrency=Currencies
@ -840,14 +842,12 @@ VATIsUsedExampleFR=في فرنسا ، فإن ذلك يعني وجود منظما
VATIsNotUsedExampleFR=في فرنسا ، فإن ذلك يعني أن الجمعيات غير المعلنة ضريبة القيمة المضافة أو شركات أو مؤسسات المهن الحرة التي اختارت المشاريع الصغيرة النظام الضريبي (ضريبة القيمة المضافة في الانتخاب) ، ودفع ضريبة القيمة المضافة في الانتخاب دون أي إعلان من ضريبة القيمة المضافة. هذا الخيار سيتم عرض المرجعي "غير الضريبة على القيمة المضافة المطبقة -- الفن - 293B من المجموعة الاستشارية لاندونيسيا" على الفواتير. VATIsNotUsedExampleFR=في فرنسا ، فإن ذلك يعني أن الجمعيات غير المعلنة ضريبة القيمة المضافة أو شركات أو مؤسسات المهن الحرة التي اختارت المشاريع الصغيرة النظام الضريبي (ضريبة القيمة المضافة في الانتخاب) ، ودفع ضريبة القيمة المضافة في الانتخاب دون أي إعلان من ضريبة القيمة المضافة. هذا الخيار سيتم عرض المرجعي "غير الضريبة على القيمة المضافة المطبقة -- الفن - 293B من المجموعة الاستشارية لاندونيسيا" على الفواتير.
##### Local Taxes ##### ##### Local Taxes #####
LTRate=Rate LTRate=Rate
LocalTax1IsUsed=Use second tax
LocalTax1IsNotUsed=Do not use second tax LocalTax1IsNotUsed=Do not use second tax
LocalTax1IsUsedDesc=Use a second type of tax (other than VAT) LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT) LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
LocalTax1Management=Second type of tax LocalTax1Management=Second type of tax
LocalTax1IsUsedExample= LocalTax1IsUsedExample=
LocalTax1IsNotUsedExample= LocalTax1IsNotUsedExample=
LocalTax2IsUsed=Use third tax
LocalTax2IsNotUsed=Do not use third tax LocalTax2IsNotUsed=Do not use third tax
LocalTax2IsUsedDesc=Use a third type of tax (other than VAT) LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT) LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
@ -922,7 +922,6 @@ MenuCompanySetup=الشركة / المؤسسة
MenuNewUser=مستخدم جديد MenuNewUser=مستخدم جديد
MenuTopManager=المدير الأعلى MenuTopManager=المدير الأعلى
MenuLeftManager=مدير القائمة اليمنى MenuLeftManager=مدير القائمة اليمنى
MenuManager=Menu manager
MenuSmartphoneManager=الهاتف الذكي القائمة مدير MenuSmartphoneManager=الهاتف الذكي القائمة مدير
DefaultMenuTopManager=المدير الأعلى DefaultMenuTopManager=المدير الأعلى
DefaultMenuLeftManager=مدير القائمة اليمنى DefaultMenuLeftManager=مدير القائمة اليمنى
@ -931,14 +930,14 @@ DefaultMenuSmartphoneManager=الهاتف الذكي القائمة مدير
Skin=موضوع الجلد Skin=موضوع الجلد
DefaultSkin=موضوع التقصير الجلد DefaultSkin=موضوع التقصير الجلد
MaxSizeList=الحد الأقصى لطول قائمة MaxSizeList=الحد الأقصى لطول قائمة
DefaultMaxSizeList=تقصير المدة القصوى للقائمة DefaultMaxSizeList=Default max length for lists
DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
MessageOfDay=رسالة اليوم MessageOfDay=رسالة اليوم
MessageLogin=ادخل صفحة الرسالة MessageLogin=ادخل صفحة الرسالة
PermanentLeftSearchForm=دائم البحث عن شكل القائمة اليمنى PermanentLeftSearchForm=دائم البحث عن شكل القائمة اليمنى
DefaultLanguage=اللغة الافتراضية لاستخدام (شفرة اللغة) DefaultLanguage=اللغة الافتراضية لاستخدام (شفرة اللغة)
EnableMultilangInterface=تتيح واجهة متعددة اللغات EnableMultilangInterface=تتيح واجهة متعددة اللغات
EnableShowLogo=عرض الشعار على اليسار القائمة EnableShowLogo=عرض الشعار على اليسار القائمة
EnableHtml5=Enable Html5 (Developement - Only available on Eldy template)
SystemSuccessfulyUpdated=النظام الخاص بك تم تحديث بنجاح SystemSuccessfulyUpdated=النظام الخاص بك تم تحديث بنجاح
CompanyInfo=الشركة / المؤسسة المعلومات CompanyInfo=الشركة / المؤسسة المعلومات
CompanyIds=الشركة / المؤسسة الهويات CompanyIds=الشركة / المؤسسة الهويات
@ -975,6 +974,7 @@ Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=تأخير التسامح (في يوم)
Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=تأخير التسامح (في يوم) في حالة تأهب قبل يوم في انتظار التسوية المصرفية Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=تأخير التسامح (في يوم) في حالة تأهب قبل يوم في انتظار التسوية المصرفية
Delays_MAIN_DELAY_MEMBERS=تأخير التسامح (في يوم) في حالة تأهب قبل يوم تأخير رسوم العضوية Delays_MAIN_DELAY_MEMBERS=تأخير التسامح (في يوم) في حالة تأهب قبل يوم تأخير رسوم العضوية
Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=تأخير التسامح (في يوم) في حالة تأهب قبل لإيداع الشيكات للقيام Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=تأخير التسامح (في يوم) في حالة تأهب قبل لإيداع الشيكات للقيام
Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
SetupDescription1=جميع البارامترات المتاحة في مجال الإعداد تسمح لك قبل البدء في الإعداد Dolibarr استخدامه. SetupDescription1=جميع البارامترات المتاحة في مجال الإعداد تسمح لك قبل البدء في الإعداد Dolibarr استخدامه.
SetupDescription2=2 إن أهم الخطوات هي الإعداد 2 أول من غادر في إعداد القائمة ، وهذا يعني الشركة / المؤسسة صفحة إعداد صفحة إعداد وحدات : SetupDescription2=2 إن أهم الخطوات هي الإعداد 2 أول من غادر في إعداد القائمة ، وهذا يعني الشركة / المؤسسة صفحة إعداد صفحة إعداد وحدات :
SetupDescription3=البارامترات في <b>إعداد</b> القائمة <b>--> الشركة / المؤسسة</b> المطلوب لأن مدخلات تستخدم المعلومات عن Dolibarr عرض وتعديل السلوك Dolibarr (على سبيل المثال لخصائص تتعلق بلدكم). SetupDescription3=البارامترات في <b>إعداد</b> القائمة <b>--> الشركة / المؤسسة</b> المطلوب لأن مدخلات تستخدم المعلومات عن Dolibarr عرض وتعديل السلوك Dolibarr (على سبيل المثال لخصائص تتعلق بلدكم).
@ -1002,6 +1002,7 @@ SystemAreaForAdminOnly=هذا المجال المتاح لمدير المستخ
CompanyFundationDesc=تعديل على هذه الصفحة كل المعلومات المعروفة للشركة أو مؤسسة تحتاج لإدارة CompanyFundationDesc=تعديل على هذه الصفحة كل المعلومات المعروفة للشركة أو مؤسسة تحتاج لإدارة
DisplayDesc=يمكنك ان تختار كل معلمة إلى Dolibarr هنا الشكل والمظهر DisplayDesc=يمكنك ان تختار كل معلمة إلى Dolibarr هنا الشكل والمظهر
AvailableModules=تتوفر وحدات AvailableModules=تتوفر وحدات
DeprecatedModules=Deprecated modules
ToActivateModule=لتفعيل وحدات ، على الإعداد منطقة الصفحة الرئيسية&gt; الإعداد -> الوحدات). ToActivateModule=لتفعيل وحدات ، على الإعداد منطقة الصفحة الرئيسية&gt; الإعداد -> الوحدات).
SessionTimeOut=للمرة الخمسين SessionTimeOut=للمرة الخمسين
SessionExplanation=تضمن هذا العدد أن الدورة لن ينتهي قبل هذا التأخير. PHP sessoin ولكن الإدارة لا الكفالة التي دائما تنتهي الدورة بعد هذا التأخير : ويحدث هذا إذا كان نظام لتنظيف مخبأ الدورة الجارية. <br> ملاحظة : مع أي نظام الداخلي PHP عملية تنظيف كل دورة حوالي <b>٪ ق / ق ٪</b> فقط ولكن وصول وصول أدلى به خلال دورات أخرى. SessionExplanation=تضمن هذا العدد أن الدورة لن ينتهي قبل هذا التأخير. PHP sessoin ولكن الإدارة لا الكفالة التي دائما تنتهي الدورة بعد هذا التأخير : ويحدث هذا إذا كان نظام لتنظيف مخبأ الدورة الجارية. <br> ملاحظة : مع أي نظام الداخلي PHP عملية تنظيف كل دورة حوالي <b>٪ ق / ق ٪</b> فقط ولكن وصول وصول أدلى به خلال دورات أخرى.
@ -1104,13 +1105,15 @@ XDebugInstalled=XDebug is loaded.
XCacheInstalled=XCache is loaded. XCacheInstalled=XCache is loaded.
AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp". AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
FieldEdition=Edition of field %s FieldEdition=Edition of field %s
FixTZ=TimeZone fix
FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced) FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
GetBarCode=Get barcode GetBarCode=Get barcode
EmptyNumRefModelDesc=The code is free. This code can be modified at any time. EmptyNumRefModelDesc=The code is free. This code can be modified at any time.
##### Module password generation ##### Module password generation
PasswordGenerationStandard=عودة كلمة سر ولدت الداخلية وفقا لخوارزمية Dolibarr : 8 أحرف مشتركة تتضمن الأرقام والحروف في حرف صغير. PasswordGenerationStandard=عودة كلمة سر ولدت الداخلية وفقا لخوارزمية Dolibarr : 8 أحرف مشتركة تتضمن الأرقام والحروف في حرف صغير.
PasswordGenerationNone=لا توحي بأي كلمة المرور المتولدة. يجب أن تكون كلمة السر في نوع يدويا. PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
PasswordGenerationPerso=Return a password according to your personally defined configuration.
SetupPerso=According to your configuration
PasswordPatternDesc=Password pattern description
##### Users setup ##### ##### Users setup #####
UserGroupSetup=مستخدمين والمجموعات وحدة الإعداد UserGroupSetup=مستخدمين والمجموعات وحدة الإعداد
GeneratePassword=وتشير ولدت كلمة السر GeneratePassword=وتشير ولدت كلمة السر
@ -1120,6 +1123,8 @@ EncryptedPasswordInDatabase=السماح للتشفير كلمات السر في
DisableForgetPasswordLinkOnLogonPage=لا تظهر وصلة "نسيت كلمة المرور" على صفحة تسجيل الدخول DisableForgetPasswordLinkOnLogonPage=لا تظهر وصلة "نسيت كلمة المرور" على صفحة تسجيل الدخول
UsersSetup=شاهد الإعداد وحدة UsersSetup=شاهد الإعداد وحدة
UserMailRequired=مطلوب بريد إلكتروني لإنشاء مستخدم جديد UserMailRequired=مطلوب بريد إلكتروني لإنشاء مستخدم جديد
##### HRM setup #####
HRMSetup=HRM module setup
##### Company setup ##### ##### Company setup #####
CompanySetup=وحدة الإعداد للشركات CompanySetup=وحدة الإعداد للشركات
CompanyCodeChecker=نموذج للجيل الثالث لقانون الأحزاب ومراجعة (عميل أو مورد) CompanyCodeChecker=نموذج للجيل الثالث لقانون الأحزاب ومراجعة (عميل أو مورد)
@ -1172,6 +1177,7 @@ CreditNotePDFModules=المذكرة وثيقة من وثائق الائتمان
CreditNote=علما الائتمان CreditNote=علما الائتمان
CreditNotes=ويلاحظ الائتمان CreditNotes=ويلاحظ الائتمان
ForceInvoiceDate=قوة تاريخ الفاتورة تاريخ المصادقة على ForceInvoiceDate=قوة تاريخ الفاتورة تاريخ المصادقة على
AllowCreditNoteWithoutRelatedInvoice=Allow to create credit note without a related invoice
DisableRepeatable=تعطيل تكرار الفواتير DisableRepeatable=تعطيل تكرار الفواتير
SuggestedPaymentModesIfNotDefinedInInvoice=واقترح على طريقة دفع الفواتير تلقائيا اذا لم تعرف للفاتورة SuggestedPaymentModesIfNotDefinedInInvoice=واقترح على طريقة دفع الفواتير تلقائيا اذا لم تعرف للفاتورة
EnableEditDeleteValidInvoice=تتيح إمكانية تعديل أو حذف صحيحة دون دفع الفاتورة EnableEditDeleteValidInvoice=تتيح إمكانية تعديل أو حذف صحيحة دون دفع الفاتورة
@ -1179,6 +1185,7 @@ SuggestPaymentByRIBOnAccount=وتشير دفع سحب على حساب
SuggestPaymentByChequeToAddress=وتشير إلى دفع الشيكات SuggestPaymentByChequeToAddress=وتشير إلى دفع الشيكات
FreeLegalTextOnInvoices=نص حر على الفواتير FreeLegalTextOnInvoices=نص حر على الفواتير
WatermarkOnDraftInvoices=Watermark on draft invoices (none if empty) WatermarkOnDraftInvoices=Watermark on draft invoices (none if empty)
PaymentsNumberingModule=Payments numbering model
##### Proposals ##### ##### Proposals #####
PropalSetup=وحدة إعداد مقترحات تجارية PropalSetup=وحدة إعداد مقترحات تجارية
CreateForm=خلق أشكال CreateForm=خلق أشكال
@ -1200,6 +1207,7 @@ SupplierProposalPDFModules=Price requests suppliers documents models
FreeLegalTextOnSupplierProposal=Free text on price requests suppliers FreeLegalTextOnSupplierProposal=Free text on price requests suppliers
WatermarkOnDraftSupplierProposal=Watermark on draft price requests suppliers (none if empty) WatermarkOnDraftSupplierProposal=Watermark on draft price requests suppliers (none if empty)
BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Ask for bank account destination of price request BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Ask for bank account destination of price request
WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Ask for Warehouse Source for order
##### Orders ##### ##### Orders #####
OrdersSetup=أوامر إدارة الإعداد OrdersSetup=أوامر إدارة الإعداد
OrdersNumberingModules=أوامر الترقيم نمائط OrdersNumberingModules=أوامر الترقيم نمائط
@ -1227,6 +1235,7 @@ ContractsNumberingModules=عقود ترقيم الوحدات
TemplatePDFContracts=Contracts documents models TemplatePDFContracts=Contracts documents models
FreeLegalTextOnContracts=Free text on contracts FreeLegalTextOnContracts=Free text on contracts
WatermarkOnDraftContractCards=Watermark on draft contracts (none if empty) WatermarkOnDraftContractCards=Watermark on draft contracts (none if empty)
ContractsAndServices=List of contracts and services
##### Members ##### ##### Members #####
MembersSetup=أعضاء وحدة الإعداد MembersSetup=أعضاء وحدة الإعداد
MemberMainOptions=الخيارات الرئيسية MemberMainOptions=الخيارات الرئيسية
@ -1408,6 +1417,7 @@ SetDefaultBarcodeTypeThirdParties=النوع الافتراضي لاستخدام
UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
ProductCodeChecker= Module for product code generation and checking (product or service) ProductCodeChecker= Module for product code generation and checking (product or service)
ProductOtherConf= Product / Service configuration ProductOtherConf= Product / Service configuration
IsNotADir=is not a directory!
##### Syslog ##### ##### Syslog #####
SyslogSetup=Syslog حدة الإعداد SyslogSetup=Syslog حدة الإعداد
SyslogOutput=سجل الناتج SyslogOutput=سجل الناتج
@ -1519,8 +1529,7 @@ DetailLevel=المستوى (-1 : الأعلى ، 0 : رأس القائمة ،&gt
ModifMenu=قائمة التغيير ModifMenu=قائمة التغيير
DeleteMenu=حذف من القائمة الدخول DeleteMenu=حذف من القائمة الدخول
ConfirmDeleteMenu=هل أنت متأكد من أنك تريد حذف القائمة دخول <b>٪ ق؟</b> ConfirmDeleteMenu=هل أنت متأكد من أنك تريد حذف القائمة دخول <b>٪ ق؟</b>
DeleteLine=حذف السطر FailedToInitializeMenu=Failed to initialize menu
ConfirmDeleteLine=هل أنت متأكد من أنك تريد حذف هذا الخط؟
##### Tax ##### ##### Tax #####
TaxSetup=Taxes, social or fiscal taxes and dividends module setup TaxSetup=Taxes, social or fiscal taxes and dividends module setup
OptionVatMode=ضريبة القيمة المضافة المستحقة OptionVatMode=ضريبة القيمة المضافة المستحقة
@ -1551,7 +1560,9 @@ AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filt
AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
##### ClickToDial ##### ##### ClickToDial #####
ClickToDialDesc=هذا النموذج يسمح لإضافة رمز بعد رقم هاتف Dolibarr الاتصالات. وهناك اضغط على هذه الأيقونة ، سوف يطلب من أحد serveur معينة مع تحديد عنوان لكم أدناه. ويمكن استخدام هذه الكلمة لدعوة من مركز نظام Dolibarr التي يمكن الاتصال على رقم الهاتف هذا المسبار النظام على سبيل المثال. ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
##### Point Of Sales (CashDesk) ##### ##### Point Of Sales (CashDesk) #####
CashDesk=نقاط البيع CashDesk=نقاط البيع
CashDeskSetup=مكتب الإعداد وحدة نقدية CashDeskSetup=مكتب الإعداد وحدة نقدية
@ -1577,7 +1588,7 @@ EndPointIs=الصابون العملاء يجب إرسال الطلبات إلى
ApiSetup=API module setup ApiSetup=API module setup
ApiDesc=By enabling this module, Dolibarr become a REST server to provide miscellaneous web services. ApiDesc=By enabling this module, Dolibarr become a REST server to provide miscellaneous web services.
KeyForApiAccess=Key to use API (parameter "api_key") KeyForApiAccess=Key to use API (parameter "api_key")
ApiProductionMode=Enable production mode ApiProductionMode=Enable production mode (this will activate use of a caches for services management)
ApiEndPointIs=You can access to the API at url ApiEndPointIs=You can access to the API at url
ApiExporerIs=You can explore the API at url ApiExporerIs=You can explore the API at url
OnlyActiveElementsAreExposed=Only elements from enabled modules are exposed OnlyActiveElementsAreExposed=Only elements from enabled modules are exposed
@ -1614,7 +1625,7 @@ TaskModelModule=Tasks reports document model
UseSearchToSelectProject=Use autocompletion fields to choose project (instead of using a list box) UseSearchToSelectProject=Use autocompletion fields to choose project (instead of using a list box)
##### ECM (GED) ##### ##### ECM (GED) #####
ECMSetup = GED Setup ECMSetup = GED Setup
ECMAutoTree = Automatic tree folder and document ECMAutoTree = Show also the automatic tree folder and document
##### Fiscal Year ##### ##### Fiscal Year #####
FiscalYears=Fiscal years FiscalYears=Fiscal years
FiscalYear=Fiscal year FiscalYear=Fiscal year
@ -1625,8 +1636,6 @@ OpenFiscalYear=Open fiscal year
CloseFiscalYear=Close fiscal year CloseFiscalYear=Close fiscal year
DeleteFiscalYear=Delete fiscal year DeleteFiscalYear=Delete fiscal year
ConfirmDeleteFiscalYear=Are you sure to delete this fiscal year ? ConfirmDeleteFiscalYear=Are you sure to delete this fiscal year ?
Opened=Open
Closed=Closed
AlwaysEditable=Can always be edited AlwaysEditable=Can always be edited
MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application) MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application)
NbMajMin=Minimum number of uppercase characters NbMajMin=Minimum number of uppercase characters
@ -1654,7 +1663,8 @@ SomethingMakeInstallFromWebNotPossible2=For this reason, process to upgrade desc
InstallModuleFromWebHasBeenDisabledByFile=Install of external module from application has been disabled by your administrator. You must ask him to remove the file <strong>%s</strong> to allow this feature. InstallModuleFromWebHasBeenDisabledByFile=Install of external module from application has been disabled by your administrator. You must ask him to remove the file <strong>%s</strong> to allow this feature.
ConfFileMuseContainCustom=Installing an external module from application save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to have option<br>- <strong>$dolibarr_main_url_root_alt</strong> enabled to value <strong>$dolibarr_main_url_root_alt="/custom"</strong><br>- <strong>$dolibarr_main_document_root_alt</strong> enabled to value <strong>"%s/custom"</strong> ConfFileMuseContainCustom=Installing an external module from application save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to have option<br>- <strong>$dolibarr_main_url_root_alt</strong> enabled to value <strong>$dolibarr_main_url_root_alt="/custom"</strong><br>- <strong>$dolibarr_main_document_root_alt</strong> enabled to value <strong>"%s/custom"</strong>
HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
HighlightLinesColor=Color of highlight line when mouse move passes over (keep empty for no highlight) HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
LinkColor=Color of links
PressF5AfterChangingThis=Press F5 on keyboard after changing this value to have it effective PressF5AfterChangingThis=Press F5 on keyboard after changing this value to have it effective
NotSupportedByAllThemes=Will works with eldy theme but is not supported by all themes NotSupportedByAllThemes=Will works with eldy theme but is not supported by all themes
BackgroundColor=Background color BackgroundColor=Background color
@ -1688,3 +1698,10 @@ MailToSendSupplierRequestForQuotation=To send quotation request to supplier
MailToSendSupplierOrder=To send supplier order MailToSendSupplierOrder=To send supplier order
MailToSendSupplierInvoice=To send supplier invoice MailToSendSupplierInvoice=To send supplier invoice
MailToThirdparty=To send email from thirdparty page MailToThirdparty=To send email from thirdparty page
ByDefaultInList=Show by default on list view
YouUseLastStableVersion=You use the last stable version
TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of http://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of http://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.

View File

@ -59,7 +59,6 @@ PaymentBack=دفع العودة
Payments=المدفوعات Payments=المدفوعات
PaymentsBack=عودة المدفوعات PaymentsBack=عودة المدفوعات
PaidBack=Paid back PaidBack=Paid back
DatePayment=تاريخ الدفع
DeletePayment=حذف الدفع DeletePayment=حذف الدفع
ConfirmDeletePayment=هل أنت متأكد من أنك تريد حذف هذا المبلغ؟ ConfirmDeletePayment=هل أنت متأكد من أنك تريد حذف هذا المبلغ؟
ConfirmConvertToReduc=هل تريد تحويل هذه القروض إلى الودائع أو علما مطلقة الخصم؟ <br> المبلغ حتى يتم حفظ جميع الخصومات ويمكن استخدام خصم لحالي أو مستقبلي الفاتورة لهذا العميل. ConfirmConvertToReduc=هل تريد تحويل هذه القروض إلى الودائع أو علما مطلقة الخصم؟ <br> المبلغ حتى يتم حفظ جميع الخصومات ويمكن استخدام خصم لحالي أو مستقبلي الفاتورة لهذا العميل.
@ -74,6 +73,7 @@ PaymentsAlreadyDone=المدفوعات قد فعلت
PaymentsBackAlreadyDone=Payments back already done PaymentsBackAlreadyDone=Payments back already done
PaymentRule=دفع الحكم PaymentRule=دفع الحكم
PaymentMode=نوع الدفع PaymentMode=نوع الدفع
PaymentModeShort=Payment type
PaymentTerm=Payment term PaymentTerm=Payment term
PaymentConditions=Payment terms PaymentConditions=Payment terms
PaymentConditionsShort=Payment terms PaymentConditionsShort=Payment terms
@ -88,6 +88,7 @@ ClassifyCanceled=تصنيف 'المهجورة'
ClassifyClosed=تصنيف 'مغلقة' ClassifyClosed=تصنيف 'مغلقة'
ClassifyUnBilled=Classify 'Unbilled' ClassifyUnBilled=Classify 'Unbilled'
CreateBill=إنشاء الفاتورة CreateBill=إنشاء الفاتورة
CreateCreditNote=Create credit note
AddBill=Create invoice or credit note AddBill=Create invoice or credit note
AddToDraftInvoices=Add to draft invoice AddToDraftInvoices=Add to draft invoice
DeleteBill=شطب فاتورة DeleteBill=شطب فاتورة
@ -101,7 +102,6 @@ ConvertToReduc=تحويل الخصم في المستقبل
EnterPaymentReceivedFromCustomer=دخول الدفع الواردة من العملاء EnterPaymentReceivedFromCustomer=دخول الدفع الواردة من العملاء
EnterPaymentDueToCustomer=من المقرر أن يسدد العميل EnterPaymentDueToCustomer=من المقرر أن يسدد العميل
DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero DisabledBecauseRemainderToPayIsZero=Disabled because remaining unpaid is zero
Amount=مبلغ
PriceBase=سعر الأساس PriceBase=سعر الأساس
BillStatus=حالة الفاتورة BillStatus=حالة الفاتورة
BillStatusDraft=مشروع (لا بد من التحقق من صحة) BillStatusDraft=مشروع (لا بد من التحقق من صحة)
@ -185,7 +185,6 @@ ShowInvoiceReplace=وتظهر استبدال الفاتورة
ShowInvoiceAvoir=وتظهر المذكرة الائتمان ShowInvoiceAvoir=وتظهر المذكرة الائتمان
ShowInvoiceDeposit=وتبين أن تودع الفاتورة ShowInvoiceDeposit=وتبين أن تودع الفاتورة
ShowPayment=وتظهر الدفع ShowPayment=وتظهر الدفع
File=ملف
AlreadyPaid=دفعت بالفعل AlreadyPaid=دفعت بالفعل
AlreadyPaidBack=Already paid back AlreadyPaidBack=Already paid back
AlreadyPaidNoCreditNotesNoDeposits=دفعت بالفعل (بدون تلاحظ الائتمان والودائع) AlreadyPaidNoCreditNotesNoDeposits=دفعت بالفعل (بدون تلاحظ الائتمان والودائع)
@ -216,8 +215,8 @@ DateEcheance=الحد من الموعد المقرر
DateInvoice=تاريخ الفاتورة DateInvoice=تاريخ الفاتورة
NoInvoice=لا الفاتورة NoInvoice=لا الفاتورة
ClassifyBill=تصنيف الفاتورة ClassifyBill=تصنيف الفاتورة
SupplierBillsToPay=دفع فواتير الموردين SupplierBillsToPay=Unpaid supplier invoices
CustomerBillsUnpaid=فواتير غير مدفوعة للعملاء CustomerBillsUnpaid=Unpaid customer invoices
NonPercuRecuperable=غير القابلة للاسترداد NonPercuRecuperable=غير القابلة للاسترداد
SetConditions=تحدد شروط الدفع SetConditions=تحدد شروط الدفع
SetMode=حدد طريقة الدفع SetMode=حدد طريقة الدفع
@ -238,7 +237,6 @@ Reduction=تخفيض
ReductionShort=Reduc. ReductionShort=Reduc.
Reductions=التخفيضات Reductions=التخفيضات
ReductionsShort=Reduc. ReductionsShort=Reduc.
Discount=الخصم
Discounts=خصومات Discounts=خصومات
AddDiscount=إضافة الخصم AddDiscount=إضافة الخصم
AddRelativeDiscount=خلق خصم قريب AddRelativeDiscount=خلق خصم قريب
@ -351,7 +349,7 @@ ExtraInfos=معلومات اضافية
RegulatedOn=وتنظم على RegulatedOn=وتنظم على
ChequeNumber=رقم الشيك ChequeNumber=رقم الشيك
ChequeOrTransferNumber=شيك / نقل رقم ChequeOrTransferNumber=شيك / نقل رقم
ChequeMaker=فحص جهاز الإرسال ChequeMaker=Check/Transfer transmitter
ChequeBank=الشيكات المصرفية ChequeBank=الشيكات المصرفية
CheckBank=Check CheckBank=Check
NetToBePaid=الصافي للدفع NetToBePaid=الصافي للدفع

View File

@ -58,7 +58,7 @@ BoxLastExpiredServices=%s مشاركة أقدم اتصالات مع خدمات
BoxTitleLastActionsToDo=ق ٪ الإجراءات الأخيرة للقيام BoxTitleLastActionsToDo=ق ٪ الإجراءات الأخيرة للقيام
BoxTitleLastContracts=%s العقود الماضية BoxTitleLastContracts=%s العقود الماضية
BoxTitleLastModifiedDonations=%s آخر تعديل التبرعات BoxTitleLastModifiedDonations=%s آخر تعديل التبرعات
BoxTitleLastModifiedExpenses=%s آخر تعديل النفقات BoxTitleLastModifiedExpenses=Last %s modified expense reports
BoxGlobalActivity=Global activity (invoices, proposals, orders) BoxGlobalActivity=Global activity (invoices, proposals, orders)
FailedToRefreshDataInfoNotUpToDate=فشلت في تجديد تدفق RSS. اخر تحديث تاريخ : ٪ ق FailedToRefreshDataInfoNotUpToDate=فشلت في تجديد تدفق RSS. اخر تحديث تاريخ : ٪ ق
LastRefreshDate=تاريخ آخر تجديد LastRefreshDate=تاريخ آخر تجديد

View File

@ -38,3 +38,4 @@ ShowStock=عرض مستودع
DeleteArticle=انقر لإزالة هذه المادة DeleteArticle=انقر لإزالة هذه المادة
FilterRefOrLabelOrBC=Search (Ref/Label) FilterRefOrLabelOrBC=Search (Ref/Label)
UserNeedPermissionToEditStockToUsePos=You ask to decrease stock on invoice creation, so user that use POS need to have permission to edit stock. UserNeedPermissionToEditStockToUsePos=You ask to decrease stock on invoice creation, so user that use POS need to have permission to edit stock.
DolibarrReceiptPrinter=Dolibarr Receipt Printer

View File

@ -56,7 +56,6 @@ ReportByCustomers=تقرير للعملاء
ReportByQuarter=تقرير الربع ReportByQuarter=تقرير الربع
CivilityCode=قانون الكياسة CivilityCode=قانون الكياسة
RegisteredOffice=المكتب المسجل RegisteredOffice=المكتب المسجل
Name=اسم
Lastname=اللقب Lastname=اللقب
Firstname=Firstname Firstname=Firstname
PostOrFunction=وظيفة / وظيفة PostOrFunction=وظيفة / وظيفة
@ -64,6 +63,7 @@ UserTitle=العنوان
Surname=لقب / مزيف Surname=لقب / مزيف
Address=عنوان Address=عنوان
State=الولاية / المقاطعة State=الولاية / المقاطعة
StateShort=State
Region=المنطقة Region=المنطقة
Country=قطر Country=قطر
CountryCode=رمز البلد CountryCode=رمز البلد
@ -88,8 +88,10 @@ VATIsNotUsed=ضريبة القيمة المضافة لا يستخدم
CopyAddressFromSoc=Fill address with thirdparty address CopyAddressFromSoc=Fill address with thirdparty address
NoEmailDefined=There is no email defined NoEmailDefined=There is no email defined
##### Local Taxes ##### ##### Local Taxes #####
LocalTax1IsUsed=Use second tax
LocalTax1IsUsedES= يتم استخدام الطاقة المتجددة LocalTax1IsUsedES= يتم استخدام الطاقة المتجددة
LocalTax1IsNotUsedES= لا يتم استخدام الطاقة المتجددة LocalTax1IsNotUsedES= لا يتم استخدام الطاقة المتجددة
LocalTax2IsUsed=Use third tax
LocalTax2IsUsedES= يستخدم IRPF LocalTax2IsUsedES= يستخدم IRPF
LocalTax2IsNotUsedES= IRPF لا يستخدم LocalTax2IsNotUsedES= IRPF لا يستخدم
LocalTax1ES=تعاود LocalTax1ES=تعاود
@ -109,7 +111,7 @@ ProfId2Short=معرف الأستاذ 2
ProfId3Short=الأستاذ معرف 3 ProfId3Short=الأستاذ معرف 3
ProfId4Short=الأستاذ معرف 4 ProfId4Short=الأستاذ معرف 4
ProfId5Short=البروفيسور رقم 5 ProfId5Short=البروفيسور رقم 5
ProfId6Short=Prof. id 5 ProfId6Short=Prof. id 6
ProfId1=الهوية المهنية (1) ProfId1=الهوية المهنية (1)
ProfId2=الهوية المهنية (2) ProfId2=الهوية المهنية (2)
ProfId3=3 الهوية المهنية ProfId3=3 الهوية المهنية
@ -284,6 +286,8 @@ PersonalInformations=البيانات الشخصية
AccountancyCode=قانون المحاسبة AccountancyCode=قانون المحاسبة
CustomerCode=رمز العميل CustomerCode=رمز العميل
SupplierCode=رمز المورد SupplierCode=رمز المورد
CustomerCodeShort=Customer code
SupplierCodeShort=Supplier code
CustomerAccount=حساب الزبون CustomerAccount=حساب الزبون
SupplierAccount=مورد الحساب SupplierAccount=مورد الحساب
CustomerCodeDesc=شفرة الزبون ، فريدة من نوعها لجميع العملاء CustomerCodeDesc=شفرة الزبون ، فريدة من نوعها لجميع العملاء
@ -302,7 +306,7 @@ ListOfCustomersContacts=قائمة عملاء الاتصالات
ListOfSuppliersContacts=قائمة الموردين اتصالات ListOfSuppliersContacts=قائمة الموردين اتصالات
ListOfCompanies=قائمة الشركات ListOfCompanies=قائمة الشركات
ListOfThirdParties=قائمة أطراف ثالثة ListOfThirdParties=قائمة أطراف ثالثة
ShowCompany=وتبين للشركة ShowCompany=Show thirdparty
ShowContact=وتظهر الاتصال ShowContact=وتظهر الاتصال
ContactsAllShort=جميع (بدون فلتر) ContactsAllShort=جميع (بدون فلتر)
ContactType=نوع الاتصال ContactType=نوع الاتصال
@ -414,7 +418,7 @@ UniqueThirdParties=مجموع الأطراف الثالثة فريدة من نو
InActivity=فتح InActivity=فتح
ActivityCeased=مغلق ActivityCeased=مغلق
ActivityStateFilter=نشاط المركز ActivityStateFilter=نشاط المركز
ProductsIntoElements=List of products into %s ProductsIntoElements=List of products/services into %s
CurrentOutstandingBill=Current outstanding bill CurrentOutstandingBill=Current outstanding bill
OutstandingBill=Max. for outstanding bill OutstandingBill=Max. for outstanding bill
OutstandingBillReached=Reached max. for outstanding bill OutstandingBillReached=Reached max. for outstanding bill

View File

@ -79,16 +79,21 @@ ListPayment=قائمة المدفوعات
ListOfPayments=قائمة المدفوعات ListOfPayments=قائمة المدفوعات
ListOfCustomerPayments=قائمة مدفوعات العملاء ListOfCustomerPayments=قائمة مدفوعات العملاء
ListOfSupplierPayments=قائمة الموردين المدفوعات ListOfSupplierPayments=قائمة الموردين المدفوعات
DatePayment=تاريخ الدفع
DateStartPeriod=Date start period DateStartPeriod=Date start period
DateEndPeriod=Date end period DateEndPeriod=Date end period
NewVATPayment=دفع ضريبة القيمة المضافة الجديدة NewVATPayment=دفع ضريبة القيمة المضافة الجديدة
newLT2PaymentES=جديد IRPF دفع newLT1Payment=New tax 2 payment
newLT2Payment=New tax 3 payment
LT1Payment=Tax 2 payment
LT1Payments=Tax 2 payments
LT2Payment=Tax 3 payment
LT2Payments=Tax 3 payments
newLT1PaymentES=New RE payment newLT1PaymentES=New RE payment
LT2PaymentES=IRPF الدفع newLT2PaymentES=جديد IRPF دفع
LT2PaymentsES=الدفعات IRPF
LT1PaymentES=RE Payment LT1PaymentES=RE Payment
LT1PaymentsES=RE Payments LT1PaymentsES=RE Payments
LT2PaymentES=IRPF الدفع
LT2PaymentsES=الدفعات IRPF
VATPayment=دفع ضريبة القيمة المضافة VATPayment=دفع ضريبة القيمة المضافة
VATPayments=دفع ضريبة القيمة المضافة VATPayments=دفع ضريبة القيمة المضافة
VATRefund=VAT Refund VATRefund=VAT Refund
@ -99,6 +104,8 @@ TotalToPay=على دفع ما مجموعه
TotalVATReceived=تلقى مجموع الضريبة على القيمة المضافة TotalVATReceived=تلقى مجموع الضريبة على القيمة المضافة
CustomerAccountancyCode=قانون محاسبة العملاء CustomerAccountancyCode=قانون محاسبة العملاء
SupplierAccountancyCode=مورد قانون المحاسبة SupplierAccountancyCode=مورد قانون المحاسبة
CustomerAccountancyCodeShort=Cust. account. code
SupplierAccountancyCodeShort=Sup. account. code
AccountNumberShort=رقم الحساب AccountNumberShort=رقم الحساب
AccountNumber=رقم الحساب AccountNumber=رقم الحساب
NewAccount=حساب جديد NewAccount=حساب جديد
@ -140,9 +147,9 @@ AnnualByCompaniesInputOutputMode=ميزان الإيرادات والنفقات
SeeReportInInputOutputMode=انظر التقرير <b>sIncomes ٪</b> بين <b>المصروفات ٪ ق</b> قال <b>المحاسبة النقدية</b> لحساب المدفوعات الفعلية SeeReportInInputOutputMode=انظر التقرير <b>sIncomes ٪</b> بين <b>المصروفات ٪ ق</b> قال <b>المحاسبة النقدية</b> لحساب المدفوعات الفعلية
SeeReportInDueDebtMode=انظر التقرير <b>sClaims ٪</b> بين <b>ديونها ٪ ق الالتزام والمحاسبة</b> وقال لحساب فواتير SeeReportInDueDebtMode=انظر التقرير <b>sClaims ٪</b> بين <b>ديونها ٪ ق الالتزام والمحاسبة</b> وقال لحساب فواتير
RulesAmountWithTaxIncluded=- Amounts shown are with all taxes included RulesAmountWithTaxIncluded=- Amounts shown are with all taxes included
RulesResultDue=-- المبالغ المبينة مع كل الضرائب وشملت <br> -- ويشمل الفواتير غير المسددة والنفقات والضريبة على القيمة المضافة المدفوعة سواء كانوا أم لا. <br> -- يقوم على تاريخ المصادقة على الفواتير وضريبة القيمة المضافة وعلى الموعد المقرر لتغطية النفقات. RulesResultDue=- It includes outstanding invoices, expenses, VAT, donations whether they are paid or not. Is also includes paid salaries.<br>- It is based on the validation date of invoices and VAT and on the due date for expenses. For salaries defined with Salary module, the value date of payment is used.
RulesResultInOut=- It includes the real payments made on invoices, expenses and VAT. <br>- It is based on the payment dates of the invoices, expenses and VAT. RulesResultInOut=- It includes the real payments made on invoices, expenses, VAT and salaries. <br>- It is based on the payment dates of the invoices, expenses, VAT and salaries. The donation date for donation.
RulesCADue=-- ويشمل العملاء الفواتير المستحقة ما إذا كانت دفعت أم لا. <br> -- يقوم على تاريخ المصادقة على هذه الفواتير. <br> RulesCADue=- It includes the client's due invoices whether they are paid or not. <br>- It is based on the validation date of these invoices.<br>
RulesCAIn=-- ويشمل جميع الفعال دفع الفواتير الواردة من العملاء. <br> -- يقوم على دفع هذه الفواتير تاريخ <br> RulesCAIn=-- ويشمل جميع الفعال دفع الفواتير الواردة من العملاء. <br> -- يقوم على دفع هذه الفواتير تاريخ <br>
DepositsAreNotIncluded=- يتم ولا تشمل ودائع الفواتير DepositsAreNotIncluded=- يتم ولا تشمل ودائع الفواتير
DepositsAreIncluded=- وترد الفواتير ودائع DepositsAreIncluded=- وترد الفواتير ودائع
@ -192,7 +199,6 @@ ByProductsAndServices=By products and services
RefExt=External ref RefExt=External ref
ToCreateAPredefinedInvoice=To create a predefined invoice, create a standard invoice then, without validating it, click onto button "Convert to predefined invoice". ToCreateAPredefinedInvoice=To create a predefined invoice, create a standard invoice then, without validating it, click onto button "Convert to predefined invoice".
LinkedOrder=Link to order LinkedOrder=Link to order
ReCalculate=Recalculate
Mode1=Method 1 Mode1=Method 1
Mode2=Method 2 Mode2=Method 2
CalculationRuleDesc=To calculate total VAT, there is two methods:<br>Method 1 is rounding vat on each line, then summing them.<br>Method 2 is summing all vat on each line, then rounding result.<br>Final result may differs from few cents. Default mode is mode <b>%s</b>. CalculationRuleDesc=To calculate total VAT, there is two methods:<br>Method 1 is rounding vat on each line, then summing them.<br>Method 2 is summing all vat on each line, then rounding result.<br>Final result may differs from few cents. Default mode is mode <b>%s</b>.

View File

@ -19,6 +19,7 @@ ServiceStatusLateShort=انتهى
ServiceStatusClosed=مغلقة ServiceStatusClosed=مغلقة
ServicesLegend=خدمات أسطورة ServicesLegend=خدمات أسطورة
Contracts=عقود Contracts=عقود
ContractsSubscriptions=Contracts/Subscriptions
ContractsAndLine=Contracts and line of contracts ContractsAndLine=Contracts and line of contracts
Contract=العقد Contract=العقد
ContractLine=Contract line ContractLine=Contract line
@ -30,6 +31,7 @@ MenuRunningServices=ادارة الخدمات
MenuExpiredServices=انتهت الخدمات MenuExpiredServices=انتهت الخدمات
MenuClosedServices=أغلقت الخدمات MenuClosedServices=أغلقت الخدمات
NewContract=العقد الجديد NewContract=العقد الجديد
NewContractSubscription=New contract/subscription
AddContract=Create contract AddContract=Create contract
SearchAContract=بحث عقد SearchAContract=بحث عقد
DeleteAContract=الغاء العقد DeleteAContract=الغاء العقد

View File

@ -7,6 +7,7 @@ DeliveryOrders=توصيل الطلبات
DeliveryDate=تاريخ التسليم DeliveryDate=تاريخ التسليم
DeliveryDateShort=Deliv. تاريخ DeliveryDateShort=Deliv. تاريخ
CreateDeliveryOrder=ومن أجل توليد التسليم CreateDeliveryOrder=ومن أجل توليد التسليم
DeliveryStateSaved=Delivery state saved
QtyDelivered=الكمية المسلمة QtyDelivered=الكمية المسلمة
SetDeliveryDate=حدد تاريخ الشحن SetDeliveryDate=حدد تاريخ الشحن
ValidateDeliveryReceipt=تحقق من إنجاز ورود ValidateDeliveryReceipt=تحقق من إنجاز ورود
@ -24,3 +25,5 @@ Deliverer=المنفذ :
Sender=مرسل Sender=مرسل
Recipient=المتلقي Recipient=المتلقي
ErrorStockIsNotEnough=There's not enough stock ErrorStockIsNotEnough=There's not enough stock
Shippable=Shippable
NonShippable=Not Shippable

View File

@ -1,5 +1,4 @@
# Dolibarr language file - Source file is en_US - ecm # Dolibarr language file - Source file is en_US - ecm
MenuECM=وثائق
DocsMine=بلدي وثائق DocsMine=بلدي وثائق
DocsGenerated=ولدت وثائق DocsGenerated=ولدت وثائق
DocsElements=عناصر وثائق DocsElements=عناصر وثائق

View File

@ -3,8 +3,6 @@
# No errors # No errors
NoErrorCommitIsDone=No error, we commit NoErrorCommitIsDone=No error, we commit
# Errors # Errors
Error=خطأ
Errors=أخطاء
ErrorButCommitIsDone=Errors found but we validate despite this ErrorButCommitIsDone=Errors found but we validate despite this
ErrorBadEMail=بريد إلكتروني خاطئ %s ErrorBadEMail=بريد إلكتروني خاطئ %s
ErrorBadUrl=عنوان الموقع هو الخطأ %s ErrorBadUrl=عنوان الموقع هو الخطأ %s
@ -172,8 +170,11 @@ ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
ErrorFieldMustBeAnInteger=Field <b>%s</b> must be an integer ErrorFieldMustBeAnInteger=Field <b>%s</b> must be an integer
ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
ErrorSavingChanges=An error has ocurred when saving the changes
# Warnings # Warnings
WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
WarningMandatorySetupNotComplete=Mandatory setup parameters are not yet defined WarningMandatorySetupNotComplete=Mandatory setup parameters are not yet defined
WarningSafeModeOnCheckExecDir=انذار ، فب <b>safe_mode</b> الخيار في ذلك تخزين الأمر يجب أن يكون داخل الدليل الذي أعلنته <b>safe_mode_exec_dir</b> المعلمة بي. WarningSafeModeOnCheckExecDir=انذار ، فب <b>safe_mode</b> الخيار في ذلك تخزين الأمر يجب أن يكون داخل الدليل الذي أعلنته <b>safe_mode_exec_dir</b> المعلمة بي.
WarningAllowUrlFopenMustBeOn=<b>allow_url_fopen</b> المعلم يجب أن يوضع <b>على</b> المدون في <b>php.ini</b> لتعمل هذه الوحدة بشكل كامل. يجب عليك أن تعدل عن هذا الملف يدويا. WarningAllowUrlFopenMustBeOn=<b>allow_url_fopen</b> المعلم يجب أن يوضع <b>على</b> المدون في <b>php.ini</b> لتعمل هذه الوحدة بشكل كامل. يجب عليك أن تعدل عن هذا الملف يدويا.

View File

@ -24,5 +24,5 @@ BackToHelpCenter=Otherwise, click here to go <a href=بخلاف ذلك ، انق
LinkToGoldMember=تستطيع الاتصال به من قبل المدرب مختار مسبقا لغتك Dolibarr (٪) عن طريق النقر فوق القطعة له (والحد الاعلى لسعر يتم تحديثها تلقائيا) : LinkToGoldMember=تستطيع الاتصال به من قبل المدرب مختار مسبقا لغتك Dolibarr (٪) عن طريق النقر فوق القطعة له (والحد الاعلى لسعر يتم تحديثها تلقائيا) :
PossibleLanguages=وأيد لغات PossibleLanguages=وأيد لغات
MakeADonation=مساعدة Dolibarr المشروع ، تقديم تبرع MakeADonation=مساعدة Dolibarr المشروع ، تقديم تبرع
SubscribeToFoundation=Help Dolibarr project, subscribe to the foundation SubscribeToFoundation=مساعدة مشروع Dolibarr، الاشتراك في الجمعية
SeeOfficalSupport=For official Dolibarr support in your language: <br><b><a href="%s" target="_blank">%s</a></b> SeeOfficalSupport=For official Dolibarr support in your language: <br><b><a href="%s" target="_blank">%s</a></b>

View File

@ -0,0 +1,19 @@
# Dolibarr language file - en_US - hrm
# Admin
HRM_EMAIL_EXTERNAL_SERVICE=Email to prevent HRM external service
Establishments=Establishments
Establishment=Establishment
NewEstablishment=New establishment
DeleteEstablishment=Delete establishment
ConfirmDeleteEstablishment=Are-you sure to delete this establishment ?
OpenEtablishment=Open establishment
CloseEtablishment=Close establishment
# Dictionary
DictionaryDepartment=HRM - Department list
DictionaryFunction=HRM - Function list
# Module
ListOfEmployees=List of employees
Employees=Employees
Employee=Employee
NewEmployee=New employee
EmployeeCard=Employee card

View File

@ -52,9 +52,7 @@ ServerPortDescription=قاعدة بيانات الميناء. تبقي فارغ
DatabaseServer=خادم قاعدة البيانات DatabaseServer=خادم قاعدة البيانات
DatabaseName=اسم قاعدة البيانات DatabaseName=اسم قاعدة البيانات
DatabasePrefix=قاعدة بيانات بادئة الجدول DatabasePrefix=قاعدة بيانات بادئة الجدول
Login=تسجيل الدخول
AdminLogin=ادخل لDolibarr مدير قاعدة البيانات. تبقي فارغة إذا لم يذكر اسمه في اتصال AdminLogin=ادخل لDolibarr مدير قاعدة البيانات. تبقي فارغة إذا لم يذكر اسمه في اتصال
Password=كلمة السر
PasswordAgain=أعد كتابة كلمة المرور مرة ثانية PasswordAgain=أعد كتابة كلمة المرور مرة ثانية
AdminPassword=Dolibarr كلمة السر لمدير قاعدة البيانات. تبقي فارغة إذا لم يذكر اسمه في اتصال AdminPassword=Dolibarr كلمة السر لمدير قاعدة البيانات. تبقي فارغة إذا لم يذكر اسمه في اتصال
CreateDatabase=إنشاء قاعدة بيانات CreateDatabase=إنشاء قاعدة بيانات
@ -62,14 +60,11 @@ CreateUser=إنشاء مستخدم
DatabaseSuperUserAccess=قاعدة بيانات -- وصول مستخدم الكومبيوتر ذو الصلاحيات العليا DatabaseSuperUserAccess=قاعدة بيانات -- وصول مستخدم الكومبيوتر ذو الصلاحيات العليا
CheckToCreateDatabase=المربع إذا كان لا وجود قاعدة بيانات ، ويجب تهيئة. <br> في هذه الحالة ، يجب عليك ملء ادخل كلمة السر لحساب المستعملين المتميزين في أسفل هذه الصفحة. CheckToCreateDatabase=المربع إذا كان لا وجود قاعدة بيانات ، ويجب تهيئة. <br> في هذه الحالة ، يجب عليك ملء ادخل كلمة السر لحساب المستعملين المتميزين في أسفل هذه الصفحة.
CheckToCreateUser=المربع اذا ادخل لا وجود له ، ويجب تهيئة. <br> في هذه الحالة ، يجب عليك ملء ادخل كلمة السر لحساب المستعملين المتميزين في أسفل هذه الصفحة. CheckToCreateUser=المربع اذا ادخل لا وجود له ، ويجب تهيئة. <br> في هذه الحالة ، يجب عليك ملء ادخل كلمة السر لحساب المستعملين المتميزين في أسفل هذه الصفحة.
Experimental=(التجريبية وغير التشغيلية)
Deprecated=(deprecated)
DatabaseRootLoginDescription=ادخل يسمح للمستخدم لإنشاء قواعد بيانات جديدة أو المستخدمين الجدد ، وإذا كانت غير مجدية وقاعدة البيانات وقاعدة البيانات ادخل موجود بالفعل (مثل عندما كنت استضافته استضافة ويب). DatabaseRootLoginDescription=ادخل يسمح للمستخدم لإنشاء قواعد بيانات جديدة أو المستخدمين الجدد ، وإذا كانت غير مجدية وقاعدة البيانات وقاعدة البيانات ادخل موجود بالفعل (مثل عندما كنت استضافته استضافة ويب).
KeepEmptyIfNoPassword=ترك فارغا إذا لم المستخدم كلمة السر (تجنب هذا؟) KeepEmptyIfNoPassword=ترك فارغا إذا لم المستخدم كلمة السر (تجنب هذا؟)
SaveConfigurationFile=إنقاذ القيم SaveConfigurationFile=إنقاذ القيم
ConfigurationSaving=إنقاذ ملفات ConfigurationSaving=إنقاذ ملفات
ServerConnection=اتصال الخادم ServerConnection=اتصال الخادم
DatabaseConnection=قاعدة بيانات الصدد
DatabaseCreation=إنشاء قاعدة بيانات DatabaseCreation=إنشاء قاعدة بيانات
UserCreation=إنشاء مستخدم UserCreation=إنشاء مستخدم
CreateDatabaseObjects=إنشاء قاعدة بيانات الأجسام CreateDatabaseObjects=إنشاء قاعدة بيانات الأجسام
@ -92,7 +87,6 @@ GoToDolibarr=الذهاب إلى Dolibarr
GoToSetupArea=الذهاب إلى Dolibarr (مجال الإعداد) GoToSetupArea=الذهاب إلى Dolibarr (مجال الإعداد)
MigrationNotFinished=نسخة من قاعدة البيانات الخاصة بك لا يصل تماما حتى الآن ، لذلك سيكون لديك لتشغيل عملية الترقية مرة أخرى. MigrationNotFinished=نسخة من قاعدة البيانات الخاصة بك لا يصل تماما حتى الآن ، لذلك سيكون لديك لتشغيل عملية الترقية مرة أخرى.
GoToUpgradePage=الذهاب لتحديث الصفحة مرة أخرى GoToUpgradePage=الذهاب لتحديث الصفحة مرة أخرى
Examples=أمثلة
WithNoSlashAtTheEnd=بدون خفض "/" في نهاية WithNoSlashAtTheEnd=بدون خفض "/" في نهاية
DirectoryRecommendation=وrecommanded به لاستخدام دليل خارج الدليل الخاص من صفحات موقعك. DirectoryRecommendation=وrecommanded به لاستخدام دليل خارج الدليل الخاص من صفحات موقعك.
LoginAlreadyExists=موجود بالفعل LoginAlreadyExists=موجود بالفعل
@ -113,7 +107,6 @@ Upgrade=ترقية
UpgradeDesc=استخدام هذه الطريقة إذا كنت قد حلت محل القديمة Dolibarr الملفات من الملفات مع إصدار أحدث. وهذا من شأنه رفع مستوى قاعدة البيانات والبيانات. UpgradeDesc=استخدام هذه الطريقة إذا كنت قد حلت محل القديمة Dolibarr الملفات من الملفات مع إصدار أحدث. وهذا من شأنه رفع مستوى قاعدة البيانات والبيانات.
Start=يبدأ Start=يبدأ
InstallNotAllowed=الإعداد غير مسموح به <b>conf.php</b> الاذونات InstallNotAllowed=الإعداد غير مسموح به <b>conf.php</b> الاذونات
NotAvailable=غير متاحة
YouMustCreateWithPermission=يجب إنشاء ملف ق ٪ ومجموعة الكتابة على أذونات لملقم الويب أثناء عملية التثبيت. YouMustCreateWithPermission=يجب إنشاء ملف ق ٪ ومجموعة الكتابة على أذونات لملقم الويب أثناء عملية التثبيت.
CorrectProblemAndReloadPage=يرجى تحديد المشكلة والصحافة F5 لإعادة تحميل الصفحة. CorrectProblemAndReloadPage=يرجى تحديد المشكلة والصحافة F5 لإعادة تحميل الصفحة.
AlreadyDone=بالفعل هاجر AlreadyDone=بالفعل هاجر
@ -155,7 +148,7 @@ MigrationFinished=الانتهاء من الهجرة
LastStepDesc=<strong>الخطوة الأخيرة</strong> : تعريف المستخدم وكلمة السر هنا كنت تخطط لاستخدامها للاتصال البرمجيات. لا تفقد هذا كما هو حساب لإدارة جميع الآخرين. LastStepDesc=<strong>الخطوة الأخيرة</strong> : تعريف المستخدم وكلمة السر هنا كنت تخطط لاستخدامها للاتصال البرمجيات. لا تفقد هذا كما هو حساب لإدارة جميع الآخرين.
ActivateModule=تفعيل وحدة %s ActivateModule=تفعيل وحدة %s
ShowEditTechnicalParameters=انقر هنا لعرض/تحرير المعلمات المتقدمة (وضع الخبراء) ShowEditTechnicalParameters=انقر هنا لعرض/تحرير المعلمات المتقدمة (وضع الخبراء)
WarningUpgrade=Warning:\nDid your run a database backup first ?\nThis is highly recommanded: for example, due to some bugs into databases systems (for example mysql version 5.5.40), some data or tables may be lost during this process, so it is highly recommanded to have a complete dump of your database before starting migration.\n\nClick OK to start migration process... WarningUpgrade=Warning:\nDid your run a database backup first ?\nThis is highly recommanded: for example, due to some bugs into databases systems (for example mysql version 5.5.40/41/42/43), some data or tables may be lost during this process, so it is highly recommanded to have a complete dump of your database before starting migration.\n\nClick OK to start migration process...
ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug making data loss if you make structure change on your database, like it is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a higher fixed version (list of known bugged version: %s) ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug making data loss if you make structure change on your database, like it is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a higher fixed version (list of known bugged version: %s)
######### #########

View File

@ -84,9 +84,12 @@ EachInvoiceWillBeAttachedToEmail=A document using default invoice document templ
MailTopicSendRemindUnpaidInvoices=Reminder of invoice %s (%s) MailTopicSendRemindUnpaidInvoices=Reminder of invoice %s (%s)
SendRemind=Send reminder by EMails SendRemind=Send reminder by EMails
RemindSent=%s reminder(s) sent RemindSent=%s reminder(s) sent
AllRecipientSelectedForRemind=All thirdparties selected and if an email is set (note that one mail per invoice will be sent) AllRecipientSelected=All thirdparties selected and if an email is set.
NoRemindSent=No EMail reminder sent NoRemindSent=No EMail reminder sent
ResultOfMassSending=Result of mass EMail reminders sending ResultOfMailSending=Result of mass EMail sending
NbSelected=Nb selected
NbIgnored=Nb ignored
NbSent=Nb sent
# Libelle des modules de liste de destinataires mailing # Libelle des modules de liste de destinataires mailing
MailingModuleDescContactCompanies=اتصالات لجميع الأطراف الثالثة (العملاء ، والاحتمال ، والمورد ،...) MailingModuleDescContactCompanies=اتصالات لجميع الأطراف الثالثة (العملاء ، والاحتمال ، والمورد ،...)
@ -97,7 +100,7 @@ MailingModuleDescEmailsFromUser=EMails from user input (email;lastname;firstname
MailingModuleDescContactsCategories=أطراف ثالثة مع رسائل البريد الإلكتروني (حسب الفئة) MailingModuleDescContactsCategories=أطراف ثالثة مع رسائل البريد الإلكتروني (حسب الفئة)
MailingModuleDescDolibarrContractsLinesExpired=أطراف ثالثة مع انتهاء العقد خطوط MailingModuleDescDolibarrContractsLinesExpired=أطراف ثالثة مع انتهاء العقد خطوط
MailingModuleDescContactsByCompanyCategory=اتصالات من أطراف ثالثة (من قبل أطراف ثالثة الفئة) MailingModuleDescContactsByCompanyCategory=اتصالات من أطراف ثالثة (من قبل أطراف ثالثة الفئة)
MailingModuleDescContactsByCategory=Contacts/addresses of third parties by category MailingModuleDescContactsByCategory=Contacts/addresses of third parties (by category)
MailingModuleDescMembersCategories=أعضاء مؤسسة (حسب الفئات) MailingModuleDescMembersCategories=أعضاء مؤسسة (حسب الفئات)
MailingModuleDescContactsByFunction=اتصالات من أطراف ثالثة (من قبل المنصب / الوظيفة) MailingModuleDescContactsByFunction=اتصالات من أطراف ثالثة (من قبل المنصب / الوظيفة)
LineInFile=خط المستندات في ملف ٪ LineInFile=خط المستندات في ملف ٪

View File

@ -28,6 +28,7 @@ NoTranslation=No translation
NoRecordFound=No record found NoRecordFound=No record found
NoError=أي خطأ NoError=أي خطأ
Error=خطأ Error=خطأ
Errors=Errors
ErrorFieldRequired=الميدان '٪ ق' مطلوب ErrorFieldRequired=الميدان '٪ ق' مطلوب
ErrorFieldFormat=الميدان '٪ ق' سيئة القيمة ErrorFieldFormat=الميدان '٪ ق' سيئة القيمة
ErrorFileDoesNotExists=ملف ٪ ق لا يوجد ErrorFileDoesNotExists=ملف ٪ ق لا يوجد
@ -59,6 +60,7 @@ ErrorCantLoadUserFromDolibarrDatabase=فشلت في العثور على المس
ErrorNoVATRateDefinedForSellerCountry=خطأ ، لم يعرف لمعدلات ضريبة القيمة المضافة فى البلاد ٪ ق. ErrorNoVATRateDefinedForSellerCountry=خطأ ، لم يعرف لمعدلات ضريبة القيمة المضافة فى البلاد ٪ ق.
ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'. ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
ErrorFailedToSaveFile=خطأ ، وفشلت في انقاذ الملف. ErrorFailedToSaveFile=خطأ ، وفشلت في انقاذ الملف.
NotAuthorized=You are not authorized to do that.
SetDate=Set date SetDate=Set date
SelectDate=Select a date SelectDate=Select a date
SeeAlso=See also %s SeeAlso=See also %s
@ -97,6 +99,7 @@ DolibarrHasDetectedError=Dolibarr اكتشفت خطأ فني
InformationToHelpDiagnose=هذه هي المعلومات التي يمكن أن تساعد على تشخيص InformationToHelpDiagnose=هذه هي المعلومات التي يمكن أن تساعد على تشخيص
MoreInformation=مزيد من المعلومات MoreInformation=مزيد من المعلومات
TechnicalInformation=Technical information TechnicalInformation=Technical information
TechnicalID=Technical ID
NotePublic=علما (العامة) NotePublic=علما (العامة)
NotePrivate=المذكرة (الخاصة) NotePrivate=المذكرة (الخاصة)
PrecisionUnitIsLimitedToXDecimals=Dolibarr كان الإعداد بدقة للحد من أسعار الوحدات إلى <b>٪ ق</b> عشرية. PrecisionUnitIsLimitedToXDecimals=Dolibarr كان الإعداد بدقة للحد من أسعار الوحدات إلى <b>٪ ق</b> عشرية.
@ -228,6 +231,7 @@ DateAndHour=Date and hour
DateStart=تاريخ البدء DateStart=تاريخ البدء
DateEnd=نهاية التاريخ DateEnd=نهاية التاريخ
DateCreation=تاريخ الإنشاء DateCreation=تاريخ الإنشاء
DateCreationShort=Creat. date
DateModification=تعديل التاريخ DateModification=تعديل التاريخ
DateModificationShort=Modif. تاريخ DateModificationShort=Modif. تاريخ
DateLastModification=تاريخ آخر تعديل DateLastModification=تاريخ آخر تعديل
@ -384,6 +388,7 @@ NActions=ق ٪ الإجراءات
NActionsLate=ق ٪ في وقت متأخر NActionsLate=ق ٪ في وقت متأخر
RequestAlreadyDone=Request already recorded RequestAlreadyDone=Request already recorded
Filter=فلتر Filter=فلتر
FilterOnInto=Search criteria '<strong>%s</strong>' into fields %s
RemoveFilter=إزالة فلتر RemoveFilter=إزالة فلتر
ChartGenerated=رسم ولدت ChartGenerated=رسم ولدت
ChartNotGenerated=رسم لم تولد ChartNotGenerated=رسم لم تولد
@ -574,6 +579,7 @@ SendByMail=أرسل عن طريق البريد الالكتروني
MailSentBy=البريد الإلكتروني التي بعث بها MailSentBy=البريد الإلكتروني التي بعث بها
TextUsedInTheMessageBody=هيئة البريد الإلكتروني TextUsedInTheMessageBody=هيئة البريد الإلكتروني
SendAcknowledgementByMail=ارسال Ack. عن طريق البريد الإلكتروني SendAcknowledgementByMail=ارسال Ack. عن طريق البريد الإلكتروني
EMail=E-mail
NoEMail=أي بريد إلكتروني NoEMail=أي بريد إلكتروني
NoMobilePhone=No mobile phone NoMobilePhone=No mobile phone
Owner=مالك Owner=مالك
@ -666,7 +672,7 @@ NewAttribute=جديد السمة
AttributeCode=السمة رمز AttributeCode=السمة رمز
OptionalFieldsSetup=اضافية سمات الإعداد OptionalFieldsSetup=اضافية سمات الإعداد
URLPhoto=للتسجيل من الصورة / الشعار URLPhoto=للتسجيل من الصورة / الشعار
SetLinkToThirdParty=ربط طرف ثالث آخر SetLinkToAnotherThirdParty=Link to another third party
CreateDraft=خلق مشروع CreateDraft=خلق مشروع
SetToDraft=Back to draft SetToDraft=Back to draft
ClickToEdit=انقر للتحرير ClickToEdit=انقر للتحرير
@ -693,6 +699,7 @@ Deductible=Deductible
from=from from=from
toward=toward toward=toward
Access=Access Access=Access
SelectAction=Select action
HelpCopyToClipboard=Use Ctrl+C to copy to clipboard HelpCopyToClipboard=Use Ctrl+C to copy to clipboard
SaveUploadedFileWithMask=Save file on server with name "<strong>%s</strong>" (otherwise "%s") SaveUploadedFileWithMask=Save file on server with name "<strong>%s</strong>" (otherwise "%s")
OriginFileName=Original filename OriginFileName=Original filename
@ -717,6 +724,9 @@ ViewList=List view
Mandatory=Mandatory Mandatory=Mandatory
Hello=Hello Hello=Hello
Sincerely=Sincerely Sincerely=Sincerely
DeleteLine=Delete line
ConfirmDeleteLine=Are you sure you want to delete this line ?
# Week day # Week day
Monday=يوم الاثنين Monday=يوم الاثنين
Tuesday=الثلاثاء Tuesday=الثلاثاء
@ -748,4 +758,24 @@ ShortSaturday=دإ
ShortSunday=دإ ShortSunday=دإ
SelectMailModel=Select email template SelectMailModel=Select email template
SetRef=Set ref SetRef=Set ref
SearchIntoProject=Search %s into projects Select2ResultFoundUseArrows=
Select2NotFound=No result found
Select2Enter=Enter
Select2MoreCharacters=or more characters
Select2LoadingMoreResults=Loading more results...
Select2SearchInProgress=Search in progress...
SearchIntoThirdparties=Thirdparties
SearchIntoContacts=Contacts
SearchIntoMembers=Members
SearchIntoUsers=Users
SearchIntoProductsOrServices=Products or services
SearchIntoProjects=Projects
SearchIntoCustomerInvoices=Customer invoices
SearchIntoSupplierInvoices=Supplier invoices
SearchIntoCustomerOrders=Customer orders
SearchIntoSupplierOrders=Supplier orders
SearchIntoCustomerProposals=Customer proposals
SearchIntoSupplierProposals=Supplier proposals
SearchIntoInterventions=Interventions
SearchIntoContracts=Contracts
SearchIntoExpenseReports=Expense reports

View File

@ -121,7 +121,6 @@ AttributeName=اسم السمة
String=سلسلة String=سلسلة
Text=النص Text=النص
Int=Int Int=Int
Date=تاريخ
DateAndTime=التاريخ والوقت DateAndTime=التاريخ والوقت
PublicMemberCard=عضو بطاقة العامة PublicMemberCard=عضو بطاقة العامة
MemberNotOrNoMoreExpectedToSubscribe=أو ليست عضوا في أي أكثر من المتوقع للاكتتاب MemberNotOrNoMoreExpectedToSubscribe=أو ليست عضوا في أي أكثر من المتوقع للاكتتاب

View File

@ -0,0 +1,14 @@
# Dolibarr language file - Source file is en_US - oauth
ConfigOAuth=Oauth Configuration
NoAccessToken=No access token saved into local database
HasAccessToken=A token was generated and saved into local database
NewTokenStored=Token received ans saved
ToCheckDeleteTokenOnProvider=To check/delete authorization saved by %s OAuth provider
TokenDeleted=Token deleted
RequestAccess=Click here to request/renew access and receive a new token to save
DeleteAccess=Click here to delete token
UseTheFollowingUrlAsRedirectURI=Use the following URL as the Redirect URI when creating your credential on your OAuth provider:
ListOfSupportedOauthProviders=Enter here credential provided by your OAuth2 provider. Only supported OAuth2 providers are visible here. This setup may be used by other modules than need OAuth2 authentication.
OAUTH_GOOGLE_NAME=Api Google
OAUTH_GOOGLE_ID=Api Google Id
OAUTH_GOOGLE_SECRET=Api Google Secret

View File

@ -31,10 +31,12 @@ StatusOrderSentShort=في عملية
StatusOrderSent=Shipment in process StatusOrderSent=Shipment in process
StatusOrderOnProcessShort=Ordered StatusOrderOnProcessShort=Ordered
StatusOrderProcessedShort=تجهيز StatusOrderProcessedShort=تجهيز
StatusOrderDelivered=Delivered
StatusOrderToBillShort=على مشروع قانون StatusOrderToBillShort=على مشروع قانون
StatusOrderToBill2Short=على مشروع قانون StatusOrderToBill2Short=على مشروع قانون
StatusOrderApprovedShort=وافق StatusOrderApprovedShort=وافق
StatusOrderRefusedShort=رفض StatusOrderRefusedShort=رفض
StatusOrderBilledShort=Billed
StatusOrderToProcessShort=لعملية StatusOrderToProcessShort=لعملية
StatusOrderReceivedPartiallyShort=تلقى جزئيا StatusOrderReceivedPartiallyShort=تلقى جزئيا
StatusOrderReceivedAllShort=وتلقى كل شيء StatusOrderReceivedAllShort=وتلقى كل شيء
@ -48,6 +50,7 @@ StatusOrderToBill=على مشروع قانون
StatusOrderToBill2=على مشروع قانون StatusOrderToBill2=على مشروع قانون
StatusOrderApproved=وافق StatusOrderApproved=وافق
StatusOrderRefused=رفض StatusOrderRefused=رفض
StatusOrderBilled=Billed
StatusOrderReceivedPartially=تلقى جزئيا StatusOrderReceivedPartially=تلقى جزئيا
StatusOrderReceivedAll=وتلقى كل شيء StatusOrderReceivedAll=وتلقى كل شيء
ShippingExist=شحنة موجود ShippingExist=شحنة موجود
@ -61,7 +64,6 @@ SearchOrder=من أجل البحث
SearchACustomerOrder=Search a customer order SearchACustomerOrder=Search a customer order
SearchASupplierOrder=Search a supplier order SearchASupplierOrder=Search a supplier order
ShipProduct=سفينة المنتج ShipProduct=سفينة المنتج
Discount=الخصم
CreateOrder=خلق أمر CreateOrder=خلق أمر
RefuseOrder=رفض النظام RefuseOrder=رفض النظام
ApproveOrder=Approve order ApproveOrder=Approve order
@ -70,6 +72,7 @@ ValidateOrder=من أجل التحقق من صحة
UnvalidateOrder=Unvalidate النظام UnvalidateOrder=Unvalidate النظام
DeleteOrder=من أجل حذف DeleteOrder=من أجل حذف
CancelOrder=من أجل إلغاء CancelOrder=من أجل إلغاء
OrderReopened= Order %s Reopened
AddOrder=Create order AddOrder=Create order
AddToMyOrders=أضف إلى أوامر AddToMyOrders=أضف إلى أوامر
AddToOtherOrders=إضافة إلى أوامر أخرى AddToOtherOrders=إضافة إلى أوامر أخرى
@ -79,6 +82,8 @@ OrdersOpened=Orders to process
NoOpenedOrders=No open orders NoOpenedOrders=No open orders
NoOtherOpenedOrders=No other open orders NoOtherOpenedOrders=No other open orders
NoDraftOrders=No draft orders NoDraftOrders=No draft orders
NoOrder=No Order
NoSupplierOrder=No supplier order
OtherOrders=أوامر أخرى OtherOrders=أوامر أخرى
LastOrders=Last %s customer orders LastOrders=Last %s customer orders
LastCustomerOrders=Last %s customer orders LastCustomerOrders=Last %s customer orders
@ -105,6 +110,7 @@ ClassifyShipped=Classify delivered
ClassifyBilled=تصنيف "فواتير" ClassifyBilled=تصنيف "فواتير"
ComptaCard=بطاقة المحاسبة ComptaCard=بطاقة المحاسبة
DraftOrders=مشروع أوامر DraftOrders=مشروع أوامر
DraftSuppliersOrders=Draft suppliers orders
RelatedOrders=الأوامر ذات الصلة RelatedOrders=الأوامر ذات الصلة
RelatedCustomerOrders=Related customer orders RelatedCustomerOrders=Related customer orders
RelatedSupplierOrders=Related supplier orders RelatedSupplierOrders=Related supplier orders

View File

@ -10,27 +10,26 @@ BirthdayAlertOn= عيد ميلاد النشطة في حالة تأهب
BirthdayAlertOff= عيد الميلاد فى حالة تأهب الخاملة BirthdayAlertOff= عيد الميلاد فى حالة تأهب الخاملة
Notify_FICHINTER_VALIDATE=تدخل المصادق Notify_FICHINTER_VALIDATE=تدخل المصادق
Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
Notify_BILL_VALIDATE=فاتورة مصادق Notify_ORDER_VALIDATE=التحقق من صحة النظام العميل
Notify_BILL_UNVALIDATE=Customer invoice unvalidated Notify_ORDER_SENTBYMAIL=النظام العميل ترسل عن طريق البريد
Notify_ORDER_SUPPLIER_SENTBYMAIL=النظام مزود ترسل عن طريق البريد
Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
Notify_ORDER_SUPPLIER_APPROVE=من أجل الموافقة على المورد Notify_ORDER_SUPPLIER_APPROVE=من أجل الموافقة على المورد
Notify_ORDER_SUPPLIER_REFUSE=من أجل رفض الموردين Notify_ORDER_SUPPLIER_REFUSE=من أجل رفض الموردين
Notify_ORDER_VALIDATE=التحقق من صحة النظام العميل
Notify_PROPAL_VALIDATE=التحقق من صحة اقتراح العملاء Notify_PROPAL_VALIDATE=التحقق من صحة اقتراح العملاء
Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
Notify_PROPAL_SENTBYMAIL=اقتراح التجارية المرسلة عن طريق البريد
Notify_WITHDRAW_TRANSMIT=انتقال انسحاب Notify_WITHDRAW_TRANSMIT=انتقال انسحاب
Notify_WITHDRAW_CREDIT=انسحاب الائتمان Notify_WITHDRAW_CREDIT=انسحاب الائتمان
Notify_WITHDRAW_EMIT=Isue انسحاب Notify_WITHDRAW_EMIT=Isue انسحاب
Notify_ORDER_SENTBYMAIL=النظام العميل ترسل عن طريق البريد
Notify_COMPANY_CREATE=طرف ثالث خلق Notify_COMPANY_CREATE=طرف ثالث خلق
Notify_COMPANY_SENTBYMAIL=Mails sent from third party card Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
Notify_PROPAL_SENTBYMAIL=اقتراح التجارية المرسلة عن طريق البريد Notify_BILL_VALIDATE=فاتورة مصادق
Notify_BILL_UNVALIDATE=Customer invoice unvalidated
Notify_BILL_PAYED=دفعت فاتورة العميل Notify_BILL_PAYED=دفعت فاتورة العميل
Notify_BILL_CANCEL=فاتورة الزبون إلغاء Notify_BILL_CANCEL=فاتورة الزبون إلغاء
Notify_BILL_SENTBYMAIL=فاتورة الزبون إرسالها عن طريق البريد Notify_BILL_SENTBYMAIL=فاتورة الزبون إرسالها عن طريق البريد
Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
Notify_ORDER_SUPPLIER_SENTBYMAIL=النظام مزود ترسل عن طريق البريد
Notify_BILL_SUPPLIER_VALIDATE=فاتورة المورد المصادق Notify_BILL_SUPPLIER_VALIDATE=فاتورة المورد المصادق
Notify_BILL_SUPPLIER_PAYED=دفعت فاتورة المورد Notify_BILL_SUPPLIER_PAYED=دفعت فاتورة المورد
Notify_BILL_SUPPLIER_SENTBYMAIL=فاتورة المورد ترسل عن طريق البريد Notify_BILL_SUPPLIER_SENTBYMAIL=فاتورة المورد ترسل عن طريق البريد
@ -58,13 +57,13 @@ Miscellaneous=متفرقات
NbOfActiveNotifications=Number of notifications (nb of recipient emails) NbOfActiveNotifications=Number of notifications (nb of recipient emails)
PredefinedMailTest=هذا هو الاختبار الإلكتروني. تكون مفصولة \\ nThe سطرين من قبل حرف إرجاع. PredefinedMailTest=هذا هو الاختبار الإلكتروني. تكون مفصولة \\ nThe سطرين من قبل حرف إرجاع.
PredefinedMailTestHtml=هذا هو البريد <b>الاختبار</b> (الاختبار يجب أن تكون في كلمة جريئة). <br> وتفصل بين الخطين من قبل حرف إرجاع. PredefinedMailTestHtml=هذا هو البريد <b>الاختبار</b> (الاختبار يجب أن تكون في كلمة جريئة). <br> وتفصل بين الخطين من قبل حرف إرجاع.
PredefinedMailContentSendInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __FACREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __REF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendInvoiceReminder=__CONTACTCIVNAME__\n\nWe would like to warn you that the invoice __FACREF__ seems to not being payed. So this is the invoice in attachment again, as a reminder.\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendInvoiceReminder=__CONTACTCIVNAME__\n\nWe would like to warn you that the invoice __REF__ seems to not being payed. So this is the invoice in attachment again, as a reminder.\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendProposal=__CONTACTCIVNAME__\n\nYou will find here the commercial proposal __PROPREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendProposal=__CONTACTCIVNAME__\n\nYou will find here the commercial proposal __PROPREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendSupplierProposal=__CONTACTCIVNAME__\n\nYou will find here the price request __ASKREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendSupplierProposal=__CONTACTCIVNAME__\n\nYou will find here the price request __ASKREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendOrder=__CONTACTCIVNAME__\n\nYou will find here the order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendOrder=__CONTACTCIVNAME__\n\nYou will find here the order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendSupplierOrder=__CONTACTCIVNAME__\n\nYou will find here our order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendSupplierOrder=__CONTACTCIVNAME__\n\nYou will find here our order __ORDERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __FACREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendSupplierInvoice=__CONTACTCIVNAME__\n\nYou will find here the invoice __REF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendShipping=__CONTACTCIVNAME__\n\nYou will find here the shipping __SHIPPINGREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__ PredefinedMailContentSendFichInter=__CONTACTCIVNAME__\n\nYou will find here the intervention __FICHINTERREF__\n\n__PERSONALIZED__Sincerely\n\n__SIGNATURE__
PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__ PredefinedMailContentThirdparty=__CONTACTCIVNAME__\n\n__PERSONALIZED__\n\n__SIGNATURE__
@ -121,24 +120,23 @@ LengthUnitdm=مارك ألماني
LengthUnitcm=الطول LengthUnitcm=الطول
LengthUnitmm=مم LengthUnitmm=مم
Surface=منطقة Surface=منطقة
SurfaceUnitm2=m2 SurfaceUnitm2=m²
SurfaceUnitdm2=dm2 SurfaceUnitdm2=dm²
SurfaceUnitcm2=cm2 SurfaceUnitcm2=cm²
SurfaceUnitmm2=mm2 SurfaceUnitmm2=mm²
SurfaceUnitfoot2=ft2 SurfaceUnitfoot2=ft²
SurfaceUnitinch2=in2 SurfaceUnitinch2=in²
Volume=حجم Volume=حجم
TotalVolume=الحجم الإجمالي TotalVolume=الحجم الإجمالي
VolumeUnitm3=m3 VolumeUnitm3=m³
VolumeUnitdm3=dm3 VolumeUnitdm3=dm³ (L)
VolumeUnitcm3=cm3 VolumeUnitcm3=cm³ (ml)
VolumeUnitmm3=mm3 VolumeUnitmm3=mm³ (µl)
VolumeUnitfoot3=ft3 VolumeUnitfoot3=ft³
VolumeUnitinch3=in3 VolumeUnitinch3=in³
VolumeUnitounce=أوقية VolumeUnitounce=أوقية
VolumeUnitlitre=لتر VolumeUnitlitre=لتر
VolumeUnitgallon=غالون VolumeUnitgallon=غالون
Size=حجم
SizeUnitm=م SizeUnitm=م
SizeUnitdm=مارك ألماني SizeUnitdm=مارك ألماني
SizeUnitcm=سم SizeUnitcm=سم

View File

@ -23,3 +23,9 @@ PAYPAL_PAYONLINE_SENDEMAIL=EMail to warn after a payment (success or not)
ReturnURLAfterPayment=Return URL after payment ReturnURLAfterPayment=Return URL after payment
ValidationOfPaypalPaymentFailed=Validation of Paypal payment failed ValidationOfPaypalPaymentFailed=Validation of Paypal payment failed
PaypalConfirmPaymentPageWasCalledButFailed=Payment confirmation page for Paypal was called by Paypal but confirmation failed PaypalConfirmPaymentPageWasCalledButFailed=Payment confirmation page for Paypal was called by Paypal but confirmation failed
SetExpressCheckoutAPICallFailed=SetExpressCheckout API call failed.
DoExpressCheckoutPaymentAPICallFailed=DoExpressCheckoutPayment API call failed.
DetailedErrorMessage=Detailed Error Message
ShortErrorMessage=Short Error Message
ErrorCode=Error Code
ErrorSeverityCode=Error Severity Code

View File

@ -1,6 +1,9 @@
# Dolibarr language file - Source file is en_US - products # Dolibarr language file - Source file is en_US - products
ProductRef=المرجع المنتج. ProductRef=المرجع المنتج.
ProductLabel=وصف المنتج ProductLabel=وصف المنتج
ProductLabelTranslated=Translated product label
ProductDescriptionTranslated=Translated product description
ProductNoteTranslated=Translated product note
ProductServiceCard=منتجات / خدمات البطاقات ProductServiceCard=منتجات / خدمات البطاقات
Products=المنتجات Products=المنتجات
Services=الخدمات Services=الخدمات
@ -64,12 +67,17 @@ ProductStatusNotOnBuy=عفا عليها الزمن
ProductStatusOnBuyShort=متاح ProductStatusOnBuyShort=متاح
ProductStatusNotOnBuyShort=عفا عليها الزمن ProductStatusNotOnBuyShort=عفا عليها الزمن
UpdatePrice=آخر التطورات في الأسعار UpdatePrice=آخر التطورات في الأسعار
UpdateVAT=Update vat
UpdateDefaultPrice=Update default price
UpdateLevelPrices=Update prices for each level
AppliedPricesFrom=تطبق الأسعار من AppliedPricesFrom=تطبق الأسعار من
SellingPrice=سعر البيع SellingPrice=سعر البيع
SellingPriceHT=سعر البيع (صافي الضرائب) SellingPriceHT=سعر البيع (صافي الضرائب)
SellingPriceTTC=سعر البيع (شركة الضريبية) SellingPriceTTC=سعر البيع (شركة الضريبية)
PublicPrice=السعر العام PublicPrice=السعر العام
CurrentPrice=السعر الحالي CurrentPrice=السعر الحالي
CostPriceDescription=This price (net of tax) can be used to store the average amount this product cost to your company. It may be any price you calculate yourself, for example from the average buying price plus average production and distribution cost.
CostPriceUsage=In a future version, this value could be used for margin calculation.
NewPrice=السعر الجديد NewPrice=السعر الجديد
MinPrice=Min. selling price MinPrice=Min. selling price
MinPriceHT=Min. selling price (net of tax) MinPriceHT=Min. selling price (net of tax)
@ -98,9 +106,10 @@ AddToOtherProposals=إضافة إلى اقتراحات أخرى
AddToMyBills=أضف إلى الفواتير AddToMyBills=أضف إلى الفواتير
AddToOtherBills=إضافة إلى غيرها من مشاريع القوانين AddToOtherBills=إضافة إلى غيرها من مشاريع القوانين
CorrectStock=تصحيح الأوراق المالية CorrectStock=تصحيح الأوراق المالية
AddPhoto=إضافة الصورة
ListOfStockMovements=قائمة الحركات الأسهم ListOfStockMovements=قائمة الحركات الأسهم
BuyingPrice=سعر الشراء BuyingPrice=سعر الشراء
PriceForEachProduct=Products with specific prices
NoPriceSpecificToCustomer=This customer has no specific prices. All standard prices for products/services will be used.
SupplierCard=بطاقة المورد SupplierCard=بطاقة المورد
CommercialCard=بطاقة تجارية CommercialCard=بطاقة تجارية
AllWays=الطريق إلى إيجاد منتجك في الأسهم AllWays=الطريق إلى إيجاد منتجك في الأسهم
@ -129,7 +138,6 @@ KeywordFilter=الكلمة الرئيسية فلتر
CategoryFilter=فئة فلتر CategoryFilter=فئة فلتر
ProductToAddSearch=إضافة إلى البحث عن المنتج ProductToAddSearch=إضافة إلى البحث عن المنتج
AddDel=إضافة / حذف AddDel=إضافة / حذف
Quantity=الكمية
NoMatchFound=العثور على أي مباراة NoMatchFound=العثور على أي مباراة
ProductAssociationList=List of products/services that are component of this virtual product/package ProductAssociationList=List of products/services that are component of this virtual product/package
ProductParentList=List of package products/services with this product as a component ProductParentList=List of package products/services with this product as a component
@ -182,6 +190,8 @@ ClonePricesProduct=استنساخ الرئيسية معلومات والأسعا
CloneCompositionProduct=Clone packaged product/service CloneCompositionProduct=Clone packaged product/service
ProductIsUsed=ويستخدم هذا المنتج ProductIsUsed=ويستخدم هذا المنتج
NewRefForClone=المرجع. من المنتجات الجديدة / خدمة NewRefForClone=المرجع. من المنتجات الجديدة / خدمة
SellingPrices=Selling prices
BuyingPrices=Buying prices
CustomerPrices=Customer prices CustomerPrices=Customer prices
SuppliersPrices=Supplier prices SuppliersPrices=Supplier prices
SuppliersPricesOfProductsOrServices=Supplier prices (of products or services) SuppliersPricesOfProductsOrServices=Supplier prices (of products or services)
@ -228,6 +238,10 @@ PriceByQuantityRange=Quantity range
ProductsDashboard=Products/Services summary ProductsDashboard=Products/Services summary
UpdateOriginalProductLabel=Modify original label UpdateOriginalProductLabel=Modify original label
HelpUpdateOriginalProductLabel=Allows to edit the name of the product HelpUpdateOriginalProductLabel=Allows to edit the name of the product
MultipriceRules=Price level rules
UseMultipriceRules=Use price level rules (defined into product module setup) to autocalculate prices of all other level according to first level
PercentVariationOver=%% variation over %s
PercentDiscountOver=%% discount over %s
### composition fabrication ### composition fabrication
Building=Production and items dispatchment Building=Production and items dispatchment
Build=Produce Build=Produce
@ -294,6 +308,7 @@ LastUpdated=Last updated
CorrectlyUpdated=Correctly updated CorrectlyUpdated=Correctly updated
PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is
PropalMergePdfProductChooseFile=Select PDF files PropalMergePdfProductChooseFile=Select PDF files
IncludingProductWithTag=Including product with tag IncludingProductWithTag=Including product/service with tag
DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer
WarningSelectOneDocument=Please select at least one document WarningSelectOneDocument=Please select at least one document
DefaultUnitToShow=Units

View File

@ -99,7 +99,6 @@ ReOpenAProject=فتح مشروع
ConfirmReOpenAProject=هل أنت متأكد أنك تريد إعادة فتح هذا المشروع؟ ConfirmReOpenAProject=هل أنت متأكد أنك تريد إعادة فتح هذا المشروع؟
ProjectContact=مشروع اتصالات ProjectContact=مشروع اتصالات
ActionsOnProject=الإجراءات على المشروع ActionsOnProject=الإجراءات على المشروع
OpenedProjects=Opened projects
YouAreNotContactOfProject=كنت لا اتصال لهذا المشروع الخاص YouAreNotContactOfProject=كنت لا اتصال لهذا المشروع الخاص
DeleteATimeSpent=قضى الوقت حذف DeleteATimeSpent=قضى الوقت حذف
ConfirmDeleteATimeSpent=هل أنت متأكد أنك تريد حذف هذا الوقت الذي يقضيه؟ ConfirmDeleteATimeSpent=هل أنت متأكد أنك تريد حذف هذا الوقت الذي يقضيه؟
@ -175,9 +174,12 @@ ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by mo
ProjectOpenedProjectByOppStatus=Opened project/lead by opportunity status ProjectOpenedProjectByOppStatus=Opened project/lead by opportunity status
ProjectsStatistics=Statistics on projects/leads ProjectsStatistics=Statistics on projects/leads
TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible. TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
IdTaskTime=Id task time
YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label.
OpenedProjectsByThirdparties=Opened projects by thirdparties OpenedProjectsByThirdparties=Opened projects by thirdparties
OpportunityTotalAmount=Opportunities total amount OpportunityTotalAmount=Opportunities total amount
OpportunityPonderatedAmount=Opportunities weighted amount OpportunityPonderatedAmount=Opportunities weighted amount
OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability (depending on status of opportunity)
OppStatusPROSP=Prospection OppStatusPROSP=Prospection
OppStatusQUAL=Qualification OppStatusQUAL=Qualification
OppStatusPROPO=Proposal OppStatusPROPO=Proposal

View File

@ -53,6 +53,7 @@ ListOfProposals=قائمة مقترحات تجارية
ActionsOnPropal=الإجراءات على الاقتراح ActionsOnPropal=الإجراءات على الاقتراح
NoOpenedPropals=No open commercial proposals NoOpenedPropals=No open commercial proposals
NoOtherOpenedPropals=No other open commercial proposals NoOtherOpenedPropals=No other open commercial proposals
NoPropal=No commercial proposal
RefProposal=اقتراح المرجع التجارية RefProposal=اقتراح المرجع التجارية
SendPropalByMail=اقتراح ارسال التجارية عن طريق البريد SendPropalByMail=اقتراح ارسال التجارية عن طريق البريد
AssociatedDocuments=الوثائق المرتبطة الاقتراح : AssociatedDocuments=الوثائق المرتبطة الاقتراح :

View File

@ -0,0 +1,96 @@
# Dolibarr language file - Source file is en_US - receiptprinter
PrinterAdded=Printer %s added
PrinterUpdated=Printer %s updated
PrinterDeleted=Printer %s deleted
TestSentToPrinter=Test Sent To Printer %s
ReceiptPrinterDesc=Setup of printers
ReceiptPrinterTemplateDesc=Setup of Templates
ReceiptPrinterTypeDesc=Description of Receipt Printer's type
ReceiptPrinterProfileDesc=Description of Receipt Printer's Profile
ListPrinters=List of Printers
SetupReceiptTemplate=Template Setup
CONNECTOR_DUMMY=Dummy Printer
CONNECTOR_NETWORK_PRINT=Network Printer
CONNECTOR_FILE_PRINT=Local Printer
CONNECTOR_WINDOWS_PRINT=Local Windows Printer
CONNECTOR_DUMMY_HELP=Fake Printer for test, does nothing
CONNECTOR_NETWORK_PRINT_HELP=10.x.x.x:9100
CONNECTOR_FILE_PRINT_HELP=/dev/usb/lp0, /dev/usb/lp1
CONNECTOR_WINDOWS_PRINT_HELP=LPT1, COM1, smb://FooUser:secret@computername/workgroup/Receipt Printer
PROFILE_DEFAULT=Default Profile
PROFILE_SIMPLE=Simple Profile
PROFILE_EPOSTEP=Epos Tep Profile
PROFILE_P822D=P822D Profile
PROFILE_STAR=Star Profile
PROFILE_DEFAULT_HELP=Default Profile suitable for Epson printers
PROFILE_SIMPLE_HELP=Simple Profile No Graphics
PROFILE_EPOSTEP_HELP=Epos Tep Profile Help
PROFILE_P822D_HELP=P822D Profile No Graphics
PROFILE_STAR_HELP=Star Profile
DOL_ALIGN_LEFT=Left align text
DOL_ALIGN_CENTER=Center text
DOL_ALIGN_RIGHT=Right align text
DOL_USE_FONT_A=Use font A of printer
DOL_USE_FONT_B=Use font B of printer
DOL_USE_FONT_C=Use font C of printer
DOL_BOLD=Text Bold
/DOL_BOLD=End of Text Bold
DOL_DOUBLE_HEIGHT=Text double height
/DOL_DOUBLE_HEIGHT=End of Text double height
DOL_DOUBLE_WIDTH=Text double width
/DOL_DOUBLE_WIDTH=End of Text double width
DOL_UNDERLINE=Underline text
/DOL_UNDERLINE=End of Underline text
DOL_UNDERLINE_2DOTS=Underline with double line
/DOL_UNDERLINE_2DOTS=End of Underline with double line
DOL_EMPHASIZED=Emphasized text
/DOL_EMPHASIZED=End of Emphasized text
DOL_SWITCH_COLORS=Print in white on black
/DOL_SWITCH_COLORS=End of Print in white on black
DOL_PRINT_BARCODE=Print barcode
DOL_PRINT_BARCODE_CUSTOMER_ID=Print barcode customer id
DOL_SET_PRINT_WIDTH_57=Ticket print width of 57mm
DOL_CUT_PAPER_FULL=Cut ticket completely
DOL_CUT_PAPER_PARTIAL=Cut ticket partially
DOL_OPEN_DRAWER=Open cash drawer
DOL_ACTIVATE_BUZZER=Activate buzzer
DOL_PRINT_QRCODE=Print QR Code
DOL_PRINT_DATE=Print date AAAA-MM-DD
DOL_PRINT_DATE_TIME=Print date and time AAAA-MM-DD HH:MM:SS
DOL_PRINT_YEAR=Print Year
DOL_PRINT_MONTH_LETTERS=Print month in letters (example : november)
DOL_PRINT_MONTH=Print month number
DOL_PRINT_DAY=Print day number
DOL_PRINT_DAY_LETTERS=Print day number
DOL_PRINT_TABLE=Print table number (for restaurant, bar...)
DOL_PRINT_CUTLERY=Print number of cutlery (for restaurant)
DOL_PRINT_PAYMENT=Print payment method
DOL_PRINT_LOGO=Print logo stored on printer. Example : 32|32
DOL_PRINT_LOGO_OLD=Print logo stored on printer. Must be followed by logo code. For old printers.
DOL_PRINT_ORDER_LINES=Print order lines
DOL_PRINT_ORDER_TAX=Print order total tax
DOL_PRINT_ORDER_LOCAL_TAX=Print order local tax
DOL_PRINT_ORDER_TOTAL=Print order total
DOL_PRINT_ORDER_NUMBER=Print order number
DOL_PRINT_ORDER_NUMBER_UNIQUE=Print order number after validation
DOL_PRINT_CUSTOMER_FIRSTNAME=Print customer firstname
DOL_PRINT_CUSTOMER_LASTNAME=Print customer name
DOL_PRINT_CUSTOMER_MAIL=Print customer mail
DOL_PRINT_CUSTOMER_PHONE=Print customer phone
DOL_PRINT_CUSTOMER_MOBILE=Print customer mobile
DOL_PRINT_CUSTOMER_SKYPE=Print customer skype
DOL_PRINT_CUSTOMER_TAX_NUMBER=Print customer VAT number
DOL_PRINT_CUSTOMER_ACCOUNT_BALANCE=Print customer account balance
DOL_PRINT_VENDOR_LASTNAME=Print vendor name
DOL_PRINT_VENDOR_FIRSTNAME=Print vendor firstname
DOL_PRINT_VENDOR_MAIL=Print vendor mail
DOL_PRINT_CUSTOMER_POINTS=Print customer points
DOL_PRINT_ORDER_POINTS=Print number of points for this order
DOL_PRINT_IF_CUSTOMER=Print the line IF a customer is affected to the order
DOL_PRINT_IF_VENDOR=Print the line IF a vendor is affected to the order
DOL_PRINT_IF_HAPPY_HOUR=Print the line IF Happy Hour
DOL_PRINT_IF_NUM_ORDER_UNIQUE=Print the line IF order is validated
DOL_PRINT_IF_CUSTOMER_POINTS=Print the line IF customer points > 0
DOL_PRINT_IF_ORDER_POINTS=Print the line IF points of the order > 0
DOL_PRINT_IF_CUSTOMER_TAX_NUMBER=Print the line IF customer has vat number
DOL_PRINT_IF_CUSTOMER_ACCOUNT_BALANCE_POSITIVE=Print the line IF customer balance > 0

View File

@ -1,4 +1,4 @@
# Dolibarr language file - Source file is en_US - resource
MenuResourceIndex=Resources MenuResourceIndex=Resources
MenuResourceAdd=New resource MenuResourceAdd=New resource
MenuResourcePlanning=Resource planning MenuResourcePlanning=Resource planning
@ -17,6 +17,7 @@ ResourceFormLabel_description=Resource description
ResourcesLinkedToElement=Resources linked to element ResourcesLinkedToElement=Resources linked to element
ShowResource=Show resource
ShowResourcePlanning=Show resource planning ShowResourcePlanning=Show resource planning
GotoDate=Go to date GotoDate=Go to date

View File

@ -69,7 +69,7 @@ ProductQtyInCustomersOrdersRunning=Product quantity into opened customers orders
ProductQtyInSuppliersOrdersRunning=Product quantity into opened suppliers orders ProductQtyInSuppliersOrdersRunning=Product quantity into opened suppliers orders
ProductQtyInShipmentAlreadySent=Product quantity from opened customer order already sent ProductQtyInShipmentAlreadySent=Product quantity from opened customer order already sent
ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from opened supplier order already received ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from opened supplier order already received
NoProductToShipFoundIntoStock=No product to ship found into warehouse <b>%s</b>. Correct sotck or go back to choose another warehouse. NoProductToShipFoundIntoStock=No product to ship found into warehouse <b>%s</b>. Correct stock or go back to choose another warehouse.
# Sending methods # Sending methods
SendingMethodCATCH=القبض على العملاء SendingMethodCATCH=القبض على العملاء

View File

@ -0,0 +1,60 @@
# Dolibarr language file - Source file is en_US - supplier_proposal
SupplierProposal=Supplier commercial proposals
supplier_proposalDESC=Manage price requests to suppliers
supplier_proposalMENU_LEFT_TITLE=Supplier proposals
supplier_proposalMENU_LEFT_TITLE_NEW=New request
supplier_proposalMENU_LEFT_TITLE_LIST=List
CommRequest=Price request
CommRequests=Price requests
SearchRequest=Find a request
DraftRequests=Draft requests
LastModifiedRequests=Last %s modified price requests
RequestsOpened=Open price requests
SupplierProposalArea=Supplier proposals area
SupplierProposalShort=Supplier proposal
SupplierProposals=Supplier proposals
NewAskPrice=New price request
NewAsk=New request
ShowSupplierProposal=Show price request
AddSupplierProposal=Create a price request
SupplierProposalRefFourn=Supplier ref
SupplierProposalDate=Delivery date
SupplierProposalRefFournNotice=Before closing to "Accepted", think to grasp suppliers references.
RelatedSupplierProposal=Related price requests suppliers
ConfirmValidateAsk=Are you sure you want to validate this price request under name <b>%s</b> ?
DateAsk=Date of request
DeleteAsk=Delete request
ValidateAsk=Validate request
AddAsk=Create a request
SupplierProposalDraft=Drafts
SupplierProposalOpened=Open
SupplierProposalStatusDraft=Draft (needs to be validated)
SupplierProposalStatusValidated=Validated (request is open)
SupplierProposalStatusOpened=Validated (request is open)
SupplierProposalStatusClosed=Closed
SupplierProposalStatusSigned=Accepted
SupplierProposalStatusNotSigned=Refused
SupplierProposalStatusBilled=Billed
SupplierProposalStatusDraftShort=Draft
SupplierProposalStatusValidatedShort=Validated
SupplierProposalStatusOpenedShort=Open
SupplierProposalStatusClosedShort=Closed
SupplierProposalStatusSignedShort=Accepted
SupplierProposalStatusNotSignedShort=Refused
SupplierProposalStatusBilledShort=Billed
CopyAskFrom=Create price request by copying existing a request
CreateEmptyAsk=Create blank request
CloneAsk=Clone price request
ConfirmCloneAsk=Are you sure you want to clone the price request <b>%s</b> ?
ConfirmReOpenAsk=Are you sure you want to open back the price request <b>%s</b> ?
SendAskByMail=Send price request by mail
SendAskRef=Sending the price request %s
SupplierProposalCard=Request card
ConfirmDeleteAsk=Are you sure you want to delete this price request ?
ActionsOnSupplierProposal=Events on price request
DocModelAuroreDescription=A complete request model (logo...)
CommercialAsk=Price request
DefaultModelSupplierProposalCreate=Default model creation
DefaultModelSupplierProposalToBill=Default template when closing a price request (accepted)
DefaultModelSupplierProposalClosed=Default template when closing a price request (refused)
ListOfSupplierProposal=List of supplier proposal requests

View File

@ -28,8 +28,6 @@ AnyOtherInThisListCanValidate=Person to inform for validation.
TripSociete=Information company TripSociete=Information company
TripSalarie=Informations user TripSalarie=Informations user
TripNDF=Informations expense report TripNDF=Informations expense report
DeleteLine=Delete a line of the expense report
ConfirmDeleteLine=Are you sure you want to delete this line ?
PDFStandardExpenseReports=Standard template to generate a PDF document for expense report PDFStandardExpenseReports=Standard template to generate a PDF document for expense report
ExpenseReportLine=Expense report line ExpenseReportLine=Expense report line
TF_OTHER=أخرى TF_OTHER=أخرى
@ -53,8 +51,6 @@ AddLineMini=Add
Date_DEBUT=Period date start Date_DEBUT=Period date start
Date_FIN=Period date end Date_FIN=Period date end
ModePaiement=Payment mode ModePaiement=Payment mode
Note=Note
Project=Project
VALIDATOR=User responsible for approval VALIDATOR=User responsible for approval
VALIDOR=Approved by VALIDOR=Approved by

Some files were not shown because too many files have changed in this diff Show More