Merge branch '10.0' of https://github.com/Dolibarr/dolibarr into 10.0
This commit is contained in:
commit
224b4c147a
10
.stickler.yml
Normal file
10
.stickler.yml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
linters:
|
||||
phpcs:
|
||||
standard: 'dev/setup/codesniffer/ruleset.xml'
|
||||
extensions: 'php'
|
||||
tab_width: 4
|
||||
fixer: true
|
||||
|
||||
fixers:
|
||||
enable: true
|
||||
@ -304,7 +304,7 @@ script:
|
||||
set -e
|
||||
# Exclusions are defined in the ruleset.xml file
|
||||
#phpcs -s -n -p -d memory_limit=-1 --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 .
|
||||
phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .
|
||||
if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .; fi
|
||||
set +e
|
||||
echo
|
||||
|
||||
|
||||
99
ChangeLog
99
ChangeLog
@ -2,6 +2,105 @@
|
||||
English Dolibarr ChangeLog
|
||||
--------------------------------------------------------------
|
||||
|
||||
***** ChangeLog for 10.0.2 compared to 10.0.1 *****
|
||||
|
||||
FIX: #10460 compatibility with MariaDB 10.4
|
||||
FIX: #11401 Adherent unknown language key
|
||||
FIX: #11422 Can't edit his own events with standard rights
|
||||
FIX: #11427 require product class (fixes POST /supplierinvoices REST API endpoint)
|
||||
FIX: #11570
|
||||
FIX: #11591 FIX: #11592
|
||||
FIX: #11671 CVE-2019-15062
|
||||
FIX: #11672
|
||||
FIX: #11685
|
||||
FIX: #11702
|
||||
FIX: #11711
|
||||
FIX: #11720
|
||||
FIX: #11746 Unable to modify amount of insurance of a loan
|
||||
FIX: #11752
|
||||
FIX: #11789 FIX: #11790
|
||||
FIX: #11804 list of tickets from a customer card display ALL tickets
|
||||
FIX: #11834
|
||||
FIX: Add char $ and ; in sanitizing of filenames.
|
||||
FIX: Add comment before protected functions
|
||||
FIX: Add log and type of content in dolWebsiteOutput and
|
||||
FIX: Add repair.php option 'restore' to restore user picture after v10
|
||||
FIX: amount opened on thirdparty card dont care of credit note not converted
|
||||
FIX: Api of documents work with value 'thirdparty'
|
||||
FIX: author in message / ticket API
|
||||
FIX: avoid sql error if fk_project is empty during update
|
||||
FIX: avoid Warning: A non-numeric value encountered
|
||||
FIX: bad consistency in list of invoice for direct debit order.
|
||||
FIX: Bad error management in zip compress and web site export
|
||||
FIX: bad substitution for extrafields type checkbox
|
||||
FIX: better help message with multicompany
|
||||
FIX: calculation of $products_dispatched
|
||||
FIX: Can't add a new chart of account
|
||||
FIX: Can't delete a draft leave even if it should
|
||||
FIX: Can't save setup of mailman module
|
||||
FIX: column jabberid missing
|
||||
FIX: Confirmation of deletion
|
||||
FIX: Consistency in direct debit order lists.
|
||||
FIX: Content send before header warning
|
||||
FIX: credit note can be split
|
||||
FIX: credit note used on list
|
||||
FIX: Css was saved on wrong website.
|
||||
FIX: delivery extrafields
|
||||
FIX: Disabling a website does not put it offline
|
||||
FIX: display only stripe sources for customer
|
||||
FIX: display payment intent in stripe's charge list
|
||||
FIX: document list for products in API
|
||||
FIX: dol_thirdparty_id for stripe PI
|
||||
FIX: Do not show tooltip if tooltip is empty
|
||||
FIX: duplicate css tag, decrease padding-bottom for boxes in eldy theme
|
||||
FIX: duration when creating service
|
||||
FIX: EDB-ID:47370
|
||||
FIX: Enable web site
|
||||
FIX: error management when adding a property with type real
|
||||
FIX: Fatal situation if payment removed on expense report. Action
|
||||
FIX: filepath of generated documents doesn't handle products with special characters
|
||||
FIX: for MAIN_MAXTABS_IN_CARD = $i card
|
||||
FIX: gzip and bzip2 must use option -f
|
||||
FIX: It was possible to create cashfence without entering data.
|
||||
FIX: javascript error when using dol_use_jmobile=1
|
||||
FIX: logout redirect to takepos.php
|
||||
FIX: Look and feel v10
|
||||
FIX: Make protected all pfd models functions
|
||||
FIX: management of extrafields in modulebuilder
|
||||
FIX: Missing div for buttons in tax, loan, various payment modules
|
||||
FIX: missing include (dol_convert_file not found)
|
||||
FIX: Missing some replacements in website module
|
||||
FIX: missing test on permission on button to delete ledger record
|
||||
FIX: Missing the filter fields in export of expense report and leaves
|
||||
FIX: Missing ticket icon on md theme
|
||||
FIX: Missing transaction
|
||||
FIX: Mode smartphone was not triggered when there is too loo menu
|
||||
FIX: Must escape shell
|
||||
FIX: Must exclude logs and some dirs for compressed backup
|
||||
FIX: name and position of hook FIX: #11710
|
||||
FIX: Not showing MAIN_INVERT_SENDER_RECIPIENT when edit field
|
||||
FIX: Nowrap missing on amount in boxes
|
||||
FIX: Option to use ZipArchive instead of PclZip bugged with large files.
|
||||
FIX: order or proposals billed if both workflow conf activated
|
||||
FIX: permission check on API intervention
|
||||
FIX: phpcs
|
||||
FIX: placement function
|
||||
FIX: qty in invoice list on product's stats
|
||||
FIX: remove disabled product type from product list
|
||||
FIX: Return code of pdf_einstein.modules.php and proformat
|
||||
FIX: round for application fee in stripe
|
||||
FIX: Sens of the balance (Debit - Credit in accountancy not contrary)
|
||||
FIX: Several pb in export of documents
|
||||
FIX: SQL syntax error and CSRF check on vat reports
|
||||
FIX: takepos layout clear or focus search
|
||||
FIX: too many record in sql request. Whena criteria is a filter, we must
|
||||
FIX: Translation of month
|
||||
FIX: USEDOLIBARREDITOR not always set
|
||||
FIX: VAT number for Monaco (it uses FR)
|
||||
FIX: vulenrability in uploading file found by 美创科技安全实验室
|
||||
FIX: wrong display (and hidden input) for already dispatched quantity
|
||||
FIX: wrong parameters (same error in branch 9, 10, develop)
|
||||
FIX: Wrong variable. Must be PROJECT_HIDE_UNSELECTABLES
|
||||
|
||||
***** ChangeLog for 10.0.1 compared to 10.0.0 *****
|
||||
FIX: #10930
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/* Copyright (C) 2016 Olivier Geffroy <jeff@jeffinfo.com>
|
||||
* Copyright (C) 2016 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2016-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2016-2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -164,7 +164,7 @@ if ($action == 'export_csv')
|
||||
print $object->get_compte_desc($line->numero_compte) . $sep;
|
||||
print price($line->debit) . $sep;
|
||||
print price($line->credit) . $sep;
|
||||
print price($line->credit - $line->debit) . $sep;
|
||||
print price($line->debit - $line->credit) . $sep;
|
||||
print "\n";
|
||||
}
|
||||
|
||||
@ -293,9 +293,9 @@ if ($action != 'export_csv')
|
||||
|
||||
print '<td>' . length_accountg($line->numero_compte) . '</td>';
|
||||
print '<td>' . $description . '</td>';
|
||||
print '<td class="right">' . price($line->debit) . '</td>';
|
||||
print '<td class="right">' . price($line->credit) . '</td>';
|
||||
print '<td class="right">' . price($line->credit - $line->debit) . '</td>';
|
||||
print '<td class="nowraponall right">' . price($line->debit) . '</td>';
|
||||
print '<td class="nowraponall right">' . price($line->credit) . '</td>';
|
||||
print '<td class="nowraponall right">' . price($line->debit - $line->credit) . '</td>';
|
||||
print '<td class="center">' . $link;
|
||||
print '</td>';
|
||||
print "</tr>\n";
|
||||
@ -305,11 +305,11 @@ if ($action != 'export_csv')
|
||||
$sous_total_credit += $line->credit;
|
||||
}
|
||||
|
||||
print '<tr class="liste_total"><td class="right" colspan="2">' . $langs->trans("SubTotal") . ':</td><td class="nowrap right">' . price($sous_total_debit) . '</td><td class="nowrap right">' . price($sous_total_credit) . '</td><td class="nowrap right">' . price(price2num($sous_total_credit - $sous_total_debit)) . '</td>';
|
||||
print '<tr class="liste_total"><td class="right" colspan="2">' . $langs->trans("SubTotal") . ':</td><td class="nowrap right">' . price($sous_total_debit) . '</td><td class="nowrap right">' . price($sous_total_credit) . '</td><td class="nowrap right">' . price(price2num($sous_total_debit - $sous_total_credit)) . '</td>';
|
||||
print "<td> </td>\n";
|
||||
print '</tr>';
|
||||
|
||||
print '<tr class="liste_total"><td class="right" colspan="2">' . $langs->trans("AccountBalance") . ':</td><td class="nowrap right">' . price($total_debit) . '</td><td class="nowrap right">' . price($total_credit) . '</td><td class="nowrap right">' . price(price2num($total_credit - $total_debit)) . '</td>';
|
||||
print '<tr class="liste_total"><td class="right" colspan="2">' . $langs->trans("AccountBalance") . ':</td><td class="nowrap right">' . price($total_debit) . '</td><td class="nowrap right">' . price($total_credit) . '</td><td class="nowrap right">' . price(price2num($total_debit - $total_credit)) . '</td>';
|
||||
print "<td> </td>\n";
|
||||
print '</tr>';
|
||||
|
||||
|
||||
@ -424,7 +424,7 @@ class AdherentType extends CommonObject
|
||||
global $langs;
|
||||
if ($morphy == 'phy') { return $langs->trans("Physical"); }
|
||||
elseif ($morphy == 'mor') { return $langs->trans("Moral"); }
|
||||
else return $langs->trans("Physical & Morale");
|
||||
else return $langs->trans("MorPhy");
|
||||
//return $morphy;
|
||||
}
|
||||
|
||||
|
||||
@ -83,10 +83,10 @@ if ($action == 'dolibarr2ldap')
|
||||
* View
|
||||
*/
|
||||
|
||||
llxHeader('', $langs->trans("Member"), 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros');
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
llxHeader('', $langs->trans("Member"), 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros');
|
||||
|
||||
$head = member_prepare_head($object);
|
||||
|
||||
dol_fiche_head($head, 'ldap', $langs->trans("Member"), 0, 'user');
|
||||
@ -98,12 +98,12 @@ dol_banner_tab($object, 'rowid', $linkback);
|
||||
print '<div class="fichecenter">';
|
||||
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent">';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Login
|
||||
print '<tr><td class="titlefield">'.$langs->trans("Login").'</td><td class="valeur">'.$object->login.' </td></tr>';
|
||||
print '<tr><td class="titlefield">'.$langs->trans("Login").' / '.$langs->trans("Id").'</td><td class="valeur">'.$object->login.' </td></tr>';
|
||||
|
||||
// Password not crypted
|
||||
// If there is a link to password not crypted, we show value in database here so we can compare because it is shown nowhere else
|
||||
if (! empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD))
|
||||
{
|
||||
print '<tr><td>'.$langs->trans("LDAPFieldPasswordNotCrypted").'</td>';
|
||||
@ -111,18 +111,11 @@ if (! empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD))
|
||||
print "</tr>\n";
|
||||
}
|
||||
|
||||
// Password crypted
|
||||
if (! empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD_CRYPTED))
|
||||
{
|
||||
print '<tr><td>'.$langs->trans("LDAPFieldPasswordCrypted").'</td>';
|
||||
print '<td class="valeur">'.$object->pass_crypted.'</td>';
|
||||
print "</tr>\n";
|
||||
}
|
||||
$adht = new AdherentType($db);
|
||||
$adht->fetch($object->typeid);
|
||||
|
||||
// Type
|
||||
print '<tr><td>'.$langs->trans("Type").'</td><td class="valeur">'.$object->type."</td></tr>\n";
|
||||
|
||||
$langs->load("admin");
|
||||
print '<tr><td>'.$langs->trans("Type").'</td><td class="valeur">'.$adht->getNomUrl(1)."</td></tr>\n";
|
||||
|
||||
// LDAP DN
|
||||
print '<tr><td>LDAP '.$langs->trans("LDAPMemberDn").'</td><td class="valeur">'.$conf->global->LDAP_MEMBER_DN."</td></tr>\n";
|
||||
|
||||
@ -80,7 +80,7 @@ if ($id)
|
||||
print '<div class="fichecenter">';
|
||||
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent">';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Login
|
||||
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED))
|
||||
|
||||
@ -478,7 +478,7 @@ if ($rowid > 0)
|
||||
print '<div class="fichehalfleft">';
|
||||
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border" width="100%">';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Login
|
||||
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED))
|
||||
|
||||
@ -283,7 +283,7 @@ if (! $rowid && $action != 'create' && $action != 'edit')
|
||||
print '<td class="center">';
|
||||
if ($objp->morphy == 'phy') { print $langs->trans("Physical"); }
|
||||
elseif ($objp->morphy == 'mor') { print $langs->trans("Moral"); }
|
||||
else print $langs->trans("Physical & Morale");
|
||||
else print $langs->trans("MorPhy");
|
||||
print '</td>';
|
||||
print '<td class="center">'.yn($objp->subscription).'</td>';
|
||||
print '<td class="center">'.yn($objp->vote).'</td>';
|
||||
@ -822,7 +822,7 @@ if ($rowid > 0)
|
||||
$value = $_POST["options_" . $key];
|
||||
}
|
||||
} else {
|
||||
$value = $adht->array_options["options_" . $key];
|
||||
$value = $object->array_options["options_" . $key];
|
||||
}
|
||||
print '<tr><td width="30%">'.$label.'</td><td>';
|
||||
print $extrafields->showInputField($key, $value);
|
||||
|
||||
@ -39,7 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||
if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("errors","admin","main","companies","resource","holiday","accountancy","hrm","orders","contracts","projects","propal","bills","interventions"));
|
||||
@ -1782,7 +1782,7 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
|
||||
|
||||
$formadmin = new FormAdmin($db);
|
||||
$formcompany = new FormCompany($db);
|
||||
if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($db);
|
||||
$formaccounting = new FormAccounting($db);
|
||||
|
||||
$withentity='';
|
||||
|
||||
@ -1890,6 +1890,7 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
|
||||
elseif (in_array($fieldlist[$field], array('libelle_facture'))) {
|
||||
print '<td>';
|
||||
$transfound=0;
|
||||
$transkey='';
|
||||
// Special case for labels
|
||||
if ($tabname == MAIN_DB_PREFIX.'c_payment_term')
|
||||
{
|
||||
|
||||
@ -158,8 +158,10 @@ $head = mailmanspip_admin_prepare_head();
|
||||
if (! empty($conf->global->ADHERENT_USE_MAILMAN))
|
||||
{
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="update">';
|
||||
|
||||
dol_fiche_head($head, 'mailman', $langs->trans("Setup"), 0, 'user');
|
||||
dol_fiche_head($head, 'mailman', $langs->trans("Setup"), -1, 'user');
|
||||
|
||||
//$link=img_picto($langs->trans("Active"),'tick').' ';
|
||||
$link='<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=unset&value=0&name=ADHERENT_USE_MAILMAN">';
|
||||
@ -227,14 +229,21 @@ else
|
||||
if (! empty($conf->global->ADHERENT_USE_MAILMAN))
|
||||
{
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="testsubscribe">';
|
||||
|
||||
print $langs->trans("TestSubscribe").'<br>';
|
||||
print $langs->trans("EMail").' <input type="email" class="flat" name="testsubscribeemail" value="'.GETPOST('testsubscribeemail').'"> <input class="button" type="submit" value="'.$langs->trans("Test").'"><br>';
|
||||
|
||||
print '</form>';
|
||||
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="testunsubscribe">';
|
||||
|
||||
print $langs->trans("TestUnSubscribe").'<br>';
|
||||
print $langs->trans("EMail").' <input type="email" class="flat" name="testunsubscribeemail" value="'.GETPOST('testunsubscribeemail').'"> <input class="button" type="submit" value="'.$langs->trans("Test").'"><br>';
|
||||
|
||||
print '</form>';
|
||||
}
|
||||
|
||||
|
||||
@ -123,8 +123,10 @@ $head = mailmanspip_admin_prepare_head();
|
||||
if (! empty($conf->global->ADHERENT_USE_SPIP))
|
||||
{
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="update">';
|
||||
|
||||
dol_fiche_head($head, 'spip', $langs->trans("Setup"), 0, 'user');
|
||||
dol_fiche_head($head, 'spip', $langs->trans("Setup"), -1, 'user');
|
||||
|
||||
//$link=img_picto($langs->trans("Active"),'tick').' ';
|
||||
$link='<a href="'.$_SERVER["PHP_SELF"].'?action=unset&value=0&name=ADHERENT_USE_SPIP">';
|
||||
|
||||
@ -98,14 +98,14 @@ print '<br>';
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<tr class="liste_titre">';
|
||||
print "<td>".$langs->trans("RuleForStockManagementDecrease")."</td>\n";
|
||||
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '</tr>'."\n";
|
||||
|
||||
$found=0;
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("DeStockOnBill").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if (! empty($conf->facture->enabled))
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -125,7 +125,7 @@ $found++;
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("DeStockOnValidateOrder").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if (! empty($conf->commande->enabled))
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -147,7 +147,7 @@ $found++;
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("DeStockOnShipment").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if (! empty($conf->expedition->enabled))
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -167,7 +167,7 @@ $found++;
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("DeStockOnShipmentOnClosing").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if (! empty($conf->expedition->enabled))
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -200,14 +200,14 @@ print '<br>';
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<tr class="liste_titre">';
|
||||
print "<td>".$langs->trans("RuleForStockManagementIncrease")."</td>\n";
|
||||
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '</tr>'."\n";
|
||||
|
||||
$found=0;
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("ReStockOnBill").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if (! empty($conf->fournisseur->enabled))
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -228,7 +228,7 @@ $found++;
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("ReStockOnValidateOrder").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if (! empty($conf->fournisseur->enabled))
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -248,8 +248,8 @@ $found++;
|
||||
if (!empty($conf->reception->enabled))
|
||||
{
|
||||
print '<tr class="oddeven">';
|
||||
print '<td width="60%">'.$langs->trans("StockOnReception").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td>'.$langs->trans("StockOnReception").'</td>';
|
||||
print '<td class="right">';
|
||||
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION');
|
||||
@ -263,8 +263,8 @@ if ($conf->use_javascript_ajax) {
|
||||
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td width="60%">'.$langs->trans("StockOnReceptionOnClosing").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td>'.$langs->trans("StockOnReceptionOnClosing").'</td>';
|
||||
print '<td class="right">';
|
||||
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION_CLOSE');
|
||||
@ -279,7 +279,7 @@ else
|
||||
{
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("ReStockOnDispatchOrder").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if (! empty($conf->fournisseur->enabled))
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -308,16 +308,17 @@ if ($conf->use_javascript_ajax) {
|
||||
print '</table>';
|
||||
|
||||
print '<br>';
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<tr class="liste_titre">';
|
||||
print "<td>".$langs->trans("RuleForStockAvailability")."</td>\n";
|
||||
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '</tr>'."\n";
|
||||
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("WarehouseAllowNegativeTransfer").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_ALLOW_NEGATIVE_TRANSFER');
|
||||
} else {
|
||||
@ -332,7 +333,7 @@ if($conf->invoice->enabled)
|
||||
{
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("StockMustBeEnoughForInvoice").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_INVOICE');
|
||||
} else {
|
||||
@ -347,7 +348,7 @@ if($conf->order->enabled)
|
||||
{
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("StockMustBeEnoughForOrder").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_ORDER');
|
||||
} else {
|
||||
@ -362,7 +363,7 @@ if($conf->expedition->enabled)
|
||||
{
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("StockMustBeEnoughForShipment").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT');
|
||||
} else {
|
||||
@ -386,12 +387,12 @@ if ($virtualdiffersfromphysical)
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<tr class="liste_titre">';
|
||||
print "<td>".$langs->trans("RuleForStockReplenishment")." ".img_help('help', $langs->trans("VirtualDiffersFromPhysical"))."</td>\n";
|
||||
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '</tr>'."\n";
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("UseVirtualStockByDefault").'</td>';
|
||||
print '<td align="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_USE_VIRTUAL_STOCK');
|
||||
} else {
|
||||
@ -409,12 +410,12 @@ print '<table class="noborder" width="100%">';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print "<td>".$langs->trans("Other")."</td>\n";
|
||||
print '<td class="center">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '</tr>'."\n";
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("UserWarehouseAutoCreate").'</td>';
|
||||
print '<td class="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_USERSTOCK_AUTOCREATE');
|
||||
} else {
|
||||
@ -428,7 +429,7 @@ print '<tr class="oddeven">';
|
||||
print '<td>';
|
||||
print $form->textwithpicto($langs->trans("StockSupportServices"), $langs->trans("StockSupportServicesDesc"));
|
||||
print '</td>';
|
||||
print '<td class="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_SUPPORTS_SERVICES');
|
||||
} else {
|
||||
@ -440,7 +441,7 @@ print "</tr>\n";
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("AllowAddLimitStockByWarehouse").'</td>';
|
||||
print '<td class="center">';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE');
|
||||
} else {
|
||||
@ -450,19 +451,6 @@ if ($conf->use_javascript_ajax) {
|
||||
print "</td>\n";
|
||||
print "</tr>\n";
|
||||
|
||||
if (! empty($conf->fournisseur->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) {
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("UseDispatchStatus").'</td>';
|
||||
print '<td class="center">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS);
|
||||
}
|
||||
print "</td>\n</tr>\n";
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
|
||||
print '<br>';
|
||||
@ -471,43 +459,45 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Inventory").'</td>'."\n";
|
||||
print '<td align="center">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '</tr>'."\n";
|
||||
print '<td class="right">'.$langs->trans("Status").'</td>'."\n";
|
||||
print '</tr>'."\n";
|
||||
|
||||
// Example with a yes / no select
|
||||
print '<tr class="oddeven">';
|
||||
/*print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("INVENTORY_DISABLE_VIRTUAL").'</td>';
|
||||
print '<td align="center">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL);
|
||||
}
|
||||
print '<td align="center">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL);
|
||||
}
|
||||
print '</td></tr>';
|
||||
*/
|
||||
|
||||
// Example with a yes / no select
|
||||
print '<tr class="oddeven">';
|
||||
/*print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA").'</td>';
|
||||
print '<td align="center">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA);
|
||||
}
|
||||
print '</td></tr>';
|
||||
print '<td align="center">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA);
|
||||
}
|
||||
print '</td></tr>';
|
||||
*/
|
||||
|
||||
// Example with a yes / no select
|
||||
// Example with a yes / no select
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT").'</td>';
|
||||
print '<td align="center">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT);
|
||||
}
|
||||
print '<td>'.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT").'</td>';
|
||||
print '<td class="right">';
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT);
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
print '</table>';
|
||||
|
||||
@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("admin", "other", "orders"));
|
||||
$langs->loadLangs(array("admin", "other", "orders", "stocks"));
|
||||
|
||||
if (!$user->admin)
|
||||
accessforbidden();
|
||||
@ -494,20 +494,16 @@ print '<td>'.$langs->trans("Parameter").'</td>';
|
||||
print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
|
||||
print '<td width="80"> </td>';
|
||||
print "</tr>\n";
|
||||
$var=false;
|
||||
|
||||
//if ($conf->global->MAIN_FEATURES_LEVEL > 0)
|
||||
//{
|
||||
print '<tr class="oddeven"><td>';
|
||||
print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'<br>';
|
||||
print $langs->trans("IfSetToYesDontForgetPermission");
|
||||
print '</td><td>';
|
||||
print '<input type="text" size="6" name="SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED" value="'.$conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED.'">';
|
||||
print '</td><td class="right">';
|
||||
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
|
||||
print "</td></tr>\n";
|
||||
print '<tr class="oddeven"><td>';
|
||||
print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'<br>';
|
||||
print $langs->trans("IfSetToYesDontForgetPermission");
|
||||
print '</td><td>';
|
||||
print '<input type="text" size="6" name="SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED" value="'.$conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED.'">';
|
||||
print '</td><td class="right">';
|
||||
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
|
||||
print "</td></tr>\n";
|
||||
|
||||
//}
|
||||
|
||||
// Ask for payment bank during supplier order
|
||||
/* Kept as hidden for the moment
|
||||
@ -564,6 +560,26 @@ print '</td><td class="right">';
|
||||
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
|
||||
print "</td></tr>\n";
|
||||
|
||||
// Option to add a quality/validation step, on products, after reception.
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("UseDispatchStatus").'</td>';
|
||||
print '<td></td>';
|
||||
print '<td class="center">';
|
||||
if ($conf->reception->enabled)
|
||||
{
|
||||
print '<span class="opacitymedium">'.$langs->trans("FeatureNotAvailableWithReceptionModule").'</span>';
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($conf->use_javascript_ajax) {
|
||||
print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS');
|
||||
} else {
|
||||
$arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
|
||||
print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS);
|
||||
}
|
||||
}
|
||||
print "</td>\n</tr>\n";
|
||||
|
||||
print '</table><br>';
|
||||
|
||||
print '</form>';
|
||||
|
||||
@ -50,10 +50,20 @@ if (! $user->admin)
|
||||
|
||||
if ($action == 'delete')
|
||||
{
|
||||
$file=$conf->admin->dir_output.'/backup/'.basename(GETPOST('urlfile', 'alpha'));
|
||||
$ret=dol_delete_file($file, 1);
|
||||
if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
|
||||
else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
|
||||
if (preg_match('/^backup\//', GETPOST('urlfile', 'alpha')))
|
||||
{
|
||||
$file=$conf->admin->dir_output.'/backup/'.basename(GETPOST('urlfile', 'alpha'));
|
||||
$ret=dol_delete_file($file, 1);
|
||||
if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
|
||||
else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
|
||||
}
|
||||
else
|
||||
{
|
||||
$file=$conf->admin->dir_output.'/documents/'.basename(GETPOST('urlfile', 'alpha'));
|
||||
$ret=dol_delete_file($file, 1);
|
||||
if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
|
||||
else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
|
||||
}
|
||||
$action='';
|
||||
}
|
||||
|
||||
@ -577,7 +587,7 @@ print "\n";
|
||||
|
||||
?>
|
||||
<br>
|
||||
<div class="center"><input type="submit" class="button"
|
||||
<div class="center"><input type="submit" class="button reposition"
|
||||
value="<?php echo $langs->trans("GenerateBackup") ?>" id="buttonGo" /><br>
|
||||
<br>
|
||||
</div>
|
||||
|
||||
@ -112,21 +112,27 @@ $utils = new Utils($db);
|
||||
|
||||
if ($compression == 'zip')
|
||||
{
|
||||
$ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression);
|
||||
$ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression, '/(\.log|\/temp\/|documents\/admin\/documents\/)/');
|
||||
if ($ret < 0)
|
||||
{
|
||||
$errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputfile);
|
||||
$errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputdir);
|
||||
}
|
||||
}
|
||||
elseif (in_array($compression, array('gz', 'bz')))
|
||||
{
|
||||
$file = substr($file, 0, strrpos($file, '.'));
|
||||
$userlogin = ($user->login ? $user->login : 'unknown');
|
||||
|
||||
$outputfile = $conf->admin->dir_temp.'/export_files.'.$userlogin.'.out'; // File used with popen method
|
||||
|
||||
$file = substr($file, 0, strrpos($file, '.'));
|
||||
$file .= '.tar';
|
||||
$cmd = 'tar -cf '.$outputdir."/".$file." --exclude=documents/admin/documents -C ".DOL_DATA_ROOT." ".DOL_DATA_ROOT."/../documents/";
|
||||
exec($cmd, $out, $retval);
|
||||
//var_dump($cmd, DOL_DATA_ROOT);exit;
|
||||
|
||||
if ($retval != 0)
|
||||
// We also exclude '/temp/' dir and 'documents/admin/documents'
|
||||
$cmd = "tar -cf ".$outputdir."/".$file." --exclude-vcs --exclude 'temp' --exclude 'dolibarr.log' --exclude='documents/admin/documents' -C ".dirname(DOL_DATA_ROOT)." ".basename(DOL_DATA_ROOT);
|
||||
|
||||
$result = $utils->executeCLI($cmd, $outputfile);
|
||||
|
||||
$retval = $result['error'];
|
||||
if ($result['result'] || ! empty($retval))
|
||||
{
|
||||
$langs->load("errors");
|
||||
dol_syslog("Documents tar retval after exec=".$retval, LOG_ERR);
|
||||
@ -136,15 +142,17 @@ elseif (in_array($compression, array('gz', 'bz')))
|
||||
{
|
||||
if ($compression == 'gz')
|
||||
{
|
||||
$cmd = "gzip " . $outputdir."/".$file;
|
||||
$cmd = "gzip -f " . $outputdir."/".$file;
|
||||
}
|
||||
if ($compression == 'bz')
|
||||
{
|
||||
$cmd = "bzip2 " . $outputdir."/".$file;
|
||||
$cmd = "bzip2 -f " . $outputdir."/".$file;
|
||||
}
|
||||
|
||||
exec($cmd, $out, $retval);
|
||||
if ($retval != 0)
|
||||
|
||||
$result = $utils->executeCLI($cmd, $outputfile);
|
||||
|
||||
$retval = $result['error'];
|
||||
if ($result['result'] || ! empty($retval))
|
||||
{
|
||||
$errormsg = 'Error '.$compression.' generation return '.$retval;
|
||||
unlink($outputdir."/".$file);
|
||||
|
||||
@ -55,7 +55,7 @@ function bomAdminPrepareHead()
|
||||
//$this->tabs = array(
|
||||
// 'entity:-tabname:Title:@bom:/bom/mypage.php?id=__ID__'
|
||||
//); // to remove a tab
|
||||
complete_head_from_modules($conf, $langs, $object, $head, $h, 'bom');
|
||||
complete_head_from_modules($conf, $langs, null, $head, $h, 'bom');
|
||||
|
||||
return $head;
|
||||
}
|
||||
|
||||
@ -188,10 +188,12 @@ class Categorie extends CommonObject
|
||||
* @var string Color
|
||||
*/
|
||||
public $color;
|
||||
|
||||
/**
|
||||
* @var ???
|
||||
* @var int Id of thirdparty when CATEGORY_ASSIGNED_TO_A_CUSTOMER is set
|
||||
*/
|
||||
public $socid;
|
||||
|
||||
/**
|
||||
* @var string Category type
|
||||
*
|
||||
|
||||
@ -40,7 +40,7 @@ $type = GETPOST('type', 'az09');
|
||||
$action=GETPOST('action', 'aZ09');
|
||||
$confirm = GETPOST('confirm', 'alpha');
|
||||
$removeelem = GETPOST('removeelem', 'int');
|
||||
$elemid = GETPOST('elemid', 'alpha');
|
||||
$elemid = GETPOST('elemid', 'int');
|
||||
|
||||
if ($id == "" && $label == "")
|
||||
{
|
||||
|
||||
@ -221,7 +221,7 @@ if ($action == 'add')
|
||||
}
|
||||
|
||||
// Initialisation objet cactioncomm
|
||||
if (! GETPOST('actioncode') > 0) // actioncode is id
|
||||
if (GETPOSTISSET('actioncode') && ! GETPOST('actioncode', 'aZ09')) // actioncode is '0'
|
||||
{
|
||||
$error++; $donotclearsession=1;
|
||||
$action = 'create';
|
||||
@ -229,7 +229,7 @@ if ($action == 'add')
|
||||
}
|
||||
else
|
||||
{
|
||||
$object->type_code = GETPOST('actioncode');
|
||||
$object->type_code = GETPOST('actioncode', 'aZ09');
|
||||
}
|
||||
|
||||
if (! $error)
|
||||
@ -243,7 +243,7 @@ if ($action == 'add')
|
||||
$object->elementtype = GETPOST("elementtype", 'alpha');
|
||||
if (! GETPOST('label'))
|
||||
{
|
||||
if (GETPOST('actioncode') == 'AC_RDV' && $contact->getFullName($langs))
|
||||
if (GETPOST('actioncode', 'aZ09') == 'AC_RDV' && $contact->getFullName($langs))
|
||||
{
|
||||
$object->label = $langs->transnoentitiesnoconv("TaskRDVWith", $contact->getFullName($langs));
|
||||
}
|
||||
@ -426,15 +426,15 @@ if ($action == 'update')
|
||||
$datep=dol_mktime($fulldayevent?'00':$aphour, $fulldayevent?'00':$apmin, 0, $_POST["apmonth"], $_POST["apday"], $_POST["apyear"]);
|
||||
$datef=dol_mktime($fulldayevent?'23':$p2hour, $fulldayevent?'59':$p2min, $fulldayevent?'59':'0', $_POST["p2month"], $_POST["p2day"], $_POST["p2year"]);
|
||||
|
||||
$object->type_id = dol_getIdFromCode($db, GETPOST("actioncode"), 'c_actioncomm');
|
||||
$object->label = GETPOST("label");
|
||||
$object->type_id = dol_getIdFromCode($db, GETPOST("actioncode", 'aZ09'), 'c_actioncomm');
|
||||
$object->label = GETPOST("label", "alphanohtml");
|
||||
$object->datep = $datep;
|
||||
$object->datef = $datef;
|
||||
$object->percentage = $percentage;
|
||||
$object->priority = GETPOST("priority");
|
||||
$object->priority = GETPOST("priority", "alphanohtml");
|
||||
$object->fulldayevent= GETPOST("fullday")?1:0;
|
||||
$object->location = GETPOST('location');
|
||||
$object->socid = GETPOST("socid");
|
||||
$object->location = GETPOST('location', "alphanohtml");
|
||||
$object->socid = GETPOST("socid", "int");
|
||||
$socpeopleassigned = GETPOST("socpeopleassigned", 'array');
|
||||
$object->socpeopleassigned = array();
|
||||
foreach ($socpeopleassigned as $cid) $object->socpeopleassigned[$cid] = array('id' => $cid);
|
||||
@ -446,8 +446,8 @@ if ($action == 'update')
|
||||
$object->fk_project = GETPOST("projectid", 'int');
|
||||
$object->note = GETPOST("note", "none"); // deprecated
|
||||
$object->note_private= GETPOST("note", "none");
|
||||
$object->fk_element = GETPOST("fk_element");
|
||||
$object->elementtype = GETPOST("elementtype");
|
||||
$object->fk_element = GETPOST("fk_element", "int");
|
||||
$object->elementtype = GETPOST("elementtype", "alphanohtml");
|
||||
|
||||
if (! $datef && $percentage == 100)
|
||||
{
|
||||
@ -491,7 +491,7 @@ if ($action == 'update')
|
||||
}
|
||||
|
||||
// Check parameters
|
||||
if (! GETPOST('actioncode') > 0)
|
||||
if (GETPOSTISSET('actioncode') && ! GETPOST('actioncode', 'aZ09')) // actioncode is '0'
|
||||
{
|
||||
$error++; $donotclearsession=1;
|
||||
$action = 'edit';
|
||||
@ -499,7 +499,7 @@ if ($action == 'update')
|
||||
}
|
||||
else
|
||||
{
|
||||
$result=$cactioncomm->fetch(GETPOST('actioncode'));
|
||||
$result=$cactioncomm->fetch(GETPOST('actioncode', 'aZ09'));
|
||||
}
|
||||
if (empty($object->userownerid))
|
||||
{
|
||||
@ -689,7 +689,7 @@ if ($action == 'create')
|
||||
if ($backtopage) print '<input type="hidden" name="backtopage" value="'.($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"]).'">';
|
||||
if (empty($conf->global->AGENDA_USE_EVENT_TYPE)) print '<input type="hidden" name="actioncode" value="'.dol_getIdFromCode($db, 'AC_OTH', 'c_actioncomm').'">';
|
||||
|
||||
if (GETPOST("actioncode") == 'AC_RDV') print load_fiche_titre($langs->trans("AddActionRendezVous"), '', 'title_agenda');
|
||||
if (GETPOST("actioncode", 'aZ09') == 'AC_RDV') print load_fiche_titre($langs->trans("AddActionRendezVous"), '', 'title_agenda');
|
||||
else print load_fiche_titre($langs->trans("AddAnAction"), '', 'title_agenda');
|
||||
|
||||
dol_fiche_head();
|
||||
@ -701,7 +701,7 @@ if ($action == 'create')
|
||||
{
|
||||
print '<tr><td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans("Type").'</span></b></td><td>';
|
||||
$default=(empty($conf->global->AGENDA_USE_EVENT_TYPE_DEFAULT)?'':$conf->global->AGENDA_USE_EVENT_TYPE_DEFAULT);
|
||||
$formactions->select_type_actions(GETPOST("actioncode")?GETPOST("actioncode"):($object->type_code?$object->type_code:$default), "actioncode", "systemauto", 0, -1);
|
||||
$formactions->select_type_actions(GETPOST("actioncode", 'aZ09')?GETPOST("actioncode", 'aZ09'):($object->type_code?$object->type_code:$default), "actioncode", "systemauto", 0, -1);
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
@ -731,7 +731,7 @@ if ($action == 'create')
|
||||
{
|
||||
$datef=dol_time_plus_duree($datep, $conf->global->AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS, 'h');
|
||||
}
|
||||
print '<tr><td><span id="dateend"'.(GETPOST("actioncode") == 'AC_RDV'?' class="fieldrequired"':'').'>'.$langs->trans("DateActionEnd").'</span></td><td>';
|
||||
print '<tr><td><span id="dateend"'.(GETPOST("actioncode", 'aZ09') == 'AC_RDV'?' class="fieldrequired"':'').'>'.$langs->trans("DateActionEnd").'</span></td><td>';
|
||||
if (GETPOST("afaire") == 1) {
|
||||
print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
|
||||
} elseif (GETPOST("afaire") == 2) {
|
||||
@ -1010,15 +1010,15 @@ if ($id > 0)
|
||||
$datep=dol_mktime($fulldayevent?'00':$aphour, $fulldayevent?'00':$apmin, 0, $_POST["apmonth"], $_POST["apday"], $_POST["apyear"]);
|
||||
$datef=dol_mktime($fulldayevent?'23':$p2hour, $fulldayevent?'59':$p2min, $fulldayevent?'59':'0', $_POST["p2month"], $_POST["p2day"], $_POST["p2year"]);
|
||||
|
||||
$object->type_id = dol_getIdFromCode($db, GETPOST("actioncode"), 'c_actioncomm');
|
||||
$object->label = GETPOST("label");
|
||||
$object->type_id = dol_getIdFromCode($db, GETPOST("actioncode", 'aZ09'), 'c_actioncomm');
|
||||
$object->label = GETPOST("label", "alphanohtml");
|
||||
$object->datep = $datep;
|
||||
$object->datef = $datef;
|
||||
$object->percentage = $percentage;
|
||||
$object->priority = GETPOST("priority");
|
||||
$object->priority = GETPOST("priority", "alphanohtml");
|
||||
$object->fulldayevent= GETPOST("fullday")?1:0;
|
||||
$object->location = GETPOST('location');
|
||||
$object->socid = GETPOST("socid");
|
||||
$object->location = GETPOST('location', "alpanohtml");
|
||||
$object->socid = GETPOST("socid", "int");
|
||||
$socpeopleassigned = GETPOST("socpeopleassigned", 'array');
|
||||
foreach ($socpeopleassigned as $tmpid) $object->socpeopleassigned[$id] = array('id' => $tmpid);
|
||||
$object->contactid = GETPOST("contactid", 'int');
|
||||
@ -1101,7 +1101,7 @@ if ($id > 0)
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("Type").'</td><td colspan="3">';
|
||||
if ($object->type_code != 'AC_OTH_AUTO')
|
||||
{
|
||||
$formactions->select_type_actions(GETPOST("actioncode")?GETPOST("actioncode"):$object->type_code, "actioncode", "systemauto");
|
||||
$formactions->select_type_actions(GETPOST("actioncode", 'aZ09')?GETPOST("actioncode", 'aZ09'):$object->type_code, "actioncode", "systemauto");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -84,7 +84,7 @@ class CActionComm
|
||||
$sql = "SELECT id, code, type, libelle as label, color, active, picto";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."c_actioncomm";
|
||||
if (is_numeric($id)) $sql.= " WHERE id=".$id;
|
||||
else $sql.= " WHERE code='".$id."'";
|
||||
else $sql.= " WHERE code='".$this->db->escape($id)."'";
|
||||
|
||||
dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
|
||||
$resql=$this->db->query($sql);
|
||||
|
||||
@ -452,6 +452,7 @@ if ($resql)
|
||||
if (! empty($arrayfields['owner']['checked'])) print '<td class="liste_titre"></td>';
|
||||
if (! empty($arrayfields['c.libelle']['checked'])) print '<td class="liste_titre"></td>';
|
||||
if (! empty($arrayfields['a.label']['checked'])) print '<td class="liste_titre"><input type="text" class="maxwidth75" name="search_title" value="'.$search_title.'"></td>';
|
||||
if (! empty($arrayfields['a.note']['checked'])) print '<td class="liste_titre"><input type="text" class="maxwidth75" name="search_note" value="'.$search_note.'"></td>';
|
||||
if (! empty($arrayfields['a.datep']['checked'])) {
|
||||
print '<td class="liste_titre nowraponall" align="center">';
|
||||
print $form->selectDate($datestart, 'datestart', 0, 0, 1, '', 1, 0);
|
||||
|
||||
@ -835,7 +835,7 @@ else
|
||||
{
|
||||
// EMailing feature may be a spam problem, so when you host several users/instance, having this option may force each user to use their own SMTP agent.
|
||||
// You ensure that every user is using its own SMTP server when using the mass emailing module.
|
||||
$linktoadminemailbefore='<a href="'.DOL_URL_ROOT.'/admin/mails.php">';
|
||||
$linktoadminemailbefore='<a href="'.DOL_URL_ROOT.'/admin/mails_emailing.php">';
|
||||
$linktoadminemailend='</a>';
|
||||
setEventMessages($langs->trans("MailSendSetupIs", $listofmethods[$sendingmode]), null, 'warnings');
|
||||
setEventMessages($langs->trans("MailSendSetupIs2", $linktoadminemailbefore, $linktoadminemailend, $langs->transnoentitiesnoconv("MAIN_MAIL_SENDMODE"), $listofmethods['smtps']), null, 'warnings');
|
||||
|
||||
@ -335,15 +335,15 @@ class Mailing extends CommonObject
|
||||
|
||||
$target_array=array();
|
||||
|
||||
$sql = "SELECT fk_contact, ";
|
||||
$sql.=" lastname, ";
|
||||
$sql.=" firstname,";
|
||||
$sql.=" email,";
|
||||
$sql.=" other,";
|
||||
$sql.=" source_url,";
|
||||
$sql.=" source_id ,";
|
||||
$sql.=" source_type ";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."mailing_cibles ";
|
||||
$sql = "SELECT fk_contact,";
|
||||
$sql.= " lastname,";
|
||||
$sql.= " firstname,";
|
||||
$sql.= " email,";
|
||||
$sql.= " other,";
|
||||
$sql.= " source_url,";
|
||||
$sql.= " source_id ,";
|
||||
$sql.= " source_type";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."mailing_cibles";
|
||||
$sql.= " WHERE fk_mailing = ".$fromid;
|
||||
|
||||
$result=$this->db->query($sql);
|
||||
@ -353,14 +353,16 @@ class Mailing extends CommonObject
|
||||
{
|
||||
while ($obj = $this->db->fetch_object($result)) {
|
||||
|
||||
$target_array[]=array('fk_contact'=>$obj->fk_contact,
|
||||
'lastname'=>$obj->lastname,
|
||||
'firstname'=>$obj->firstname,
|
||||
'email'=>$obj->email,
|
||||
'other'=>$obj->other,
|
||||
'source_url'=>$obj->source_url,
|
||||
'source_id'=>$obj->source_id,
|
||||
'source_type'=>$obj->source_type);
|
||||
$target_array[]=array(
|
||||
'fk_contact'=>$obj->fk_contact,
|
||||
'lastname'=>$obj->lastname,
|
||||
'firstname'=>$obj->firstname,
|
||||
'email'=>$obj->email,
|
||||
'other'=>$obj->other,
|
||||
'source_url'=>$obj->source_url,
|
||||
'source_id'=>$obj->source_id,
|
||||
'source_type'=>$obj->source_type
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2500,7 +2500,7 @@ $formquestion = array_merge($formquestion, array(
|
||||
if ($usercansend) {
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=presend&mode=init#formmailbeforetitle">' . $langs->trans('SendMail') . '</a></div>';
|
||||
} else
|
||||
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans('SendMail') . '</a></div>';
|
||||
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">' . $langs->trans('SendMail') . '</a></div>';
|
||||
}
|
||||
|
||||
// Create an order
|
||||
@ -2538,7 +2538,14 @@ $formquestion = array_merge($formquestion, array(
|
||||
$arrayofinvoiceforpropal = $object->getInvoiceArrayList();
|
||||
if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED))
|
||||
{
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=classifybilled&socid=' . $object->socid . '">' . $langs->trans("ClassifyBilled") . '</a></div>';
|
||||
if ($usercanclose)
|
||||
{
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=classifybilled&socid=' . $object->socid . '">' . $langs->trans("ClassifyBilled") . '</a></div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">' . $langs->trans("ClassifyBilled") . '</a></div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -81,8 +81,8 @@ if (count($linkedObjectBlock) > 1)
|
||||
<tr class="liste_total <?php echo (empty($noMoreLinkedObjectBlockAfter)?'liste_sub_total':''); ?>">
|
||||
<td><?php echo $langs->trans("Total"); ?></td>
|
||||
<td></td>
|
||||
<td align="center"></td>
|
||||
<td align="center"></td>
|
||||
<td class="center"></td>
|
||||
<td class="center"></td>
|
||||
<td class="right"><?php echo price($total); ?></td>
|
||||
<td class="right"></td>
|
||||
<td class="right"></td>
|
||||
|
||||
@ -264,12 +264,12 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
|
||||
$paiement = -1*$socialcontribstatic->getSommePaiement(); // Payment already done
|
||||
}
|
||||
|
||||
$parameters = array('obj' => $obj);
|
||||
$parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'payment' => $paiement);
|
||||
$reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
if(empty($reshook)){
|
||||
$ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : '';
|
||||
$refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : '';
|
||||
$paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : 0;
|
||||
$ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref;
|
||||
$refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp;
|
||||
$paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement;
|
||||
}
|
||||
|
||||
$total_ttc = $obj->total_ttc;
|
||||
|
||||
@ -156,8 +156,6 @@ $title=$langs->trans("LT".$object->ltt) . " - " . $langs->trans("Card");
|
||||
$help_url='';
|
||||
llxHeader("", $title, $helpurl);
|
||||
|
||||
|
||||
|
||||
if ($action == 'create')
|
||||
{
|
||||
print load_fiche_titre($langs->transcountry($lttype==2?"newLT2Payment":"newLT1Payment", $mysoc->country_code));
|
||||
|
||||
@ -85,6 +85,12 @@ $socid = GETPOST('socid', 'int');
|
||||
if ($user->societe_id) $socid=$user->societe_id;
|
||||
$result = restrictedArea($user, 'tax', '', '', 'charges');
|
||||
|
||||
if (empty($local))
|
||||
{
|
||||
accessforbidden('Parameter localTaxType is missing');
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
@ -106,11 +112,12 @@ llxHeader('', '', '', '', 0, 0, '', '', $morequerystring);
|
||||
|
||||
$name=$langs->transcountry($local==1?"LT1ReportByCustomers":"LT2ReportByCustomers", $mysoc->country_code);
|
||||
|
||||
$fsearch.='<br>';
|
||||
$fsearch.=' <input type="hidden" name="year" value="'.$year.'">';
|
||||
$fsearch.=' <input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
$fsearch.=' '.$langs->trans("SalesTurnoverMinimum").': ';
|
||||
$fsearch.=' <input type="text" name="min" id="min" value="'.$min.'" size="6">';
|
||||
$fsearch ='<!-- hidden fields for form -->';
|
||||
$fsearch.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
$fsearch.='<input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
$fsearch.='<input type="hidden" name="localTaxType" value="'.$local.'">';
|
||||
$fsearch.=$langs->trans("SalesTurnoverMinimum").': ';
|
||||
$fsearch.='<input type="text" name="min" id="min" value="'.$min.'" size="6">';
|
||||
|
||||
$calc=$conf->global->MAIN_INFO_LOCALTAX_CALC.$local;
|
||||
// Affiche en-tete du rapport
|
||||
|
||||
@ -188,6 +188,19 @@ function pt($db, $sql, $date)
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($localTaxType))
|
||||
{
|
||||
accessforbidden('Parameter localTaxType is missing');
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
// None
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
@ -213,7 +226,11 @@ if($localTaxType==1) {
|
||||
$CalcLT= $conf->global->MAIN_INFO_LOCALTAX_CALC2;
|
||||
}
|
||||
|
||||
$fsearch.=' <input type="hidden" name="localTaxType" value="'.$localTaxType.'">';
|
||||
$fsearch = '<!-- hidden fields for form -->';
|
||||
$fsearch.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
$fsearch.= '<input type="hidden" name="localTaxType" value="'.$localTaxType.'">';
|
||||
$fsearch.= '<input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
|
||||
$description = $fsearch;
|
||||
|
||||
// Show report header
|
||||
@ -528,7 +545,7 @@ while ((($y < $yend) || ($y == $yend && $m <= $mend)) && $mcursor < 1000) // $mc
|
||||
$total = $total + $diff;
|
||||
$subtotal = price2num($subtotal + $diff, 'MT');
|
||||
|
||||
print '<td class="nowrap right">'.price(price2num($diff, 'MT')).'</td>\n';
|
||||
print '<td class="nowrap right">'.price(price2num($diff, 'MT')).'</td>'."\n";
|
||||
print "<td> </td>\n";
|
||||
print "</tr>\n";
|
||||
|
||||
|
||||
@ -97,6 +97,12 @@ $socid = GETPOST('socid', 'int');
|
||||
if ($user->societe_id) $socid=$user->societe_id;
|
||||
$result = restrictedArea($user, 'tax', '', '', 'charges');
|
||||
|
||||
if (empty($local))
|
||||
{
|
||||
accessforbidden('Parameter localTaxType is missing');
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
@ -122,9 +128,10 @@ foreach ($listofparams as $param)
|
||||
|
||||
llxHeader('', $langs->trans("LocalTaxReport"), '', '', 0, 0, '', '', $morequerystring);
|
||||
|
||||
$fsearch.=' <input type="hidden" name="year" value="'.$year.'">';
|
||||
$fsearch.=' <input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
$fsearch.=' <input type="hidden" name="localTaxType" value="'.$local.'">';
|
||||
$fsearch = '<!-- hidden fields for form -->';
|
||||
$fsearch.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
$fsearch.= '<input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
$fsearch.= '<input type="hidden" name="localTaxType" value="'.$local.'">';
|
||||
|
||||
$name=$langs->transcountry($local==1?"LT1ReportByQuarters":"LT2ReportByQuarters", $mysoc->country_code);
|
||||
$calcmode='';
|
||||
@ -161,7 +168,7 @@ if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||
$description.='<br>'.$langs->trans("DepositsAreNotIncluded");
|
||||
}
|
||||
*/
|
||||
if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) $description.='<br>'.$langs->trans("ThisIsAnEstimatedValue");
|
||||
if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) $description.=$langs->trans("ThisIsAnEstimatedValue");
|
||||
|
||||
// Customers invoices
|
||||
$elementcust=$langs->trans("CustomersInvoices");
|
||||
@ -186,15 +193,14 @@ if ($mysoc->tva_assuj) {
|
||||
|
||||
report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode);
|
||||
|
||||
|
||||
if($local==1){
|
||||
$vatcust=$langs->transcountry("LocalTax1", $mysoc->country_code);
|
||||
$vatsup=$langs->transcountry("LocalTax1", $mysoc->country_code);
|
||||
$vatexpensereport=$langs->transcountry("LocalTax1", $mysoc->country_code);
|
||||
$vatcust=$langs->transcountry("LT1", $mysoc->country_code);
|
||||
$vatsup=$langs->transcountry("LT1", $mysoc->country_code);
|
||||
$vatexpensereport=$langs->transcountry("LT1", $mysoc->country_code);
|
||||
}else{
|
||||
$vatcust=$langs->transcountry("LocalTax2", $mysoc->country_code);
|
||||
$vatsup=$langs->transcountry("LocalTax2", $mysoc->country_code);
|
||||
$vatexpensereport=$langs->transcountry("LocalTax2", $mysoc->country_code);
|
||||
$vatcust=$langs->transcountry("LT2", $mysoc->country_code);
|
||||
$vatsup=$langs->transcountry("LT2", $mysoc->country_code);
|
||||
$vatexpensereport=$langs->transcountry("LT2", $mysoc->country_code);
|
||||
}
|
||||
|
||||
// VAT Received and paid
|
||||
|
||||
@ -239,6 +239,23 @@ if ($id > 0 || $ref)
|
||||
dol_fiche_end();
|
||||
|
||||
|
||||
$formconfirm = '';
|
||||
|
||||
// Confirmation to delete
|
||||
if ($action == 'delete')
|
||||
{
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('Delete'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 1);
|
||||
}
|
||||
|
||||
// Call Hook formConfirm
|
||||
/*$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
|
||||
elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;*/
|
||||
|
||||
// Print form confirm
|
||||
print $formconfirm;
|
||||
|
||||
|
||||
if (empty($object->date_trans) && $user->rights->prelevement->bons->send && $action=='settransmitted')
|
||||
{
|
||||
@ -298,7 +315,7 @@ if ($id > 0 || $ref)
|
||||
print "<a class=\"butAction\" href=\"card.php?action=setcredited&id=".$object->id."\">".$langs->trans("ClassCredited")."</a>";
|
||||
}
|
||||
|
||||
print "<a class=\"butActionDelete\" href=\"card.php?action=confirm_delete&id=".$object->id."\">".$langs->trans("Delete")."</a>";
|
||||
print "<a class=\"butActionDelete\" href=\"card.php?action=delete&id=".$object->id."\">".$langs->trans("Delete")."</a>";
|
||||
|
||||
print "</div>";
|
||||
}
|
||||
@ -356,8 +373,6 @@ if ($id > 0 || $ref)
|
||||
print_liste_field_titre('');
|
||||
print "</tr>\n";
|
||||
|
||||
$var=false;
|
||||
|
||||
$total = 0;
|
||||
|
||||
while ($i < min($num, $conf->liste_limit))
|
||||
@ -406,7 +421,10 @@ if ($id > 0 || $ref)
|
||||
print '<td>'.$langs->trans("Total").'</td>';
|
||||
print '<td> </td>';
|
||||
print '<td class="right">';
|
||||
if ($total != $object->amount) print img_warning("AmountOfFileDiffersFromSumOfInvoices");
|
||||
if (empty($offset) && $num <= $limit) // If we have all record on same page, then the following test/warning can be done
|
||||
{
|
||||
if ($total != $object->amount) print img_warning("TotalAmountOfdirectDebitOrderDiffersFromSumOfLines");
|
||||
}
|
||||
print price($total);
|
||||
print "</td>\n";
|
||||
print '<td> </td>';
|
||||
|
||||
@ -739,14 +739,16 @@ class BonPrelevement extends CommonObject
|
||||
$sql = "SELECT count(f.rowid) as nb";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
|
||||
$sql.= ", ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
|
||||
$sql.= " WHERE f.fk_statut = 1";
|
||||
$sql.= " AND f.entity IN (".getEntity('invoice').")";
|
||||
$sql.= " WHERE f.entity IN (".getEntity('invoice').")";
|
||||
if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
|
||||
{
|
||||
$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
|
||||
}
|
||||
$sql.= " AND f.rowid = pfd.fk_facture";
|
||||
$sql.= " AND f.paye = 0";
|
||||
$sql.= " AND pfd.traite = 0";
|
||||
$sql.= " AND f.total_ttc > 0";
|
||||
|
||||
dol_syslog(get_class($this)."::SommeAPrelever");
|
||||
dol_syslog(get_class($this)."::NbFactureAPrelever");
|
||||
$resql = $this->db->query($sql);
|
||||
|
||||
if ( $resql )
|
||||
@ -759,7 +761,7 @@ class BonPrelevement extends CommonObject
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=get_class($this)."::SommeAPrelever Erreur -1 sql=".$this->db->error();
|
||||
$this->error=get_class($this)."::NbFactureAPrelever Erreur -1 sql=".$this->db->error();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -1630,8 +1632,8 @@ class BonPrelevement extends CommonObject
|
||||
public static function buildRumNumber($row_code_client, $row_datec, $row_drum)
|
||||
{
|
||||
global $langs;
|
||||
$pre = $langs->trans('RUM').'-';
|
||||
return $pre.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec);
|
||||
$pre = substr(dol_string_nospecial(dol_string_unaccent($langs->transnoentitiesnoconv('RUM'))), 0, 3); // Must always be on 3 char ('RUM' or 'UMR'. This is a protection against bad translation)
|
||||
return $pre.'-'.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec);
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
|
||||
@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/prelevement.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('banks', 'categories', 'widthdrawals', 'companies', 'bills'));
|
||||
$langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies', 'bills'));
|
||||
|
||||
// Security check
|
||||
if ($user->societe_id) $socid=$user->societe_id;
|
||||
@ -105,6 +105,7 @@ if (empty($reshook))
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$thirdpartystatic=new Societe($db);
|
||||
@ -206,9 +207,14 @@ $sql.= " ".MAIN_DB_PREFIX."societe as s,";
|
||||
$sql.= " ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
|
||||
$sql.= " WHERE s.rowid = f.fk_soc";
|
||||
$sql.= " AND f.entity IN (".getEntity('invoice').")";
|
||||
if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
|
||||
{
|
||||
$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
|
||||
}
|
||||
$sql.= " AND f.total_ttc > 0";
|
||||
$sql.= " AND pfd.traite = 0";
|
||||
$sql.= " AND pfd.fk_facture = f.rowid";
|
||||
if ($socid) $sql.= " AND f.fk_soc = ".$socid;
|
||||
if ($socid > 0) $sql.= " AND f.fk_soc = ".$socid;
|
||||
|
||||
$nbtotalofrecords = '';
|
||||
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
|
||||
@ -292,7 +298,7 @@ if ($resql)
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
else print '<tr '.$bc[0].'><td colspan="5" class="opacitymedium">'.$langs->trans("None").'</td></tr>';
|
||||
else print '<tr class="oddeven"><td colspan="5" class="opacitymedium">'.$langs->trans("None").'</td></tr>';
|
||||
print "</table>";
|
||||
print "</form>";
|
||||
print "<br>\n";
|
||||
|
||||
@ -35,31 +35,43 @@ $langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies'));
|
||||
|
||||
// Security check
|
||||
$socid = GETPOST('socid', 'int');
|
||||
$status = GETPOST('status', 'int');
|
||||
if ($user->societe_id) $socid=$user->societe_id;
|
||||
$result = restrictedArea($user, 'prelevement', '', '', 'bons');
|
||||
|
||||
// Get supervariables
|
||||
$page = GETPOST('page', 'int');
|
||||
$sortorder = GETPOST('sortorder', 'alpha');
|
||||
$sortfield = GETPOST('sortfield', 'alpha');
|
||||
$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectlist'; // To manage different context of search
|
||||
$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page
|
||||
$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
|
||||
|
||||
// Load variable for pagination
|
||||
$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit;
|
||||
$sortfield = GETPOST("sortfield", 'alpha');
|
||||
$sortorder = GETPOST("sortorder", 'alpha');
|
||||
$page = GETPOST("page", 'int');
|
||||
if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1
|
||||
if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action
|
||||
$offset = $limit * $page;
|
||||
$pageprev = $page - 1;
|
||||
$pagenext = $page + 1;
|
||||
if (! $sortorder) $sortorder="DESC";
|
||||
if (! $sortfield) $sortfield="f.ref";
|
||||
|
||||
$massactionbutton = '';
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
llxHeader();
|
||||
if (!$status)
|
||||
{
|
||||
$title = $langs->trans("RequestStandingOrderToTreat");
|
||||
}
|
||||
else
|
||||
{
|
||||
$title = $langs->trans("RequestStandingOrderTreated");
|
||||
}
|
||||
|
||||
llxHeader('', $title);
|
||||
|
||||
$thirdpartystatic=new Societe($db);
|
||||
$invoicestatic=new Facture($db);
|
||||
@ -78,95 +90,129 @@ $sql.= " WHERE s.rowid = f.fk_soc";
|
||||
$sql.= " AND f.entity IN (".getEntity('invoice').")";
|
||||
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($socid) $sql.= " AND f.fk_soc = ".$socid;
|
||||
if (!$statut) $sql.= " AND pfd.traite = 0";
|
||||
if ($statut) $sql.= " AND pfd.traite = ".$statut;
|
||||
if (!$status) $sql.= " AND pfd.traite = 0";
|
||||
if ($status) $sql.= " AND pfd.traite = ".$status;
|
||||
$sql.= " AND f.total_ttc > 0";
|
||||
if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
|
||||
{
|
||||
$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
|
||||
}
|
||||
$sql.= " AND pfd.fk_facture = f.rowid";
|
||||
if (dol_strlen(trim(GETPOST('search_societe', 'alpha'))))
|
||||
{
|
||||
$sql.= natural_search("s.nom", 'search_societe');
|
||||
}
|
||||
$sql.= " ORDER BY $sortfield $sortorder ";
|
||||
$sql.= $db->plimit($limit+1, $offset);
|
||||
$sql.=$db->order($sortfield, $sortorder);
|
||||
|
||||
$resql=$db->query($sql);
|
||||
if ($resql)
|
||||
|
||||
// Count total nb of records
|
||||
$nbtotalofrecords = '';
|
||||
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
|
||||
{
|
||||
$num = $db->num_rows($resql);
|
||||
$i = 0;
|
||||
|
||||
if (!$statut)
|
||||
$resql = $db->query($sql);
|
||||
$nbtotalofrecords = $db->num_rows($resql);
|
||||
if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0
|
||||
{
|
||||
print_barre_liste($langs->trans("RequestStandingOrderToTreat"), $page, "demandes.php", $urladd, $sortfield, $sortorder, '', $num);
|
||||
$page = 0;
|
||||
$offset = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
print_barre_liste($langs->trans("RequestStandingOrderTreated"), $page, "demandes.php", $urladd, $sortfield, $sortorder, '', $num);
|
||||
}
|
||||
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="GET">';
|
||||
|
||||
print '<table class="liste" width="100%">';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre("Bill", $_SERVER["PHP_SELF"]);
|
||||
print_liste_field_titre("Company", $_SERVER["PHP_SELF"]);
|
||||
print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "", "", $param, 'class="right"');
|
||||
print_liste_field_titre("DateRequest", $_SERVER["PHP_SELF"], "", "", $param, 'class="center"');
|
||||
print_liste_field_titre('');
|
||||
print '</tr>';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_facture" size="12" value="'.dol_escape_htmltag(GETPOST('search_facture', 'alpha')).'"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_societe" size="18" value="'.dol_escape_htmltag(GETPOST('search_societe', 'alpha')).'"></td>';
|
||||
print '<td class="liste_titre"></td>';
|
||||
print '<td class="liste_titre"></td>';
|
||||
// Action column
|
||||
print '<td class="liste_titre" class="middle">';
|
||||
$searchpicto=$form->showFilterAndCheckAddButtons($massactionbutton?1:0, 'checkforselect', 1);
|
||||
print $searchpicto;
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
$users = array();
|
||||
|
||||
while ($i < min($num, $limit))
|
||||
{
|
||||
$obj = $db->fetch_object($resql);
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
// Ref facture
|
||||
print '<td>';
|
||||
$invoicestatic->id=$obj->rowid;
|
||||
$invoicestatic->ref=$obj->ref;
|
||||
print $invoicestatic->getNomUrl(1, 'withdraw');
|
||||
print '</td>';
|
||||
|
||||
print '<td>';
|
||||
$thirdpartystatic->id=$obj->socid;
|
||||
$thirdpartystatic->name=$obj->name;
|
||||
print $thirdpartystatic->getNomUrl(1, 'customer');
|
||||
print '</td>';
|
||||
|
||||
print '<td class="right">'.price($obj->total_ttc).'</td>';
|
||||
|
||||
print '<td class="center">'.dol_print_date($db->jdate($obj->date_demande), 'day').'</td>';
|
||||
|
||||
print '<td class="right"></td>';
|
||||
|
||||
print '</tr>';
|
||||
$i++;
|
||||
}
|
||||
|
||||
print "</table><br>";
|
||||
|
||||
print '</form>';
|
||||
}
|
||||
// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set.
|
||||
if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords)
|
||||
{
|
||||
$num = $nbtotalofrecords;
|
||||
}
|
||||
else
|
||||
{
|
||||
dol_print_error($db);
|
||||
$sql.= $db->plimit($limit+1, $offset);
|
||||
|
||||
$resql=$db->query($sql);
|
||||
if (! $resql)
|
||||
{
|
||||
dol_print_error($db);
|
||||
exit;
|
||||
}
|
||||
|
||||
$num = $db->num_rows($resql);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$newcardbutton = '<a href="'.DOL_URL_ROOT.'/compta/prelevement/index.php">'.$langs->trans("Back").'</a>';
|
||||
|
||||
print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_generic', 0, $newcardbutton, '', $limit);
|
||||
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||
print '<input type="hidden" name="action" value="list">';
|
||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||
print '<input type="hidden" name="page" value="'.$page.'">';
|
||||
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
|
||||
|
||||
|
||||
print '<table class="liste" width="100%">';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre("Bill", $_SERVER["PHP_SELF"]);
|
||||
print_liste_field_titre("Company", $_SERVER["PHP_SELF"]);
|
||||
print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "", "", $param, 'class="right"');
|
||||
print_liste_field_titre("DateRequest", $_SERVER["PHP_SELF"], "", "", $param, 'class="center"');
|
||||
print_liste_field_titre('');
|
||||
print '</tr>';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_facture" size="12" value="'.dol_escape_htmltag(GETPOST('search_facture', 'alpha')).'"></td>';
|
||||
print '<td class="liste_titre"><input type="text" class="flat" name="search_societe" size="18" value="'.dol_escape_htmltag(GETPOST('search_societe', 'alpha')).'"></td>';
|
||||
print '<td class="liste_titre"></td>';
|
||||
print '<td class="liste_titre"></td>';
|
||||
// Action column
|
||||
print '<td class="liste_titre" class="middle">';
|
||||
$searchpicto=$form->showFilterAndCheckAddButtons($massactionbutton?1:0, 'checkforselect', 1);
|
||||
print $searchpicto;
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
$users = array();
|
||||
|
||||
$i = 0;
|
||||
while ($i < min($num, $limit))
|
||||
{
|
||||
$obj = $db->fetch_object($resql);
|
||||
if (empty($obj)) break; // Should not happen
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
// Ref facture
|
||||
print '<td>';
|
||||
$invoicestatic->id=$obj->rowid;
|
||||
$invoicestatic->ref=$obj->ref;
|
||||
print $invoicestatic->getNomUrl(1, 'withdraw');
|
||||
print '</td>';
|
||||
|
||||
print '<td>';
|
||||
$thirdpartystatic->id=$obj->socid;
|
||||
$thirdpartystatic->name=$obj->name;
|
||||
print $thirdpartystatic->getNomUrl(1, 'customer');
|
||||
print '</td>';
|
||||
|
||||
print '<td class="right">'.price($obj->total_ttc).'</td>';
|
||||
|
||||
print '<td class="center">'.dol_print_date($db->jdate($obj->date_demande), 'day').'</td>';
|
||||
|
||||
print '<td class="right"></td>';
|
||||
|
||||
print '</tr>';
|
||||
$i++;
|
||||
}
|
||||
|
||||
print "</table><br>";
|
||||
|
||||
print '</form>';
|
||||
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
$db->close();
|
||||
|
||||
@ -71,6 +71,7 @@ $thirdpartystatic=new Societe($db);
|
||||
$invoicestatic=new Facture($db);
|
||||
$bprev = new BonPrelevement($db);
|
||||
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("Statistics").'</th></tr>';
|
||||
|
||||
@ -100,6 +101,11 @@ if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX
|
||||
$sql.= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
|
||||
$sql.= " WHERE s.rowid = f.fk_soc";
|
||||
$sql.= " AND f.entity IN (".getEntity('invoice').")";
|
||||
$sql.= " AND f.total_ttc > 0";
|
||||
if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS))
|
||||
{
|
||||
$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED;
|
||||
}
|
||||
$sql.= " AND pfd.traite = 0 AND pfd.fk_facture = f.rowid";
|
||||
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
|
||||
if ($socid) $sql.= " AND f.fk_soc = ".$socid;
|
||||
|
||||
@ -123,11 +123,11 @@ if (isset($_REQUEST['extra_report']) && $_REQUEST['extra_report'] == 1) {
|
||||
|
||||
llxHeader('', $langs->trans("VATReport"), '', '', 0, 0, '', '', $morequerystring);
|
||||
|
||||
$fsearch.='<br>';
|
||||
$fsearch.=' <input type="hidden" name="year" value="'.$year.'">';
|
||||
$fsearch.=' <input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
$fsearch.=' '.$langs->trans("SalesTurnoverMinimum").': ';
|
||||
$fsearch.=' <input type="text" name="min" id="min" value="'.$min.'" size="6">';
|
||||
$fsearch ='<!-- hidden fields for form -->';
|
||||
$fsearch.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
$fsearch.='<input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
$fsearch.=$langs->trans("SalesTurnoverMinimum").': ';
|
||||
$fsearch.='<input type="text" name="min" id="min" value="'.$min.'" size="6">';
|
||||
|
||||
// Show report header
|
||||
$name=$langs->trans("VATReportByThirdParties");
|
||||
|
||||
@ -198,7 +198,11 @@ $form=new Form($db);
|
||||
$company_static=new Societe($db);
|
||||
$tva = new Tva($db);
|
||||
|
||||
$description = '';
|
||||
$fsearch ='<!-- hidden fields for form -->';
|
||||
$fsearch.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
$fsearch.='<input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
|
||||
$description = $fsearch;
|
||||
|
||||
// Show report header
|
||||
$name = $langs->trans("ReportByMonth");
|
||||
@ -208,7 +212,7 @@ if ($modetax == 1) $calcmode=$langs->trans('OptionVATDebitOption');
|
||||
if ($modetax == 2) $calcmode=$langs->trans('OptionPaymentForProductAndServices');
|
||||
$calcmode.='<br>('.$langs->trans("TaxModuleSetupToModifyRules", DOL_URL_ROOT.'/admin/taxes.php').')';
|
||||
|
||||
$description = $langs->trans("VATSummary").'<br>';
|
||||
$description .= $langs->trans("VATSummary").'<br>';
|
||||
if ($conf->global->TAX_MODE_SELL_PRODUCT == 'invoice') $description.=$langs->trans("RulesVATDueProducts");
|
||||
if ($conf->global->TAX_MODE_SELL_PRODUCT == 'payment') $description.=$langs->trans("RulesVATInProducts");
|
||||
if ($conf->global->TAX_MODE_SELL_SERVICE == 'invoice') $description.='<br>'.$langs->trans("RulesVATDueServices");
|
||||
|
||||
@ -122,8 +122,9 @@ llxHeader('', $langs->trans("VATReport"), '', '', 0, 0, '', '', $morequerystring
|
||||
//print load_fiche_titre($langs->trans("VAT"),"");
|
||||
|
||||
//$fsearch.='<br>';
|
||||
$fsearch.=' <input type="hidden" name="year" value="'.$year.'">';
|
||||
$fsearch.=' <input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
$fsearch ='<!-- hidden fields for form -->';
|
||||
$fsearch.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
$fsearch.='<input type="hidden" name="modetax" value="'.$modetax.'">';
|
||||
//$fsearch.=' '.$langs->trans("SalesTurnoverMinimum").': ';
|
||||
//$fsearch.=' <input type="text" name="min" value="'.$min.'">';
|
||||
|
||||
|
||||
@ -81,26 +81,11 @@ class Contact extends CommonObject
|
||||
|
||||
public $civility_id; // In fact we store civility_code
|
||||
public $civility_code;
|
||||
public $civility;
|
||||
public $civility;
|
||||
public $address;
|
||||
public $zip;
|
||||
public $town;
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @see $state_id
|
||||
*/
|
||||
public $fk_departement;
|
||||
/**
|
||||
* @deprecated
|
||||
* @see $state_code
|
||||
*/
|
||||
public $departement_code;
|
||||
/**
|
||||
* @deprecated
|
||||
* @see $state
|
||||
*/
|
||||
public $departement;
|
||||
public $state_id; // Id of department
|
||||
public $state_code; // Code of department
|
||||
public $state; // Label of department
|
||||
|
||||
@ -80,12 +80,12 @@ if ($action == 'dolibarr2ldap')
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses"));
|
||||
|
||||
llxHeader('', $title, 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Módulo_Empresas');
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$head = contact_prepare_head($object);
|
||||
|
||||
dol_fiche_head($head, 'ldap', $title, -1, 'contact');
|
||||
|
||||
@ -433,7 +433,7 @@ if (empty($reshook))
|
||||
}
|
||||
|
||||
$qty = GETPOST('qty'.$predef);
|
||||
$remise_percent = GETPOST('remise_percent'.$predef);
|
||||
$remise_percent = ((GETPOST('remise_percent'.$predef) != '') ? GETPOST('remise_percent'.$predef) : 0);
|
||||
|
||||
if ($qty == '')
|
||||
{
|
||||
@ -566,7 +566,8 @@ if (empty($reshook))
|
||||
$info_bits=0;
|
||||
if ($tva_npr) $info_bits |= 0x01;
|
||||
|
||||
if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& ($price_min && (price2num($pu_ht)*(1-price2num($remise_percent)/100) < price2num($price_min))))
|
||||
if (((! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance))
|
||||
|| empty($conf->global->MAIN_USE_ADVANCED_PERMS) ) && ($price_min && (price2num($pu_ht)*(1-price2num($remise_percent)/100) < price2num($price_min))))
|
||||
{
|
||||
$object->error = $langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, -1, $conf->currency));
|
||||
$result = -1 ;
|
||||
|
||||
@ -173,7 +173,7 @@ class box_activity extends ModeleBoxes
|
||||
$totalnb += $data[$j]->nb;
|
||||
|
||||
$this->info_box_contents[$line][3] = array(
|
||||
'td' => 'class="right"',
|
||||
'td' => 'class="nowrap right"',
|
||||
'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency),
|
||||
);
|
||||
$this->info_box_contents[$line][4] = array(
|
||||
@ -256,7 +256,7 @@ class box_activity extends ModeleBoxes
|
||||
$totalnb += $data[$j]->nb;
|
||||
|
||||
$this->info_box_contents[$line][3] = array(
|
||||
'td' => 'class="right"',
|
||||
'td' => 'class="nowrap right"',
|
||||
'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency),
|
||||
);
|
||||
$this->info_box_contents[$line][4] = array(
|
||||
@ -340,7 +340,7 @@ class box_activity extends ModeleBoxes
|
||||
);
|
||||
|
||||
$this->info_box_contents[$line][3] = array(
|
||||
'td' => 'class="right"',
|
||||
'td' => 'class="nowrap right"',
|
||||
'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency)
|
||||
);
|
||||
|
||||
|
||||
@ -134,7 +134,7 @@ class box_comptes extends ModeleBoxes
|
||||
);
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="right"',
|
||||
'td' => 'class="right nowraponall"',
|
||||
'text' => price($solde, 0, $langs, 0, -1, -1, $objp->currency_code)
|
||||
);
|
||||
|
||||
|
||||
@ -179,12 +179,12 @@ class box_produits_alerte_stock extends ModeleBoxes
|
||||
}
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="right"',
|
||||
'td' => 'class="right nowraponall"',
|
||||
'text' => $price,
|
||||
);
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="nowrap"',
|
||||
'td' => 'class="right"',
|
||||
'text' => $price_base_type,
|
||||
);
|
||||
|
||||
|
||||
@ -135,7 +135,7 @@ class box_supplier_orders extends ModeleBoxes
|
||||
);
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="right"',
|
||||
'td' => 'class="right nowrap"',
|
||||
'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency),
|
||||
);
|
||||
|
||||
|
||||
@ -497,8 +497,16 @@ abstract class CommonDocGenerator
|
||||
$resarray['object_total_up'] = $totalUp;
|
||||
$resarray['object_total_up_locale'] = price($resarray['object_total_up'], 0, $outputlangs);
|
||||
if (method_exists($object, 'getTotalDiscount')) {
|
||||
$resarray['object_total_discount'] = round(100 / $totalUp * $object->getTotalDiscount(), 2);
|
||||
$totalDiscount=$object->getTotalDiscount();
|
||||
} else {
|
||||
$totalDiscount=0;
|
||||
}
|
||||
if (!empty($totalUp) && !empty($totalDiscount)) {
|
||||
$resarray['object_total_discount'] = round(100 / $totalUp * $totalDiscount, 2);
|
||||
$resarray['object_total_discount_locale'] = price($resarray['object_total_discount'], 0, $outputlangs);
|
||||
} else {
|
||||
$resarray['object_total_discount']='';
|
||||
$resarray['object_total_discount_locale']='';
|
||||
}
|
||||
}
|
||||
|
||||
@ -766,10 +774,20 @@ abstract class CommonDocGenerator
|
||||
//Add value to store price with currency
|
||||
$array_to_fill=array_merge($array_to_fill, array($array_key.'_options_'.$key.'_currency' => $object->array_options['options_'.$key.'_currency']));
|
||||
}
|
||||
elseif($extrafields->attribute_type[$key] == 'select' || $extrafields->attribute_type[$key] == 'checkbox')
|
||||
elseif($extrafields->attribute_type[$key] == 'select')
|
||||
{
|
||||
$object->array_options['options_'.$key] = $extrafields->attribute_param[$key]['options'][$object->array_options['options_'.$key]];
|
||||
}
|
||||
elseif($extrafields->attribute_type[$key] == 'checkbox') {
|
||||
$valArray=explode(',', $object->array_options['options_'.$key]);
|
||||
$output=array();
|
||||
foreach($extrafields->attribute_param[$key]['options'] as $keyopt=>$valopt) {
|
||||
if (in_array($keyopt, $valArray)) {
|
||||
$output[]=$valopt;
|
||||
}
|
||||
}
|
||||
$object->array_options['options_'.$key] = implode(', ', $output);
|
||||
}
|
||||
elseif($extrafields->attribute_type[$key] == 'date')
|
||||
{
|
||||
if (strlen($object->array_options['options_'.$key])>0)
|
||||
|
||||
@ -6450,9 +6450,12 @@ abstract class CommonObject
|
||||
}
|
||||
else
|
||||
{
|
||||
$csstyle='';
|
||||
$class=(!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : '');
|
||||
$csstyle='';
|
||||
if (is_array($params) && count($params)>0) {
|
||||
if (array_key_exists('class', $params)) {
|
||||
$class.=$params['class'].' ';
|
||||
}
|
||||
if (array_key_exists('style', $params)) {
|
||||
$csstyle=$params['style'];
|
||||
}
|
||||
@ -6489,16 +6492,19 @@ abstract class CommonObject
|
||||
|
||||
$labeltoshow = $langs->trans($label);
|
||||
|
||||
$out .= '<td class="titlefield';
|
||||
if (GETPOST('action', 'none') == 'create') $out.='create';
|
||||
$out .= '<td class="';
|
||||
//$out .= "titlefield";
|
||||
//if (GETPOST('action', 'none') == 'create') $out.='create';
|
||||
if ($mode != 'view' && ! empty($extrafields->attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired';
|
||||
$out .= '">';
|
||||
if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]);
|
||||
if (! empty($extrafields->attributes[$this->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$this->table_element]['help'][$key]);
|
||||
else $out .= $labeltoshow;
|
||||
$out .= '</td>';
|
||||
|
||||
$html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : '';
|
||||
|
||||
$out .='<td id="'.$html_id.'" class="'.$this->element.'_extras_'.$key.'" '.($colspan?' colspan="'.$colspan.'"':'').'>';
|
||||
//$out .='<td id="'.$html_id.'" class="'.$this->element.'_extras_'.$key.'">';
|
||||
|
||||
switch($mode) {
|
||||
case "view":
|
||||
@ -6511,6 +6517,11 @@ abstract class CommonObject
|
||||
|
||||
$out .= '</td>';
|
||||
|
||||
/*for($ii = 0; $ii < ($colspan - 1); $ii++)
|
||||
{
|
||||
$out .='<td class="'.$this->element.'_extras_'.$key.'"></td>';
|
||||
}*/
|
||||
|
||||
if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && (($e % 2) == 1)) $out .= '</tr>';
|
||||
else $out .= '</tr>';
|
||||
$e++;
|
||||
|
||||
@ -1152,9 +1152,8 @@ class Form
|
||||
$sql .= ", dictp.code as country_code";
|
||||
}
|
||||
|
||||
$sql.= " FROM (".MAIN_DB_PREFIX ."societe as s";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX ."societe as s";
|
||||
if (!$user->rights->societe->client->voir && !$user->socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||
$sql.= " )";
|
||||
if ($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST) {
|
||||
$sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."c_country as dictp ON dictp.rowid=s.fk_pays";
|
||||
}
|
||||
@ -1903,6 +1902,15 @@ class Form
|
||||
$price_level = (! empty($price_level) ? $price_level : 0);
|
||||
if (is_null($ajaxoptions)) $ajaxoptions=array();
|
||||
|
||||
if(strval($filtertype) === '' && (!empty($conf->product->enabled) || !empty($conf->service->enabled))){
|
||||
if(!empty($conf->product->enabled) && empty($conf->service->enabled)){
|
||||
$filtertype = '0';
|
||||
}
|
||||
elseif(empty($conf->product->enabled) && !empty($conf->service->enabled)){
|
||||
$filtertype = '1';
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT))
|
||||
{
|
||||
$placeholder='';
|
||||
@ -4229,7 +4237,7 @@ class Form
|
||||
$formconfirm.= '<td class="valid">';
|
||||
$formconfirm.= $this->selectyesno("confirm", $newselectedchoice);
|
||||
$formconfirm.= '</td>';
|
||||
$formconfirm.= '<td class="valid center"><input class="button valignmiddle" type="submit" onclick="this.disabled=\'disabled\' value="'.$langs->trans("Validate").'"></td>';
|
||||
$formconfirm.= '<td class="valid center"><input class="button valignmiddle" type="submit" value="'.$langs->trans("Validate").'"></td>';
|
||||
$formconfirm.= '</tr>'."\n";
|
||||
|
||||
$formconfirm.= '</table>'."\n";
|
||||
|
||||
@ -1381,7 +1381,7 @@ class FormFile
|
||||
if (! empty($conf->dol_use_jmobile)) $useajax=0;
|
||||
if (empty($conf->use_javascript_ajax)) $useajax=0;
|
||||
if (! empty($conf->global->MAIN_ECM_DISABLE_JS)) $useajax=0;
|
||||
print '<a href="'.((($useinecm && $useinecm != 6) && $useajax)?'#':($url.'?action=delete&urlfile='.urlencode($filepath).$param)).'" class="deletefilelink" rel="'.$filepath.'">'.img_delete().'</a>';
|
||||
print '<a href="'.((($useinecm && $useinecm != 6) && $useajax)?'#':($url.'?action=delete&urlfile='.urlencode($filepath).$param)).'" class="reposition deletefilelink" rel="'.$filepath.'">'.img_delete().'</a>';
|
||||
}
|
||||
print "</td>";
|
||||
|
||||
|
||||
@ -316,27 +316,29 @@ class Utils
|
||||
// TODO Replace with executeCLI function
|
||||
if ($execmethod == 1)
|
||||
{
|
||||
exec($fullcommandclear, $readt, $retval);
|
||||
$result = $retval;
|
||||
$output_arr = array(); $retval = null;
|
||||
exec($fullcommandclear, $output_arr, $retval);
|
||||
|
||||
if ($retval != 0)
|
||||
{
|
||||
$langs->load("errors");
|
||||
dol_syslog("Datadump retval after exec=".$retval, LOG_ERR);
|
||||
$error = 'Error '.$retval;
|
||||
$errormsg = 'Error '.$retval;
|
||||
$ok=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$i=0;
|
||||
if (!empty($readt))
|
||||
foreach($readt as $key=>$read)
|
||||
if (!empty($output_arr))
|
||||
{
|
||||
$i++; // output line number
|
||||
if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue;
|
||||
fwrite($handle, $read.($execmethod == 2 ? '' : "\n"));
|
||||
if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1;
|
||||
elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1;
|
||||
foreach($output_arr as $key => $read)
|
||||
{
|
||||
$i++; // output line number
|
||||
if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue;
|
||||
fwrite($handle, $read.($execmethod == 2 ? '' : "\n"));
|
||||
if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1;
|
||||
elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -534,6 +536,7 @@ class Utils
|
||||
|
||||
if ($execmethod == 1)
|
||||
{
|
||||
$retval = null;
|
||||
exec($command, $output_arr, $retval);
|
||||
$result = $retval;
|
||||
if ($retval != 0)
|
||||
@ -545,7 +548,6 @@ class Utils
|
||||
}
|
||||
if ($execmethod == 2) // With this method, there is no way to get the return code, only output
|
||||
{
|
||||
$ok=0;
|
||||
$handle = fopen($outputfile, 'w+b');
|
||||
if ($handle)
|
||||
{
|
||||
|
||||
@ -1221,9 +1221,12 @@ function dol_delete_file($file, $disableglob = 0, $nophperrors = 0, $nohook = 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
else dol_syslog("Failed to remove file ".$filename, LOG_WARNING);
|
||||
// TODO Failure to remove can be because file was already removed or because of permission
|
||||
// If error because it does not exists, we should return true, and we should return false if this is a permission problem
|
||||
else
|
||||
{
|
||||
dol_syslog("Failed to remove file ".$filename, LOG_WARNING);
|
||||
// TODO Failure to remove can be because file was already removed or because of permission
|
||||
// If error because it does not exists, we should return true, and we should return false if this is a permission problem
|
||||
}
|
||||
}
|
||||
}
|
||||
else dol_syslog("No files to delete found", LOG_DEBUG);
|
||||
@ -2062,9 +2065,10 @@ function dol_uncompress($inputfile, $outputdir)
|
||||
* @param string $inputdir Source dir name
|
||||
* @param string $outputfile Target file name (output directory must exists and be writable)
|
||||
* @param string $mode 'zip'
|
||||
* @param string $excludefiles A regex pattern. For example: '/\.log$|\/temp\//'
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
|
||||
function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '')
|
||||
{
|
||||
$foundhandler=0;
|
||||
|
||||
@ -2095,6 +2099,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
|
||||
return 1;
|
||||
}
|
||||
else*/
|
||||
//if (class_exists('ZipArchive') && ! empty($conf->global->MAIN_USE_ZIPARCHIVE_FOR_ZIP_COMPRESS))
|
||||
if (class_exists('ZipArchive'))
|
||||
{
|
||||
$foundhandler=1;
|
||||
@ -2102,6 +2107,13 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
|
||||
// Initialize archive object
|
||||
$zip = new ZipArchive();
|
||||
$result = $zip->open($outputfile, ZipArchive::CREATE | ZipArchive::OVERWRITE);
|
||||
if (! $result)
|
||||
{
|
||||
global $langs, $errormsg;
|
||||
$langs->load("errors");
|
||||
$errormsg=$langs->trans("ErrorFailedToWriteInFile", $outputfile);
|
||||
return -4;
|
||||
}
|
||||
|
||||
// Create recursive directory iterator
|
||||
/** @var SplFileInfo[] $files */
|
||||
@ -2118,9 +2130,11 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip")
|
||||
// Get real and relative path for current file
|
||||
$filePath = $file->getRealPath();
|
||||
$relativePath = substr($filePath, strlen($inputdir) + 1);
|
||||
|
||||
// Add current file to archive
|
||||
$zip->addFile($filePath, $relativePath);
|
||||
if (empty($excludefiles) || ! preg_match($excludefiles, $filePath))
|
||||
{
|
||||
// Add current file to archive
|
||||
$zip->addFile($filePath, $relativePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -796,8 +796,10 @@ function dol_size($size, $type = '')
|
||||
*/
|
||||
function dol_sanitizeFileName($str, $newstr = '_', $unaccent = 1)
|
||||
{
|
||||
// List of special chars for filenames are defined on page https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
|
||||
$filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°');
|
||||
// List of special chars for filenames in windows are defined on page https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
|
||||
// Char '>' '<' '|' '$' and ';' are special chars for shells.
|
||||
// Char '/' and '\' are file delimiters.
|
||||
$filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°', '$', ';');
|
||||
return dol_string_nospecial($unaccent?dol_string_unaccent($str):$str, $newstr, $filesystem_forbidden_chars);
|
||||
}
|
||||
|
||||
@ -922,11 +924,15 @@ function dol_escape_js($stringtoescape, $mode = 0, $noescapebackslashn = 0)
|
||||
* @param string $stringtoescape String to escape
|
||||
* @param int $keepb 1=Preserve b tags (otherwise, remove them)
|
||||
* @param int $keepn 1=Preserve \r\n strings (otherwise, replace them with escaped value). Set to 1 when escaping for a <textarea>.
|
||||
* @param string $keepmoretags '' or 'common' or list of tags
|
||||
* @return string Escaped string
|
||||
* @see dol_string_nohtmltag(), dol_string_nospecial(), dol_string_unaccent()
|
||||
*/
|
||||
function dol_escape_htmltag($stringtoescape, $keepb = 0, $keepn = 0)
|
||||
function dol_escape_htmltag($stringtoescape, $keepb = 0, $keepn = 0, $keepmoretags = '')
|
||||
{
|
||||
if ($keepmoretags == 'common') $keepmoretags = 'html,body,a,em,i,u,ul,li,br,div,img,font,p,span,strong,table,tr,td,th,tbody';
|
||||
// TODO Implement $keepmoretags
|
||||
|
||||
// escape quotes and backslashes, newlines, etc.
|
||||
$tmp=html_entity_decode($stringtoescape, ENT_COMPAT, 'UTF-8'); // TODO Use htmlspecialchars_decode instead, that make only required change for html tags
|
||||
if (! $keepb) $tmp=strtr($tmp, array("<b>"=>'','</b>'=>''));
|
||||
@ -5528,7 +5534,7 @@ function dol_nl2br($stringtoencode, $nl2brmode = 0, $forxml = false)
|
||||
|
||||
/**
|
||||
* This function is called to encode a string into a HTML string but differs from htmlentities because
|
||||
* a detection is done before to see if text is already HTML or not. Also, all entities but &,<,> are converted.
|
||||
* a detection is done before to see if text is already HTML or not. Also, all entities but &,<,>," are converted.
|
||||
* This permits to encode special chars to entities with no double encoding for already encoded HTML strings.
|
||||
* This function also remove last EOL or BR if $removelasteolbr=1 (default).
|
||||
* For PDF usage, you can show text by 2 ways:
|
||||
|
||||
@ -124,7 +124,7 @@ function show_ldap_test_button($butlabel, $testlabel, $key, $dn, $objectclass)
|
||||
}
|
||||
else
|
||||
{
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action='.$testlabel.'">'.$butlabel.'</a>';
|
||||
print '<a class="butAction reposition" href="'.$_SERVER["PHP_SELF"].'?action='.$testlabel.'">'.$butlabel.'</a>';
|
||||
}
|
||||
print '<br><br>';
|
||||
}
|
||||
|
||||
@ -124,7 +124,7 @@ function tax_by_thirdparty($type, $db, $y, $date_start, $date_end, $modetax, $di
|
||||
$invoicefieldref='ref';
|
||||
}
|
||||
|
||||
if ( strpos($type, 'localtax') === 0 ) {
|
||||
if (strpos($type, 'localtax') === 0) {
|
||||
$f_rate = $type . '_tx';
|
||||
} else {
|
||||
$f_rate = 'tva_tx';
|
||||
|
||||
@ -88,7 +88,6 @@ class mailing_advthirdparties extends MailingTargets
|
||||
|
||||
dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found", LOG_DEBUG);
|
||||
|
||||
$old = '';
|
||||
while ($i < $num)
|
||||
{
|
||||
$obj = $this->db->fetch_object($result);
|
||||
@ -144,7 +143,6 @@ class mailing_advthirdparties extends MailingTargets
|
||||
|
||||
dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found");
|
||||
|
||||
$old = '';
|
||||
while ($i < $num)
|
||||
{
|
||||
$obj = $this->db->fetch_object($result);
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* \defgroup debugbar Debug bar
|
||||
* \defgroup debugbar Module Debug bar
|
||||
* \brief debugbar module descriptor.
|
||||
*
|
||||
* \file htdocs/core/modules/modDebugBar.class.php
|
||||
|
||||
@ -58,7 +58,7 @@ class modReception extends DolibarrModules
|
||||
// Data directories to create when module is enabled
|
||||
$this->dirs = array("/reception/receipt",
|
||||
"/reception/receipt/temp",
|
||||
"/doctemplates/reception"
|
||||
"/doctemplates/receptions"
|
||||
);
|
||||
|
||||
// Config pages
|
||||
|
||||
@ -121,15 +121,7 @@ class pdf_squille extends ModelePdfReception
|
||||
// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
|
||||
if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
|
||||
|
||||
$outputlangs->load("main");
|
||||
$outputlangs->load("dict");
|
||||
$outputlangs->load("companies");
|
||||
$outputlangs->load("bills");
|
||||
$outputlangs->load("products");
|
||||
$outputlangs->load("propal");
|
||||
$outputlangs->load("deliveries");
|
||||
$outputlangs->load("receptions");
|
||||
$outputlangs->load("productbatch");
|
||||
$outputlangs->loadLangs(array("main","dict","companies","bills","products","propal","deliveries","receptions","productbatch","sendings"));
|
||||
|
||||
$nblignes = count($object->lines);
|
||||
|
||||
|
||||
@ -375,7 +375,7 @@ if ($nolinesbefore) {
|
||||
{
|
||||
$coldisplay++;
|
||||
?>
|
||||
<td class="nobottom linecolresupplier"><input id="fourn_ref" name="fourn_ref" class="flat maxwidth75" value="<?php echo (isset($_POST["fourn_ref"])?GETPOST("fourn_ref", 'alpha', 2):''); ?>"></td>
|
||||
<td class="nobottom linecolresupplier"><input id="fourn_ref" name="fourn_ref" class="flat minwidth50 maxwidth150" value="<?php echo (isset($_POST["fourn_ref"])?GETPOST("fourn_ref", 'alpha', 2):''); ?>"></td>
|
||||
<?php } ?>
|
||||
|
||||
<td class="nobottom linecolvat right"><?php
|
||||
|
||||
@ -140,7 +140,7 @@ $coldisplay=0;
|
||||
{
|
||||
$coldisplay++;
|
||||
?>
|
||||
<td class="right"><input id="fourn_ref" name="fourn_ref" class="flat minwidth75" value="<?php echo ($line->ref_supplier ? $line->ref_supplier : $line->ref_fourn); ?>"></td>
|
||||
<td class="right"><input id="fourn_ref" name="fourn_ref" class="flat minwidth50 maxwidth150" value="<?php echo ($line->ref_supplier ? $line->ref_supplier : $line->ref_fourn); ?>"></td>
|
||||
<?php
|
||||
}
|
||||
|
||||
@ -261,7 +261,7 @@ $coldisplay=0;
|
||||
//Line extrafield
|
||||
if (!empty($extrafieldsline))
|
||||
{
|
||||
print $line->showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var],'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1);
|
||||
print $line->showOptionals($extrafieldsline, 'edit', array('class'=>'tredited', 'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1);
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
@ -621,7 +621,10 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
}
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error="ErrorLDAP ".$ldap->error;
|
||||
if ($result <= 0)
|
||||
{
|
||||
$this->errors[]="ErrorLDAP ".$ldap->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($action == 'MEMBER_NEW_PASSWORD')
|
||||
@ -644,7 +647,10 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
$result=$ldap->update($dn, $info, $user, $olddn);
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error="ErrorLDAP ".$ldap->error;
|
||||
if ($result <= 0)
|
||||
{
|
||||
$this->errors[] = "ErrorLDAP ".$ldap->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -668,7 +674,10 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
$result=$ldap->update($dn, $info, $user, $olddn);
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error="ErrorLDAP ".$ldap->error;
|
||||
if ($result <= 0)
|
||||
{
|
||||
$this->errors[] = "ErrorLDAP ".$ldap->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -721,7 +730,10 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
}
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error="ErrorLDAP ".$ldap->error;
|
||||
if ($result <= 0)
|
||||
{
|
||||
$this->errors[] = "ErrorLDAP ".$ldap->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -747,7 +759,10 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
$result=$ldap->add($dn, $info, $user);
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error="ErrorLDAP ".$ldap->error;
|
||||
if ($result <= 0)
|
||||
{
|
||||
$this->errors[] = "ErrorLDAP ".$ldap->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($action == 'MEMBER_TYPE_MODIFY')
|
||||
@ -788,7 +803,9 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
$result=$ldap->update($dn, $info, $user, $olddn);
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error="ErrorLDAP ".$ldap->error;
|
||||
if ($result <= 0) {
|
||||
$this->errors[] = "ErrorLDAP ".$ldap->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($action == 'MEMBER_TYPE_DELETE')
|
||||
@ -807,7 +824,10 @@ class InterfaceLdapsynchro extends DolibarrTriggers
|
||||
$result=$ldap->delete($dn);
|
||||
}
|
||||
|
||||
if ($result < 0) $this->error="ErrorLDAP ".$ldap->error;
|
||||
if ($result <= 0)
|
||||
{
|
||||
$this->errors[] = "ErrorLDAP ".$ldap->error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -49,6 +49,7 @@ if (empty($keyforcontent) && empty($conf->global->EXTERNALSITE_URL))
|
||||
llxHeader();
|
||||
print '<div class="error">'.$langs->trans('ExternalSiteModuleNotComplete').'</div>';
|
||||
llxFooter();
|
||||
exit;
|
||||
}
|
||||
|
||||
if (! empty($keyforcontent))
|
||||
|
||||
@ -1822,10 +1822,9 @@ class CommandeFournisseur extends CommonOrder
|
||||
$error++;
|
||||
}
|
||||
|
||||
// Si module stock gere et que incrementation faite depuis un dispatching en stock
|
||||
// If module stock is enabled and the stock increase is done on purchase order dispatching
|
||||
if (! $error && $entrepot > 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER))
|
||||
{
|
||||
|
||||
$mouv = new MouvementStock($this->db);
|
||||
if ($product > 0)
|
||||
{
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/commoninvoice.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||
|
||||
/**
|
||||
* Class to manage suppliers invoices
|
||||
|
||||
@ -2338,7 +2338,7 @@ elseif (! empty($object->id))
|
||||
}*/
|
||||
|
||||
// Modify
|
||||
if ($object->statut == 1)
|
||||
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
|
||||
{
|
||||
if ($user->rights->fournisseur->commande->commander)
|
||||
{
|
||||
@ -2347,7 +2347,7 @@ elseif (! empty($object->id))
|
||||
}
|
||||
|
||||
// Approve
|
||||
if ($object->statut == 1)
|
||||
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
|
||||
{
|
||||
if ($user->rights->fournisseur->commande->approuver)
|
||||
{
|
||||
@ -2369,7 +2369,7 @@ elseif (! empty($object->id))
|
||||
// Second approval (if option SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED is set)
|
||||
if (! empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) && $conf->global->MAIN_FEATURES_LEVEL > 0 && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED)
|
||||
{
|
||||
if ($object->statut == 1)
|
||||
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
|
||||
{
|
||||
if ($user->rights->fournisseur->commande->approve2)
|
||||
{
|
||||
@ -2390,7 +2390,7 @@ elseif (! empty($object->id))
|
||||
}
|
||||
|
||||
// Refuse
|
||||
if ($object->statut == 1)
|
||||
if ($object->statut == CommandeFournisseur::STATUS_VALIDATED)
|
||||
{
|
||||
if ($user->rights->fournisseur->commande->approuver || $user->rights->fournisseur->commande->approve2)
|
||||
{
|
||||
@ -2403,7 +2403,7 @@ elseif (! empty($object->id))
|
||||
}
|
||||
|
||||
// Send
|
||||
if (in_array($object->statut, array(2, 3, 4, 5)))
|
||||
if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED, 3, 4, 5)))
|
||||
{
|
||||
if ($user->rights->fournisseur->commande->commander)
|
||||
{
|
||||
@ -2412,7 +2412,7 @@ elseif (! empty($object->id))
|
||||
}
|
||||
|
||||
// Reopen
|
||||
if (in_array($object->statut, array(2)))
|
||||
if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED)))
|
||||
{
|
||||
$buttonshown=0;
|
||||
if (! $buttonshown && $user->rights->fournisseur->commande->approuver)
|
||||
@ -2454,7 +2454,7 @@ elseif (! empty($object->id))
|
||||
}
|
||||
}
|
||||
|
||||
if ($object->statut == 2)
|
||||
if ($object->statut == CommandeFournisseur::STATUS_ACCEPTED)
|
||||
{
|
||||
if ($user->rights->fournisseur->commande->commander)
|
||||
{
|
||||
@ -2466,6 +2466,15 @@ elseif (! empty($object->id))
|
||||
}
|
||||
}
|
||||
|
||||
// Classify received (this does not record reception)
|
||||
if ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)
|
||||
{
|
||||
if ($user->rights->fournisseur->commande->receptionner)
|
||||
{
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifyreception#classifyreception">'.$langs->trans("ClassifyReception").'</a></div>';
|
||||
}
|
||||
}
|
||||
|
||||
// Create bill
|
||||
//if (! empty($conf->facture->enabled))
|
||||
//{
|
||||
@ -2583,38 +2592,41 @@ elseif (! empty($object->id))
|
||||
|
||||
print '</div><div class="fichehalfright"><div class="ficheaddleft">';
|
||||
|
||||
if ($user->rights->fournisseur->commande->receptionner && ($object->statut == 3 || $object->statut == 4))
|
||||
if ($action == 'classifyreception')
|
||||
{
|
||||
// Set status to received (action=livraison)
|
||||
print '<!-- form to record supplier order received -->'."\n";
|
||||
print '<form action="card.php?id='.$object->id.'" method="post">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="livraison">';
|
||||
print load_fiche_titre($langs->trans("Receive"), '', '');
|
||||
if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY))
|
||||
{
|
||||
// Set status to received (action=livraison)
|
||||
print '<!-- form to record purchase order received -->'."\n";
|
||||
print '<form id="classifyreception" action="card.php?id='.$object->id.'" method="post">';
|
||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||
print '<input type="hidden" name="action" value="livraison">';
|
||||
print load_fiche_titre($langs->trans("Receive"), '', '');
|
||||
|
||||
print '<table class="noborder centpercent">';
|
||||
//print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Receive").'</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("DeliveryDate").'</td><td>';
|
||||
$datepreselected = dol_now();
|
||||
print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1);
|
||||
print "</td></tr>\n";
|
||||
print '<table class="noborder centpercent">';
|
||||
//print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Receive").'</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("DeliveryDate").'</td><td>';
|
||||
$datepreselected = dol_now();
|
||||
print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1);
|
||||
print "</td></tr>\n";
|
||||
|
||||
print "<tr><td class=\"fieldrequired\">".$langs->trans("Delivery")."</td><td>\n";
|
||||
$liv = array();
|
||||
$liv[''] = ' ';
|
||||
$liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected");
|
||||
$liv['par'] = $langs->trans("PartialWoman");
|
||||
$liv['nev'] = $langs->trans("NeverReceived");
|
||||
$liv['can'] = $langs->trans("Canceled");
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("Delivery")."</td><td>\n";
|
||||
$liv = array();
|
||||
$liv[''] = ' ';
|
||||
$liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected");
|
||||
$liv['par'] = $langs->trans("PartialWoman");
|
||||
$liv['nev'] = $langs->trans("NeverReceived");
|
||||
$liv['can'] = $langs->trans("Canceled");
|
||||
|
||||
print $form->selectarray("type", $liv);
|
||||
print $form->selectarray("type", $liv);
|
||||
|
||||
print '</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("Comment").'</td><td><input size="40" type="text" name="comment"></td></tr>';
|
||||
print '<tr><td class="center" colspan="2"><input type="submit" class="button" value="'.$langs->trans("Receive").'"></td></tr>';
|
||||
print "</table>\n";
|
||||
print "</form>\n";
|
||||
print "<br>";
|
||||
print '</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("Comment").'</td><td><input size="40" type="text" name="comment"></td></tr>';
|
||||
print '<tr><td class="center" colspan="2"><input type="submit" class="button" value="'.$langs->trans("Receive").'"></td></tr>';
|
||||
print "</table>\n";
|
||||
print "</form>\n";
|
||||
print "<br>";
|
||||
}
|
||||
}
|
||||
|
||||
// List of actions on element
|
||||
|
||||
@ -883,8 +883,16 @@ if ($id > 0 || ! empty($ref)) {
|
||||
print '<td></td>';
|
||||
print '<td>' . $langs->trans("Warehouse") . '</td>';
|
||||
print '<td>' . $langs->trans("Comment") . '</td>';
|
||||
if (! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS) || !empty($conf->reception->enabled))
|
||||
|
||||
// Status
|
||||
if (! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS) && empty($reception->rowid)) {
|
||||
print '<td class="center" colspan="2">' . $langs->trans("Status") . '</td>';
|
||||
}
|
||||
elseif(!empty($conf->reception->enabled)) {
|
||||
print '<td class="center"></td>';
|
||||
}
|
||||
|
||||
print '<td class="center"></td>';
|
||||
|
||||
print "</tr>\n";
|
||||
|
||||
@ -969,17 +977,15 @@ if ($id > 0 || ! empty($ref)) {
|
||||
}
|
||||
}
|
||||
print '</td>';
|
||||
}elseif(!empty($conf->reception->enabled)){
|
||||
} elseif(!empty($conf->reception->enabled)) {
|
||||
print '<td class="right">';
|
||||
if(!empty($reception->id)){
|
||||
print $reception->getLibStatut(5);
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
print '</td>';
|
||||
print '<td class="center">';
|
||||
print '</td>';
|
||||
|
||||
|
||||
print '<td class="center"></td>';
|
||||
|
||||
print "</tr>\n";
|
||||
|
||||
|
||||
@ -55,13 +55,6 @@ $langs->load("holiday");
|
||||
|
||||
$childids = $user->getAllChildIds(1);
|
||||
|
||||
$cancreate = 0;
|
||||
if (! empty($user->rights->holiday->write_all)) $cancreate=1;
|
||||
if (! empty($user->rights->holiday->write) && in_array($fuserid, $childids)) $cancreate=1;
|
||||
|
||||
$candelete = 0;
|
||||
if (! empty($user->rights->holiday->delete)) $candelete=1;
|
||||
|
||||
$morefilter = 'AND employee = 1';
|
||||
if (! empty($conf->global->HOLIDAY_FOR_NON_SALARIES_TOO)) $morefilter = '';
|
||||
|
||||
@ -82,6 +75,13 @@ if ($id > 0)
|
||||
}
|
||||
}
|
||||
|
||||
$cancreate = 0;
|
||||
if (! empty($user->rights->holiday->write_all)) $cancreate=1;
|
||||
if (! empty($user->rights->holiday->write) && in_array($fuserid, $childids)) $cancreate=1;
|
||||
|
||||
$candelete = 0;
|
||||
if (! empty($user->rights->holiday->delete)) $candelete=1;
|
||||
if ($object->statut == Holiday::STATUS_DRAFT && $user->rights->holiday->write && in_array($object->fk_user, $childids)) $candelete=1;
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@ -122,7 +122,7 @@ if ($action == 'create')
|
||||
elseif ($starthalfday == 'afternoon') $halfday=-1;
|
||||
elseif ($endhalfday == 'morning') $halfday=1;
|
||||
|
||||
$valideur = GETPOST('valideur');
|
||||
$valideur = GETPOST('valideur', 'int');
|
||||
$description = trim(GETPOST('description'));
|
||||
|
||||
// If no type
|
||||
@ -270,8 +270,8 @@ if ($action == 'update' && ! GETPOSTISSET('savevalidator'))
|
||||
// If this is the requestor or has read/write rights
|
||||
if ($cancreate)
|
||||
{
|
||||
$valideur = $_POST['valideur'];
|
||||
$description = trim($_POST['description']);
|
||||
$valideur = GETPOST('valideur', 'int');
|
||||
$description = trim(GETPOST('description', 'none'));
|
||||
|
||||
// If no start date
|
||||
if (empty($_POST['date_debut_'])) {
|
||||
@ -1297,7 +1297,8 @@ else
|
||||
if (empty($include_users)) print img_warning().' '.$langs->trans("NobodyHasPermissionToValidateHolidays");
|
||||
else
|
||||
{
|
||||
$s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), ($user->admin ? '' : array($user->id)), 0, $include_users);
|
||||
$arrayofvalidatorstoexclude = (($user->admin || ($user->id != $userRequest->id))? '' : array($user->id)); // Nobody if we are admin or if we are not the user of the leave.
|
||||
$s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), $arrayofvalidatorstoexclude, 0, $include_users);
|
||||
print $form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate"));
|
||||
}
|
||||
if ($action == 'editvalidator')
|
||||
@ -1434,7 +1435,7 @@ else
|
||||
{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=backtodraft" class="butAction">'.$langs->trans("SetToDraft").'</a>';
|
||||
}
|
||||
if ($user->rights->holiday->delete && ($object->statut == Holiday::STATUS_DRAFT || $object->statut == Holiday::STATUS_CANCELED || $object->statut == Holiday::STATUS_REFUSED)) // If draft or canceled or refused
|
||||
if ($candelete && ($object->statut == Holiday::STATUS_DRAFT || $object->statut == Holiday::STATUS_CANCELED || $object->statut == Holiday::STATUS_REFUSED)) // If draft or canceled or refused
|
||||
{
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete" class="butActionDelete">'.$langs->trans("DeleteCP").'</a>';
|
||||
}
|
||||
|
||||
@ -69,6 +69,7 @@ print '<h3>'.$langs->trans("Repair").'</h3>';
|
||||
|
||||
print 'Option standard (\'test\' or \'confirmed\') is '.(GETPOST('standard', 'alpha')?GETPOST('standard', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option restore_thirdparties_logos (\'test\' or \'confirmed\') is '.(GETPOST('restore_thirdparties_logos', 'alpha')?GETPOST('restore_thirdparties_logos', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option restore_user_pictures (\'test\' or \'confirmed\') is '.(GETPOST('restore_user_pictures', 'alpha')?GETPOST('restore_user_pictures', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option clean_linked_elements (\'test\' or \'confirmed\') is '.(GETPOST('clean_linked_elements', 'alpha')?GETPOST('clean_linked_elements', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option clean_menus (\'test\' or \'confirmed\') is '.(GETPOST('clean_menus', 'alpha')?GETPOST('clean_menus', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option clean_orphelin_dir (\'test\' or \'confirmed\') is '.(GETPOST('clean_orphelin_dir', 'alpha')?GETPOST('clean_orphelin_dir', 'alpha'):'undefined').'<br>'."\n";
|
||||
@ -78,6 +79,7 @@ print 'Option rebuild_product_thumbs (\'test\' or \'confirmed\') is '.(GETPOST('
|
||||
print 'Option force_disable_of_modules_not_found (\'test\' or \'confirmed\') is '.(GETPOST('force_disable_of_modules_not_found', 'alpha')?GETPOST('force_disable_of_modules_not_found', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option clean_perm_table (\'test\' or \'confirmed\') is '.(GETPOST('clean_perm_table', 'alpha')?GETPOST('clean_perm_table', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option force_utf8_on_tables, for mysql/mariadb only (\'test\' or \'confirmed\') is '.(GETPOST('force_utf8_on_tables', 'alpha')?GETPOST('force_utf8_on_tables', 'alpha'):'undefined').'<br>'."\n";
|
||||
print 'Option repair_link_dispatch_lines_supplier_order_lines, (\'test\' or \'confirmed\') is '.(GETPOST('repair_link_dispatch_lines_supplier_order_lines', 'alpha')?GETPOST('repair_link_dispatch_lines_supplier_order_lines', 'alpha'):'undefined').'<br>'."\n";
|
||||
print '<br>';
|
||||
|
||||
print '<table cellspacing="0" cellpadding="1" border="0" width="100%">';
|
||||
@ -491,70 +493,183 @@ if ($ok && GETPOST('restore_thirdparties_logos'))
|
||||
$ext='';
|
||||
|
||||
print '<tr><td colspan="2"><br>*** Restore thirdparties logo<br>';
|
||||
//foreach($exts as $ext)
|
||||
//{
|
||||
$sql="SELECT s.rowid, s.nom as name, s.logo FROM ".MAIN_DB_PREFIX."societe as s ORDER BY s.nom";
|
||||
$resql=$db->query($sql);
|
||||
if ($resql)
|
||||
|
||||
$sql="SELECT s.rowid, s.nom as name, s.logo FROM ".MAIN_DB_PREFIX."societe as s ORDER BY s.nom";
|
||||
$resql=$db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$num=$db->num_rows($resql);
|
||||
$i=0;
|
||||
|
||||
while($i < $num)
|
||||
{
|
||||
$num=$db->num_rows($resql);
|
||||
$i=0;
|
||||
$obj=$db->fetch_object($resql);
|
||||
|
||||
while($i < $num)
|
||||
/*
|
||||
$name=preg_replace('/é/','',$obj->name);
|
||||
$name=preg_replace('/ /','_',$name);
|
||||
$name=preg_replace('/\'/','',$name);
|
||||
*/
|
||||
|
||||
$tmp=explode('.', $obj->logo);
|
||||
$name=$tmp[0];
|
||||
if (isset($tmp[1])) $ext='.'.$tmp[1];
|
||||
|
||||
if (! empty($name))
|
||||
{
|
||||
$obj=$db->fetch_object($resql);
|
||||
|
||||
/*
|
||||
$name=preg_replace('/é/','',$obj->name);
|
||||
$name=preg_replace('/ /','_',$name);
|
||||
$name=preg_replace('/\'/','',$name);
|
||||
*/
|
||||
|
||||
$tmp=explode('.', $obj->logo);
|
||||
$name=$tmp[0];
|
||||
if (isset($tmp[1])) $ext='.'.$tmp[1];
|
||||
|
||||
if (! empty($name))
|
||||
$filetotest=$dolibarr_main_data_root.'/societe/logos/'.$name.$ext;
|
||||
$filetotestsmall=$dolibarr_main_data_root.'/societe/logos/thumbs/'.$name.'_small'.$ext;
|
||||
$exists=dol_is_file($filetotest);
|
||||
print 'Check thirdparty '.$obj->rowid.' name='.$obj->name.' logo='.$obj->logo.' file '.$filetotest." exists=".$exists."<br>\n";
|
||||
if ($exists)
|
||||
{
|
||||
$filetotest=$dolibarr_main_data_root.'/societe/logos/'.$name.$ext;
|
||||
$filetotestsmall=$dolibarr_main_data_root.'/societe/logos/thumbs/'.$name.$ext;
|
||||
$exists=dol_is_file($filetotest);
|
||||
print 'Check thirdparty '.$obj->rowid.' name='.$obj->name.' logo='.$obj->logo.' file '.$filetotest." exists=".$exists."<br>\n";
|
||||
if ($exists)
|
||||
$filetarget=$dolibarr_main_data_root.'/societe/'.$obj->rowid.'/logos/'.$name.$ext;
|
||||
$filetargetsmall=$dolibarr_main_data_root.'/societe/'.$obj->rowid.'/logos/thumbs/'.$name.'_small'.$ext;
|
||||
$existt=dol_is_file($filetarget);
|
||||
if (! $existt)
|
||||
{
|
||||
$filetarget=$dolibarr_main_data_root.'/societe/'.$obj->rowid.'/logos/'.$name.$ext;
|
||||
$filetargetsmall=$dolibarr_main_data_root.'/societe/'.$obj->rowid.'/logos/thumbs/'.$name.'_small'.$ext;
|
||||
$existt=dol_is_file($filetarget);
|
||||
if (! $existt)
|
||||
if (GETPOST('restore_thirdparties_logos', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_mkdir($dolibarr_main_data_root.'/societe/'.$obj->rowid.'/logos');
|
||||
|
||||
print " -> Copy file ".$filetotest." -> ".$filetarget."<br>\n";
|
||||
dol_copy($filetotest, $filetarget, '', 0);
|
||||
}
|
||||
|
||||
$existtt=dol_is_file($filetargetsmall);
|
||||
if (! $existtt)
|
||||
print " -> Copy file ".$filetotest." -> ".$filetarget."<br>\n";
|
||||
if (GETPOST('restore_thirdparties_logos', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_copy($filetotest, $filetarget, '', 0);
|
||||
}
|
||||
}
|
||||
|
||||
$existtt=dol_is_file($filetargetsmall);
|
||||
if (! $existtt)
|
||||
{
|
||||
if (GETPOST('restore_thirdparties_logos', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_mkdir($dolibarr_main_data_root.'/societe/'.$obj->rowid.'/logos/thumbs');
|
||||
|
||||
print " -> Copy file ".$filetotestsmall." -> ".$filetargetsmall."<br>\n";
|
||||
}
|
||||
print " -> Copy file ".$filetotestsmall." -> ".$filetargetsmall."<br>\n";
|
||||
if (GETPOST('restore_thirdparties_logos', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_copy($filetotestsmall, $filetargetsmall, '', 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$ok=0;
|
||||
dol_print_error($db);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$ok=0;
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
|
||||
|
||||
// restore_user_pictures: Move pictures to correct new directory.
|
||||
if ($ok && GETPOST('restore_user_pictures', 'alpha'))
|
||||
{
|
||||
//$exts=array('gif','png','jpg');
|
||||
|
||||
$ext='';
|
||||
|
||||
print '<tr><td colspan="2"><br>*** Restore user pictures<br>';
|
||||
|
||||
$sql="SELECT s.rowid, s.firstname, s.lastname, s.login, s.photo FROM ".MAIN_DB_PREFIX."user as s ORDER BY s.rowid";
|
||||
$resql=$db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
$num=$db->num_rows($resql);
|
||||
$i=0;
|
||||
|
||||
while($i < $num)
|
||||
{
|
||||
$obj=$db->fetch_object($resql);
|
||||
|
||||
/*
|
||||
$name=preg_replace('/é/','',$obj->name);
|
||||
$name=preg_replace('/ /','_',$name);
|
||||
$name=preg_replace('/\'/','',$name);
|
||||
*/
|
||||
|
||||
$tmp=explode('.', $obj->photo);
|
||||
$name=$tmp[0];
|
||||
if (isset($tmp[1])) $ext='.'.$tmp[1];
|
||||
|
||||
if (! empty($name))
|
||||
{
|
||||
$filetotest=$dolibarr_main_data_root.'/users/'.substr(sprintf('%08d', $obj->rowid), -1, 1).'/'.substr(sprintf('%08d', $obj->rowid), -2, 1).'/'.$name.$ext;
|
||||
$filetotestsmall=$dolibarr_main_data_root.'/users/'.substr(sprintf('%08d', $obj->rowid), -1, 1).'/'.substr(sprintf('%08d', $obj->rowid), -2, 1).'/thumbs/'.$name.'_small'.$ext;
|
||||
$filetotestmini=$dolibarr_main_data_root.'/users/'.substr(sprintf('%08d', $obj->rowid), -1, 1).'/'.substr(sprintf('%08d', $obj->rowid), -2, 1).'/thumbs/'.$name.'_mini'.$ext;
|
||||
$exists=dol_is_file($filetotest);
|
||||
print 'Check user '.$obj->rowid.' lastname='.$obj->lastname.' fistname='.$obj->firstname.' photo='.$obj->photo.' file '.$filetotest." exists=".$exists."<br>\n";
|
||||
if ($exists)
|
||||
{
|
||||
$filetarget=$dolibarr_main_data_root.'/users/'.$obj->rowid.'/'.$name.$ext;
|
||||
$filetargetsmall=$dolibarr_main_data_root.'/users/'.$obj->rowid.'/thumbs/'.$name.'_small'.$ext;
|
||||
$filetargetmini=$dolibarr_main_data_root.'/users/'.$obj->rowid.'/thumbs/'.$name.'_mini'.$ext;
|
||||
|
||||
$existt=dol_is_file($filetarget);
|
||||
if (! $existt)
|
||||
{
|
||||
if (GETPOST('restore_user_pictures', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_mkdir($dolibarr_main_data_root.'/users/'.$obj->rowid);
|
||||
}
|
||||
|
||||
print " -> Copy file ".$filetotest." -> ".$filetarget."<br>\n";
|
||||
if (GETPOST('restore_user_pictures', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_copy($filetotest, $filetarget, '', 0);
|
||||
}
|
||||
}
|
||||
|
||||
$existtt=dol_is_file($filetargetsmall);
|
||||
if (! $existtt)
|
||||
{
|
||||
if (GETPOST('restore_user_pictures', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_mkdir($dolibarr_main_data_root.'/users/'.$obj->rowid.'/thumbs');
|
||||
}
|
||||
|
||||
print " -> Copy file ".$filetotestsmall." -> ".$filetargetsmall."<br>\n";
|
||||
if (GETPOST('restore_user_pictures', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_copy($filetotestsmall, $filetargetsmall, '', 0);
|
||||
}
|
||||
}
|
||||
|
||||
$existtt=dol_is_file($filetargetmini);
|
||||
if (! $existtt)
|
||||
{
|
||||
if (GETPOST('restore_user_pictures', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_mkdir($dolibarr_main_data_root.'/users/'.$obj->rowid.'/thumbs');
|
||||
}
|
||||
|
||||
print " -> Copy file ".$filetotestmini." -> ".$filetargetmini."<br>\n";
|
||||
if (GETPOST('restore_user_pictures', 'alpha') == 'confirmed')
|
||||
{
|
||||
dol_copy($filetotestmini, $filetargetmini, '', 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$ok=0;
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
print '</td></tr>';
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
@ -1275,6 +1390,144 @@ if ($ok && GETPOST('force_utf8_on_tables', 'alpha'))
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if ($ok && GETPOST('repair_link_dispatch_lines_supplier_order_lines')) {
|
||||
/*
|
||||
* This script is meant to be run when upgrading from a dolibarr version < 3.8
|
||||
* to a newer version.
|
||||
*
|
||||
* Version 3.8 introduces a new column in llx_commande_fournisseur_dispatch, which
|
||||
* matches the dispatch to a specific supplier order line (so that if there are
|
||||
* several with the same product, the user can specifically tell which products of
|
||||
* which line were dispatched where).
|
||||
*
|
||||
* However when migrating, the new column has a default value of 0, which means that
|
||||
* old supplier orders whose lines were dispatched using the old dolibarr version
|
||||
* have unspecific dispatch lines, which are not taken into account by the new version,
|
||||
* thus making the order look like it was never dispatched at all.
|
||||
*
|
||||
* This scripts sets this foreign key to the first matching supplier order line whose
|
||||
* product (and supplier order of course) are the same as the dispatch’s.
|
||||
*
|
||||
* If the dispatched quantity is more than indicated on the order line (this happens if
|
||||
* there are several order lines for the same product), it creates new dispatch lines
|
||||
* pointing to the other order lines accordingly, until all the dispatched quantity is
|
||||
* accounted for.
|
||||
*/
|
||||
|
||||
$repair_link_dispatch_lines_supplier_order_lines = GETPOST('repair_link_dispatch_lines_supplier_order_lines', 'alpha');
|
||||
|
||||
|
||||
echo '<tr><th>Repair llx_commande_fournisseur_dispatch.fk_commandefourndet</th></tr>';
|
||||
echo '<tr><td>Repair in progress. This may take a while.</td></tr>';
|
||||
|
||||
$sql_dispatch = 'SELECT * FROM ' . MAIN_DB_PREFIX . 'commande_fournisseur_dispatch WHERE COALESCE(fk_commandefourndet, 0) = 0';
|
||||
$db->begin();
|
||||
$resql_dispatch = $db->query($sql_dispatch);
|
||||
$n_processed_rows = 0;
|
||||
$errors = array();
|
||||
if ($resql_dispatch) {
|
||||
if ($db->num_rows($resql_dispatch) == 0) {
|
||||
echo '<tr><td>Nothing to do.</td></tr>';
|
||||
exit;
|
||||
}
|
||||
while ($obj_dispatch = $db->fetch_object($resql_dispatch)) {
|
||||
$sql_line = 'SELECT line.rowid, line.qty FROM ' . MAIN_DB_PREFIX . 'commande_fournisseurdet AS line'
|
||||
. ' WHERE line.fk_commande = ' . $obj_dispatch->fk_commande
|
||||
. ' AND line.fk_product = ' . $obj_dispatch->fk_product;
|
||||
$resql_line = $db->query($sql_line);
|
||||
|
||||
// s’il y a plusieurs lignes avec le même produit sur cette commande fournisseur,
|
||||
// on divise la ligne de dispatch en autant de lignes qu’on en a sur la commande pour le produit
|
||||
// et on met la quantité de la ligne dans la limite du "budget" indiqué par dispatch.qty
|
||||
|
||||
$remaining_qty = $obj_dispatch->qty;
|
||||
$first_iteration = true;
|
||||
if (!$resql_line) {
|
||||
echo '<tr><td>Unable to find a matching supplier order line for dispatch #' . $obj_dispatch->rowid . '</td></tr>';
|
||||
$errors[] = $sql_line;
|
||||
$n_processed_rows++;
|
||||
continue;
|
||||
}
|
||||
if ($db->num_rows($resql_line) == 0) continue;
|
||||
while ($obj_line = $db->fetch_object($resql_line)) {
|
||||
if (!$remaining_qty) break;
|
||||
if (!$obj_line->rowid) {
|
||||
continue;
|
||||
}
|
||||
$qty_for_line = min($remaining_qty, $obj_line->qty);
|
||||
if ($first_iteration) {
|
||||
$sql_attach = 'UPDATE ' . MAIN_DB_PREFIX . 'commande_fournisseur_dispatch'
|
||||
. ' SET fk_commandefourndet = ' . $obj_line->rowid . ', qty = ' . $qty_for_line
|
||||
. ' WHERE rowid = ' . $obj_dispatch->rowid;
|
||||
$first_iteration = false;
|
||||
} else {
|
||||
$sql_attach_values = array(
|
||||
$obj_dispatch->fk_commande,
|
||||
$obj_dispatch->fk_product,
|
||||
$obj_line->rowid,
|
||||
$qty_for_line,
|
||||
$obj_dispatch->fk_entrepot,
|
||||
$obj_dispatch->fk_user,
|
||||
$obj_dispatch->datec ? '"' . $db->escape($obj_dispatch->datec) . '"' : 'NULL',
|
||||
$obj_dispatch->comment ? '"' . $db->escape($obj_dispatch->comment) . '"' : 'NULL',
|
||||
$obj_dispatch->status ?: 'NULL',
|
||||
$obj_dispatch->tms ? '"' . $db->escape($obj_dispatch->tms) . '"': 'NULL',
|
||||
$obj_dispatch->batch ?: 'NULL',
|
||||
$obj_dispatch->eatby ? '"' . $db->escape($obj_dispatch->eatby) . '"': 'NULL',
|
||||
$obj_dispatch->sellby ? '"' . $db->escape($obj_dispatch->sellby) . '"': 'NULL'
|
||||
);
|
||||
$sql_attach_values = join(', ', $sql_attach_values);
|
||||
|
||||
$sql_attach = 'INSERT INTO ' . MAIN_DB_PREFIX . 'commande_fournisseur_dispatch'
|
||||
. ' (fk_commande, fk_product, fk_commandefourndet, qty, fk_entrepot, fk_user, datec, comment, status, tms, batch, eatby, sellby)'
|
||||
. ' VALUES (' . $sql_attach_values . ')';
|
||||
}
|
||||
|
||||
if ($repair_link_dispatch_lines_supplier_order_lines == 'confirmed')
|
||||
{
|
||||
$resql_attach = $db->query($sql_attach);
|
||||
}
|
||||
else
|
||||
{
|
||||
$resql_attach = true; // Force success in test mode
|
||||
}
|
||||
|
||||
if ($resql_attach) {
|
||||
$remaining_qty -= $qty_for_line;
|
||||
} else {
|
||||
$errors[] = $sql_attach;
|
||||
}
|
||||
|
||||
$first_iteration = false;
|
||||
}
|
||||
$n_processed_rows++;
|
||||
|
||||
// report progress every 256th row
|
||||
if (!($n_processed_rows & 0xff)) {
|
||||
echo '<tr><td>Processed ' . $n_processed_rows . ' rows with ' . count($errors) . ' errors…' . "</td></tr>\n";
|
||||
flush();
|
||||
ob_flush();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo '<tr><td>Unable to find any dispatch without an fk_commandefourndet.' . "</td></tr>\n";
|
||||
echo $sql_dispatch . "\n";
|
||||
}
|
||||
echo '<tr><td>Fixed ' . $n_processed_rows . ' rows with ' . count($errors) . ' errors…' . "</td></tr>\n";
|
||||
echo '<tr><td>DONE.' . "</td></tr>\n";
|
||||
|
||||
if (count($errors)) {
|
||||
$db->rollback();
|
||||
echo '<tr><td>The transaction was rolled back due to errors: nothing was changed by the script.</td></tr>';
|
||||
} else {
|
||||
$db->commit();
|
||||
}
|
||||
$db->close();
|
||||
|
||||
echo '<tr><td><h3>SQL queries with errors:</h3></tr></td>';
|
||||
echo '<tr><td>' . join('</td></tr><tr><td>', $errors) . '</td></tr>';
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
|
||||
|
||||
@ -400,6 +400,7 @@ OldVATRates=معدل ضريبة القيمة المضافة القديم
|
||||
NewVATRates=معدل ضريبة القيمة المضافة الجديد
|
||||
PriceBaseTypeToChange=تعديل على الأسعار مع القيمة المرجعية قاعدة المعرفة على
|
||||
MassConvert=Launch bulk conversion
|
||||
PriceFormatInCurrentLanguage=Price Format In Current Language
|
||||
String=سلسلة
|
||||
TextLong=نص طويل
|
||||
HtmlText=Html text
|
||||
@ -431,7 +432,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe
|
||||
ExtrafieldParamHelpsellist=List of values comes from a table<br>Syntax: table_name:label_field:id_field::filter<br>Example: c_typent:libelle:id::filter<br><br>- idfilter is necessarly a primary int key<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 syntax extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelpchkbxlst=List of values 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 syntax extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax: ObjectName:Classpath<br>Examples:<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
|
||||
ExtrafieldParamHelpSeparator=Keep empty for a simple separator<br>Set this to 1 for a collapsing separator (open by default)<br>Set this to 2 for a collapsing separator (collapsed by default)
|
||||
ExtrafieldParamHelpSeparator=Keep empty for a simple separator<br>Set this to 1 for a collapsing separator (open by default for new session, then status is kept for each user session)<br>Set this to 2 for a collapsing separator (collapsed by default for new session, then status is kept fore each user session)
|
||||
LibraryToBuildPDF=Library used for PDF generation
|
||||
LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the 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)
|
||||
SMS=SMS
|
||||
@ -1695,7 +1696,7 @@ SuppliersInvoiceNumberingModel=Vendor invoices numbering models
|
||||
IfSetToYesDontForgetPermission=إذا اخترت نعم، لا تنسى أن توفر الأذونات إلى المجموعات أو المستخدمين المسموح بها للموافقة الثانية
|
||||
##### GeoIPMaxmind #####
|
||||
GeoIPMaxmindSetup=GeoIP Maxmind الإعداد وحدة
|
||||
PathToGeoIPMaxmindCountryDataFile=المسار إلى ملف يحتوي على MaxMind في الملكية الفكرية لترجمة البلاد. <br> الأمثلة على ذلك: <br> /usr/local/share/GeoIP/GeoIP.dat <br> /usr/share/GeoIP/GeoIP.dat
|
||||
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.<br>Examples:<br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoLite2-Country.mmdb
|
||||
NoteOnPathLocation=لاحظ أن الملكية الفكرية الخاصة بك على البيانات القطرية الملف يجب أن تكون داخل الدليل الخاص بي يمكن قراءة (راجع الإعداد open_basedir بى وأذونات نظام الملفات).
|
||||
YouCanDownloadFreeDatFileTo=يمكنك تحميل <b>نسخة تجريبية مجانية</b> من GeoIP ملف Maxmind البلاد في ٪ s.
|
||||
YouCanDownloadAdvancedDatFileTo=كما يمكنك تحميل <b>نسخة كاملة</b> أكثر من ذلك <b>، مع التحديثات ،</b> من GeoIP ملف Maxmind البلاد في ٪ s.
|
||||
@ -1926,14 +1927,13 @@ SmallerThan=Smaller than
|
||||
LargerThan=Larger than
|
||||
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects.
|
||||
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
|
||||
IFTTTSetup=IFTTT module setup
|
||||
IFTTT_SERVICE_KEY=IFTTT Service key
|
||||
IFTTT_DOLIBARR_ENDPOINT_SECUREKEY=Security key to secure the endpoint URL used by IFTTT to send messages to your Dolibarr.
|
||||
IFTTTDesc=This module is designed to trigger events on IFTTT and/or to execute some action on external IFTTT triggers.
|
||||
UrlForIFTTT=URL endpoint for IFTTT
|
||||
YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account
|
||||
EndPointFor=End point for %s : %s
|
||||
DeleteEmailCollector=Delete email collector
|
||||
ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector?
|
||||
RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value
|
||||
AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined
|
||||
RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs.
|
||||
RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access.
|
||||
BaseOnSabeDavVersion=Based on the library SabreDAV version
|
||||
NotAPublicIp=Not a public IP
|
||||
MakeAnonymousPing=Make an anonymous Ping '+1' to the Dolibarr foundation server (done 1 time only after installation) to allow the foundation to count the number of Dolibarr installation.
|
||||
|
||||
@ -73,6 +73,7 @@ BankTransaction=قيد بنكي
|
||||
ListTransactions=قائمة القيود
|
||||
ListTransactionsByCategory=قائمةالقيود/الفئات
|
||||
TransactionsToConciliate=قيود للتسويات
|
||||
TransactionsToConciliateShort=To reconcile
|
||||
Conciliable=يمكن أن يتم تسويتة
|
||||
Conciliate=التسوية
|
||||
Conciliation=تسوية
|
||||
@ -116,6 +117,7 @@ DeleteCheckReceipt=حذف هذا الشيك ؟
|
||||
ConfirmDeleteCheckReceipt=هل انت متأكد أنك تريد حذف هذا الشيك؟
|
||||
BankChecks=الشيكات المصرفية
|
||||
BankChecksToReceipt=شيكات في انتظار الإيداع
|
||||
BankChecksToReceiptShort=شيكات في انتظار الإيداع
|
||||
ShowCheckReceipt=عرض إيصال إيداع شيكات
|
||||
NumberOfCheques=No. of check
|
||||
DeleteTransaction=حذف المعاملة
|
||||
|
||||
@ -62,6 +62,7 @@ TicketVatGrouped=Group VAT by rate in tickets
|
||||
AutoPrintTickets=Automatically print tickets
|
||||
EnableBarOrRestaurantFeatures=Enable features for Bar or Restaurant
|
||||
ConfirmDeletionOfThisPOSSale=Do your confirm the deletion of this current sale ?
|
||||
ConfirmDiscardOfThisPOSSale=Do you want to discard this current sale ?
|
||||
History=التاريخ
|
||||
ValidateAndClose=Validate and close
|
||||
Terminal=Terminal
|
||||
@ -69,3 +70,8 @@ NumberOfTerminals=Number of Terminals
|
||||
TerminalSelect=Select terminal you want to use:
|
||||
POSTicket=POS Ticket
|
||||
BasicPhoneLayout=Use basic layout for phones
|
||||
SetupOfTerminalNotComplete=Setup of terminal %s is not complete
|
||||
DirectPayment=Direct payment
|
||||
DirectPaymentButton=Direct cash payment button
|
||||
InvoiceIsAlreadyValidated=Invoice is already validated
|
||||
NoLinesToBill=No lines to bill
|
||||
|
||||
@ -54,6 +54,7 @@ Firstname=Firstname
|
||||
PostOrFunction=Job position
|
||||
UserTitle=العنوان
|
||||
NatureOfThirdParty=Nature of Third party
|
||||
NatureOfContact=Nature of Contact
|
||||
Address=عنوان
|
||||
State=الولاية / المقاطعة
|
||||
StateShort=حالة
|
||||
|
||||
@ -51,6 +51,7 @@ ListOfClosedServices=قائمة مغلقة الخدمات
|
||||
ListOfRunningServices=لائحة ادارة الخدمات
|
||||
NotActivatedServices=لا تنشيط الخدمات) بين مصدق العقود)
|
||||
BoardNotActivatedServices=خدمات لتفعيل العقود بين مصدق
|
||||
BoardNotActivatedServicesShort=Services to activate
|
||||
LastContracts=Latest %s contracts
|
||||
LastModifiedServices=Latest %s modified services
|
||||
ContractStartDate=تاريخ البدء
|
||||
@ -64,7 +65,10 @@ DateStartRealShort=البداية الحقيقية لتاريخ
|
||||
DateEndReal=نهاية التاريخ الحقيقي
|
||||
DateEndRealShort=نهاية التاريخ الحقيقي
|
||||
CloseService=قريبة من الخدمة
|
||||
BoardRunningServices=انتهت إدارة الخدمات
|
||||
BoardRunningServices=Services running
|
||||
BoardRunningServicesShort=Services running
|
||||
BoardExpiredServices=Services expired
|
||||
BoardExpiredServicesShort=Services expired
|
||||
ServiceStatus=مركز الخدمة
|
||||
DraftContracts=عقود مشاريع
|
||||
CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it
|
||||
|
||||
@ -218,6 +218,7 @@ ErrorVariableKeyForContentMustBeSet=Error, the constant with name %s (with text
|
||||
ErrorURLMustStartWithHttp=URL %s must start with http:// or https://
|
||||
ErrorNewRefIsAlreadyUsed=Error, the new reference is already used
|
||||
ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Error, delete payment linked to a closed invoice is not possible.
|
||||
ErrorSearchCriteriaTooSmall=Search criteria too small.
|
||||
# Warnings
|
||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
||||
WarningPasswordSetWithNoAccount=تم تعيين كلمة مرور لهذا العضو. ومع ذلك، تم إنشاء أي حساب المستخدم. لذلك يتم تخزين كلمة المرور هذه ولكن لا يمكن استخدامها للدخول إلى Dolibarr. ويمكن استخدامه من قبل وحدة / واجهة خارجية ولكن إذا كنت لا تحتاج إلى تعريف أي تسجيل دخول أو كلمة المرور لأحد أفراد، يمكنك تعطيل خيار "إدارة تسجيل دخول لكل عضو" من إعداد وحدة الأعضاء. إذا كنت بحاجة إلى إدارة تسجيل الدخول ولكن لا تحتاج إلى أي كلمة المرور، يمكنك الحفاظ على هذا الحقل فارغا لتجنب هذا التحذير. ملاحظة: يمكن أيضا أن تستخدم البريد الإلكتروني لتسجيل الدخول إذا تم ربط عضو إلى المستخدم.
|
||||
|
||||
@ -28,6 +28,7 @@ NoTemplateDefined=No template available for this email type
|
||||
AvailableVariables=Available substitution variables
|
||||
NoTranslation=لا يوجد ترجمة
|
||||
Translation=الترجمة
|
||||
EmptySearchString=Enter a non empty search string
|
||||
NoRecordFound=لا يوجد سجلات
|
||||
NoRecordDeleted=No record deleted
|
||||
NotEnoughDataYet=Not enough data
|
||||
@ -704,6 +705,7 @@ DateOfSignature=Date of signature
|
||||
HidePassword=وتبين للقيادة مع كلمة السر الخفي
|
||||
UnHidePassword=وتظهر واضحة للقيادة حقيقية كلمة السر
|
||||
Root=جذور
|
||||
RootOfMedias=Root of public medias (/medias)
|
||||
Informations=معلومات
|
||||
Page=صفحة
|
||||
Notes=وتلاحظ
|
||||
@ -981,3 +983,10 @@ PaymentInformation=Payment information
|
||||
ValidFrom=Valid from
|
||||
ValidUntil=Valid until
|
||||
NoRecordedUsers=No users
|
||||
ToClose=To close
|
||||
ToProcess=لعملية
|
||||
ToApprove=To approve
|
||||
GlobalOpenedElemView=Global view
|
||||
NoArticlesFoundForTheKeyword=No article found for the keyword '<strong>%s</strong>'
|
||||
NoArticlesFoundForTheCategory=No article found for the category
|
||||
ToAcceptRefuse=To accept | refuse
|
||||
|
||||
@ -29,6 +29,7 @@ MenuMembersUpToDate=حتى الآن من أعضاء
|
||||
MenuMembersNotUpToDate=وحتى الآن من أصل أعضاء
|
||||
MenuMembersResiliated=Terminated members
|
||||
MembersWithSubscriptionToReceive=أعضاء مع اشتراك لتلقي
|
||||
MembersWithSubscriptionToReceiveShort=Subscription to receive
|
||||
DateSubscription=تاريخ الاكتتاب
|
||||
DateEndSubscription=تاريخ انتهاء الاكتتاب
|
||||
EndSubscription=انتهاء الاكتتاب
|
||||
|
||||
@ -76,7 +76,13 @@ MyProjects=بلدي المشاريع
|
||||
MyProjectsArea=My projects Area
|
||||
DurationEffective=فعالة لمدة
|
||||
ProgressDeclared=أعلن التقدم
|
||||
TaskProgressSummary=Task progress
|
||||
CurentlyOpenedTasks=Curently opened tasks
|
||||
TheReportedProgressIsLessThanTheCalculatedProgressionByX=The declared progress is less %s than the calculated progression
|
||||
TheReportedProgressIsMoreThanTheCalculatedProgressionByX=The declared progress is more %s than the calculated progression
|
||||
ProgressCalculated=تقدم تحسب
|
||||
WhichIamLinkedTo=which I'm linked to
|
||||
WhichIamLinkedToProject=which I'm linked to project
|
||||
Time=وقت
|
||||
ListOfTasks=List of tasks
|
||||
GoToListOfTimeConsumed=Go to list of time consumed
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
Shortname=رمز
|
||||
WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them.
|
||||
DeleteWebsite=Delete website
|
||||
ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed.
|
||||
ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. The files uploaded (like into the medias directory, the ECM module, ...) will remain.
|
||||
WEBSITE_TYPE_CONTAINER=Type of page/container
|
||||
WEBSITE_PAGE_EXAMPLE=Web page to use as example
|
||||
WEBSITE_PAGENAME=Page name/alias
|
||||
@ -14,6 +14,9 @@ WEBSITE_JS_INLINE=Javascript file content (common to all pages)
|
||||
WEBSITE_HTML_HEADER=Addition at bottom of HTML Header (common to all pages)
|
||||
WEBSITE_ROBOT=Robot file (robots.txt)
|
||||
WEBSITE_HTACCESS=Website .htaccess file
|
||||
WEBSITE_MANIFEST_JSON=Website manifest.json file
|
||||
WEBSITE_README=README.md file
|
||||
EnterHereLicenseInformation=Enter here meta data or license information to fille a README.md file. if you distribute your website as a template, the file will be included into the temptate package.
|
||||
HtmlHeaderPage=HTML header (specific to this page only)
|
||||
PageNameAliasHelp=Name or alias of the page.<br>This alias is also used to forge a SEO URL when website is ran from a Virtual host of a Web server (like Apacke, Nginx, ...). Use the button "<strong>%s</strong>" to edit this alias.
|
||||
EditTheWebSiteForACommonHeader=Note: If you want to define a personalized header for all pages, edit the header on the site level instead of on the page/container.
|
||||
@ -41,6 +44,7 @@ RealURL=Real URL
|
||||
ViewWebsiteInProduction=View web site using home URLs
|
||||
SetHereVirtualHost=<u>Use with Apache/NGinx/...</u><br>If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on<br><strong>%s</strong><br>then set the name of the virtual host you have created in the properties of web site, so the preview can be done also using this dedicated web server access instead of the internal Dolibarr server.
|
||||
YouCanAlsoTestWithPHPS=<u>Use with PHP embedded server</u><br>On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
|
||||
YouCanAlsoDeployToAnotherWHP=<u>Run your web site with another Dolibarr Hosting provider</u><br>If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on <a href="https://saas.dolibarr.org" target="_blank">https://saas.dolibarr.org</a>
|
||||
CheckVirtualHostPerms=Check also that virtual host has permission <strong>%s</strong> on files into<br><strong>%s</strong>
|
||||
ReadPerm=قرأ
|
||||
WritePerm=Write
|
||||
@ -75,7 +79,8 @@ AddWebsiteAccount=Create web site account
|
||||
BackToListOfThirdParty=Back to list for Third Party
|
||||
DisableSiteFirst=Disable website first
|
||||
MyContainerTitle=My web site title
|
||||
AnotherContainer=Another container
|
||||
AnotherContainer=This is how to include content of another page/container (you may have an error here if you enable dynamic code because the embedded subcontainer may not exists)
|
||||
SorryWebsiteIsCurrentlyOffLine=Sorry, this website is currently off line. Please comme back later...
|
||||
WEBSITE_USE_WEBSITE_ACCOUNTS=Enable the web site account table
|
||||
WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Enable the table to store web site accounts (login/pass) for each website / third party
|
||||
YouMustDefineTheHomePage=You must first define the default Home page
|
||||
@ -89,7 +94,8 @@ AliasPageAlreadyExists=Alias page <strong>%s</strong> already exists
|
||||
CorporateHomePage=Corporate Home page
|
||||
EmptyPage=Empty page
|
||||
ExternalURLMustStartWithHttp=External URL must start with http:// or https://
|
||||
ZipOfWebsitePackageToImport=Zip file of website package
|
||||
ZipOfWebsitePackageToImport=Upload the Zip file of the website template package
|
||||
ZipOfWebsitePackageToLoad=or Choose an available embedded website template package
|
||||
ShowSubcontainers=Include dynamic content
|
||||
InternalURLOfPage=Internal URL of page
|
||||
ThisPageIsTranslationOf=This page/container is a translation of
|
||||
@ -101,5 +107,10 @@ NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynam
|
||||
ReplaceWebsiteContent=Search or Replace website content
|
||||
DeleteAlsoJs=Delete also all javascript files specific to this website?
|
||||
DeleteAlsoMedias=Delete also all medias files specific to this website?
|
||||
# Export
|
||||
MyWebsitePages=My website pages
|
||||
SearchReplaceInto=Search | Replace into
|
||||
ReplaceString=New string
|
||||
CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:<br><br>#mycssselector, input.myclass:hover { ... }<br>must be<br>.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }<br><br>Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere.
|
||||
LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load javascript files also in edit mode, just add your tag 'script src=...' into the page.
|
||||
Dynamiccontent=Sample of a page with dynamic content
|
||||
ImportSite=Import website template
|
||||
|
||||
@ -400,6 +400,7 @@ OldVATRates=Първоначална ставка на ДДС
|
||||
NewVATRates=Нова ставка на ДДС
|
||||
PriceBaseTypeToChange=Промяна на цените с базова референтна стойност, определена на
|
||||
MassConvert=Стартиране на групово превръщане
|
||||
PriceFormatInCurrentLanguage=Price Format In Current Language
|
||||
String=Низ
|
||||
TextLong=Дълъг текст
|
||||
HtmlText=HTML текст
|
||||
@ -431,7 +432,7 @@ ExtrafieldParamHelpradio=Списъкът със стойности трябва
|
||||
ExtrafieldParamHelpsellist=Списъкът на стойностите идва от таблица <br>Синтаксис: table_name:label_field:id_field::filter<br> Пример: c_typent: libelle:id::filter <br><br> - idfilter е задължително основен int key <br> - филтърът може да бъде прост тест (например active = 1), за да се покаже само активна стойност <br> Може също да използвате $ID$ във филтъра, който е текущият идентификатор на текущия обект. <br>За да направите SELECT във филтъра, използвайте $SEL$ <br> ако искате да филтрирате по допълнителни полета, използвайте синтаксис extra.fieldcode=...(където кодът на полето е кодът на допълнителното поле) <br><br> За да имате списъка в зависимост от друг допълнителен списък с атрибути: <br> c_typent:libelle:id:options_ <i>parent_list_code</i>|parent_column:филтер<br><br> За да имате списъка в зависимост от друг списък: <br> c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelpchkbxlst=Списъкът на стойностите идва от таблица <br> Синтаксис: table_name:label_field:id_field::filter <br> Пример: c_typent:libelle:id::filter <br><br> филтърът може да бъде прост тест (например active = 1), за да се покаже само активна стойност <br> Можете също да използвате $ID$ във филтъра, който е текущият идентификатор на текущия обект <br> За да направите SELECT във филтъра, използвайте $SEL$ <br> ако искате да филтрирате по допълнителни полета, използвайте синтаксис extra.fieldcode=...(където кодът на полето е кодът на екстра полето) <br><br> За да имате списъка в зависимост от друг допълнителен списък с атрибути: <br>c_typent:libelle:id:options_ <i>parent_list_code</i>|parent_column:filter<br><br> За да имате списъка в зависимост от друг списък: <br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelplink=Параметрите трябва да са ObjectName:Classpath<br>Синтаксис: ObjectName:Classpath<br>Примери: <br> Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
|
||||
ExtrafieldParamHelpSeparator=Оставете празно за обикновен разделител <br> Задайте това на 1 за разделител, който се свива (отворен по подразбиране) <br> Задайте това на 2 за разделител, който се свива (свит по подразбиране).
|
||||
ExtrafieldParamHelpSeparator=Keep empty for a simple separator<br>Set this to 1 for a collapsing separator (open by default for new session, then status is kept for each user session)<br>Set this to 2 for a collapsing separator (collapsed by default for new session, then status is kept fore each user session)
|
||||
LibraryToBuildPDF=Използвана библиотека за създаване на PDF файлове
|
||||
LocalTaxDesc=Някои държави могат да прилагат два или три данъка към всеки ред във фактурата. Ако случаят е такъв, изберете вида на втория и третия данък и съответната данъчна ставка. Възможен тип са:<br>1: местен данък върху продукти и услуги без ДДС (местния данък се изчислява върху сумата без данък)<br>2: местен данък върху продукти и услуги с ДДС (местният данък се изчислява върху сумата + основния данък)<br>3: местен данък върху продукти без ДДС (местният данък се изчислява върху сумата без данък)<br>4: местен данък върху продукти с ДДС (местният данък се изчислява върху сумата + основния данък)<br>5: местен данък върху услуги без ДДС (местният данък се изчислява върху сумата без данък)<br>6: местен данък върху услуги с ДДС (местният данък се изчислява върху сумата + основния данък)
|
||||
SMS=SMS
|
||||
@ -1695,7 +1696,7 @@ SuppliersInvoiceNumberingModel=Модели за номериране на фа
|
||||
IfSetToYesDontForgetPermission=Ако е избрано ДА, не забравяйте да предоставите права на групи или потребители, от които се очаква второто одобрение.
|
||||
##### GeoIPMaxmind #####
|
||||
GeoIPMaxmindSetup=Настройка на модула GeoIP Maxmind
|
||||
PathToGeoIPMaxmindCountryDataFile=Път до файл, съдържащ Maxmind IP за превод на държава. <br> Примери: <br> /usr/local/share/GeoIP/GeoIP.dat <br> /usr/share/GeoIP/GeoIP.dat
|
||||
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.<br>Examples:<br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoLite2-Country.mmdb
|
||||
NoteOnPathLocation=Обърнете внимание, че вашият IP файл с данни за държавата трябва да е в директория, която може да се чете от PHP (проверете настройките на вашата PHP open_basedir и правата на файловата система).
|
||||
YouCanDownloadFreeDatFileTo=Може да изтеглите <b>безплатна демо версия</b> на Maxmind GeoIP файла за държавата от %s.
|
||||
YouCanDownloadAdvancedDatFileTo=Може също така да изтеглите <b>по-пълна версия, с актуализации</b> на Maxmind GeoIP файла за държавата от %s.
|
||||
@ -1926,14 +1927,13 @@ SmallerThan=По-малък от
|
||||
LargerThan=По-голям от
|
||||
IfTrackingIDFoundEventWillBeLinked=Обърнете внимание, че ако е намерен проследяващ код във входящата електронна поща, събитието ще бъде автоматично свързано със свързаните обекти.
|
||||
WithGMailYouCanCreateADedicatedPassword=С GMail акаунт, ако сте активирали валидирането в 2 стъпки е препоръчително да създадете специална втора парола за приложението, вместо да използвате своята парола за акаунта от https://myaccount.google.com/.
|
||||
IFTTTSetup=Настройка на модул IFTTT
|
||||
IFTTT_SERVICE_KEY=IFTTT Service key
|
||||
IFTTT_DOLIBARR_ENDPOINT_SECUREKEY=Ключ за сигурност, който защитава URL адреса, използван от IFTTT, за да изпраща съобщения до вашия Dolibarr.
|
||||
IFTTTDesc=Този модул е предназначен да задейства събития на IFTTT и / или да изпълнява някои действия, чрез външни IFTTT тригери.
|
||||
UrlForIFTTT=URL адрес за IFTTT
|
||||
YouWillFindItOnYourIFTTTAccount=Ще го намерите във вашият IFTTT акаунт
|
||||
EndPointFor=Крайна точка за %s: %s
|
||||
DeleteEmailCollector=Изтриване на имейл колекционер
|
||||
ConfirmDeleteEmailCollector=Сигурни ли те, че искате да изтриете този колекционер на имейли?
|
||||
RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value
|
||||
AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined
|
||||
RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs.
|
||||
RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access.
|
||||
BaseOnSabeDavVersion=Based on the library SabreDAV version
|
||||
NotAPublicIp=Not a public IP
|
||||
MakeAnonymousPing=Make an anonymous Ping '+1' to the Dolibarr foundation server (done 1 time only after installation) to allow the foundation to count the number of Dolibarr installation.
|
||||
|
||||
@ -73,6 +73,7 @@ BankTransaction=Банкова транзакция
|
||||
ListTransactions=Списък транзакции
|
||||
ListTransactionsByCategory=Списък транзакции по категория
|
||||
TransactionsToConciliate=Транзакции за съгласуване
|
||||
TransactionsToConciliateShort=To reconcile
|
||||
Conciliable=Може да се съгласува
|
||||
Conciliate=Съгласуване
|
||||
Conciliation=Съгласуване
|
||||
@ -116,6 +117,7 @@ DeleteCheckReceipt=Изтриване на тази чекова разписк
|
||||
ConfirmDeleteCheckReceipt=Сигурни ли сте, че искате да изтриете тази чекова разписка?
|
||||
BankChecks=Банкови чекове
|
||||
BankChecksToReceipt=Чекове чакащи депозит
|
||||
BankChecksToReceiptShort=Чекове чакащи депозит
|
||||
ShowCheckReceipt=Покажи разписка за получаване на чеков депозит
|
||||
NumberOfCheques=Брой чекове
|
||||
DeleteTransaction=Изтриване на транзакция
|
||||
|
||||
@ -62,6 +62,7 @@ TicketVatGrouped=Групиране на ДДС по ставка в билет
|
||||
AutoPrintTickets=Автоматично отпечатване на билети
|
||||
EnableBarOrRestaurantFeatures=Включете функции за бар или ресторант
|
||||
ConfirmDeletionOfThisPOSSale=Потвърждавате ли изтриването на настоящата продажба?
|
||||
ConfirmDiscardOfThisPOSSale=Do you want to discard this current sale ?
|
||||
History=История
|
||||
ValidateAndClose=Валидиране и приключване
|
||||
Terminal=Терминал
|
||||
@ -69,3 +70,8 @@ NumberOfTerminals=Брой терминали
|
||||
TerminalSelect=Изберете терминал, който искате да използвате:
|
||||
POSTicket=POS тикет
|
||||
BasicPhoneLayout=Използване на просто оформление за телефони
|
||||
SetupOfTerminalNotComplete=Setup of terminal %s is not complete
|
||||
DirectPayment=Direct payment
|
||||
DirectPaymentButton=Direct cash payment button
|
||||
InvoiceIsAlreadyValidated=Invoice is already validated
|
||||
NoLinesToBill=No lines to bill
|
||||
|
||||
@ -54,6 +54,7 @@ Firstname=Собствено име
|
||||
PostOrFunction=Длъжност
|
||||
UserTitle=Обръщение
|
||||
NatureOfThirdParty=Произход на контрагента
|
||||
NatureOfContact=Nature of Contact
|
||||
Address=Адрес
|
||||
State=Област
|
||||
StateShort=Област
|
||||
|
||||
@ -51,6 +51,7 @@ ListOfClosedServices=Списък на прекратени услуги
|
||||
ListOfRunningServices=Списък на активни услуги
|
||||
NotActivatedServices=Неактивни услуги (измежду валидирани договори)
|
||||
BoardNotActivatedServices=Услуги за активиране (измежду валидирани договори)
|
||||
BoardNotActivatedServicesShort=Services to activate
|
||||
LastContracts=Договори: %s последни
|
||||
LastModifiedServices=Услуги: %s последно променени
|
||||
ContractStartDate=Начална дата
|
||||
@ -65,7 +66,9 @@ DateEndReal=Реална крайна дата
|
||||
DateEndRealShort=Реална крайна дата
|
||||
CloseService=Приключване на услуга
|
||||
BoardRunningServices=Активни услуги
|
||||
BoardRunningServicesShort=Активни услуги
|
||||
BoardExpiredServices=Изтекли услуги
|
||||
BoardExpiredServicesShort=Изтекли услуги
|
||||
ServiceStatus=Статус на услуга
|
||||
DraftContracts=Чернови договори
|
||||
CloseRefusedBecauseOneServiceActive=Договорът не може да бъде прекратен, тъй като има най-малко една активна услуга в него.
|
||||
|
||||
@ -218,6 +218,7 @@ ErrorVariableKeyForContentMustBeSet=Грешка, трябва да бъде з
|
||||
ErrorURLMustStartWithHttp=URL адресът %s трябва да започва с http:// или https://
|
||||
ErrorNewRefIsAlreadyUsed=Грешка, новата референция вече е използвана
|
||||
ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Грешка, изтриването на плащане, свързано с приключена фактура, е невъзможно.
|
||||
ErrorSearchCriteriaTooSmall=Search criteria too small.
|
||||
# Warnings
|
||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
||||
WarningPasswordSetWithNoAccount=За този член бе зададена парола. Въпреки това, не е създаден потребителски акаунт. Така че тази парола е съхранена, но не може да се използва за влизане в Dolibarr. Може да се използва от външен модул/интерфейс, но ако не е необходимо да дефинирате потребителско име или парола за член може да деактивирате опцията "Управление на вход за всеки член" от настройката на модула Членове. Ако трябва да управлявате вход, но не се нуждаете от парола, можете да запазите това поле празно, за да избегнете това предупреждение. Забележка: Имейлът може да се използва и като вход, ако членът е свързан с потребител.
|
||||
|
||||
@ -28,6 +28,7 @@ NoTemplateDefined=Няма наличен шаблон за този тип им
|
||||
AvailableVariables=Налични променливи за заместване
|
||||
NoTranslation=Няма превод
|
||||
Translation=Превод
|
||||
EmptySearchString=Enter a non empty search string
|
||||
NoRecordFound=Няма намерен запис
|
||||
NoRecordDeleted=Няма изтрит запис
|
||||
NotEnoughDataYet=Няма достатъчно данни
|
||||
@ -704,6 +705,7 @@ DateOfSignature=Дата на подписване
|
||||
HidePassword=Показване на команда със скрита парола
|
||||
UnHidePassword=Показване на реална команда с ясна парола
|
||||
Root=Начало
|
||||
RootOfMedias=Root of public medias (/medias)
|
||||
Informations=Информация
|
||||
Page=Страница
|
||||
Notes=Бележки
|
||||
@ -981,3 +983,10 @@ PaymentInformation=Платежна информация
|
||||
ValidFrom=Валидно от
|
||||
ValidUntil=Валидно до
|
||||
NoRecordedUsers=Няма потребители
|
||||
ToClose=To close
|
||||
ToProcess=За изпълнение
|
||||
ToApprove=To approve
|
||||
GlobalOpenedElemView=Global view
|
||||
NoArticlesFoundForTheKeyword=No article found for the keyword '<strong>%s</strong>'
|
||||
NoArticlesFoundForTheCategory=No article found for the category
|
||||
ToAcceptRefuse=To accept | refuse
|
||||
|
||||
@ -29,6 +29,7 @@ MenuMembersUpToDate=С платен чл. внос
|
||||
MenuMembersNotUpToDate=С неплатен чл. внос
|
||||
MenuMembersResiliated=Terminated members
|
||||
MembersWithSubscriptionToReceive=Събиране на членски внос от членовете
|
||||
MembersWithSubscriptionToReceiveShort=Subscription to receive
|
||||
DateSubscription=Чл. внос от дата
|
||||
DateEndSubscription=Чл. внос до дата
|
||||
EndSubscription=Чл внос до
|
||||
|
||||
@ -76,7 +76,13 @@ MyProjects=Мои проекти
|
||||
MyProjectsArea=Секция с мои проекти
|
||||
DurationEffective=Ефективна продължителност
|
||||
ProgressDeclared=Деклариран напредък
|
||||
TaskProgressSummary=Task progress
|
||||
CurentlyOpenedTasks=Curently opened tasks
|
||||
TheReportedProgressIsLessThanTheCalculatedProgressionByX=The declared progress is less %s than the calculated progression
|
||||
TheReportedProgressIsMoreThanTheCalculatedProgressionByX=The declared progress is more %s than the calculated progression
|
||||
ProgressCalculated=Изчислен напредък
|
||||
WhichIamLinkedTo=which I'm linked to
|
||||
WhichIamLinkedToProject=which I'm linked to project
|
||||
Time=Време
|
||||
ListOfTasks=Списък със задачи
|
||||
GoToListOfTimeConsumed=Показване на списъка с изразходвано време
|
||||
@ -185,8 +191,8 @@ InputDetail=Детайли
|
||||
TimeAlreadyRecorded=Това отделено време е вече записано за тази задача / ден и потребител %s
|
||||
ProjectsWithThisUserAsContact=Проекти с потребител за контакт
|
||||
TasksWithThisUserAsContact=Задачи възложени на потребител
|
||||
ResourceNotAssignedToProject=Не е зададено към проект
|
||||
ResourceNotAssignedToTheTask=Не е зададено към задача
|
||||
ResourceNotAssignedToProject=Не е участник в проекта
|
||||
ResourceNotAssignedToTheTask=Не е участник в задачата
|
||||
NoUserAssignedToTheProject=Няма потребители, назначени за този проект.
|
||||
TimeSpentBy=Отделено време от
|
||||
TasksAssignedTo=Задачи, възложени на
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
Shortname=Код
|
||||
WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them.
|
||||
DeleteWebsite=Изтрийте уебсайт
|
||||
ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed.
|
||||
ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. The files uploaded (like into the medias directory, the ECM module, ...) will remain.
|
||||
WEBSITE_TYPE_CONTAINER=Type of page/container
|
||||
WEBSITE_PAGE_EXAMPLE=Уеб страница, която да се използва като пример
|
||||
WEBSITE_PAGENAME=Име на страницата
|
||||
@ -14,6 +14,9 @@ WEBSITE_JS_INLINE=Javascript file content (common to all pages)
|
||||
WEBSITE_HTML_HEADER=Addition at bottom of HTML Header (common to all pages)
|
||||
WEBSITE_ROBOT=Robot file (robots.txt)
|
||||
WEBSITE_HTACCESS=Website .htaccess file
|
||||
WEBSITE_MANIFEST_JSON=Website manifest.json file
|
||||
WEBSITE_README=README.md file
|
||||
EnterHereLicenseInformation=Enter here meta data or license information to fille a README.md file. if you distribute your website as a template, the file will be included into the temptate package.
|
||||
HtmlHeaderPage=HTML header (specific to this page only)
|
||||
PageNameAliasHelp=Name or alias of the page.<br>This alias is also used to forge a SEO URL when website is ran from a Virtual host of a Web server (like Apacke, Nginx, ...). Use the button "<strong>%s</strong>" to edit this alias.
|
||||
EditTheWebSiteForACommonHeader=Note: If you want to define a personalized header for all pages, edit the header on the site level instead of on the page/container.
|
||||
@ -41,6 +44,7 @@ RealURL=Релен URL
|
||||
ViewWebsiteInProduction=Покажи уеб сайта използвайки началното URL
|
||||
SetHereVirtualHost=<u>Use with Apache/NGinx/...</u><br>If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on<br><strong>%s</strong><br>then set the name of the virtual host you have created in the properties of web site, so the preview can be done also using this dedicated web server access instead of the internal Dolibarr server.
|
||||
YouCanAlsoTestWithPHPS=<u>Use with PHP embedded server</u><br>On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
|
||||
YouCanAlsoDeployToAnotherWHP=<u>Run your web site with another Dolibarr Hosting provider</u><br>If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on <a href="https://saas.dolibarr.org" target="_blank">https://saas.dolibarr.org</a>
|
||||
CheckVirtualHostPerms=Check also that virtual host has permission <strong>%s</strong> on files into<br><strong>%s</strong>
|
||||
ReadPerm=Чета
|
||||
WritePerm=Write
|
||||
@ -75,7 +79,8 @@ AddWebsiteAccount=Create web site account
|
||||
BackToListOfThirdParty=Обратно към списъка с контрагентите
|
||||
DisableSiteFirst=Disable website first
|
||||
MyContainerTitle=My web site title
|
||||
AnotherContainer=Another container
|
||||
AnotherContainer=This is how to include content of another page/container (you may have an error here if you enable dynamic code because the embedded subcontainer may not exists)
|
||||
SorryWebsiteIsCurrentlyOffLine=Sorry, this website is currently off line. Please comme back later...
|
||||
WEBSITE_USE_WEBSITE_ACCOUNTS=Enable the web site account table
|
||||
WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Enable the table to store web site accounts (login/pass) for each website / third party
|
||||
YouMustDefineTheHomePage=You must first define the default Home page
|
||||
@ -89,7 +94,8 @@ AliasPageAlreadyExists=Alias page <strong>%s</strong> already exists
|
||||
CorporateHomePage=Corporate Home page
|
||||
EmptyPage=Empty page
|
||||
ExternalURLMustStartWithHttp=External URL must start with http:// or https://
|
||||
ZipOfWebsitePackageToImport=Zip file of website package
|
||||
ZipOfWebsitePackageToImport=Upload the Zip file of the website template package
|
||||
ZipOfWebsitePackageToLoad=or Choose an available embedded website template package
|
||||
ShowSubcontainers=Include dynamic content
|
||||
InternalURLOfPage=Internal URL of page
|
||||
ThisPageIsTranslationOf=This page/container is a translation of
|
||||
@ -101,5 +107,10 @@ NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynam
|
||||
ReplaceWebsiteContent=Search or Replace website content
|
||||
DeleteAlsoJs=Delete also all javascript files specific to this website?
|
||||
DeleteAlsoMedias=Delete also all medias files specific to this website?
|
||||
# Export
|
||||
MyWebsitePages=My website pages
|
||||
SearchReplaceInto=Search | Replace into
|
||||
ReplaceString=New string
|
||||
CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:<br><br>#mycssselector, input.myclass:hover { ... }<br>must be<br>.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }<br><br>Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere.
|
||||
LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load javascript files also in edit mode, just add your tag 'script src=...' into the page.
|
||||
Dynamiccontent=Sample of a page with dynamic content
|
||||
ImportSite=Import website template
|
||||
|
||||
@ -400,6 +400,7 @@ OldVATRates=Old VAT rate
|
||||
NewVATRates=New VAT rate
|
||||
PriceBaseTypeToChange=Modify on prices with base reference value defined on
|
||||
MassConvert=Launch bulk conversion
|
||||
PriceFormatInCurrentLanguage=Price Format In Current Language
|
||||
String=String
|
||||
TextLong=Long text
|
||||
HtmlText=Html text
|
||||
@ -431,7 +432,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe
|
||||
ExtrafieldParamHelpsellist=List of values comes from a table<br>Syntax: table_name:label_field:id_field::filter<br>Example: c_typent:libelle:id::filter<br><br>- idfilter is necessarly a primary int key<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 syntax extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelpchkbxlst=List of values 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 syntax extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax: ObjectName:Classpath<br>Examples:<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
|
||||
ExtrafieldParamHelpSeparator=Keep empty for a simple separator<br>Set this to 1 for a collapsing separator (open by default)<br>Set this to 2 for a collapsing separator (collapsed by default)
|
||||
ExtrafieldParamHelpSeparator=Keep empty for a simple separator<br>Set this to 1 for a collapsing separator (open by default for new session, then status is kept for each user session)<br>Set this to 2 for a collapsing separator (collapsed by default for new session, then status is kept fore each user session)
|
||||
LibraryToBuildPDF=Library used for PDF generation
|
||||
LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the 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)
|
||||
SMS=SMS
|
||||
@ -1695,7 +1696,7 @@ SuppliersInvoiceNumberingModel=Vendor invoices numbering models
|
||||
IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
|
||||
##### GeoIPMaxmind #####
|
||||
GeoIPMaxmindSetup=GeoIP Maxmind module setup
|
||||
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.<br>Examples:<br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat
|
||||
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.<br>Examples:<br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoLite2-Country.mmdb
|
||||
NoteOnPathLocation=Note that your ip to country data file must be inside a directory your PHP can read (Check your PHP open_basedir setup and filesystem permissions).
|
||||
YouCanDownloadFreeDatFileTo=You can download a <b>free demo version</b> of the Maxmind GeoIP country file at %s.
|
||||
YouCanDownloadAdvancedDatFileTo=You can also download a more <b>complete version, with updates,</b> of the Maxmind GeoIP country file at %s.
|
||||
@ -1926,14 +1927,13 @@ SmallerThan=Smaller than
|
||||
LargerThan=Larger than
|
||||
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects.
|
||||
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
|
||||
IFTTTSetup=IFTTT module setup
|
||||
IFTTT_SERVICE_KEY=IFTTT Service key
|
||||
IFTTT_DOLIBARR_ENDPOINT_SECUREKEY=Security key to secure the endpoint URL used by IFTTT to send messages to your Dolibarr.
|
||||
IFTTTDesc=This module is designed to trigger events on IFTTT and/or to execute some action on external IFTTT triggers.
|
||||
UrlForIFTTT=URL endpoint for IFTTT
|
||||
YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account
|
||||
EndPointFor=End point for %s : %s
|
||||
DeleteEmailCollector=Delete email collector
|
||||
ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector?
|
||||
RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value
|
||||
AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined
|
||||
RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs.
|
||||
RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access.
|
||||
BaseOnSabeDavVersion=Based on the library SabreDAV version
|
||||
NotAPublicIp=Not a public IP
|
||||
MakeAnonymousPing=Make an anonymous Ping '+1' to the Dolibarr foundation server (done 1 time only after installation) to allow the foundation to count the number of Dolibarr installation.
|
||||
|
||||
@ -73,6 +73,7 @@ BankTransaction=Bank entry
|
||||
ListTransactions=List entries
|
||||
ListTransactionsByCategory=List entries/category
|
||||
TransactionsToConciliate=Entries to reconcile
|
||||
TransactionsToConciliateShort=To reconcile
|
||||
Conciliable=Can be reconciled
|
||||
Conciliate=Reconcile
|
||||
Conciliation=Reconciliation
|
||||
@ -116,6 +117,7 @@ DeleteCheckReceipt=Delete this check receipt?
|
||||
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
|
||||
BankChecks=Bank checks
|
||||
BankChecksToReceipt=Checks awaiting deposit
|
||||
BankChecksToReceiptShort=Checks awaiting deposit
|
||||
ShowCheckReceipt=Show check deposit receipt
|
||||
NumberOfCheques=No. of check
|
||||
DeleteTransaction=Delete entry
|
||||
|
||||
@ -62,6 +62,7 @@ TicketVatGrouped=Group VAT by rate in tickets
|
||||
AutoPrintTickets=Automatically print tickets
|
||||
EnableBarOrRestaurantFeatures=Enable features for Bar or Restaurant
|
||||
ConfirmDeletionOfThisPOSSale=Do your confirm the deletion of this current sale ?
|
||||
ConfirmDiscardOfThisPOSSale=Do you want to discard this current sale ?
|
||||
History=History
|
||||
ValidateAndClose=Validate and close
|
||||
Terminal=Terminal
|
||||
@ -69,3 +70,8 @@ NumberOfTerminals=Number of Terminals
|
||||
TerminalSelect=Select terminal you want to use:
|
||||
POSTicket=POS Ticket
|
||||
BasicPhoneLayout=Use basic layout for phones
|
||||
SetupOfTerminalNotComplete=Setup of terminal %s is not complete
|
||||
DirectPayment=Direct payment
|
||||
DirectPaymentButton=Direct cash payment button
|
||||
InvoiceIsAlreadyValidated=Invoice is already validated
|
||||
NoLinesToBill=No lines to bill
|
||||
|
||||
@ -54,6 +54,7 @@ Firstname=First name
|
||||
PostOrFunction=Job position
|
||||
UserTitle=Title
|
||||
NatureOfThirdParty=Nature of Third party
|
||||
NatureOfContact=Nature of Contact
|
||||
Address=Address
|
||||
State=State/Province
|
||||
StateShort=State
|
||||
|
||||
@ -51,6 +51,7 @@ ListOfClosedServices=List of closed services
|
||||
ListOfRunningServices=List of running services
|
||||
NotActivatedServices=Inactive services (among validated contracts)
|
||||
BoardNotActivatedServices=Services to activate among validated contracts
|
||||
BoardNotActivatedServicesShort=Services to activate
|
||||
LastContracts=Latest %s contracts
|
||||
LastModifiedServices=Latest %s modified services
|
||||
ContractStartDate=Start date
|
||||
@ -64,7 +65,10 @@ DateStartRealShort=Real start date
|
||||
DateEndReal=Real end date
|
||||
DateEndRealShort=Real end date
|
||||
CloseService=Close service
|
||||
BoardRunningServices=Expired running services
|
||||
BoardRunningServices=Services running
|
||||
BoardRunningServicesShort=Services running
|
||||
BoardExpiredServices=Services expired
|
||||
BoardExpiredServicesShort=Services expired
|
||||
ServiceStatus=Status of service
|
||||
DraftContracts=Drafts contracts
|
||||
CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it
|
||||
|
||||
@ -218,6 +218,7 @@ ErrorVariableKeyForContentMustBeSet=Error, the constant with name %s (with text
|
||||
ErrorURLMustStartWithHttp=URL %s must start with http:// or https://
|
||||
ErrorNewRefIsAlreadyUsed=Error, the new reference is already used
|
||||
ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Error, delete payment linked to a closed invoice is not possible.
|
||||
ErrorSearchCriteriaTooSmall=Search criteria too small.
|
||||
# Warnings
|
||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
||||
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.
|
||||
|
||||
@ -28,6 +28,7 @@ NoTemplateDefined=No template available for this email type
|
||||
AvailableVariables=Available substitution variables
|
||||
NoTranslation=No translation
|
||||
Translation=Translation
|
||||
EmptySearchString=Enter a non empty search string
|
||||
NoRecordFound=No record found
|
||||
NoRecordDeleted=No record deleted
|
||||
NotEnoughDataYet=Not enough data
|
||||
@ -704,6 +705,7 @@ DateOfSignature=Date of signature
|
||||
HidePassword=Show command with password hidden
|
||||
UnHidePassword=Show real command with clear password
|
||||
Root=Root
|
||||
RootOfMedias=Root of public medias (/medias)
|
||||
Informations=Information
|
||||
Page=Page
|
||||
Notes=Notes
|
||||
@ -981,3 +983,10 @@ PaymentInformation=Payment information
|
||||
ValidFrom=Valid from
|
||||
ValidUntil=Valid until
|
||||
NoRecordedUsers=No users
|
||||
ToClose=To close
|
||||
ToProcess=To process
|
||||
ToApprove=To approve
|
||||
GlobalOpenedElemView=Global view
|
||||
NoArticlesFoundForTheKeyword=No article found for the keyword '<strong>%s</strong>'
|
||||
NoArticlesFoundForTheCategory=No article found for the category
|
||||
ToAcceptRefuse=To accept | refuse
|
||||
|
||||
@ -29,6 +29,7 @@ MenuMembersUpToDate=Up to date members
|
||||
MenuMembersNotUpToDate=Out of date members
|
||||
MenuMembersResiliated=Terminated members
|
||||
MembersWithSubscriptionToReceive=Members with subscription to receive
|
||||
MembersWithSubscriptionToReceiveShort=Subscription to receive
|
||||
DateSubscription=Subscription date
|
||||
DateEndSubscription=Subscription end date
|
||||
EndSubscription=End subscription
|
||||
|
||||
@ -76,7 +76,13 @@ MyProjects=My projects
|
||||
MyProjectsArea=My projects Area
|
||||
DurationEffective=Effective duration
|
||||
ProgressDeclared=Declared progress
|
||||
TaskProgressSummary=Task progress
|
||||
CurentlyOpenedTasks=Curently opened tasks
|
||||
TheReportedProgressIsLessThanTheCalculatedProgressionByX=The declared progress is less %s than the calculated progression
|
||||
TheReportedProgressIsMoreThanTheCalculatedProgressionByX=The declared progress is more %s than the calculated progression
|
||||
ProgressCalculated=Calculated progress
|
||||
WhichIamLinkedTo=which I'm linked to
|
||||
WhichIamLinkedToProject=which I'm linked to project
|
||||
Time=Time
|
||||
ListOfTasks=List of tasks
|
||||
GoToListOfTimeConsumed=Go to list of time consumed
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
Shortname=Code
|
||||
WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them.
|
||||
DeleteWebsite=Delete website
|
||||
ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed.
|
||||
ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. The files uploaded (like into the medias directory, the ECM module, ...) will remain.
|
||||
WEBSITE_TYPE_CONTAINER=Type of page/container
|
||||
WEBSITE_PAGE_EXAMPLE=Web page to use as example
|
||||
WEBSITE_PAGENAME=Page name/alias
|
||||
@ -14,6 +14,9 @@ WEBSITE_JS_INLINE=Javascript file content (common to all pages)
|
||||
WEBSITE_HTML_HEADER=Addition at bottom of HTML Header (common to all pages)
|
||||
WEBSITE_ROBOT=Robot file (robots.txt)
|
||||
WEBSITE_HTACCESS=Website .htaccess file
|
||||
WEBSITE_MANIFEST_JSON=Website manifest.json file
|
||||
WEBSITE_README=README.md file
|
||||
EnterHereLicenseInformation=Enter here meta data or license information to fille a README.md file. if you distribute your website as a template, the file will be included into the temptate package.
|
||||
HtmlHeaderPage=HTML header (specific to this page only)
|
||||
PageNameAliasHelp=Name or alias of the page.<br>This alias is also used to forge a SEO URL when website is ran from a Virtual host of a Web server (like Apacke, Nginx, ...). Use the button "<strong>%s</strong>" to edit this alias.
|
||||
EditTheWebSiteForACommonHeader=Note: If you want to define a personalized header for all pages, edit the header on the site level instead of on the page/container.
|
||||
@ -41,6 +44,7 @@ RealURL=Real URL
|
||||
ViewWebsiteInProduction=View web site using home URLs
|
||||
SetHereVirtualHost=<u>Use with Apache/NGinx/...</u><br>If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on<br><strong>%s</strong><br>then set the name of the virtual host you have created in the properties of web site, so the preview can be done also using this dedicated web server access instead of the internal Dolibarr server.
|
||||
YouCanAlsoTestWithPHPS=<u>Use with PHP embedded server</u><br>On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
|
||||
YouCanAlsoDeployToAnotherWHP=<u>Run your web site with another Dolibarr Hosting provider</u><br>If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on <a href="https://saas.dolibarr.org" target="_blank">https://saas.dolibarr.org</a>
|
||||
CheckVirtualHostPerms=Check also that virtual host has permission <strong>%s</strong> on files into<br><strong>%s</strong>
|
||||
ReadPerm=Read
|
||||
WritePerm=Write
|
||||
@ -75,7 +79,8 @@ AddWebsiteAccount=Create web site account
|
||||
BackToListOfThirdParty=Back to list for Third Party
|
||||
DisableSiteFirst=Disable website first
|
||||
MyContainerTitle=My web site title
|
||||
AnotherContainer=Another container
|
||||
AnotherContainer=This is how to include content of another page/container (you may have an error here if you enable dynamic code because the embedded subcontainer may not exists)
|
||||
SorryWebsiteIsCurrentlyOffLine=Sorry, this website is currently off line. Please comme back later...
|
||||
WEBSITE_USE_WEBSITE_ACCOUNTS=Enable the web site account table
|
||||
WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Enable the table to store web site accounts (login/pass) for each website / third party
|
||||
YouMustDefineTheHomePage=You must first define the default Home page
|
||||
@ -89,7 +94,8 @@ AliasPageAlreadyExists=Alias page <strong>%s</strong> already exists
|
||||
CorporateHomePage=Corporate Home page
|
||||
EmptyPage=Empty page
|
||||
ExternalURLMustStartWithHttp=External URL must start with http:// or https://
|
||||
ZipOfWebsitePackageToImport=Zip file of website package
|
||||
ZipOfWebsitePackageToImport=Upload the Zip file of the website template package
|
||||
ZipOfWebsitePackageToLoad=or Choose an available embedded website template package
|
||||
ShowSubcontainers=Include dynamic content
|
||||
InternalURLOfPage=Internal URL of page
|
||||
ThisPageIsTranslationOf=This page/container is a translation of
|
||||
@ -101,5 +107,10 @@ NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynam
|
||||
ReplaceWebsiteContent=Search or Replace website content
|
||||
DeleteAlsoJs=Delete also all javascript files specific to this website?
|
||||
DeleteAlsoMedias=Delete also all medias files specific to this website?
|
||||
# Export
|
||||
MyWebsitePages=My website pages
|
||||
SearchReplaceInto=Search | Replace into
|
||||
ReplaceString=New string
|
||||
CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:<br><br>#mycssselector, input.myclass:hover { ... }<br>must be<br>.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }<br><br>Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere.
|
||||
LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load javascript files also in edit mode, just add your tag 'script src=...' into the page.
|
||||
Dynamiccontent=Sample of a page with dynamic content
|
||||
ImportSite=Import website template
|
||||
|
||||
@ -400,6 +400,7 @@ OldVATRates=Old VAT rate
|
||||
NewVATRates=New VAT rate
|
||||
PriceBaseTypeToChange=Modify on prices with base reference value defined on
|
||||
MassConvert=Launch bulk conversion
|
||||
PriceFormatInCurrentLanguage=Price Format In Current Language
|
||||
String=String
|
||||
TextLong=Long text
|
||||
HtmlText=Html text
|
||||
@ -431,7 +432,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe
|
||||
ExtrafieldParamHelpsellist=List of values comes from a table<br>Syntax: table_name:label_field:id_field::filter<br>Example: c_typent:libelle:id::filter<br><br>- idfilter is necessarly a primary int key<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 syntax extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelpchkbxlst=List of values 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 syntax extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
|
||||
ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax: ObjectName:Classpath<br>Examples:<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
|
||||
ExtrafieldParamHelpSeparator=Keep empty for a simple separator<br>Set this to 1 for a collapsing separator (open by default)<br>Set this to 2 for a collapsing separator (collapsed by default)
|
||||
ExtrafieldParamHelpSeparator=Keep empty for a simple separator<br>Set this to 1 for a collapsing separator (open by default for new session, then status is kept for each user session)<br>Set this to 2 for a collapsing separator (collapsed by default for new session, then status is kept fore each user session)
|
||||
LibraryToBuildPDF=Library used for PDF generation
|
||||
LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the 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)
|
||||
SMS=SMS
|
||||
@ -1695,7 +1696,7 @@ SuppliersInvoiceNumberingModel=Vendor invoices numbering models
|
||||
IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
|
||||
##### GeoIPMaxmind #####
|
||||
GeoIPMaxmindSetup=GeoIP Maxmind module setup
|
||||
PathToGeoIPMaxmindCountryDataFile=Putanja do datoteke koja sadrži Maxmind ip do prevoda za zemlju. <br> Primjeri: <br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat
|
||||
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.<br>Examples:<br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoLite2-Country.mmdb
|
||||
NoteOnPathLocation=Note that your ip to country data file must be inside a directory your PHP can read (Check your PHP open_basedir setup and filesystem permissions).
|
||||
YouCanDownloadFreeDatFileTo=You can download a <b>free demo version</b> of the Maxmind GeoIP country file at %s.
|
||||
YouCanDownloadAdvancedDatFileTo=You can also download a more <b>complete version, with updates,</b> of the Maxmind GeoIP country file at %s.
|
||||
@ -1926,14 +1927,13 @@ SmallerThan=Smaller than
|
||||
LargerThan=Larger than
|
||||
IfTrackingIDFoundEventWillBeLinked=Note that If a tracking ID is found into incoming email, the event will be automatically linked to the related objects.
|
||||
WithGMailYouCanCreateADedicatedPassword=With a GMail account, if you enabled the 2 steps validation, it is recommanded to create a dedicated second password for the application instead of using your own account passsword from https://myaccount.google.com/.
|
||||
IFTTTSetup=IFTTT module setup
|
||||
IFTTT_SERVICE_KEY=IFTTT Service key
|
||||
IFTTT_DOLIBARR_ENDPOINT_SECUREKEY=Security key to secure the endpoint URL used by IFTTT to send messages to your Dolibarr.
|
||||
IFTTTDesc=This module is designed to trigger events on IFTTT and/or to execute some action on external IFTTT triggers.
|
||||
UrlForIFTTT=URL endpoint for IFTTT
|
||||
YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account
|
||||
EndPointFor=End point for %s : %s
|
||||
DeleteEmailCollector=Delete email collector
|
||||
ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector?
|
||||
RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value
|
||||
AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined
|
||||
RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs.
|
||||
RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access.
|
||||
BaseOnSabeDavVersion=Based on the library SabreDAV version
|
||||
NotAPublicIp=Not a public IP
|
||||
MakeAnonymousPing=Make an anonymous Ping '+1' to the Dolibarr foundation server (done 1 time only after installation) to allow the foundation to count the number of Dolibarr installation.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user