Merge branch '14.0' of git@github.com:Dolibarr/dolibarr.git into develop
Conflicts: htdocs/product/class/api_products.class.php htdocs/recruitment/recruitmentcandidature_list.php htdocs/recruitment/recruitmentjobposition_list.php
This commit is contained in:
commit
6ad9eb8ef1
@ -9,6 +9,7 @@
|
||||
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2020 Maxime DEMAREST <maxime@indelog.fr>
|
||||
* Copyright (C) 2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
*
|
||||
* 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
|
||||
@ -33,6 +34,7 @@
|
||||
require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
@ -366,7 +368,7 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Factures clients
|
||||
* Customer invoices
|
||||
*/
|
||||
print '<tr class="trforbreak"><td colspan="4">'.$langs->trans("CustomersInvoices").'</td></tr>';
|
||||
|
||||
@ -386,8 +388,8 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
}
|
||||
} elseif ($modecompta == 'RECETTES-DEPENSES') {
|
||||
/*
|
||||
* Liste des paiements (les anciens paiements ne sont pas vus par cette requete car, sur les
|
||||
* vieilles versions, ils n'etaient pas lies via paiement_facture. On les ajoute plus loin)
|
||||
* List of payments (old payments are not seen by this query because, on older versions, they were not linked via payment_invoice.
|
||||
* old versions, they were not linked via payment_invoice. They are added later)
|
||||
*/
|
||||
$sql = "SELECT s.nom as name, s.rowid as socid, sum(pf.amount) as amount_ttc";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
@ -434,7 +436,7 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
// On ajoute les paiements clients anciennes version, non lie par paiement_facture
|
||||
// We add the old customer payments, not linked by payment_invoice
|
||||
if ($modecompta == 'RECETTES-DEPENSES') {
|
||||
$sql = "SELECT 'Autres' as name, '0' as idp, sum(p.amount) as amount_ttc";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
@ -673,7 +675,7 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
|
||||
|
||||
/*
|
||||
* Charges sociales non deductibles
|
||||
* Social / Fiscal contributions who are not deductible
|
||||
*/
|
||||
|
||||
print '<tr class="trforbreak"><td colspan="4">'.$langs->trans("SocialContributionsNondeductibles").'</td></tr>';
|
||||
@ -760,7 +762,7 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
|
||||
|
||||
/*
|
||||
* Charges sociales deductibles
|
||||
* Social / Fiscal contributions who are deductible
|
||||
*/
|
||||
|
||||
print '<tr class="trforbreak"><td colspan="4">'.$langs->trans("SocialContributionsDeductibles").'</td></tr>';
|
||||
@ -860,15 +862,27 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
$column = 'p.datep';
|
||||
}
|
||||
|
||||
$sql = "SELECT u.rowid, u.firstname, u.lastname, p.fk_user, p.label as label, date_format($column,'%Y-%m') as dm, sum(p.amount) as amount";
|
||||
$sql = "SELECT u.rowid, u.firstname, u.lastname, s.fk_user as fk_user, p.label as label, date_format($column,'%Y-%m') as dm, sum(p.amount) as amount";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."payment_salary as p";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."salary as s ON s.rowid=p.fk_salary";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid=s.fk_user";
|
||||
$sql .= " WHERE p.entity IN (".getEntity('payment_salary').")";
|
||||
if (!empty($date_start) && !empty($date_end)) {
|
||||
$sql .= " AND $column >= '".$db->idate($date_start)."' AND $column <= '".$db->idate($date_end)."'";
|
||||
}
|
||||
$sql .= " GROUP BY u.rowid, u.firstname, u.lastname, s.fk_user, p.label, dm";
|
||||
|
||||
// For backward compatibility with old module salary
|
||||
$sql .= " UNION ";
|
||||
$sql .= " SELECT u.rowid, u.firstname, u.lastname, p.fk_user as fk_user, p.label as label, date_format($column,'%Y-%m') as dm, sum(p.amount) as amount";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."payment_salary as p";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid=p.fk_user";
|
||||
$sql .= " WHERE p.entity IN (".getEntity('payment_salary').")";
|
||||
if (!empty($date_start) && !empty($date_end)) {
|
||||
$sql .= " AND $column >= '".$db->idate($date_start)."' AND $column <= '".$db->idate($date_end)."'";
|
||||
}
|
||||
|
||||
$sql .= " GROUP BY u.rowid, u.firstname, u.lastname, p.fk_user, p.label, dm";
|
||||
|
||||
$newsortfield = $sortfield;
|
||||
if ($newsortfield == 's.nom, s.rowid') {
|
||||
$newsortfield = 'u.firstname, u.lastname';
|
||||
@ -900,7 +914,10 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
|
||||
print '<tr class="oddeven"><td> </td>';
|
||||
|
||||
print "<td>".$langs->trans("Salary")." <a href=\"".DOL_URL_ROOT."/salaries/list.php?filtre=s.fk_user=".$obj->fk_user."\">".$obj->firstname." ".$obj->lastname."</a></td>\n";
|
||||
$userstatic = new User($db);
|
||||
$userstatic->fetch($obj->fk_user);
|
||||
|
||||
print "<td>".$langs->trans("Salary")." <a href=\"".DOL_URL_ROOT."/salaries/list.php?search_user=".urlencode($userstatic->getFullName($langs))."\">".$obj->firstname." ".$obj->lastname."</a></td>\n";
|
||||
|
||||
if ($modecompta == 'CREANCES-DETTES') {
|
||||
print '<td class="right"><span class="amount">'.price(-$obj->amount).'</span></td>';
|
||||
@ -931,7 +948,7 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
|
||||
|
||||
/*
|
||||
* Expense
|
||||
* Expense report
|
||||
*/
|
||||
|
||||
if (!empty($conf->expensereport->enabled)) {
|
||||
@ -1087,7 +1104,7 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
}
|
||||
|
||||
/*
|
||||
* Payement Loan
|
||||
* Payment Loan
|
||||
*/
|
||||
|
||||
if (!empty($conf->global->ACCOUNTING_REPORTS_INCLUDE_LOAN) && !empty($conf->loan->enabled) && ($modecompta == 'CREANCES-DETTES' || $modecompta == "RECETTES-DEPENSES")) {
|
||||
@ -1208,7 +1225,7 @@ if ($modecompta == 'BOOKKEEPING') {
|
||||
print '<td class="right"><span class="amount">'.price($amount)."</span></td>\n";
|
||||
print "</tr>\n";
|
||||
|
||||
// VAT to retreive
|
||||
// VAT to retrieve
|
||||
$amount = 0;
|
||||
$sql = "SELECT date_format(f.datef,'%Y-%m') as dm, sum(f.total_tva) as amount";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
|
||||
|
||||
@ -6080,7 +6080,6 @@ abstract class CommonObject
|
||||
}
|
||||
|
||||
$sql .= ")";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
$this->error = $this->db->lasterror();
|
||||
@ -6334,6 +6333,11 @@ abstract class CommonObject
|
||||
$this->array_options["options_".$key] = $this->db->idate($this->array_options["options_".$key]);
|
||||
}
|
||||
break;
|
||||
case 'boolean':
|
||||
if (empty($this->array_options["options_".$key])) {
|
||||
$this->array_options["options_".$key] = null;
|
||||
}
|
||||
break;
|
||||
/*
|
||||
case 'link':
|
||||
$param_list = array_keys($attributeParam['options']);
|
||||
|
||||
@ -114,7 +114,7 @@ if ($action == 'add') {
|
||||
$idl = "idl".$i;
|
||||
$qtytouse = price2num(GETPOST($qty));
|
||||
if ($qtytouse > 0) {
|
||||
$object->addline(GETPOST($idl), price2num($qtytouse));
|
||||
$object->addline(GETPOST($idl), price2num($qtytouse), $arrayoptions);
|
||||
}
|
||||
}
|
||||
|
||||
@ -603,23 +603,26 @@ if ($action == 'create') { // Create. Seems to no be used
|
||||
print "</tr>";
|
||||
|
||||
// Display lines extrafields
|
||||
if (!empty($extrafields)) {
|
||||
//if (!empty($extrafields)) {
|
||||
$colspan = 2;
|
||||
$mode = ($object->statut == 0) ? 'edit' : 'view';
|
||||
|
||||
$object->lines[$i]->fetch_optionals();
|
||||
|
||||
if ($action == 'create_delivery') {
|
||||
$srcLine = new ExpeditionLigne($db);
|
||||
if ($action == 'create_delivery') {
|
||||
$srcLine = new ExpeditionLigne($db);
|
||||
|
||||
$extrafields->fetch_name_optionals_label($srcLine->table_element);
|
||||
$srcLine->id = $expedition->lines[$i]->id;
|
||||
$srcLine->fetch_optionals();
|
||||
|
||||
$object->lines[$i]->array_options = array_merge($object->lines[$i]->array_options, $srcLine->array_options);
|
||||
} else {
|
||||
$srcLine = new DeliveryLine($db);
|
||||
$extrafields->fetch_name_optionals_label($srcLine->table_element);
|
||||
$srcLine->id = $expedition->lines[$i]->id;
|
||||
$srcLine->fetch_optionals();
|
||||
|
||||
$object->lines[$i]->array_options = array_merge($object->lines[$i]->array_options, $srcLine->array_options);
|
||||
}
|
||||
print $object->lines[$i]->showOptionals($extrafields, $mode, array('style' => 'class="oddeven"', 'colspan' => $colspan), $i);
|
||||
}
|
||||
print $object->lines[$i]->showOptionals($extrafields, $mode, array('style' => 'class="oddeven"', 'colspan' => $colspan), '');
|
||||
//}
|
||||
}
|
||||
|
||||
$i++;
|
||||
|
||||
@ -211,7 +211,7 @@ class Delivery extends CommonObject
|
||||
$origin_id = $this->lines[$i]->commande_ligne_id; // For backward compatibility
|
||||
}
|
||||
|
||||
if (!$this->create_line($origin_id, $this->lines[$i]->qty, $this->lines[$i]->fk_product, $this->lines[$i]->description)) {
|
||||
if (!$this->create_line($origin_id, $this->lines[$i]->qty, $this->lines[$i]->fk_product, $this->lines[$i]->description, $this->lines[$i]->array_options)) {
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
@ -264,7 +264,7 @@ class Delivery extends CommonObject
|
||||
* @param string $description Description
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
public function create_line($origin_id, $qty, $fk_product, $description)
|
||||
public function create_line($origin_id, $qty, $fk_product, $description, $array_options = 0)
|
||||
{
|
||||
// phpcs:enable
|
||||
$error = 0;
|
||||
@ -283,6 +283,15 @@ class Delivery extends CommonObject
|
||||
$error++;
|
||||
}
|
||||
|
||||
$id = $this->db->last_insert_id(MAIN_DB_PREFIX."deliverydet");
|
||||
|
||||
if (is_array($array_options) && count($array_options) > 0) {
|
||||
$line = new DeliveryLine($this->db);
|
||||
$line->id = $id;
|
||||
$line->array_options = $array_options;
|
||||
$result = $line->insertExtraFields();
|
||||
}
|
||||
|
||||
if ($error == 0) {
|
||||
return 1;
|
||||
}
|
||||
@ -531,7 +540,9 @@ class Delivery extends CommonObject
|
||||
$line->description = $expedition->lines[$i]->description;
|
||||
$line->qty = $expedition->lines[$i]->qty_shipped;
|
||||
$line->fk_product = $expedition->lines[$i]->fk_product;
|
||||
|
||||
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($expedition->lines[$i]->array_options) && count($expedition->lines[$i]->array_options) > 0) { // For avoid conflicts if trigger used
|
||||
$line->array_options = $expedition->lines[$i]->array_options;
|
||||
}
|
||||
$this->lines[$i] = $line;
|
||||
}
|
||||
|
||||
@ -593,14 +604,18 @@ class Delivery extends CommonObject
|
||||
* @param int $qty Qty
|
||||
* @return void
|
||||
*/
|
||||
public function addline($origin_id, $qty)
|
||||
public function addline($origin_id, $qty, $array_options = 0)
|
||||
{
|
||||
$num = count($this->lines);
|
||||
global $conf;
|
||||
|
||||
$num = count($this->lines);
|
||||
$line = new DeliveryLine($this->db);
|
||||
|
||||
$line->origin_id = $origin_id;
|
||||
$line->qty = $qty;
|
||||
|
||||
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options) > 0) { // For avoid conflicts if trigger used
|
||||
$line->array_options = $array_options;
|
||||
}
|
||||
$this->lines[$num] = $line;
|
||||
}
|
||||
|
||||
|
||||
@ -701,6 +701,7 @@ class Holiday extends CommonObject
|
||||
public function validate($user = null, $notrigger = 0)
|
||||
{
|
||||
global $conf, $langs;
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
$error = 0;
|
||||
|
||||
// Define new ref
|
||||
@ -740,6 +741,44 @@ class Holiday extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
$this->oldref = $this->ref;
|
||||
|
||||
// Rename directory if dir was a temporary ref
|
||||
if (preg_match('/^[\(]?PROV/i', $this->ref)) {
|
||||
// Now we rename also files into index
|
||||
$sql = 'UPDATE ' . MAIN_DB_PREFIX . "ecm_files set filename = CONCAT('" . $this->db->escape($this->newref) . "', SUBSTR(filename, " . (strlen($this->ref) + 1) . ")), filepath = 'holiday/" . $this->db->escape($this->newref) . "'";
|
||||
$sql .= " WHERE filename LIKE '" . $this->db->escape($this->ref) . "%' AND filepath = 'holiday/" . $this->db->escape($this->ref) . "' and entity = " . ((int) $conf->entity);
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
$error++;
|
||||
$this->error = $this->db->lasterror();
|
||||
}
|
||||
|
||||
// We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
$newref = dol_sanitizeFileName($num);
|
||||
$dirsource = $conf->holiday->multidir_output[$this->entity] . '/' . $oldref;
|
||||
$dirdest = $conf->holiday->multidir_output[$this->entity] . '/' . $newref;
|
||||
if (!$error && file_exists($dirsource)) {
|
||||
dol_syslog(get_class($this) . "::validate rename dir " . $dirsource . " into " . $dirdest);
|
||||
if (@rename($dirsource, $dirdest)) {
|
||||
dol_syslog("Rename ok");
|
||||
// Rename docs starting with $oldref with $newref
|
||||
$listoffiles = dol_dir_list($dirdest, 'files', 1, '^' . preg_quote($oldref, '/'));
|
||||
foreach ($listoffiles as $fileentry) {
|
||||
$dirsource = $fileentry['name'];
|
||||
$dirdest = preg_replace('/^' . preg_quote($oldref, '/') . '/', $newref, $dirsource);
|
||||
$dirsource = $fileentry['path'] . '/' . $dirsource;
|
||||
$dirdest = $fileentry['path'] . '/' . $dirdest;
|
||||
@rename($dirsource, $dirdest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Commit or rollback
|
||||
if ($error) {
|
||||
foreach ($this->errors as $errmsg) {
|
||||
|
||||
@ -237,13 +237,11 @@ $title = $langs->trans('ListOfCandidatures');
|
||||
// Build and execute select
|
||||
// --------------------------------------------------------------------
|
||||
$sql = 'SELECT ';
|
||||
foreach ($object->fields as $key => $val) {
|
||||
$sql .= "t.".$key.", ";
|
||||
}
|
||||
$sql .= $object->getFieldList('t');
|
||||
// Add fields from extrafields
|
||||
if (!empty($extrafields->attributes[$object->table_element]['label'])) {
|
||||
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
|
||||
$sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key." as options_".$key.', ' : '');
|
||||
$sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : '');
|
||||
}
|
||||
}
|
||||
// Add fields from hooks
|
||||
|
||||
@ -243,6 +243,7 @@ $title = $langs->trans('ListOfPositionsToBeFilled');
|
||||
// --------------------------------------------------------------------
|
||||
$sql = 'SELECT ';
|
||||
$sql .= $object->getFieldList('t');
|
||||
|
||||
// Add fields from extrafields
|
||||
if (!empty($extrafields->attributes[$object->table_element]['label'])) {
|
||||
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
|
||||
|
||||
@ -2515,7 +2515,6 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
print showValueWithClipboardCPButton(dol_escape_htmltag($object->code_client));
|
||||
print '</td>';
|
||||
$tmpcheck = $object->check_codeclient();
|
||||
if ($tmpcheck != 0 && $tmpcheck != -5) {
|
||||
print ' <span class="error">('.$langs->trans("WrongCustomerCode").')</span>';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user