Merge remote-tracking branch 'Dolibarr/11.0' into 11
This commit is contained in:
commit
0d4c784a0e
12
doc/user/README-DE.md
Normal file
12
doc/user/README-DE.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
README (german)
|
||||||
|
LiesMich (deutsch)
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
Benutzeranleitung
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Alle Dolibarr-Informationen sind online verfuegbar ueber die Webseiten:
|
||||||
|
https://www.dolibarr.de
|
||||||
|
oder
|
||||||
|
https://www.dolibarr.org
|
||||||
|
https://wiki.dolibarr.org
|
||||||
@ -278,6 +278,8 @@ if ($resql)
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$("#searchFormList").on("submit", function (e) {
|
$("#searchFormList").on("submit", function (e) {
|
||||||
|
//event.preventDefault();
|
||||||
|
//var form = this;
|
||||||
console.log("chartofaccounts focus = "+$("#chartofaccounts").is(":focus"));
|
console.log("chartofaccounts focus = "+$("#chartofaccounts").is(":focus"));
|
||||||
console.log("change_chart focus = "+$("#change_chart").is(":focus"));
|
console.log("change_chart focus = "+$("#change_chart").is(":focus"));
|
||||||
if ($("#change_chart").is(":focus"))
|
if ($("#change_chart").is(":focus"))
|
||||||
@ -285,6 +287,7 @@ if ($resql)
|
|||||||
console.log("We set valid_change_chart to 1");
|
console.log("We set valid_change_chart to 1");
|
||||||
$("#valid_change_chart").val(1);
|
$("#valid_change_chart").val(1);
|
||||||
}
|
}
|
||||||
|
//form.submit();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -161,6 +161,7 @@ print '<input type="hidden" name="action" value="update">';
|
|||||||
// Define main accounts for thirdparty
|
// Define main accounts for thirdparty
|
||||||
|
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
|
print '<tr class="liste_titre"><td>'.$langs->trans("ThirdParties").' | '.$langs->trans("Users").'</td><td></td></tr>';
|
||||||
|
|
||||||
foreach ($list_account_main as $key) {
|
foreach ($list_account_main as $key) {
|
||||||
print '<tr class="oddeven value">';
|
print '<tr class="oddeven value">';
|
||||||
@ -180,15 +181,6 @@ foreach ($list_account_main as $key) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
print "</table>\n";
|
|
||||||
|
|
||||||
|
|
||||||
print '<br>';
|
|
||||||
|
|
||||||
// Define default accounts
|
|
||||||
|
|
||||||
print '<table class="noborder centpercent">';
|
|
||||||
|
|
||||||
foreach ($list_account as $key) {
|
foreach ($list_account as $key) {
|
||||||
$reg=array();
|
$reg=array();
|
||||||
if (preg_match('/---(.*)---/', $key, $reg)) {
|
if (preg_match('/---(.*)---/', $key, $reg)) {
|
||||||
|
|||||||
@ -134,13 +134,13 @@ if ($action == 'update') {
|
|||||||
|
|
||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
|
|
||||||
$title = $langs->trans('ConfigAccountingExpert');
|
$title = $langs->trans('ExportOptions');
|
||||||
llxHeader('', $title);
|
llxHeader('', $title);
|
||||||
|
|
||||||
|
|
||||||
$linkback = '';
|
$linkback = '';
|
||||||
// $linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1">' . $langs->trans("BackToModuleList") . '</a>';
|
// $linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1">' . $langs->trans("BackToModuleList") . '</a>';
|
||||||
print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'accountancy');
|
print load_fiche_titre($langs->trans('ExportOptions'), $linkback, 'accountancy');
|
||||||
|
|
||||||
|
|
||||||
print "\n".'<script type="text/javascript" language="javascript">'."\n";
|
print "\n".'<script type="text/javascript" language="javascript">'."\n";
|
||||||
|
|||||||
@ -75,7 +75,7 @@ if ($id)
|
|||||||
|
|
||||||
$linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
|
$linkback = '<a href="'.DOL_URL_ROOT.'/adherents/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
|
||||||
|
|
||||||
dol_banner_tab($object, 'rowid', $linkback);
|
dol_banner_tab($object, 'id', $linkback);
|
||||||
|
|
||||||
print '<div class="fichecenter">';
|
print '<div class="fichecenter">';
|
||||||
|
|
||||||
|
|||||||
@ -230,7 +230,7 @@ class Documents extends DolibarrApi
|
|||||||
/**
|
/**
|
||||||
* Return the list of documents of a dedicated element (from its ID or Ref)
|
* Return the list of documents of a dedicated element (from its ID or Ref)
|
||||||
*
|
*
|
||||||
* @param string $modulepart Name of module or area concerned ('thirdparty', 'member', 'proposal', 'order', 'invoice', 'shipment', 'project', ...)
|
* @param string $modulepart Name of module or area concerned ('thirdparty', 'member', 'proposal', 'order', 'invoice', 'supplier_invoice', 'shipment', 'project', ...)
|
||||||
* @param int $id ID of element
|
* @param int $id ID of element
|
||||||
* @param string $ref Ref of element
|
* @param string $ref Ref of element
|
||||||
* @param string $sortfield Sort criteria ('','fullname','relativename','name','date','size')
|
* @param string $sortfield Sort criteria ('','fullname','relativename','name','date','size')
|
||||||
@ -355,6 +355,24 @@ class Documents extends DolibarrApi
|
|||||||
|
|
||||||
$upload_dir = $conf->facture->dir_output."/".get_exdir(0, 0, 0, 1, $object, 'invoice');
|
$upload_dir = $conf->facture->dir_output."/".get_exdir(0, 0, 0, 1, $object, 'invoice');
|
||||||
}
|
}
|
||||||
|
elseif ($modulepart == 'facture_fournisseur' || $modulepart == 'supplier_invoice')
|
||||||
|
{
|
||||||
|
$modulepart = 'supplier_invoice';
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
|
||||||
|
|
||||||
|
if (!DolibarrApiAccess::$user->rights->fournisseur->facture->lire) {
|
||||||
|
throw new RestException(401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$object = new FactureFournisseur($this->db);
|
||||||
|
$result = $object->fetch($id, $ref);
|
||||||
|
if (!$result) {
|
||||||
|
throw new RestException(404, 'Invoice not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$upload_dir = $conf->fournisseur->dir_output."/facture/".get_exdir($object->id, 2, 0, 0, $object, 'invoice_supplier').dol_sanitizeFileName($object->ref);
|
||||||
|
}
|
||||||
elseif ($modulepart == 'produit' || $modulepart == 'product')
|
elseif ($modulepart == 'produit' || $modulepart == 'product')
|
||||||
{
|
{
|
||||||
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
@ -387,6 +405,22 @@ class Documents extends DolibarrApi
|
|||||||
|
|
||||||
$upload_dir = $conf->agenda->dir_output.'/'.dol_sanitizeFileName($object->ref);
|
$upload_dir = $conf->agenda->dir_output.'/'.dol_sanitizeFileName($object->ref);
|
||||||
}
|
}
|
||||||
|
elseif ($modulepart == 'expensereport')
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
|
||||||
|
|
||||||
|
if (!DolibarrApiAccess::$user->rights->expensereport->read && !DolibarrApiAccess::$user->rights->expensereport->read) {
|
||||||
|
throw new RestException(401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$object = new ExpenseReport($this->db);
|
||||||
|
$result = $object->fetch($id, $ref);
|
||||||
|
if (!$result) {
|
||||||
|
throw new RestException(404, 'Expense report not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$upload_dir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($object->ref);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new RestException(500, 'Modulepart '.$modulepart.' not implemented yet.');
|
throw new RestException(500, 'Modulepart '.$modulepart.' not implemented yet.');
|
||||||
@ -418,8 +452,9 @@ class Documents extends DolibarrApi
|
|||||||
/**
|
/**
|
||||||
* Upload a file.
|
* Upload a file.
|
||||||
*
|
*
|
||||||
* Test sample 1: { "filename": "mynewfile.txt", "modulepart": "facture", "ref": "FA1701-001", "subdir": "", "filecontent": "content text", "fileencoding": "", "overwriteifexists": "0" }.
|
* Test sample for invoice: { "filename": "mynewfile.txt", "modulepart": "invoice", "ref": "FA1701-001", "subdir": "", "filecontent": "content text", "fileencoding": "", "overwriteifexists": "0" }.
|
||||||
* Test sample 2: { "filename": "mynewfile.txt", "modulepart": "medias", "ref": "", "subdir": "image/mywebsite", "filecontent": "Y29udGVudCB0ZXh0Cg==", "fileencoding": "base64", "overwriteifexists": "0" }.
|
* Test sample for supplier invoice: { "filename": "mynewfile.txt", "modulepart": "supplier_invoice", "ref": "FA1701-001", "subdir": "", "filecontent": "content text", "fileencoding": "", "overwriteifexists": "0" }.
|
||||||
|
* Test sample for medias file: { "filename": "mynewfile.txt", "modulepart": "medias", "ref": "", "subdir": "image/mywebsite", "filecontent": "Y29udGVudCB0ZXh0Cg==", "fileencoding": "base64", "overwriteifexists": "0" }.
|
||||||
*
|
*
|
||||||
* @param string $filename Name of file to create ('FA1705-0123.txt')
|
* @param string $filename Name of file to create ('FA1705-0123.txt')
|
||||||
* @param string $modulepart Name of module or area concerned by file upload ('facture', 'project', 'project_task', ...)
|
* @param string $modulepart Name of module or area concerned by file upload ('facture', 'project', 'project_task', ...)
|
||||||
@ -476,6 +511,13 @@ class Documents extends DolibarrApi
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||||
$object = new Facture($this->db);
|
$object = new Facture($this->db);
|
||||||
}
|
}
|
||||||
|
elseif ($modulepart == 'facture_fournisseur' || $modulepart == 'supplier_invoice')
|
||||||
|
{
|
||||||
|
$modulepart = 'supplier_invoice';
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
|
||||||
|
$object = new FactureFournisseur($this->db);
|
||||||
|
}
|
||||||
elseif ($modulepart == 'project')
|
elseif ($modulepart == 'project')
|
||||||
{
|
{
|
||||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||||
@ -510,6 +552,11 @@ class Documents extends DolibarrApi
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
$object = new Product($this->db);
|
$object = new Product($this->db);
|
||||||
}
|
}
|
||||||
|
elseif ($modulepart == 'expensereport')
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
|
||||||
|
$object = new ExpenseReport($this->db);
|
||||||
|
}
|
||||||
// TODO Implement additional moduleparts
|
// TODO Implement additional moduleparts
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -535,6 +582,12 @@ class Documents extends DolibarrApi
|
|||||||
throw new RestException(404, 'The object '.$modulepart." with ref '".$ref."' was not found.");
|
throw new RestException(404, 'The object '.$modulepart." with ref '".$ref."' was not found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special cases that need to use get_exdir to get real dir of object
|
||||||
|
// If future, all object should use this to define path of documents.
|
||||||
|
if ($modulepart == 'supplier_invoice') {
|
||||||
|
$tmpreldir = get_exdir($object->id, 2, 0, 0, $object, 'invoice_supplier');
|
||||||
|
}
|
||||||
|
|
||||||
$relativefile = $tmpreldir.dol_sanitizeFileName($object->ref);
|
$relativefile = $tmpreldir.dol_sanitizeFileName($object->ref);
|
||||||
|
|
||||||
$tmp = dol_check_secure_access_document($modulepart, $relativefile, $entity, DolibarrApiAccess::$user, $ref, 'write');
|
$tmp = dol_check_secure_access_document($modulepart, $relativefile, $entity, DolibarrApiAccess::$user, $ref, 'write');
|
||||||
|
|||||||
@ -111,6 +111,7 @@ if ($action == 'confirm_split' && GETPOST("confirm") == 'yes')
|
|||||||
$newdiscount1->description = $discount->description.' (1)';
|
$newdiscount1->description = $discount->description.' (1)';
|
||||||
$newdiscount2->description = $discount->description.' (2)';
|
$newdiscount2->description = $discount->description.' (2)';
|
||||||
}
|
}
|
||||||
|
|
||||||
$newdiscount1->fk_user = $discount->fk_user;
|
$newdiscount1->fk_user = $discount->fk_user;
|
||||||
$newdiscount2->fk_user = $discount->fk_user;
|
$newdiscount2->fk_user = $discount->fk_user;
|
||||||
$newdiscount1->fk_soc = $discount->fk_soc;
|
$newdiscount1->fk_soc = $discount->fk_soc;
|
||||||
@ -121,7 +122,7 @@ if ($action == 'confirm_split' && GETPOST("confirm") == 'yes')
|
|||||||
$newdiscount2->datec = $discount->datec;
|
$newdiscount2->datec = $discount->datec;
|
||||||
$newdiscount1->tva_tx = $discount->tva_tx;
|
$newdiscount1->tva_tx = $discount->tva_tx;
|
||||||
$newdiscount2->tva_tx = $discount->tva_tx;
|
$newdiscount2->tva_tx = $discount->tva_tx;
|
||||||
$newdiscount1->amount_ttc = $_POST["amount_ttc_1"];
|
$newdiscount1->amount_ttc = $amount_ttc_1;
|
||||||
$newdiscount2->amount_ttc = price2num($discount->amount_ttc - $newdiscount1->amount_ttc);
|
$newdiscount2->amount_ttc = price2num($discount->amount_ttc - $newdiscount1->amount_ttc);
|
||||||
$newdiscount1->amount_ht = price2num($newdiscount1->amount_ttc / (1 + $newdiscount1->tva_tx / 100), 'MT');
|
$newdiscount1->amount_ht = price2num($newdiscount1->amount_ttc / (1 + $newdiscount1->tva_tx / 100), 'MT');
|
||||||
$newdiscount2->amount_ht = price2num($newdiscount2->amount_ttc / (1 + $newdiscount2->tva_tx / 100), 'MT');
|
$newdiscount2->amount_ht = price2num($newdiscount2->amount_ttc / (1 + $newdiscount2->tva_tx / 100), 'MT');
|
||||||
|
|||||||
@ -137,9 +137,9 @@ if ($id > 0 || !empty($ref)) {
|
|||||||
$modulepart = 'bank';
|
$modulepart = 'bank';
|
||||||
$permission = $user->rights->banque->modifier;
|
$permission = $user->rights->banque->modifier;
|
||||||
$permtoedit = $user->rights->banque->modifier;
|
$permtoedit = $user->rights->banque->modifier;
|
||||||
$param = '&id='.$object->id.'&num='.$num;
|
$param = '&id='.$object->id.'&num='.urlencode($num);
|
||||||
$uri = '&num='.$num;
|
$moreparam = '&num='.urlencode($num);;
|
||||||
$relativepathwithnofile = $id."/statement/".$num."/";
|
$relativepathwithnofile = $id."/statement/".dol_sanitizeFileName($num)."/";
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/tpl/document_actions_post_headers.tpl.php';
|
include_once DOL_DOCUMENT_ROOT.'/core/tpl/document_actions_post_headers.tpl.php';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@ -49,7 +49,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
|
|||||||
$langs->loadLangs(array("banks", "categories", "companies", "bills", "trips", "donations", "loan"));
|
$langs->loadLangs(array("banks", "categories", "companies", "bills", "trips", "donations", "loan"));
|
||||||
|
|
||||||
$action = GETPOST('action', 'alpha');
|
$action = GETPOST('action', 'alpha');
|
||||||
$id = GETPOST('account', 'int');
|
$id = GETPOST('account', 'int') ? GETPOST('account', 'int') : GETPOST('id', 'int');
|
||||||
$ref = GETPOST('ref', 'alpha');
|
$ref = GETPOST('ref', 'alpha');
|
||||||
$dvid = GETPOST('dvid', 'alpha');
|
$dvid = GETPOST('dvid', 'alpha');
|
||||||
$numref = GETPOST('num', 'alpha');
|
$numref = GETPOST('num', 'alpha');
|
||||||
|
|||||||
@ -67,8 +67,7 @@ if (!$sortorder) $sortorder = 'ASC';
|
|||||||
|
|
||||||
// Date range
|
// Date range
|
||||||
$year = GETPOST('year', 'int');
|
$year = GETPOST('year', 'int');
|
||||||
if (empty($year))
|
if (empty($year)) {
|
||||||
{
|
|
||||||
$year_current = strftime("%Y", dol_now());
|
$year_current = strftime("%Y", dol_now());
|
||||||
$month_current = strftime("%m", dol_now());
|
$month_current = strftime("%m", dol_now());
|
||||||
$year_start = $year_current;
|
$year_start = $year_current;
|
||||||
@ -114,7 +113,7 @@ $tmps = dol_getdate($date_start);
|
|||||||
$year_start = $tmps['year'];
|
$year_start = $tmps['year'];
|
||||||
$tmpe = dol_getdate($date_end);
|
$tmpe = dol_getdate($date_end);
|
||||||
$year_end = $tmpe['year'];
|
$year_end = $tmpe['year'];
|
||||||
$nbofyear = ($year_end - $start_year) + 1;
|
$nbofyear = ($year_end - $year_start) + 1;
|
||||||
//var_dump("year_start=".$year_start." year_end=".$year_end." nbofyear=".$nbofyear." date_start=".dol_print_date($date_start, 'dayhour')." date_end=".dol_print_date($date_end, 'dayhour'));
|
//var_dump("year_start=".$year_start." year_end=".$year_end." nbofyear=".$nbofyear." date_start=".dol_print_date($date_start, 'dayhour')." date_end=".dol_print_date($date_end, 'dayhour'));
|
||||||
|
|
||||||
// Define modecompta ('CREANCES-DETTES' or 'RECETTES-DEPENSES' or 'BOOKKEEPING')
|
// Define modecompta ('CREANCES-DETTES' or 'RECETTES-DEPENSES' or 'BOOKKEEPING')
|
||||||
@ -193,17 +192,21 @@ if (!empty($conf->accounting->enabled) && $modecompta != 'BOOKKEEPING')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Show report array
|
// Show report array
|
||||||
$param = '&modecompta='.$modecompta;
|
$param = '&modecompta='.urlencode($modecompta).'&showaccountdetail='.urlencode($showaccountdetail);
|
||||||
if ($date_startday) $param .= '&date_startday='.$date_startday;
|
if ($date_startday) $param .= '&date_startday='.$date_startday;
|
||||||
if ($date_startmonth) $param .= '&date_startmonth='.$date_startmonth;
|
if ($date_startmonth) $param .= '&date_startmonth='.$date_startmonth;
|
||||||
if ($date_startyear) $param .= '&date_startyear='.$date_startyear;
|
if ($date_startyear) $param .= '&date_startyear='.$date_startyear;
|
||||||
if ($date_endday) $param .= '&date_endday='.$date_endday;
|
if ($date_endday) $param .= '&date_endday='.$date_endday;
|
||||||
if ($date_endmonth) $param .= '&date_endmonth='.$date_endmonth;
|
if ($date_endmonth) $param .= '&date_endmonth='.$date_endmonth;
|
||||||
if ($date_endyear) $param .= '&date_endyear='.$date_startyear;
|
if ($date_endyear) $param .= '&date_endyear='.$date_endyear;
|
||||||
|
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print_liste_field_titre("PredefinedGroups", $_SERVER["PHP_SELF"], 'f.thirdparty_code,f.rowid', '', $param, '', $sortfield, $sortorder, 'width200 ');
|
if ($modecompta == 'BOOKKEEPING') {
|
||||||
|
print_liste_field_titre("PredefinedGroups", $_SERVER["PHP_SELF"], 'f.thirdparty_code,f.rowid', '', $param, '', $sortfield, $sortorder, 'width200 ');
|
||||||
|
} else {
|
||||||
|
print_liste_field_titre("", $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'width200 ');
|
||||||
|
}
|
||||||
print_liste_field_titre('');
|
print_liste_field_titre('');
|
||||||
if ($modecompta == 'BOOKKEEPING')
|
if ($modecompta == 'BOOKKEEPING')
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
|
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
|
||||||
* Copyright (C) 2018 Josep Lluís Amador <joseplluis@lliuretic.cat>
|
* Copyright (C) 2018 Josep Lluís Amador <joseplluis@lliuretic.cat>
|
||||||
|
* Copyright (C) 2020 Ferran Marcet <fmarcet@2byte.es>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -83,6 +84,7 @@ class box_contacts extends ModeleBoxes
|
|||||||
if ($user->rights->societe->lire && $user->rights->societe->contact->lire)
|
if ($user->rights->societe->lire && $user->rights->societe->contact->lire)
|
||||||
{
|
{
|
||||||
$sql = "SELECT sp.rowid as id, sp.lastname, sp.firstname, sp.civility as civility_id, sp.datec, sp.tms, sp.fk_soc, sp.statut as status";
|
$sql = "SELECT sp.rowid as id, sp.lastname, sp.firstname, sp.civility as civility_id, sp.datec, sp.tms, sp.fk_soc, sp.statut as status";
|
||||||
|
|
||||||
$sql .= ", sp.address, sp.zip, sp.town, sp.phone, sp.phone_perso, sp.phone_mobile, sp.email as spemail";
|
$sql .= ", sp.address, sp.zip, sp.town, sp.phone, sp.phone_perso, sp.phone_mobile, sp.email as spemail";
|
||||||
$sql .= ", s.nom as socname, s.name_alias, s.email as semail";
|
$sql .= ", s.nom as socname, s.name_alias, s.email as semail";
|
||||||
$sql .= ", s.client, s.fournisseur, s.code_client, s.code_fournisseur";
|
$sql .= ", s.client, s.fournisseur, s.code_client, s.code_fournisseur";
|
||||||
|
|||||||
@ -389,6 +389,7 @@ class ExtraFields
|
|||||||
if (empty($required)) $required = 0;
|
if (empty($required)) $required = 0;
|
||||||
if (empty($unique)) $unique = 0;
|
if (empty($unique)) $unique = 0;
|
||||||
if (empty($alwayseditable)) $alwayseditable = 0;
|
if (empty($alwayseditable)) $alwayseditable = 0;
|
||||||
|
if (empty($totalizable)) $totalizable = 0;
|
||||||
|
|
||||||
if (!empty($attrname) && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname) && !is_numeric($attrname))
|
if (!empty($attrname) && preg_match("/^\w[a-zA-Z0-9-_]*$/", $attrname) && !is_numeric($attrname))
|
||||||
{
|
{
|
||||||
@ -450,7 +451,7 @@ class ExtraFields
|
|||||||
$sql .= "'" . $this->db->idate(dol_now()) . "',";
|
$sql .= "'" . $this->db->idate(dol_now()) . "',";
|
||||||
$sql.= " ".($enabled?"'".$this->db->escape($enabled)."'":"1").",";
|
$sql.= " ".($enabled?"'".$this->db->escape($enabled)."'":"1").",";
|
||||||
$sql.= " ".($help?"'".$this->db->escape($help)."'":"null").",";
|
$sql.= " ".($help?"'".$this->db->escape($help)."'":"null").",";
|
||||||
$sql.= " ".($totalizable?'1':'0');
|
$sql.= " ".($totalizable?'TRUE':'FALSE');
|
||||||
$sql.=')';
|
$sql.=')';
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::create_label", LOG_DEBUG);
|
dol_syslog(get_class($this)."::create_label", LOG_DEBUG);
|
||||||
@ -793,7 +794,7 @@ class ExtraFields
|
|||||||
$sql .= " '".$this->db->escape($alwayseditable)."',";
|
$sql .= " '".$this->db->escape($alwayseditable)."',";
|
||||||
$sql .= " '".$this->db->escape($params)."',";
|
$sql .= " '".$this->db->escape($params)."',";
|
||||||
$sql .= " '".$this->db->escape($list)."', ";
|
$sql .= " '".$this->db->escape($list)."', ";
|
||||||
$sql .= " ".$totalizable.",";
|
$sql .= " ".($totalizable?'TRUE':'FALSE').",";
|
||||||
$sql .= " ".(($default != '') ? "'".$this->db->escape($default)."'" : "null").",";
|
$sql .= " ".(($default != '') ? "'".$this->db->escape($default)."'" : "null").",";
|
||||||
$sql .= " ".($computed ? "'".$this->db->escape($computed)."'" : "null").",";
|
$sql .= " ".($computed ? "'".$this->db->escape($computed)."'" : "null").",";
|
||||||
$sql .= " ".$user->id.",";
|
$sql .= " ".$user->id.",";
|
||||||
@ -932,7 +933,7 @@ class ExtraFields
|
|||||||
$this->attributes[$tab->elementtype]['perms'][$tab->name]=(strlen($tab->perms) == 0 ? 1 : $tab->perms);
|
$this->attributes[$tab->elementtype]['perms'][$tab->name]=(strlen($tab->perms) == 0 ? 1 : $tab->perms);
|
||||||
$this->attributes[$tab->elementtype]['langfile'][$tab->name]=$tab->langs;
|
$this->attributes[$tab->elementtype]['langfile'][$tab->name]=$tab->langs;
|
||||||
$this->attributes[$tab->elementtype]['list'][$tab->name]=$tab->list;
|
$this->attributes[$tab->elementtype]['list'][$tab->name]=$tab->list;
|
||||||
$this->attributes[$tab->elementtype]['totalizable'][$tab->name]=$tab->totalizable;
|
$this->attributes[$tab->elementtype]['totalizable'][$tab->name]=($tab->totalizable ? 1 : 0);
|
||||||
$this->attributes[$tab->elementtype]['entityid'][$tab->name]=$tab->entity;
|
$this->attributes[$tab->elementtype]['entityid'][$tab->name]=$tab->entity;
|
||||||
$this->attributes[$tab->elementtype]['enabled'][$tab->name]=$tab->enabled;
|
$this->attributes[$tab->elementtype]['enabled'][$tab->name]=$tab->enabled;
|
||||||
$this->attributes[$tab->elementtype]['help'][$tab->name]=$tab->help;
|
$this->attributes[$tab->elementtype]['help'][$tab->name]=$tab->help;
|
||||||
|
|||||||
@ -1301,7 +1301,7 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab
|
|||||||
$tabsname = str_replace("@", "", $picto);
|
$tabsname = str_replace("@", "", $picto);
|
||||||
$out .= '<div id="moretabs'.$tabsname.'" class="inline-block tabsElem">';
|
$out .= '<div id="moretabs'.$tabsname.'" class="inline-block tabsElem">';
|
||||||
$out .= '<a href="#" class="tab moretab inline-block tabunactive reposition">'.$langs->trans("More").'... ('.$nbintab.')</a>';
|
$out .= '<a href="#" class="tab moretab inline-block tabunactive reposition">'.$langs->trans("More").'... ('.$nbintab.')</a>';
|
||||||
$out .= '<div id="moretabsList'.$tabsname.'" style="position: absolute; '.$left.': -999em; text-align: '.$left.'; margin:0px; padding:2px">';
|
$out .= '<div id="moretabsList'.$tabsname.'" style="position: absolute; '.$left.': -999em; text-align: '.$left.'; margin:0px; padding:2px; z-index:10;">';
|
||||||
$out .= $outmore;
|
$out .= $outmore;
|
||||||
$out .= '</div>';
|
$out .= '</div>';
|
||||||
$out .= '<div></div>';
|
$out .= '<div></div>';
|
||||||
|
|||||||
@ -107,7 +107,7 @@ function dol_decode($chain, $key = '1')
|
|||||||
* If constant MAIN_SECURITY_SALT is defined, we use it as a salt (used only if hashing algorightm is something else than 'password_hash').
|
* If constant MAIN_SECURITY_SALT is defined, we use it as a salt (used only if hashing algorightm is something else than 'password_hash').
|
||||||
*
|
*
|
||||||
* @param string $chain String to hash
|
* @param string $chain String to hash
|
||||||
* @param string $type Type of hash ('0':auto will use MAIN_SECURITY_HASH_ALGO else md5, '1':sha1, '2':sha1+md5, '3':md5, '4':md5 for OpenLdap, '5':sha256). Use '3' here, if hash is not needed for security purpose, for security need, prefer '0'.
|
* @param string $type Type of hash ('0':auto will use MAIN_SECURITY_HASH_ALGO else md5, '1':sha1, '2':sha1+md5, '3':md5, '4':md5 for OpenLdap with no salt, '5':sha256). Use '3' here, if hash is not needed for security purpose, for security need, prefer '0'.
|
||||||
* @return string Hash of string
|
* @return string Hash of string
|
||||||
* @see getRandomPassword()
|
* @see getRandomPassword()
|
||||||
*/
|
*/
|
||||||
@ -122,7 +122,7 @@ function dol_hash($chain, $type = '0')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Salt value
|
// Salt value
|
||||||
if (!empty($conf->global->MAIN_SECURITY_SALT)) $chain = $conf->global->MAIN_SECURITY_SALT.$chain;
|
if (! empty($conf->global->MAIN_SECURITY_SALT) && $type != '4' && $type !== 'md5openldap') $chain = $conf->global->MAIN_SECURITY_SALT.$chain;
|
||||||
|
|
||||||
if ($type == '1' || $type == 'sha1') return sha1($chain);
|
if ($type == '1' || $type == 'sha1') return sha1($chain);
|
||||||
elseif ($type == '2' || $type == 'sha1md5') return sha1(md5($chain));
|
elseif ($type == '2' || $type == 'sha1md5') return sha1(md5($chain));
|
||||||
|
|||||||
@ -1102,10 +1102,9 @@ class pdf_crabe extends ModelePDFFactures
|
|||||||
// If payment mode not forced or forced to VIR, show payment with BAN
|
// If payment mode not forced or forced to VIR, show payment with BAN
|
||||||
if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR')
|
if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR')
|
||||||
{
|
{
|
||||||
if (!empty($object->fk_account) || !empty($object->fk_bank) || !empty($conf->global->FACTURE_RIB_NUMBER))
|
if ($object->fk_account > 0 || $object->fk_bank > 0 || !empty($conf->global->FACTURE_RIB_NUMBER)) {
|
||||||
{
|
$bankid = ($object->fk_account <= 0 ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account);
|
||||||
$bankid = (empty($object->fk_account) ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account);
|
if ($object->fk_bank > 0) $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank
|
||||||
if (!empty($object->fk_bank)) $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank
|
|
||||||
$account = new Account($this->db);
|
$account = new Account($this->db);
|
||||||
$account->fetch($bankid);
|
$account->fetch($bankid);
|
||||||
|
|
||||||
|
|||||||
@ -1178,10 +1178,9 @@ class pdf_sponge extends ModelePDFFactures
|
|||||||
// If payment mode not forced or forced to VIR, show payment with BAN
|
// If payment mode not forced or forced to VIR, show payment with BAN
|
||||||
if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR')
|
if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR')
|
||||||
{
|
{
|
||||||
if (!empty($object->fk_account) || !empty($object->fk_bank) || !empty($conf->global->FACTURE_RIB_NUMBER))
|
if ($object->fk_account > 0 || $object->fk_bank > 0 || !empty($conf->global->FACTURE_RIB_NUMBER)) {
|
||||||
{
|
$bankid = ($object->fk_account <= 0 ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account);
|
||||||
$bankid = (empty($object->fk_account) ? $conf->global->FACTURE_RIB_NUMBER : $object->fk_account);
|
if ($object->fk_bank > 0) $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank
|
||||||
if (!empty($object->fk_bank)) $bankid = $object->fk_bank; // For backward compatibility when object->fk_account is forced with object->fk_bank
|
|
||||||
$account = new Account($this->db);
|
$account = new Account($this->db);
|
||||||
$account->fetch($bankid);
|
$account->fetch($bankid);
|
||||||
|
|
||||||
|
|||||||
@ -684,7 +684,9 @@ class modSociete extends DolibarrModules
|
|||||||
'sr.domiciliation' => "BankAccountDomiciliation",
|
'sr.domiciliation' => "BankAccountDomiciliation",
|
||||||
'sr.proprio' => "BankAccountOwner",
|
'sr.proprio' => "BankAccountOwner",
|
||||||
'sr.owner_address' => "BankAccountOwnerAddress",
|
'sr.owner_address' => "BankAccountOwnerAddress",
|
||||||
'sr.default_rib' => 'Default'
|
'sr.default_rib' => 'Default',
|
||||||
|
'sr.rum' => 'RUM',
|
||||||
|
'sr.type' => "Type ban is defaut",
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->import_convertvalue_array[$r] = array(
|
$this->import_convertvalue_array[$r] = array(
|
||||||
@ -711,7 +713,9 @@ class modSociete extends DolibarrModules
|
|||||||
'sr.domiciliation' => 'bank branch address eg. "PARIS"',
|
'sr.domiciliation' => 'bank branch address eg. "PARIS"',
|
||||||
'sr.proprio' => 'name on the bank account',
|
'sr.proprio' => 'name on the bank account',
|
||||||
'sr.owner_address' => 'address of account holder',
|
'sr.owner_address' => 'address of account holder',
|
||||||
'sr.default_rib' => '1 (default account) / 0 (not default)'
|
'sr.default_rib' => '1 (default account) / 0 (not default)',
|
||||||
|
'sr.rum' => 'RUM code',
|
||||||
|
'sr.type' => 'ban',
|
||||||
);
|
);
|
||||||
|
|
||||||
// Import Company Sales representatives
|
// Import Company Sales representatives
|
||||||
|
|||||||
@ -38,6 +38,10 @@ $original_file = GETPOST("file");
|
|||||||
$backtourl = GETPOST('backtourl');
|
$backtourl = GETPOST('backtourl');
|
||||||
$cancel = GETPOST('cancel', 'alpha');
|
$cancel = GETPOST('cancel', 'alpha');
|
||||||
|
|
||||||
|
$file = GETPOST('file', 'alpha');
|
||||||
|
$num = GETPOST('num', 'alpha'); // Used for document on bank statement
|
||||||
|
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if (empty($modulepart)) accessforbidden('Bad value for modulepart');
|
if (empty($modulepart)) accessforbidden('Bad value for modulepart');
|
||||||
$accessallowed = 0;
|
$accessallowed = 0;
|
||||||
@ -249,19 +253,25 @@ else {
|
|||||||
|
|
||||||
if (empty($backtourl))
|
if (empty($backtourl))
|
||||||
{
|
{
|
||||||
if (in_array($modulepart, array('product', 'produit', 'service', 'produit|service'))) $backtourl = DOL_URL_ROOT."/product/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
$regs = array();
|
||||||
elseif (in_array($modulepart, array('expensereport'))) $backtourl = DOL_URL_ROOT."/expensereport/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
|
||||||
elseif (in_array($modulepart, array('holiday'))) $backtourl = DOL_URL_ROOT."/holiday/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
if (in_array($modulepart, array('product', 'produit', 'service', 'produit|service'))) $backtourl = DOL_URL_ROOT."/product/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('member'))) $backtourl = DOL_URL_ROOT."/adherents/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('expensereport'))) $backtourl = DOL_URL_ROOT."/expensereport/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('project'))) $backtourl = DOL_URL_ROOT."/projet/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('holiday'))) $backtourl = DOL_URL_ROOT."/holiday/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('propal'))) $backtourl = DOL_URL_ROOT."/comm/propal/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('member'))) $backtourl = DOL_URL_ROOT."/adherents/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('societe'))) $backtourl = DOL_URL_ROOT."/societe/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('project'))) $backtourl = DOL_URL_ROOT."/projet/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('tax'))) $backtourl = DOL_URL_ROOT."/compta/sociales/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('propal'))) $backtourl = DOL_URL_ROOT."/comm/propal/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('ticket'))) $backtourl = DOL_URL_ROOT."/ticket/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('societe'))) $backtourl = DOL_URL_ROOT."/societe/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('user'))) $backtourl = DOL_URL_ROOT."/user/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('tax'))) $backtourl = DOL_URL_ROOT."/compta/sociales/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('bank'))) $backtourl = DOL_URL_ROOT."/compta/bank/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('ticket'))) $backtourl = DOL_URL_ROOT."/ticket/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
elseif (in_array($modulepart, array('mrp'))) $backtourl = DOL_URL_ROOT."/mrp/mo_document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('user'))) $backtourl = DOL_URL_ROOT."/user/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
else $backtourl = DOL_URL_ROOT."/".$modulepart."/".$modulepart."_document.php?id=".$id.'&file='.urldecode($_POST["file"]);
|
elseif (in_array($modulepart, array('bank')) && preg_match('/\/statement\/([^\/]+)\//', $file, $regs)) {
|
||||||
|
$num = $regs[1];
|
||||||
|
$backtourl = DOL_URL_ROOT."/compta/bank/account_statement_document.php?id=".$id.'&num='.urlencode($num).'&file='.urldecode($file);
|
||||||
|
}
|
||||||
|
elseif (in_array($modulepart, array('bank'))) $backtourl = DOL_URL_ROOT."/compta/bank/document.php?id=".$id.'&file='.urldecode($file);
|
||||||
|
elseif (in_array($modulepart, array('mrp'))) $backtourl = DOL_URL_ROOT."/mrp/mo_document.php?id=".$id.'&file='.urldecode($file);
|
||||||
|
else $backtourl = DOL_URL_ROOT."/".$modulepart."/".$modulepart."_document.php?id=".$id.'&file='.urldecode($file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -283,11 +293,11 @@ if ($cancel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'confirm_resize' && (isset($_POST["file"]) != "") && (isset($_POST["sizex"]) != "") && (isset($_POST["sizey"]) != ""))
|
if ($action == 'confirm_resize' && GETPOSTISSET("file") && GETPOSTISSET("sizex") && GETPOSTISSET("sizey"))
|
||||||
{
|
{
|
||||||
$fullpath = $dir."/".$original_file;
|
$fullpath = $dir."/".$original_file;
|
||||||
|
|
||||||
$result = dol_imageResizeOrCrop($fullpath, 0, $_POST['sizex'], $_POST['sizey']);
|
$result = dol_imageResizeOrCrop($fullpath, 0, GETPOST('sizex', 'int'), GETPOST('sizey', 'int'));
|
||||||
|
|
||||||
if ($result == $fullpath)
|
if ($result == $fullpath)
|
||||||
{
|
{
|
||||||
@ -357,7 +367,7 @@ if ($action == 'confirm_crop')
|
|||||||
$fullpath = $dir."/".$original_file;
|
$fullpath = $dir."/".$original_file;
|
||||||
|
|
||||||
//var_dump($_POST['w'].'x'.$_POST['h'].'-'.$_POST['x'].'x'.$_POST['y']);exit;
|
//var_dump($_POST['w'].'x'.$_POST['h'].'-'.$_POST['x'].'x'.$_POST['y']);exit;
|
||||||
$result = dol_imageResizeOrCrop($fullpath, 1, $_POST['w'], $_POST['h'], $_POST['x'], $_POST['y']);
|
$result = dol_imageResizeOrCrop($fullpath, 1, GETPOST('w', 'int'), GETPOST('h', 'int'), GETPOST('x', 'int'), GETPOST('y', 'int'));
|
||||||
|
|
||||||
if ($result == $fullpath)
|
if ($result == $fullpath)
|
||||||
{
|
{
|
||||||
@ -445,7 +455,7 @@ print '<br>'."\n";
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
print '<!-- Form to resize -->'."\n";
|
print '<!-- Form to resize -->'."\n";
|
||||||
print '<form name="redim_file" action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="POST">';
|
print '<form name="redim_file" action="'.$_SERVER["PHP_SELF"].'?id='.$id.($num ? '&num='.$num : '').'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
|
|
||||||
print '<fieldset id="redim_file">';
|
print '<fieldset id="redim_file">';
|
||||||
@ -454,7 +464,7 @@ print $langs->trans("ResizeDesc").'<br>';
|
|||||||
print $langs->trans("NewLength").': <input name="sizex" type="number" class="flat maxwidth50"> px '.$langs->trans("or").' ';
|
print $langs->trans("NewLength").': <input name="sizex" type="number" class="flat maxwidth50"> px '.$langs->trans("or").' ';
|
||||||
print $langs->trans("NewHeight").': <input name="sizey" type="number" class="flat maxwidth50"> px <br>';
|
print $langs->trans("NewHeight").': <input name="sizey" type="number" class="flat maxwidth50"> px <br>';
|
||||||
|
|
||||||
print '<input type="hidden" name="file" value="'.dol_escape_htmltag(GETPOST('file')).'" />';
|
print '<input type="hidden" name="file" value="'.dol_escape_htmltag($file).'" />';
|
||||||
print '<input type="hidden" name="action" value="confirm_resize" />';
|
print '<input type="hidden" name="action" value="confirm_resize" />';
|
||||||
print '<input type="hidden" name="product" value="'.$id.'" />';
|
print '<input type="hidden" name="product" value="'.$id.'" />';
|
||||||
print '<input type="hidden" name="modulepart" value="'.dol_escape_htmltag($modulepart).'" />';
|
print '<input type="hidden" name="modulepart" value="'.dol_escape_htmltag($modulepart).'" />';
|
||||||
@ -497,7 +507,8 @@ if (!empty($conf->use_javascript_ajax))
|
|||||||
print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$object->entity.'&file='.urlencode($original_file).'" alt="" id="cropbox" width="'.$widthforcrop.'px"/>';
|
print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$object->entity.'&file='.urlencode($original_file).'" alt="" id="cropbox" width="'.$widthforcrop.'px"/>';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '</div><br>';
|
print '</div><br>';
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="POST">';
|
|
||||||
|
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.($num ? '&num='.$num : '').'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '
|
print '
|
||||||
<div class="jc_coords">
|
<div class="jc_coords">
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
// $permissiontoadd = permission or not to add a file (can use also $permission) and permission or not to edit file name or crop file (can use also $permtoedit)
|
// $permissiontoadd = permission or not to add a file (can use also $permission) and permission or not to edit file name or crop file (can use also $permtoedit)
|
||||||
// $modulepart = for download
|
// $modulepart = for download
|
||||||
// $param = param to add to download links
|
// $param = param to add to download links
|
||||||
|
// $moreparam = param to add to download link for the form_attach_new_file function
|
||||||
// $upload_dir
|
// $upload_dir
|
||||||
// $object
|
// $object
|
||||||
// $filearray
|
// $filearray
|
||||||
@ -109,7 +110,7 @@ if (!isset($savingdocmask) || !empty($conf->global->MAIN_DISABLE_SUGGEST_REF_AS_
|
|||||||
|
|
||||||
// Show upload form (document and links)
|
// Show upload form (document and links)
|
||||||
$formfile->form_attach_new_file(
|
$formfile->form_attach_new_file(
|
||||||
$_SERVER["PHP_SELF"].'?id='.$object->id.(empty($withproject)?'':'&withproject=1'),
|
$_SERVER["PHP_SELF"].'?id='.$object->id.(empty($withproject)?'':'&withproject=1').(empty($moreparam)?'':$moreparam),
|
||||||
'',
|
'',
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|||||||
@ -33,7 +33,7 @@ class ExpenseReports extends DolibarrApi
|
|||||||
* @var array $FIELDS Mandatory fields, checked when create and update object
|
* @var array $FIELDS Mandatory fields, checked when create and update object
|
||||||
*/
|
*/
|
||||||
static $FIELDS = array(
|
static $FIELDS = array(
|
||||||
'socid'
|
'fk_user_author'
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -384,6 +384,10 @@ class ExpenseReports extends DolibarrApi
|
|||||||
* @param array $request_data Datas
|
* @param array $request_data Datas
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
|
*
|
||||||
|
* @throws RestException 401 Not allowed
|
||||||
|
* @throws RestException 404 Expense report not found
|
||||||
|
* @throws RestException 500
|
||||||
*/
|
*/
|
||||||
public function put($id, $request_data = null)
|
public function put($id, $request_data = null)
|
||||||
{
|
{
|
||||||
@ -501,6 +505,11 @@ class ExpenseReports extends DolibarrApi
|
|||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
$object = parent::_cleanObjectDatas($object);
|
$object = parent::_cleanObjectDatas($object);
|
||||||
|
|
||||||
|
unset($object->fk_statut);
|
||||||
|
unset($object->statut);
|
||||||
|
unset($object->user);
|
||||||
|
unset($object->thirdparty);
|
||||||
|
|
||||||
unset($object->cond_reglement);
|
unset($object->cond_reglement);
|
||||||
unset($object->shipping_method_id);
|
unset($object->shipping_method_id);
|
||||||
|
|
||||||
@ -509,6 +518,32 @@ class ExpenseReports extends DolibarrApi
|
|||||||
unset($object->barcode_type_label);
|
unset($object->barcode_type_label);
|
||||||
unset($object->barcode_type_coder);
|
unset($object->barcode_type_coder);
|
||||||
|
|
||||||
|
unset($object->code_paiement);
|
||||||
|
unset($object->code_statut);
|
||||||
|
unset($object->fk_c_paiement);
|
||||||
|
unset($object->fk_incoterms);
|
||||||
|
unset($object->label_incoterms);
|
||||||
|
unset($object->location_incoterms);
|
||||||
|
unset($object->mode_reglement_id);
|
||||||
|
unset($object->cond_reglement_id);
|
||||||
|
|
||||||
|
unset($object->name);
|
||||||
|
unset($object->lastname);
|
||||||
|
unset($object->firstname);
|
||||||
|
unset($object->civility_id);
|
||||||
|
unset($object->cond_reglement_id);
|
||||||
|
unset($object->contact);
|
||||||
|
unset($object->contact_id);
|
||||||
|
|
||||||
|
unset($object->state);
|
||||||
|
unset($object->state_id);
|
||||||
|
unset($object->state_code);
|
||||||
|
unset($object->country);
|
||||||
|
unset($object->country_id);
|
||||||
|
unset($object->country_code);
|
||||||
|
|
||||||
|
unset($object->note); // We already use note_public and note_pricate
|
||||||
|
|
||||||
return $object;
|
return $object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -58,19 +58,20 @@ class ExpenseReport extends CommonObject
|
|||||||
|
|
||||||
public $date_fin;
|
public $date_fin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0=draft, 2=validated (attente approb), 4=canceled, 5=approved, 6=payed, 99=denied
|
||||||
|
*
|
||||||
|
* @var int Status
|
||||||
|
*/
|
||||||
public $status;
|
public $status;
|
||||||
public $fk_statut; // -- 0=draft, 2=validated (attente approb), 4=canceled, 5=approved, 6=payed, 99=denied
|
public $fk_statut;
|
||||||
|
|
||||||
public $fk_c_paiement;
|
public $fk_c_paiement;
|
||||||
public $paid;
|
public $paid;
|
||||||
|
|
||||||
public $user_author_infos;
|
public $user_author_infos;
|
||||||
public $user_validator_infos;
|
public $user_validator_infos;
|
||||||
|
|
||||||
public $fk_typepayment;
|
|
||||||
public $num_payment;
|
|
||||||
public $code_paiement;
|
|
||||||
public $code_statut;
|
|
||||||
|
|
||||||
// ACTIONS
|
// ACTIONS
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
@ -285,10 +286,33 @@ class ExpenseReport extends CommonObject
|
|||||||
{
|
{
|
||||||
if (is_array($this->lines) && count($this->lines) > 0)
|
if (is_array($this->lines) && count($this->lines) > 0)
|
||||||
{
|
{
|
||||||
foreach ($this->lines as $i => $val)
|
foreach ($this->lines as $line)
|
||||||
{
|
{
|
||||||
|
// Test and convert into object this->lines[$i]. When coming from REST API, we may still have an array
|
||||||
|
//if (! is_object($line)) $line=json_decode(json_encode($line), false); // convert recursively array into object.
|
||||||
|
if (!is_object($line)) {
|
||||||
|
$line = (object) $line;
|
||||||
|
$newndfline = new ExpenseReportLine($this->db);
|
||||||
|
$newndfline->fk_expensereport = $line->fk_expensereport;
|
||||||
|
$newndfline->fk_c_type_fees = $line->fk_c_type_fees;
|
||||||
|
$newndfline->fk_project = $line->fk_project;
|
||||||
|
$newndfline->vatrate = $line->vatrate;
|
||||||
|
$newndfline->vat_src_code = $line->vat_src_code;
|
||||||
|
$newndfline->comments = $line->comments;
|
||||||
|
$newndfline->qty = $line->qty;
|
||||||
|
$newndfline->value_unit = $line->value_unit;
|
||||||
|
$newndfline->total_ht = $line->total_ht;
|
||||||
|
$newndfline->total_ttc = $line->total_ttc;
|
||||||
|
$newndfline->total_tva = $line->total_tva;
|
||||||
|
$newndfline->date = $line->date;
|
||||||
|
$newndfline->rule_warning_message = $line->rule_warning_message;
|
||||||
|
$newndfline->fk_c_exp_tax_cat = $line->fk_c_exp_tax_cat;
|
||||||
|
$newndfline->fk_ecm_files = $line->fk_ecm_files;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$newndfline = $line;
|
||||||
|
}
|
||||||
//$newndfline=new ExpenseReportLine($this->db);
|
//$newndfline=new ExpenseReportLine($this->db);
|
||||||
$newndfline = $this->lines[$i];
|
|
||||||
$newndfline->fk_expensereport = $this->id;
|
$newndfline->fk_expensereport = $this->id;
|
||||||
$result = $newndfline->insert();
|
$result = $newndfline->insert();
|
||||||
if ($result < 0)
|
if ($result < 0)
|
||||||
@ -514,10 +538,8 @@ class ExpenseReport extends CommonObject
|
|||||||
$sql .= " d.date_debut, d.date_fin, d.date_create, d.tms as date_modif, d.date_valid, d.date_approve,"; // DATES (datetime)
|
$sql .= " d.date_debut, d.date_fin, d.date_create, d.tms as date_modif, d.date_valid, d.date_approve,"; // DATES (datetime)
|
||||||
$sql .= " d.fk_user_author, d.fk_user_modif, d.fk_user_validator,";
|
$sql .= " d.fk_user_author, d.fk_user_modif, d.fk_user_validator,";
|
||||||
$sql .= " d.fk_user_valid, d.fk_user_approve,";
|
$sql .= " d.fk_user_valid, d.fk_user_approve,";
|
||||||
$sql .= " d.fk_statut as status, d.fk_c_paiement, d.paid,";
|
$sql .= " d.fk_statut as status, d.fk_c_paiement, d.paid";
|
||||||
$sql .= " dp.libelle as label_payment, dp.code as code_paiement"; // INNER JOIN paiement
|
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element." as d";
|
$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element." as d";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as dp ON d.fk_c_paiement = dp.id";
|
|
||||||
if ($ref) $sql .= " WHERE d.ref = '".$this->db->escape($ref)."'";
|
if ($ref) $sql .= " WHERE d.ref = '".$this->db->escape($ref)."'";
|
||||||
else $sql .= " WHERE d.rowid = ".$id;
|
else $sql .= " WHERE d.rowid = ".$id;
|
||||||
//$sql.= $restrict;
|
//$sql.= $restrict;
|
||||||
@ -566,7 +588,7 @@ class ExpenseReport extends CommonObject
|
|||||||
elseif ($this->fk_user_validator > 0) $user_approver->fetch($this->fk_user_validator); // For backward compatibility
|
elseif ($this->fk_user_validator > 0) $user_approver->fetch($this->fk_user_validator); // For backward compatibility
|
||||||
$this->user_validator_infos = dolGetFirstLastname($user_approver->firstname, $user_approver->lastname);
|
$this->user_validator_infos = dolGetFirstLastname($user_approver->firstname, $user_approver->lastname);
|
||||||
|
|
||||||
$this->fk_statut = $obj->status;
|
$this->fk_statut = $obj->status; // deprecated
|
||||||
$this->status = $obj->status;
|
$this->status = $obj->status;
|
||||||
$this->fk_c_paiement = $obj->fk_c_paiement;
|
$this->fk_c_paiement = $obj->fk_c_paiement;
|
||||||
$this->paid = $obj->paid;
|
$this->paid = $obj->paid;
|
||||||
@ -578,9 +600,6 @@ class ExpenseReport extends CommonObject
|
|||||||
$this->user_valid_infos = dolGetFirstLastname($user_valid->firstname, $user_valid->lastname);
|
$this->user_valid_infos = dolGetFirstLastname($user_valid->firstname, $user_valid->lastname);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->code_statut = $obj->code_statut;
|
|
||||||
$this->code_paiement = $obj->code_paiement;
|
|
||||||
|
|
||||||
$this->lines = array();
|
$this->lines = array();
|
||||||
|
|
||||||
$result = $this->fetch_lines();
|
$result = $this->fetch_lines();
|
||||||
@ -2650,7 +2669,7 @@ class ExpenseReportLine
|
|||||||
$sql .= " ".$this->db->escape($this->total_ht).",";
|
$sql .= " ".$this->db->escape($this->total_ht).",";
|
||||||
$sql .= " ".$this->db->escape($this->total_tva).",";
|
$sql .= " ".$this->db->escape($this->total_tva).",";
|
||||||
$sql .= " ".$this->db->escape($this->total_ttc).",";
|
$sql .= " ".$this->db->escape($this->total_ttc).",";
|
||||||
$sql .= "'".$this->db->idate($this->date)."',";
|
$sql .= " '".$this->db->idate($this->date)."',";
|
||||||
$sql .= " '".$this->db->escape($this->rule_warning_message)."',";
|
$sql .= " '".$this->db->escape($this->rule_warning_message)."',";
|
||||||
$sql .= " ".$this->db->escape($this->fk_c_exp_tax_cat).",";
|
$sql .= " ".$this->db->escape($this->fk_c_exp_tax_cat).",";
|
||||||
$sql .= " ".($this->fk_ecm_files > 0 ? $this->fk_ecm_files : 'null');
|
$sql .= " ".($this->fk_ecm_files > 0 ? $this->fk_ecm_files : 'null');
|
||||||
|
|||||||
@ -657,7 +657,7 @@ if (empty($reshook))
|
|||||||
$_GET['socid'] = $_POST['socid'];
|
$_GET['socid'] = $_POST['socid'];
|
||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
if (!($_POST['fac_replacement'] > 0)) {
|
if (! (GETPOST('fac_replacement', 'int') > 0)) {
|
||||||
$error++;
|
$error++;
|
||||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ReplaceInvoice")), null, 'errors');
|
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ReplaceInvoice")), null, 'errors');
|
||||||
}
|
}
|
||||||
@ -870,7 +870,7 @@ if (empty($reshook))
|
|||||||
if (!$error && $_POST['origin'] && $_POST['originid'])
|
if (!$error && $_POST['origin'] && $_POST['originid'])
|
||||||
{
|
{
|
||||||
// Parse element/subelement (ex: project_task)
|
// Parse element/subelement (ex: project_task)
|
||||||
$element = $subelement = GETPOST('origin');
|
$element = $subelement = GETPOST('origin', 'alpha');
|
||||||
/*if (preg_match('/^([^_]+)_([^_]+)/i',$_POST['origin'],$regs))
|
/*if (preg_match('/^([^_]+)_([^_]+)/i',$_POST['origin'],$regs))
|
||||||
{
|
{
|
||||||
$element = $regs[1];
|
$element = $regs[1];
|
||||||
@ -894,8 +894,8 @@ if (empty($reshook))
|
|||||||
{
|
{
|
||||||
$element = 'projet';
|
$element = 'projet';
|
||||||
}
|
}
|
||||||
$object->origin = GETPOST('origin');
|
$object->origin = GETPOST('origin', 'alpha');
|
||||||
$object->origin_id = GETPOST('originid');
|
$object->origin_id = GETPOST('originid', 'int');
|
||||||
|
|
||||||
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php';
|
||||||
|
|||||||
@ -59,11 +59,14 @@ ALTER TABLE llx_emailcollector_emailcollectoraction ADD COLUMN position integer
|
|||||||
|
|
||||||
-- For v11
|
-- For v11
|
||||||
|
|
||||||
|
|
||||||
ALTER TABLE llx_product_price MODIFY COLUMN tva_tx double(6,3) DEFAULT 0 NOT NULL;
|
ALTER TABLE llx_product_price MODIFY COLUMN tva_tx double(6,3) DEFAULT 0 NOT NULL;
|
||||||
|
|
||||||
ALTER TABLE llx_facturedet MODIFY COLUMN situation_percent real DEFAULT 100;
|
ALTER TABLE llx_facturedet MODIFY COLUMN situation_percent real DEFAULT 100;
|
||||||
UPDATE llx_facturedet SET situation_percent = 100 WHERE situation_percent IS NULL AND fk_prev_id IS NULL;
|
UPDATE llx_facturedet SET situation_percent = 100 WHERE situation_percent IS NULL AND fk_prev_id IS NULL;
|
||||||
|
|
||||||
|
-- Set country to null for deprecated accounting system (there is now one per country)
|
||||||
|
UPDATE llx_accounting_system SET fk_country = NULL, active = 0 WHERE pcg_version = 'SYSCOHADA';
|
||||||
INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES ( 20, 'BAS-K1-MINI', 'The Swedish mini chart of accounts', 1);
|
INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES ( 20, 'BAS-K1-MINI', 'The Swedish mini chart of accounts', 1);
|
||||||
|
|
||||||
ALTER TABLE llx_c_action_trigger MODIFY COLUMN elementtype varchar(64) NOT NULL;
|
ALTER TABLE llx_c_action_trigger MODIFY COLUMN elementtype varchar(64) NOT NULL;
|
||||||
|
|||||||
@ -5024,7 +5024,7 @@ function migrate_users_socialnetworks()
|
|||||||
$obj->socialnetworks = '[]';
|
$obj->socialnetworks = '[]';
|
||||||
}
|
}
|
||||||
$socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true));
|
$socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks, true));
|
||||||
$sqlupd = 'UPDATE '.MAIN_DB_PREFIX.'user SET socialnetworks="'.$db->escape(json_encode($socialnetworks, true)).'"';
|
$sqlupd = 'UPDATE '.MAIN_DB_PREFIX."user SET socialnetworks='".$db->escape(json_encode($socialnetworks, true))."'";
|
||||||
$sqlupd.= ', skype=null';
|
$sqlupd.= ', skype=null';
|
||||||
$sqlupd.= ', twitter=null';
|
$sqlupd.= ', twitter=null';
|
||||||
$sqlupd.= ', facebook=null';
|
$sqlupd.= ', facebook=null';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user